@tn3w/openage 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +151 -0
- package/dist/openage.esm.js +3383 -0
- package/dist/openage.esm.js.map +1 -0
- package/dist/openage.min.js +2 -0
- package/dist/openage.min.js.map +1 -0
- package/dist/openage.umd.js +3408 -0
- package/dist/openage.umd.js.map +1 -0
- package/package.json +56 -0
- package/src/age-estimator.d.ts +17 -0
- package/src/age-estimator.js +77 -0
- package/src/challenge.d.ts +7 -0
- package/src/challenge.js +493 -0
- package/src/constants.d.ts +24 -0
- package/src/constants.js +35 -0
- package/src/face-tracker.d.ts +39 -0
- package/src/face-tracker.js +132 -0
- package/src/index.d.ts +91 -0
- package/src/index.js +303 -0
- package/src/liveness.d.ts +62 -0
- package/src/liveness.js +220 -0
- package/src/positioning.d.ts +13 -0
- package/src/positioning.js +39 -0
- package/src/transport.d.ts +61 -0
- package/src/transport.js +305 -0
- package/src/ui.d.ts +37 -0
- package/src/ui.js +1048 -0
- package/src/vm-client.d.ts +62 -0
- package/src/vm-client.js +219 -0
- package/src/widget.d.ts +58 -0
- package/src/widget.js +617 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openage.esm.js","sources":["../src/ui.js","../src/constants.js","../src/widget.js","../src/face-tracker.js","../src/positioning.js","../src/age-estimator.js","../src/liveness.js","../src/transport.js","../src/vm-client.js","../src/challenge.js","../src/index.js"],"sourcesContent":["export const FACE_SVG = `<svg viewBox=\"0 0 100 120\"\n fill=\"none\" class=\"oa-face-svg\">\n <ellipse cx=\"50\" cy=\"55\" rx=\"35\" ry=\"45\"\n stroke=\"currentColor\" stroke-width=\"1.8\"/>\n <ellipse cx=\"36\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <ellipse cx=\"64\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <line x1=\"50\" y1=\"52\" x2=\"48\" y2=\"62\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"/>\n <path d=\"M40 72 Q50 79 60 72\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" fill=\"none\"/>\n</svg>`;\n\nexport const FACE_ICON_SVG = `<svg viewBox=\"0 0 100 120\"\n fill=\"none\" class=\"oa-face-icon-svg\">\n <ellipse cx=\"50\" cy=\"55\" rx=\"35\" ry=\"45\"\n stroke=\"currentColor\" stroke-width=\"2\"/>\n <ellipse cx=\"36\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <ellipse cx=\"64\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <line x1=\"50\" y1=\"52\" x2=\"48\" y2=\"62\"\n stroke=\"currentColor\" stroke-width=\"1.65\"\n stroke-linecap=\"round\"/>\n <path d=\"M40 72 Q50 79 60 72\"\n stroke=\"currentColor\" stroke-width=\"1.65\"\n stroke-linecap=\"round\" fill=\"none\"/>\n</svg>`;\n\nexport const FACE_GUIDE_SVG = `<svg viewBox=\"0 0 100 120\"\n fill=\"none\" class=\"oa-face-svg\">\n <ellipse cx=\"50\" cy=\"55\" rx=\"35\" ry=\"45\"\n stroke=\"currentColor\" stroke-width=\"1.8\"\n stroke-dasharray=\"6 4\"/>\n <ellipse cx=\"36\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <ellipse cx=\"64\" cy=\"45\" rx=\"5\" ry=\"3.5\"\n fill=\"currentColor\" class=\"oa-eye\"/>\n <line x1=\"50\" y1=\"52\" x2=\"48\" y2=\"62\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"/>\n <path d=\"M40 72 Q50 79 60 72\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" fill=\"none\"/>\n</svg>`;\n\nexport const CHECK_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\"/>\n</svg>`;\n\nexport const CLOSE_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n</svg>`;\n\nexport const RETRY_SVG = `<svg viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\">\n <path d=\"m14.955 7.986.116.01a1 1 0 0 1 .85 1.13 8 8 0 0 1-13.374 4.728l-.84.84c-.63.63-1.707.184-1.707-.707V10h3.987c.89 0 1.337 1.077.707 1.707l-.731.731a6 6 0 0 0 8.347-.264 6 6 0 0 0 1.63-3.33 1 1 0 0 1 1.131-.848zM11.514.813a8 8 0 0 1 1.942 1.336l.837-.837c.63-.63 1.707-.184 1.707.707V6h-3.981c-.89 0-1.337-1.077-.707-1.707l.728-.729a6 6 0 0 0-9.98 3.591 1 1 0 1 1-1.98-.281A8 8 0 0 1 11.514.813\"/>\n</svg>`;\n\nexport const SPINNER_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" opacity=\"0.2\"/>\n <path d=\"M12 2 A10 10 0 0 1 22 12\"\n stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\"\n type=\"rotate\" from=\"0 12 12\" to=\"360 12 12\"\n dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n</svg>`;\n\nexport const SHIELD_SVG = `<svg viewBox=\"0 0 24 24\"\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M12 2l8 4v6c0 5.5-3.8 10-8 12\n C7.8 22 4 17.5 4 12V6l8-4z\"/>\n <path d=\"M9 12l2 2 4-4\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>`;\n\nexport function resolveTheme(theme) {\n if (theme === 'light' || theme === 'dark') return theme;\n return resolveAutoTheme();\n}\n\nexport function watchTheme(host, theme) {\n if (theme === 'light' || theme === 'dark') return;\n if (typeof window === 'undefined') return;\n\n const update = () => {\n host.setAttribute('data-theme', resolveAutoTheme());\n };\n\n const cleanups = [];\n\n for (const query of ['(prefers-color-scheme: dark)', '(prefers-color-scheme: light)']) {\n const cleanup = watchMediaQuery(query, update);\n if (cleanup) cleanups.push(cleanup);\n }\n\n if (typeof MutationObserver === 'function') {\n const observer = new MutationObserver(update);\n const options = {\n attributes: true,\n attributeFilter: ['class', 'data-theme', 'style'],\n };\n\n if (document.documentElement) {\n observer.observe(document.documentElement, options);\n }\n\n if (document.body) {\n observer.observe(document.body, options);\n }\n\n cleanups.push(() => observer.disconnect());\n }\n\n return () => {\n for (const cleanup of cleanups) {\n cleanup();\n }\n };\n}\n\nfunction resolveAutoTheme() {\n if (typeof window === 'undefined') return 'dark';\n\n const documentTheme = resolveDocumentTheme();\n if (documentTheme) return documentTheme;\n\n const systemTheme = resolveSystemTheme();\n if (systemTheme) return systemTheme;\n\n return 'dark';\n}\n\nfunction resolveSystemTheme() {\n if (typeof window.matchMedia !== 'function') {\n return null;\n }\n\n if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n\n if (window.matchMedia('(prefers-color-scheme: light)').matches) {\n return 'light';\n }\n\n return null;\n}\n\nfunction resolveDocumentTheme() {\n if (typeof document === 'undefined') return null;\n\n for (const element of [document.documentElement, document.body]) {\n const theme = readThemeHint(element);\n if (theme) return theme;\n }\n\n return null;\n}\n\nfunction readThemeHint(element) {\n if (!element || typeof window.getComputedStyle !== 'function') {\n return null;\n }\n\n const explicit = readExplicitTheme(element);\n if (explicit) return explicit;\n\n const styles = window.getComputedStyle(element);\n const scheme = parseColorScheme(styles.colorScheme);\n if (scheme) return scheme;\n\n return parseBackgroundTheme(styles.backgroundColor);\n}\n\nfunction readExplicitTheme(element) {\n const attrTheme = element.getAttribute('data-theme');\n if (attrTheme === 'light' || attrTheme === 'dark') {\n return attrTheme;\n }\n\n const className = element.className;\n if (typeof className !== 'string') return null;\n\n if (/\\bdark\\b|theme-dark|dark-theme/i.test(className)) {\n return 'dark';\n }\n\n if (/\\blight\\b|theme-light|light-theme/i.test(className)) {\n return 'light';\n }\n\n return null;\n}\n\nfunction parseColorScheme(value) {\n if (!value || value === 'normal') return null;\n\n const normalized = value.toLowerCase();\n const hasDark = normalized.includes('dark');\n const hasLight = normalized.includes('light');\n\n if (hasDark && !hasLight) return 'dark';\n if (hasLight && !hasDark) return 'light';\n\n return null;\n}\n\nfunction parseBackgroundTheme(value) {\n if (!value || value === 'transparent') return null;\n\n const match = value.match(/rgba?\\(([^)]+)\\)/i);\n if (!match) return null;\n\n const parts = match[1]\n .split(',')\n .slice(0, 3)\n .map((part) => Number.parseFloat(part.trim()));\n\n if (parts.length !== 3 || parts.some(Number.isNaN)) {\n return null;\n }\n\n const [red, green, blue] = parts;\n const brightness = (red * 299 + green * 587 + blue * 114) / 1000;\n\n if (brightness <= 140) return 'dark';\n if (brightness >= 180) return 'light';\n\n return null;\n}\n\nfunction watchMediaQuery(query, listener) {\n if (typeof window.matchMedia !== 'function') {\n return null;\n }\n\n const mediaQuery = window.matchMedia(query);\n\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', listener);\n return () => {\n mediaQuery.removeEventListener('change', listener);\n };\n }\n\n if (typeof mediaQuery.addListener === 'function') {\n mediaQuery.addListener(listener);\n return () => {\n mediaQuery.removeListener(listener);\n };\n }\n\n return null;\n}\n\nexport const STYLES = `\n:host {\n --oa-bg: #0b0d11;\n --oa-surface: #14161d;\n --oa-border: #1f2230;\n --oa-text: #e8e8ed;\n --oa-text-muted: #7a7d8c;\n --oa-accent: #4ae68a;\n --oa-accent-dim: rgba(74, 230, 138, 0.12);\n --oa-danger: #ef4444;\n --oa-warn: #f59e0b;\n --oa-radius: 16px;\n --oa-font: 'DM Sans', system-ui, -apple-system,\n sans-serif;\n --oa-mono: 'Space Mono', monospace;\n\n display: block;\n font-family: var(--oa-font);\n color: var(--oa-text);\n line-height: 1.4;\n}\n\n:host([data-theme=\"light\"]) {\n --oa-bg: #f8f9fb;\n --oa-surface: #ffffff;\n --oa-border: #e2e4ea;\n --oa-text: #1a1c24;\n --oa-text-muted: #6b6e7b;\n --oa-accent: #22c55e;\n --oa-accent-dim: rgba(34, 197, 94, 0.1);\n}\n\n* { box-sizing: border-box; margin: 0; padding: 0; }\n\n/* ── Checkbox ────────────────────────────────── */\n\n.oa-checkbox {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n background: var(--oa-surface);\n border: 2px solid var(--oa-border);\n border-radius: var(--oa-radius);\n cursor: pointer;\n user-select: none;\n transition: border-color 0.2s, box-shadow 0.2s;\n}\n\n.oa-checkbox:hover {\n border-color: var(--oa-text-muted);\n}\n\n.oa-checkbox.oa-verified {\n border-color: var(--oa-accent);\n cursor: default;\n}\n\n.oa-checkbox.oa-failed {\n border-color: var(--oa-danger);\n}\n\n.oa-checkbox.oa-retry {\n border-color: var(--oa-danger);\n}\n\n.oa-checkbox.oa-expired {\n border-color: var(--oa-warn);\n}\n\n.oa-checkbox.oa-loading {\n align-items: center;\n}\n\n.oa-check-box {\n width: 24px;\n height: 24px;\n border: 2px solid var(--oa-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.2s;\n}\n\n.oa-loading .oa-check-box {\n border-color: transparent;\n background: transparent;\n}\n\n.oa-loading .oa-check-box .oa-spinner {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n transform: translateY(2px);\n}\n\n.oa-verified .oa-check-box {\n background: var(--oa-accent);\n border-color: var(--oa-accent);\n color: var(--oa-bg);\n}\n\n.oa-failed .oa-check-box {\n background: var(--oa-danger);\n border-color: var(--oa-danger);\n color: white;\n}\n\n.oa-retry .oa-check-box {\n background: var(--oa-danger);\n border-color: var(--oa-danger);\n color: white;\n}\n\n.oa-check-box svg {\n width: 14px;\n height: 14px;\n}\n\n.oa-check-box .oa-spinner svg {\n width: 18px;\n height: 18px;\n}\n\n.oa-label {\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 1;\n min-width: 0;\n}\n\n.oa-label-text {\n font-size: 13px;\n font-weight: 600;\n}\n\n.oa-right-section {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.oa-face-icon-wrap {\n width: 18px;\n height: 22px;\n color: var(--oa-text-muted);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.oa-face-icon-wrap .oa-face-icon-svg {\n width: 100%;\n height: 100%;\n}\n\n.oa-face-icon-wrap .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n animation: oa-idle-blink 5s ease-in-out infinite;\n}\n\n.oa-face-icon-wrap .oa-face-icon-svg {\n animation: oa-breathe 4s ease-in-out infinite;\n}\n\n.oa-branding-row {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n}\n\n.oa-branding-link {\n font-size: 10px;\n font-weight: 700;\n font-family: var(--oa-mono);\n color: var(--oa-text-muted);\n text-decoration: none;\n letter-spacing: -0.02em;\n cursor: pointer;\n}\n\n.oa-branding-link:hover {\n color: var(--oa-text);\n}\n\n.oa-links-row {\n display: flex;\n gap: 6px;\n justify-content: center;\n}\n\n.oa-links-row a {\n font-size: 9px;\n color: var(--oa-text-muted);\n text-decoration: none;\n opacity: 0.7;\n cursor: pointer;\n}\n\n.oa-links-row a:hover {\n opacity: 1;\n text-decoration: underline;\n}\n\n.oa-compact .oa-label-text {\n font-size: 11px;\n}\n\n.oa-compact .oa-face-icon-wrap {\n width: 16px;\n height: 20px;\n}\n\n/* ── Error banner (inline in checkbox) ───────── */\n\n.oa-error-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n margin-top: 6px;\n background: rgba(239, 68, 68, 0.08);\n border: 1px solid rgba(239, 68, 68, 0.2);\n border-radius: 8px;\n font-size: 12px;\n color: var(--oa-danger);\n animation: oa-fade-in 0.3s ease;\n}\n\n.oa-error-banner button {\n margin-left: auto;\n background: none;\n border: 1px solid var(--oa-danger);\n border-radius: 6px;\n color: var(--oa-danger);\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n cursor: pointer;\n font-family: var(--oa-font);\n flex-shrink: 0;\n}\n\n.oa-error-banner button:hover {\n background: rgba(239, 68, 68, 0.1);\n}\n\n/* ── Popup / Modal shell ─────────────────────── */\n\n.oa-popup {\n position: fixed;\n z-index: 100000;\n background: var(--oa-bg);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n box-shadow: 0 20px 60px rgba(0,0,0,0.4),\n 0 0 0 1px rgba(0,0,0,0.08);\n width: 340px;\n max-height: 90vh;\n overflow: hidden;\n animation: oa-popup-in 0.25s ease;\n display: flex;\n flex-direction: column;\n}\n\n.oa-modal-overlay {\n position: fixed;\n inset: 0;\n z-index: 99999;\n background: rgba(0,0,0,0.65);\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oa-fade-in 0.2s ease;\n backdrop-filter: blur(6px);\n}\n\n.oa-modal {\n background: var(--oa-bg);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n width: 360px;\n max-width: 95vw;\n max-height: 95vh;\n overflow: hidden;\n animation: oa-slide-in 0.3s ease;\n display: flex;\n flex-direction: column;\n}\n\n/* ── Header ──────────────────────────────────── */\n\n.oa-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n border-bottom: 1px solid var(--oa-border);\n flex-shrink: 0;\n}\n\n.oa-logo {\n font-family: var(--oa-mono);\n font-size: 0.85rem;\n letter-spacing: -0.03em;\n color: var(--oa-text-muted);\n text-decoration: none;\n cursor: pointer;\n}\n\n.oa-logo:hover {\n color: var(--oa-text);\n}\n\n.oa-logo strong {\n color: var(--oa-text);\n font-weight: 700;\n}\n\n.oa-badge {\n font-size: 0.55rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--oa-accent);\n background: var(--oa-accent-dim);\n padding: 2px 6px;\n border-radius: 100px;\n margin-left: 6px;\n}\n\n.oa-title {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.oa-close-btn {\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n color: var(--oa-text-muted);\n transition: background 0.15s, color 0.15s;\n}\n\n.oa-close-btn:hover {\n background: var(--oa-border);\n color: var(--oa-text);\n}\n\n.oa-close-btn svg {\n width: 16px;\n height: 16px;\n}\n\n/* ── Body (viewport) ─────────────────────────── */\n\n.oa-body {\n flex: 1;\n position: relative;\n overflow: hidden;\n}\n\n/* ── Hero / start screen ─────────────────────── */\n\n.oa-hero {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n padding: 2rem 1.2rem 1.2rem;\n background: var(--oa-surface);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n margin: 10px;\n animation: oa-fade-in 0.4s ease;\n}\n\n.oa-hero-icon {\n width: 80px;\n height: 96px;\n color: var(--oa-text-muted);\n}\n\n.oa-hero-icon .oa-face-svg.oa-idle {\n animation: oa-breathe 4s ease-in-out infinite;\n}\n\n.oa-hero-icon .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n animation: oa-idle-blink 5s ease-in-out infinite;\n}\n\n.oa-hero-status {\n color: var(--oa-text-muted);\n font-size: 0.8rem;\n font-weight: 500;\n text-align: center;\n min-height: 1.4em;\n}\n\n.oa-hero-privacy {\n font-size: 0.68rem;\n color: var(--oa-text-muted);\n text-align: center;\n line-height: 1.5;\n max-width: 260px;\n opacity: 0.7;\n}\n\n.oa-hero-privacy svg {\n width: 10px;\n height: 10px;\n vertical-align: -2px;\n margin-right: 2px;\n}\n\n/* ── Start / Retry button ────────────────────── */\n\n.oa-actions {\n display: flex;\n justify-content: center;\n padding: 0 14px 14px;\n flex-shrink: 0;\n}\n\n.oa-btn {\n font-family: var(--oa-font);\n padding: 0.55rem 1.5rem;\n border: none;\n border-radius: 10px;\n font-size: 0.8rem;\n font-weight: 600;\n cursor: pointer;\n background: var(--oa-accent);\n color: var(--oa-bg);\n transition: transform 0.12s, opacity 0.15s;\n width: 100%;\n max-width: 240px;\n}\n\n.oa-btn:hover { opacity: 0.88; }\n.oa-btn:active { transform: scale(0.97); }\n\n/* ── Video area ──────────────────────────────── */\n\n.oa-video-area {\n position: relative;\n width: 100%;\n aspect-ratio: 3/4;\n max-height: 55vh;\n background: var(--oa-surface);\n overflow: hidden;\n border-radius: var(--oa-radius);\n margin: 10px;\n width: calc(100% - 20px);\n border: 1px solid var(--oa-border);\n animation: oa-fade-in 0.3s ease;\n}\n\n.oa-video-area video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transform: scaleX(-1);\n}\n\n/* ── Face guide overlay ──────────────────────── */\n\n.oa-face-guide {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 80%;\n max-width: 360px;\n aspect-ratio: 5/6;\n perspective: 400px;\n color: rgba(255, 255, 255, 0.45);\n pointer-events: none;\n z-index: 2;\n transition: opacity 0.4s ease;\n}\n\n.oa-face-guide .oa-face-svg {\n width: 100%;\n height: 100%;\n transform-origin: center center;\n filter: drop-shadow(\n 0 0 16px rgba(15, 23, 42, 0.16)\n );\n}\n\n.oa-face-guide .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n}\n\n.oa-face-guide[data-task=\"turn-left\"] .oa-face-svg {\n animation: oa-turn-left 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"turn-right\"] .oa-face-svg {\n animation: oa-turn-right 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"nod\"] .oa-face-svg {\n animation: oa-nod 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"blink-twice\"] .oa-eye {\n animation: oa-blink 2.4s ease-in-out infinite;\n}\n.oa-face-guide[data-task=\"move-closer\"] .oa-face-svg {\n animation: oa-closer 2.5s ease-in-out infinite;\n}\n\n/* ── Challenge HUD (bottom gradient overlay) ── */\n\n.oa-challenge-hud {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1rem 0.8rem 0.6rem;\n background: linear-gradient(\n to top,\n rgba(11, 13, 17, 0.92) 0%,\n rgba(11, 13, 17, 0) 100%\n );\n z-index: 3;\n pointer-events: none;\n}\n\n.oa-challenge-text {\n font-size: 0.85rem;\n font-weight: 600;\n text-align: center;\n color: var(--oa-text);\n text-shadow: 0 1px 6px rgba(0, 0, 0, 0.7);\n margin-bottom: 0.4rem;\n}\n\n.oa-challenge-bar {\n height: 3px;\n background: rgba(255, 255, 255, 0.1);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.oa-challenge-fill {\n height: 100%;\n background: var(--oa-accent);\n border-radius: 2px;\n transition: width 0.25s ease;\n}\n\n/* ── Video status (top gradient overlay) ─────── */\n\n.oa-video-status {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n padding: 0.8rem 0.8rem 1.2rem;\n background: linear-gradient(\n to bottom,\n rgba(11, 13, 17, 0.85) 0%,\n rgba(11, 13, 17, 0) 100%\n );\n z-index: 3;\n pointer-events: none;\n}\n\n.oa-video-status p {\n font-size: 0.75rem;\n font-weight: 500;\n text-align: center;\n color: var(--oa-text-muted);\n text-shadow: 0 1px 4px rgba(0, 0, 0, 0.5);\n}\n\n/* ── Result area ─────────────────────────────── */\n\n.oa-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n padding: 2rem 1.2rem;\n background: var(--oa-surface);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n margin: 10px;\n animation: oa-fade-in 0.4s ease;\n}\n\n.oa-result-icon {\n font-size: 2.4rem;\n line-height: 1;\n}\n\n.oa-result-text {\n font-size: 0.85rem;\n font-weight: 500;\n text-align: center;\n}\n\n.oa-result-pass { color: var(--oa-accent); }\n.oa-result-fail { color: var(--oa-danger); }\n.oa-result-retry { color: var(--oa-warn); }\n\n.oa-hidden { display: none !important; }\n\n/* ── Animations ──────────────────────────────── */\n\n@keyframes oa-popup-in {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n}\n\n@keyframes oa-fade-in {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes oa-slide-in {\n from { opacity: 0; transform: translateY(16px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes oa-breathe {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.04); }\n}\n\n@keyframes oa-idle-blink {\n 0%, 42%, 48%, 100% { transform: scaleY(1); }\n 44%, 46% { transform: scaleY(0.05); }\n}\n\n@keyframes oa-turn-left {\n 0%, 100% { transform: rotateY(0); }\n 35%, 65% { transform: rotateY(-30deg); }\n}\n\n@keyframes oa-turn-right {\n 0%, 100% { transform: rotateY(0); }\n 35%, 65% { transform: rotateY(30deg); }\n}\n\n@keyframes oa-nod {\n 0%, 100% { transform: rotateX(0); }\n 30%, 50% { transform: rotateX(25deg); }\n}\n\n@keyframes oa-blink {\n 0%, 18%, 32%, 50%, 100% { transform: scaleY(1); }\n 22%, 28% { transform: scaleY(0.05); }\n 40%, 46% { transform: scaleY(0.05); }\n}\n\n@keyframes oa-closer {\n 0%, 100% { transform: scale(1); }\n 35%, 55% { transform: scale(1.3); }\n}\n`;\n\nexport function checkboxTemplate(labelText) {\n return `\n <div class=\"oa-widget-wrap\">\n <div class=\"oa-checkbox\" role=\"checkbox\"\n aria-checked=\"false\" tabindex=\"0\">\n <div class=\"oa-check-box\"></div>\n <div class=\"oa-label\">\n <span class=\"oa-label-text\">${labelText}</span>\n </div>\n <div class=\"oa-right-section\">\n <div class=\"oa-branding-row\">\n <div class=\"oa-face-icon-wrap\">\n ${FACE_ICON_SVG}\n </div>\n <a class=\"oa-branding-link\"\n href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\" rel=\"noopener\">OpenAge</a>\n </div>\n <div class=\"oa-links-row\">\n <a href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\"\n rel=\"noopener\">Terms</a>\n <a href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\"\n rel=\"noopener\">Privacy</a>\n </div>\n </div>\n </div>\n <div class=\"oa-error-slot\"></div>\n </div>\n `;\n}\n\nexport function heroTemplate(statusText) {\n return `\n <div class=\"oa-hero\">\n <div class=\"oa-hero-icon\">\n ${FACE_SVG.replace('class=\"oa-face-svg\"', 'class=\"oa-face-svg oa-idle\"')}\n </div>\n <p class=\"oa-hero-status\">${statusText}</p>\n <p class=\"oa-hero-privacy\">\n ${SHIELD_SVG}\n Open-source & privacy-focused.\n No photos or camera data leave your device.\n </p>\n </div>\n `;\n}\n\nexport function challengeTemplate() {\n return `\n <div class=\"oa-video-area\">\n <video autoplay playsinline muted></video>\n <div class=\"oa-face-guide\">\n ${FACE_GUIDE_SVG}\n </div>\n <div class=\"oa-challenge-hud oa-hidden\">\n <p class=\"oa-challenge-text\"></p>\n <div class=\"oa-challenge-bar\">\n <div class=\"oa-challenge-fill\"\n style=\"width:0%\"></div>\n </div>\n </div>\n <div class=\"oa-video-status\">\n <p></p>\n </div>\n </div>\n `;\n}\n\nexport function resultTemplate(outcome, message) {\n const icons = {\n fail: '✕',\n retry: '↻',\n };\n const classes = {\n fail: 'oa-result-fail',\n retry: 'oa-result-retry',\n };\n return `\n <div class=\"oa-result ${classes[outcome] || ''}\">\n <div class=\"oa-result-icon\">\n ${icons[outcome] || '?'}\n </div>\n <div class=\"oa-result-text\">${message}</div>\n </div>\n `;\n}\n\nexport function errorBannerTemplate(message) {\n return `\n <div class=\"oa-error-banner\">\n <span>${message}</span>\n <button class=\"oa-retry-btn\">Retry</button>\n </div>\n `;\n}\n","export const VERSION = '1.0.0';\n\nexport const MEDIAPIPE_CDN = 'https://cdn.jsdelivr.net/npm/' + '@mediapipe/tasks-vision@0.10.17';\n\nexport const MEDIAPIPE_WASM = `${MEDIAPIPE_CDN}/wasm`;\n\nexport const MEDIAPIPE_VISION = `${MEDIAPIPE_CDN}/vision_bundle.mjs`;\n\nexport const MEDIAPIPE_MODEL =\n 'https://storage.googleapis.com/mediapipe-models/' +\n 'face_landmarker/face_landmarker/float16/latest/' +\n 'face_landmarker.task';\n\nexport const FACEAPI_CDN =\n 'https://cdn.jsdelivr.net/npm/' + 'face-api.js@0.22.2/dist/face-api.min.js';\n\nexport const FACEAPI_MODEL_CDN = 'https://cdn.jsdelivr.net/npm/' + 'face-api.js@0.22.2/weights';\n\nexport const MAX_RETRIES = 3;\nexport const BURST_FRAMES = 5;\nexport const BURST_INTERVAL_MS = 200;\nexport const POSITION_CHECK_MS = 100;\nexport const MOTION_CAPTURE_MS = 3000;\nexport const MOTION_SAMPLE_MS = 100;\nexport const TOKEN_EXPIRY_S = 300;\nexport const STABLE_FRAMES_REQUIRED = 10;\n\nexport const TASK_TIMEOUT_MS = 8000;\nexport const MIN_TASK_TIME_MS = 500;\nexport const TASK_COUNT = 3;\nexport const REQUIRED_TASK_PASSES = 2;\n\nexport const POPUP_MIN_WIDTH = 340;\nexport const POPUP_MIN_HEIGHT = 520;\nexport const POPUP_MARGIN = 12;\n","import {\n STYLES,\n checkboxTemplate,\n heroTemplate,\n challengeTemplate,\n resultTemplate,\n resolveTheme,\n watchTheme,\n SPINNER_SVG,\n CHECK_SVG,\n CLOSE_SVG,\n RETRY_SVG,\n} from './ui.js';\nimport { POPUP_MIN_WIDTH, POPUP_MIN_HEIGHT, POPUP_MARGIN } from './constants.js';\n\nlet widgetCounter = 0;\n\nexport class Widget {\n constructor(container, params) {\n this.id = `oa-${++widgetCounter}`;\n this.params = params;\n this.container = resolveContainer(container);\n this.anchorElement = null;\n this.state = 'idle';\n this.token = null;\n this.popup = null;\n this.shadow = null;\n this.elements = {};\n this.onChallenge = null;\n this.onStartClick = null;\n this.popupFrame = 0;\n this.themeCleanup = null;\n\n this.render();\n }\n\n render() {\n const host = document.createElement('div');\n host.id = this.id;\n this.shadow = host.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = STYLES;\n this.shadow.appendChild(style);\n\n const theme = resolveTheme(this.params.theme);\n host.setAttribute('data-theme', theme);\n this.themeCleanup = watchTheme(host, this.params.theme);\n\n if (this.params.size === 'invisible') {\n host.style.display = 'none';\n this.container.appendChild(host);\n this.host = host;\n return;\n }\n\n const label = 'I am of age';\n\n const wrapper = document.createElement('div');\n wrapper.innerHTML = checkboxTemplate(label);\n this.shadow.appendChild(wrapper.firstElementChild);\n\n const checkbox = this.shadow.querySelector('.oa-checkbox');\n\n if (this.params.size === 'compact') {\n checkbox.classList.add('oa-compact');\n }\n\n checkbox.addEventListener('click', (event) => {\n if (event.target.closest('a')) return;\n if (this.state === 'verified') return;\n if (this.state === 'loading') return;\n this.clearError();\n this.startChallenge();\n });\n\n checkbox.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n checkbox.click();\n }\n });\n\n this.elements.checkbox = checkbox;\n this.elements.checkBox = this.shadow.querySelector('.oa-check-box');\n this.elements.errorSlot = this.shadow.querySelector('.oa-error-slot');\n\n this.container.appendChild(host);\n this.host = host;\n }\n\n startChallenge() {\n this.setState('loading');\n\n if (this.onChallenge) {\n this.onChallenge(this);\n }\n }\n\n createPopupShell() {\n const theme = resolveTheme(this.params.theme);\n const popupHost = document.createElement('div');\n popupHost.setAttribute('data-theme', theme);\n const popupShadow = popupHost.attachShadow({\n mode: 'open',\n });\n\n const style = document.createElement('style');\n style.textContent = STYLES;\n popupShadow.appendChild(style);\n\n const themeCleanup = watchTheme(popupHost, this.params.theme);\n\n return {\n popupHost,\n popupShadow,\n themeCleanup,\n };\n }\n\n openPopup() {\n if (this.popup) return this.getVideo();\n\n const anchor = this.getPopupAnchor();\n\n if (!anchor) {\n return this.openModal();\n }\n\n const { popupHost, popupShadow, themeCleanup } = this.createPopupShell();\n\n const popup = document.createElement('div');\n popup.className = 'oa-popup';\n popup.innerHTML = this.buildPopupContent();\n popup.style.visibility = 'hidden';\n popup.style.pointerEvents = 'none';\n\n popupShadow.appendChild(popup);\n document.body.appendChild(popupHost);\n\n this.popup = {\n anchor,\n host: popupHost,\n root: popup,\n themeCleanup,\n };\n\n const anchorRect = anchor.getBoundingClientRect();\n const popupRect = popup.getBoundingClientRect();\n const position = findPopupPosition(anchorRect, popupRect);\n\n if (position.mode === 'modal') {\n popupHost.remove();\n themeCleanup?.();\n this.popup = null;\n return this.openModal();\n }\n\n this.bindPopupEvents(popup, popupShadow);\n this.updatePopupPosition();\n this.startPopupTracking();\n return this.getVideo();\n }\n\n openModal() {\n const { popupHost, popupShadow, themeCleanup } = this.createPopupShell();\n\n const overlay = document.createElement('div');\n overlay.className = 'oa-modal-overlay';\n\n const modal = document.createElement('div');\n modal.className = 'oa-modal';\n modal.innerHTML = this.buildPopupContent();\n\n overlay.appendChild(modal);\n popupShadow.appendChild(overlay);\n document.body.appendChild(popupHost);\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) this.closePopup();\n });\n\n this.popup = {\n host: popupHost,\n root: modal,\n overlay,\n themeCleanup,\n };\n this.bindPopupEvents(modal, popupShadow);\n return this.getVideo();\n }\n\n getPopupAnchor() {\n return this.anchorElement || this.elements.checkbox || this.host || null;\n }\n\n startPopupTracking() {\n if (!this.popup || this.popup.overlay) return;\n\n const schedule = () => {\n this.schedulePopupPosition();\n };\n\n const cleanups = [];\n const addWindowListener = (name, options) => {\n window.addEventListener(name, schedule, options);\n cleanups.push(() => {\n window.removeEventListener(name, schedule, options);\n });\n };\n\n addWindowListener('resize', { passive: true });\n addWindowListener('scroll', {\n capture: true,\n passive: true,\n });\n\n if (window.visualViewport) {\n const viewport = window.visualViewport;\n viewport.addEventListener('resize', schedule);\n viewport.addEventListener('scroll', schedule);\n cleanups.push(() => {\n viewport.removeEventListener('resize', schedule);\n viewport.removeEventListener('scroll', schedule);\n });\n }\n\n if (typeof ResizeObserver === 'function') {\n const observer = new ResizeObserver(() => {\n schedule();\n });\n observer.observe(this.popup.root);\n observer.observe(this.popup.anchor);\n observer.observe(document.documentElement);\n if (document.body) {\n observer.observe(document.body);\n }\n cleanups.push(() => observer.disconnect());\n }\n\n this.popup.cleanup = () => {\n if (this.popupFrame) {\n cancelAnimationFrame(this.popupFrame);\n this.popupFrame = 0;\n }\n for (const cleanup of cleanups) {\n cleanup();\n }\n };\n }\n\n schedulePopupPosition() {\n if (!this.popup || this.popup.overlay) return;\n if (this.popupFrame) return;\n\n this.popupFrame = requestAnimationFrame(() => {\n this.popupFrame = 0;\n this.updatePopupPosition();\n });\n }\n\n updatePopupPosition() {\n if (!this.popup || this.popup.overlay) return;\n\n const anchor = this.getPopupAnchor();\n if (!anchor || !anchor.isConnected) {\n this.closePopup();\n return;\n }\n\n this.popup.anchor = anchor;\n\n const anchorRect = anchor.getBoundingClientRect();\n const popupRect = this.popup.root.getBoundingClientRect();\n const position = findPopupPosition(anchorRect, popupRect);\n\n if (position.mode === 'modal') {\n this.closePopup();\n this.openModal();\n return;\n }\n\n const top = `${Math.round(position.top)}px`;\n const left = `${Math.round(position.left)}px`;\n\n if (this.popup.root.style.top !== top) {\n this.popup.root.style.top = top;\n }\n\n if (this.popup.root.style.left !== left) {\n this.popup.root.style.left = left;\n }\n\n this.popup.root.dataset.placement = position.placement;\n this.popup.root.style.visibility = 'visible';\n this.popup.root.style.pointerEvents = 'auto';\n }\n\n buildPopupContent() {\n return `\n <div class=\"oa-header\">\n <div class=\"oa-title\">\n <a class=\"oa-logo\"\n href=\"https://github.com/tn3w/OpenAge\"\n target=\"_blank\" rel=\"noopener\">\n Open<strong>Age</strong>\n </a>\n <span class=\"oa-badge\">on-device</span>\n </div>\n <button class=\"oa-close-btn\"\n aria-label=\"Close\">\n ${CLOSE_SVG}\n </button>\n </div>\n <div class=\"oa-body\">\n ${heroTemplate('Initializing…')}\n </div>\n <div class=\"oa-actions oa-hidden\">\n <button class=\"oa-btn oa-start-btn\">\n Begin Verification\n </button>\n </div>\n `;\n }\n\n bindPopupEvents(root, shadow) {\n const closeBtn = root.querySelector('.oa-close-btn');\n if (closeBtn) {\n closeBtn.addEventListener('click', () => {\n this.closePopup();\n this.params.closeCallback?.();\n });\n }\n\n const startBtn = root.querySelector('.oa-start-btn');\n if (startBtn) {\n startBtn.addEventListener('click', () => {\n if (this.onStartClick) this.onStartClick();\n });\n }\n\n this.popupElements = {\n body: root.querySelector('.oa-body'),\n actions: root.querySelector('.oa-actions'),\n startBtn,\n heroStatus: root.querySelector('.oa-hero-status'),\n };\n }\n\n getVideo() {\n if (!this.popup) return null;\n return this.popup.root.querySelector('video');\n }\n\n showHero(statusText) {\n if (!this.popupElements?.body) return;\n this.popupElements.body.innerHTML = heroTemplate(statusText);\n this.popupElements.heroStatus = this.popupElements.body.querySelector('.oa-hero-status');\n this.hideActions();\n }\n\n showReady() {\n this.setHeroStatus('Ready to verify your age.');\n this.showActions('Begin Verification');\n }\n\n showCamera() {\n if (!this.popupElements?.body) return;\n this.popupElements.body.innerHTML = challengeTemplate();\n\n this.popupElements.video = this.popupElements.body.querySelector('video');\n this.popupElements.faceGuide = this.popupElements.body.querySelector('.oa-face-guide');\n this.popupElements.challengeHud =\n this.popupElements.body.querySelector('.oa-challenge-hud');\n this.popupElements.challengeText =\n this.popupElements.body.querySelector('.oa-challenge-text');\n this.popupElements.challengeFill =\n this.popupElements.body.querySelector('.oa-challenge-fill');\n this.popupElements.videoStatus =\n this.popupElements.body.querySelector('.oa-video-status p');\n\n this.hideActions();\n return this.popupElements.video;\n }\n\n showLiveness() {\n if (this.popupElements?.faceGuide) {\n this.popupElements.faceGuide.classList.remove('oa-hidden');\n }\n if (this.popupElements?.challengeHud) {\n this.popupElements.challengeHud.classList.remove('oa-hidden');\n }\n }\n\n setHeroStatus(text) {\n if (this.popupElements?.heroStatus) {\n this.popupElements.heroStatus.textContent = text;\n }\n }\n\n setVideoStatus(text) {\n if (this.popupElements?.videoStatus) {\n this.popupElements.videoStatus.textContent = text;\n }\n }\n\n setInstruction(text) {\n if (this.popupElements?.challengeText) {\n this.popupElements.challengeText.textContent = text;\n }\n }\n\n setStatus(text) {\n this.setVideoStatus(text);\n }\n\n setProgress(fraction) {\n if (this.popupElements?.challengeFill) {\n this.popupElements.challengeFill.style.width = `${Math.round(fraction * 100)}%`;\n }\n }\n\n setTask(taskId) {\n if (this.popupElements?.faceGuide) {\n this.popupElements.faceGuide.setAttribute('data-task', taskId || '');\n }\n }\n\n showActions(label) {\n if (!this.popupElements?.actions) return;\n this.popupElements.actions.classList.remove('oa-hidden');\n if (this.popupElements.startBtn) {\n this.popupElements.startBtn.textContent = label;\n }\n }\n\n hideActions() {\n if (this.popupElements?.actions) {\n this.popupElements.actions.classList.add('oa-hidden');\n }\n }\n\n showResult(outcome, message) {\n if (outcome === 'pass') {\n this.closePopup();\n this.setState('verified');\n return;\n }\n\n if (outcome === 'fail') {\n if (this.params.size === 'invisible') {\n if (this.popupElements?.body) {\n this.popupElements.body.innerHTML = resultTemplate(outcome, message);\n }\n this.hideActions();\n this.showActions('Try Again');\n } else {\n this.closePopup();\n this.setState('retry');\n }\n return;\n }\n\n if (outcome === 'retry') {\n if (this.params.size !== 'invisible') {\n this.closePopup();\n this.setState('retry');\n return;\n }\n\n if (this.popupElements?.body) {\n this.popupElements.body.innerHTML = resultTemplate(outcome, message);\n }\n this.hideActions();\n this.showActions('Try Again');\n }\n }\n\n showError() {\n this.setState('retry');\n }\n\n clearError() {\n if (this.elements.errorSlot) {\n this.elements.errorSlot.innerHTML = '';\n }\n }\n\n closePopup() {\n if (!this.popup) return;\n this.popup.cleanup?.();\n this.popup.themeCleanup?.();\n this.popup.host.remove();\n this.popup = null;\n this.popupElements = null;\n\n if (this.state === 'loading') {\n this.setState('idle');\n }\n }\n\n setState(newState) {\n this.state = newState;\n const cb = this.elements.checkbox;\n const box = this.elements.checkBox;\n if (!cb || !box) return;\n\n cb.classList.remove('oa-loading', 'oa-verified', 'oa-failed', 'oa-retry', 'oa-expired');\n cb.setAttribute('aria-checked', 'false');\n box.innerHTML = '';\n\n switch (newState) {\n case 'loading':\n cb.classList.add('oa-loading');\n box.innerHTML = `<span class=\"oa-spinner\">` + `${SPINNER_SVG}</span>`;\n break;\n case 'verified':\n cb.classList.add('oa-verified');\n cb.setAttribute('aria-checked', 'true');\n box.innerHTML = CHECK_SVG;\n break;\n case 'failed':\n cb.classList.add('oa-failed');\n box.innerHTML = '✕';\n break;\n case 'retry':\n cb.classList.add('oa-retry');\n box.innerHTML = RETRY_SVG;\n break;\n case 'expired':\n cb.classList.add('oa-expired');\n cb.setAttribute('aria-checked', 'false');\n break;\n default:\n break;\n }\n }\n\n getToken() {\n return this.token;\n }\n\n reset() {\n this.token = null;\n this.closePopup();\n this.setState('idle');\n }\n\n destroy() {\n this.closePopup();\n this.themeCleanup?.();\n this.host?.remove();\n }\n}\n\nexport function createModalWidget(params) {\n const widget = new Widget(document.createElement('div'), { ...params, size: 'invisible' });\n return widget;\n}\n\nfunction resolveContainer(container) {\n if (typeof container === 'string') {\n return document.querySelector(container);\n }\n return container;\n}\n\nfunction findPopupPosition(anchorRect, popupRect) {\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n const popupWidth = Math.max(popupRect.width || 0, POPUP_MIN_WIDTH);\n const popupHeight = Math.max(popupRect.height || 0, POPUP_MIN_HEIGHT);\n const availableWidth = viewport.width - POPUP_MARGIN * 2;\n const availableHeight = viewport.height - POPUP_MARGIN * 2;\n\n if (popupWidth > availableWidth || popupHeight > availableHeight) {\n return { mode: 'modal' };\n }\n\n const left = clampLeft(\n anchorRect.left + anchorRect.width / 2 - popupWidth / 2,\n viewport.width,\n popupWidth\n );\n\n const topBelow = anchorRect.bottom + POPUP_MARGIN;\n const topAbove = anchorRect.top - popupHeight - POPUP_MARGIN;\n const fitsBelow = topBelow + popupHeight <= viewport.height - POPUP_MARGIN;\n const fitsAbove = topAbove >= POPUP_MARGIN;\n\n if (fitsBelow || !fitsAbove) {\n return {\n mode: 'popup',\n placement: 'below',\n top: clampTop(topBelow, viewport.height, popupHeight),\n left,\n };\n }\n\n return {\n mode: 'popup',\n placement: 'above',\n top: clampTop(topAbove, viewport.height, popupHeight),\n left,\n };\n}\n\nfunction clampLeft(left, viewportWidth, popupWidth) {\n return Math.min(Math.max(POPUP_MARGIN, left), viewportWidth - popupWidth - POPUP_MARGIN);\n}\n\nfunction clampTop(top, viewportHeight, popupHeight) {\n return Math.min(Math.max(POPUP_MARGIN, top), viewportHeight - popupHeight - POPUP_MARGIN);\n}\n","import { MEDIAPIPE_CDN, MEDIAPIPE_WASM, MEDIAPIPE_VISION, MEDIAPIPE_MODEL } from './constants.js';\n\nlet FaceLandmarker = null;\nlet landmarker = null;\nlet lastTimestampMs = -1;\nlet visionModule = null;\n\nexport async function loadVision() {\n if (visionModule) return visionModule;\n visionModule = await import(MEDIAPIPE_VISION);\n FaceLandmarker = visionModule.FaceLandmarker;\n return visionModule;\n}\n\nexport async function loadModel() {\n const response = await fetch(MEDIAPIPE_MODEL);\n if (!response.ok) {\n throw new Error('Failed to load face landmarker model');\n }\n return new Uint8Array(await response.arrayBuffer());\n}\n\nexport async function initTracker(modelBuffer) {\n const vision = await loadVision();\n const resolver = await vision.FilesetResolver.forVisionTasks(MEDIAPIPE_WASM);\n\n if (landmarker) {\n landmarker.close();\n }\n lastTimestampMs = -1;\n\n landmarker = await FaceLandmarker.createFromOptions(resolver, {\n baseOptions: {\n modelAssetBuffer: new Uint8Array(modelBuffer),\n delegate: 'GPU',\n },\n runningMode: 'VIDEO',\n numFaces: 2,\n outputFaceBlendshapes: true,\n outputFacialTransformationMatrixes: true,\n });\n}\n\nexport function track(video, timestampMs) {\n if (!landmarker) return null;\n\n const normalized = normalizeTimestamp(timestampMs);\n const result = landmarker.detectForVideo(video, normalized);\n const faceCount = result.faceLandmarks?.length ?? 0;\n\n if (faceCount === 0) {\n return { faceCount: 0, timestampMs: normalized };\n }\n\n const landmarks = result.faceLandmarks[0];\n\n return {\n faceCount,\n timestampMs: normalized,\n landmarks,\n blendshapes: parseBlendshapes(result.faceBlendshapes?.[0]),\n headPose: extractHeadPose(result.facialTransformationMatrixes?.[0]),\n boundingBox: computeBoundingBox(landmarks),\n };\n}\n\nexport function destroyTracker() {\n if (landmarker) {\n landmarker.close();\n landmarker = null;\n }\n lastTimestampMs = -1;\n}\n\nexport function isTrackerReady() {\n return landmarker !== null;\n}\n\nfunction normalizeTimestamp(timestampMs) {\n const safe = Number.isFinite(timestampMs) ? timestampMs : performance.now();\n const whole = Math.floor(safe);\n const normalized = Math.max(whole, lastTimestampMs + 1);\n lastTimestampMs = normalized;\n return normalized;\n}\n\nfunction parseBlendshapes(blendshapeResult) {\n if (!blendshapeResult?.categories) return {};\n const map = {};\n for (const category of blendshapeResult.categories) {\n map[category.categoryName] = category.score;\n }\n return map;\n}\n\nfunction extractHeadPose(matrix) {\n if (!matrix?.data || matrix.data.length < 16) {\n return { yaw: 0, pitch: 0, roll: 0 };\n }\n const m = matrix.data;\n const deg = 180 / Math.PI;\n return {\n yaw: Math.atan2(m[8], m[10]) * deg,\n pitch: Math.asin(-Math.max(-1, Math.min(1, m[9]))) * deg,\n roll: Math.atan2(m[1], m[5]) * deg,\n };\n}\n\nfunction computeBoundingBox(landmarks) {\n let minX = 1,\n minY = 1,\n maxX = 0,\n maxY = 0;\n\n for (const point of landmarks) {\n if (point.x < minX) minX = point.x;\n if (point.y < minY) minY = point.y;\n if (point.x > maxX) maxX = point.x;\n if (point.y > maxY) maxY = point.y;\n }\n\n const width = maxX - minX;\n const height = maxY - minY;\n\n return {\n x: minX,\n y: minY,\n width,\n height,\n area: width * height,\n };\n}\n","import { track } from './face-tracker.js';\nimport { STABLE_FRAMES_REQUIRED, POSITION_CHECK_MS } from './constants.js';\n\nexport function startPositioning(video, callbacks) {\n let stableFrames = 0;\n let cancelled = false;\n\n const check = () => {\n if (cancelled) return;\n\n const result = track(video, performance.now());\n\n if (!result || result.faceCount === 0) {\n callbacks.onStatus?.('Look at the camera');\n stableFrames = 0;\n } else if (result.faceCount > 1) {\n callbacks.onStatus?.('Only one person please');\n stableFrames = 0;\n } else {\n callbacks.onStatus?.('Hold still…');\n stableFrames++;\n }\n\n if (stableFrames >= STABLE_FRAMES_REQUIRED) {\n callbacks.onReady?.();\n return;\n }\n\n setTimeout(check, POSITION_CHECK_MS);\n };\n\n check();\n\n return {\n cancel: () => {\n cancelled = true;\n },\n };\n}\n","import { FACEAPI_CDN, FACEAPI_MODEL_CDN } from './constants.js';\n\nlet initialized = false;\nlet faceapi = null;\n\nfunction loadScript(url) {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') {\n return reject(new Error('No DOM available'));\n }\n\n const existing = document.querySelector(`script[src=\"${url}\"]`);\n if (existing) {\n if (window.faceapi) return resolve(window.faceapi);\n existing.addEventListener('load', () => resolve(window.faceapi));\n return;\n }\n\n const script = document.createElement('script');\n script.src = url;\n script.crossOrigin = 'anonymous';\n script.onload = () => resolve(window.faceapi);\n script.onerror = () => reject(new Error(`Failed to load ${url}`));\n document.head.appendChild(script);\n });\n}\n\nexport async function initAgeEstimator() {\n if (initialized) return;\n\n faceapi = await loadScript(FACEAPI_CDN);\n\n await Promise.all([\n faceapi.nets.tinyFaceDetector.loadFromUri(FACEAPI_MODEL_CDN),\n faceapi.nets.faceLandmark68TinyNet.loadFromUri(FACEAPI_MODEL_CDN),\n faceapi.nets.ageGenderNet.loadFromUri(FACEAPI_MODEL_CDN),\n ]);\n\n initialized = true;\n}\n\nexport async function estimateAge(canvas) {\n if (!faceapi) {\n throw new Error('Age estimator not initialized');\n }\n\n const detection = await faceapi\n .detectSingleFace(\n canvas,\n new faceapi.TinyFaceDetectorOptions({\n inputSize: 224,\n })\n )\n .withFaceLandmarks(true)\n .withAgeAndGender();\n\n if (!detection) return null;\n\n return {\n age: detection.age,\n gender: detection.gender,\n confidence: detection.detection.score,\n };\n}\n\nexport async function estimateAgeBurst(frames) {\n const results = [];\n for (const frame of frames) {\n const result = await estimateAge(frame);\n if (result) results.push(result);\n }\n return results;\n}\n\nexport function isInitialized() {\n return initialized;\n}\n","import {\n TASK_TIMEOUT_MS,\n MIN_TASK_TIME_MS,\n TASK_COUNT,\n REQUIRED_TASK_PASSES,\n} from './constants.js';\n\nconst TASKS = [\n {\n id: 'turn-left',\n instruction: 'Turn your head to the left',\n check: (h) => detectYawShift(h, 20),\n },\n {\n id: 'turn-right',\n instruction: 'Turn your head to the right',\n check: (h) => detectYawShift(h, -20),\n },\n {\n id: 'nod',\n instruction: 'Nod your head down then up',\n check: (h) => detectNod(h),\n },\n {\n id: 'blink-twice',\n instruction: 'Blink twice',\n check: (h) => detectDoubleBlink(h),\n },\n {\n id: 'move-closer',\n instruction: 'Move closer then back',\n check: (h) => detectDistanceChange(h),\n },\n];\n\nexport function pickTasks(count = TASK_COUNT) {\n const shuffled = [...TASKS].sort(() => Math.random() - 0.5);\n return shuffled.slice(0, count);\n}\n\nexport function createSession(tasks) {\n return {\n tasks: tasks || pickTasks(),\n currentIndex: 0,\n history: [],\n taskStartTime: 0,\n completedTasks: 0,\n requiredPasses: REQUIRED_TASK_PASSES,\n failed: false,\n failReason: null,\n };\n}\n\nexport function processFrame(session, trackingResult) {\n if (session.failed || isComplete(session)) return;\n if (session.currentIndex >= session.tasks.length) return;\n if (!trackingResult || trackingResult.faceCount === 0) return;\n\n if (trackingResult.faceCount > 1) {\n session.failed = true;\n session.failReason = null;\n return;\n }\n\n const entry = {\n timestamp: trackingResult.timestampMs,\n headPose: trackingResult.headPose,\n blendshapes: trackingResult.blendshapes,\n boundingBox: trackingResult.boundingBox,\n };\n\n if (session.history.length === 0) {\n session.taskStartTime = trackingResult.timestampMs;\n }\n\n session.history.push(entry);\n\n const elapsed = trackingResult.timestampMs - session.taskStartTime;\n\n if (elapsed > TASK_TIMEOUT_MS) {\n advanceTask(session);\n return;\n }\n\n if (elapsed < MIN_TASK_TIME_MS) return;\n\n const task = session.tasks[session.currentIndex];\n if (!task.check(session.history)) return;\n\n if (isSuspicious(session.history)) {\n session.failed = true;\n session.failReason = null;\n return;\n }\n\n session.completedTasks++;\n advanceTask(session);\n}\n\nexport function isComplete(session) {\n return session.currentIndex >= session.tasks.length;\n}\n\nexport function isPassed(session) {\n return session.completedTasks >= session.requiredPasses;\n}\n\nexport function currentInstruction(session) {\n if (session.currentIndex >= session.tasks.length) {\n return null;\n }\n return session.tasks[session.currentIndex].instruction;\n}\n\nexport function currentTaskId(session) {\n if (session.currentIndex >= session.tasks.length) {\n return null;\n }\n return session.tasks[session.currentIndex].id;\n}\n\nexport function progress(session) {\n if (session.tasks.length === 0) return 1;\n return Math.min(session.currentIndex / session.tasks.length, 1);\n}\n\nfunction advanceTask(session) {\n session.currentIndex++;\n session.history = [];\n session.taskStartTime = 0;\n\n const remaining = session.tasks.length - session.currentIndex;\n const canStillPass = session.completedTasks + remaining >= session.requiredPasses;\n\n if (!canStillPass) {\n session.failed = true;\n session.failReason = null;\n }\n}\n\nfunction detectYawShift(history, targetDelta) {\n if (history.length < 5) return false;\n const baseYaw = history[0].headPose.yaw;\n const direction = Math.sign(targetDelta);\n const threshold = Math.abs(targetDelta);\n\n return history.some((entry) => {\n const delta = (entry.headPose.yaw - baseYaw) * direction;\n return delta > threshold;\n });\n}\n\nfunction detectNod(history) {\n if (history.length < 10) return false;\n const basePitch = history[0].headPose.pitch;\n let wentDown = false;\n let cameBack = false;\n\n for (const entry of history) {\n const delta = entry.headPose.pitch - basePitch;\n if (delta > 15) wentDown = true;\n if (wentDown && Math.abs(delta) < 8) cameBack = true;\n }\n\n return wentDown && cameBack;\n}\n\nfunction detectDoubleBlink(history) {\n if (history.length < 10) return false;\n let blinkCount = 0;\n let eyesClosed = false;\n\n for (const entry of history) {\n const left = entry.blendshapes.eyeBlinkLeft ?? 0;\n const right = entry.blendshapes.eyeBlinkRight ?? 0;\n const bothClosed = left > 0.6 && right > 0.6;\n\n if (bothClosed && !eyesClosed) {\n blinkCount++;\n eyesClosed = true;\n } else if (!bothClosed) {\n eyesClosed = false;\n }\n }\n\n return blinkCount >= 2;\n}\n\nfunction detectDistanceChange(history) {\n if (history.length < 10) return false;\n const baseArea = history[0].boundingBox.area;\n let wentCloser = false;\n let cameBack = false;\n\n for (const entry of history) {\n const ratio = entry.boundingBox.area / baseArea;\n if (ratio > 1.3) wentCloser = true;\n if (wentCloser && ratio < 1.15) cameBack = true;\n }\n\n return wentCloser && cameBack;\n}\n\nexport function isSuspicious(history) {\n if (history.length < 5) return false;\n\n const deltas = [];\n for (let i = 1; i < history.length; i++) {\n const dy = Math.abs(history[i].headPose.yaw - history[i - 1].headPose.yaw);\n const dp = Math.abs(history[i].headPose.pitch - history[i - 1].headPose.pitch);\n deltas.push(dy + dp);\n }\n\n if (deltas.every((d) => d < 0.1)) return true;\n\n const mean = deltas.reduce((a, b) => a + b, 0) / deltas.length;\n const variance = deltas.reduce((s, d) => s + (d - mean) ** 2, 0) / deltas.length;\n\n return variance < 0.01 && mean > 0.5;\n}\n","import { TOKEN_EXPIRY_S } from './constants.js';\n\nfunction base64UrlEncode(data) {\n const text = typeof data === 'string' ? data : String.fromCharCode(...new Uint8Array(data));\n return btoa(text).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(str) {\n const padded = str + '='.repeat((4 - (str.length % 4)) % 4);\n const binary = atob(padded.replace(/-/g, '+').replace(/_/g, '/'));\n return Uint8Array.from(binary, (c) => c.charCodeAt(0));\n}\n\nasync function getSigningKey() {\n const raw = crypto.getRandomValues(new Uint8Array(32));\n return crypto.subtle.importKey('raw', raw, { name: 'HMAC', hash: 'SHA-256' }, false, [\n 'sign',\n 'verify',\n ]);\n}\n\nlet cachedKey = null;\n\nasync function ensureKey() {\n if (!cachedKey) cachedKey = await getSigningKey();\n return cachedKey;\n}\n\nexport async function createToken(payload) {\n const key = await ensureKey();\n\n const header = base64UrlEncode(JSON.stringify({ alg: 'HS256', typ: 'JWT' }));\n\n const body = base64UrlEncode(\n JSON.stringify({\n ...payload,\n iat: Math.floor(Date.now() / 1000),\n exp: Math.floor(Date.now() / 1000) + TOKEN_EXPIRY_S,\n })\n );\n\n const data = new TextEncoder().encode(`${header}.${body}`);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n\n return `${header}.${body}.${base64UrlEncode(signature)}`;\n}\n\nexport async function verifyToken(token) {\n const key = await ensureKey();\n const [header, body, sig] = token.split('.');\n\n if (!header || !body || !sig) return null;\n\n let signature;\n let data;\n try {\n data = new TextEncoder().encode(`${header}.${body}`);\n signature = base64UrlDecode(sig);\n } catch {\n return null;\n }\n\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n if (!valid) return null;\n\n const decoded = JSON.parse(new TextDecoder().decode(base64UrlDecode(body)));\n\n if (decoded.exp && decoded.exp < Date.now() / 1000) {\n return null;\n }\n\n return decoded;\n}\n\nexport function decodeToken(token) {\n const [, body] = token.split('.');\n if (!body) return null;\n return JSON.parse(new TextDecoder().decode(base64UrlDecode(body)));\n}\n\nexport function createTransport(mode, options = {}) {\n if (mode === 'serverless') {\n return createServerlessTransport(options);\n }\n\n const baseUrl = mode === 'custom' ? options.server : 'https://api.openage.dev';\n\n return createServerTransport(baseUrl, options);\n}\n\nfunction createServerlessTransport(options) {\n return {\n async verify(payload) {\n const { estimatedAge, livenessOk } = payload;\n\n if (!livenessOk) {\n return { success: false, token: null };\n }\n\n const token = await createToken({\n estimatedAge,\n livenessOk: true,\n mode: 'serverless',\n });\n\n return { success: true, token };\n },\n close() {},\n };\n}\n\nfunction createServerTransport(baseUrl, options) {\n let session = null;\n let channel = null;\n\n return {\n async createSession() {\n const transports = [];\n if (typeof WebSocket !== 'undefined') {\n transports.push('websocket');\n }\n transports.push('poll');\n\n const response = await fetch(`${baseUrl}/api/session`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n sitekey: options.sitekey,\n action: options.action,\n supportedTransports: transports,\n }),\n });\n\n if (!response.ok) {\n throw new Error('Request failed');\n }\n\n session = await response.json();\n return session;\n },\n\n openChannel() {\n if (!session) {\n throw new Error('No session');\n }\n\n if (session.transport === 'websocket') {\n channel = createWsChannel(baseUrl, session.sessionId);\n } else {\n channel = createPollChannel(baseUrl, session.sessionId);\n }\n },\n\n async receive() {\n if (!channel) return null;\n return channel.receive();\n },\n\n async send(data) {\n if (!channel) return;\n return channel.send(data);\n },\n\n async sendAndReceive(data) {\n if (!channel) return null;\n return channel.sendAndReceive(data);\n },\n\n async verify(payload) {\n if (channel) {\n return this.verifyViaChannel(payload);\n }\n\n const response = await fetch(`${baseUrl}/verify`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n response: payload.token,\n sitekey: options.sitekey,\n action: options.action,\n }),\n });\n\n if (!response.ok) {\n return {\n success: false,\n token: null,\n };\n }\n\n return response.json();\n },\n\n async verifyViaChannel(payload) {\n await channel.send(payload);\n return channel.receive();\n },\n\n getSession() {\n return session;\n },\n\n close() {\n channel?.close();\n channel = null;\n session = null;\n },\n };\n}\n\nfunction createWsChannel(baseUrl, sessionId) {\n const wsUrl = baseUrl.replace(/^http/, 'ws').replace(/\\/$/, '');\n const url = `${wsUrl}/api/ws/${sessionId}`;\n const ws = new WebSocket(url);\n let pending = [];\n let ready = false;\n let closed = false;\n\n const waitReady = new Promise((resolve, reject) => {\n ws.onopen = () => {\n ready = true;\n resolve();\n };\n ws.onerror = () => {\n reject(new Error('Connection failed'));\n };\n });\n\n ws.onmessage = (event) => {\n const message = JSON.parse(event.data);\n const resolver = pending.shift();\n if (resolver) resolver(message);\n };\n\n ws.onclose = () => {\n closed = true;\n for (const resolver of pending) resolver(null);\n pending = [];\n };\n\n return {\n receive() {\n if (closed) return Promise.resolve(null);\n return new Promise((resolve) => {\n pending.push(resolve);\n });\n },\n async send(data) {\n await waitReady;\n ws.send(JSON.stringify(data));\n },\n async sendAndReceive(data) {\n await waitReady;\n ws.send(JSON.stringify(data));\n return this.receive();\n },\n close() {\n closed = true;\n ws.close();\n },\n };\n}\n\nfunction createPollChannel(baseUrl, sessionId) {\n return {\n async receive() {\n const response = await fetch(`${baseUrl}/api/poll/${sessionId}`);\n if (!response.ok) {\n throw new Error('Request failed');\n }\n return response.json();\n },\n async send(data) {\n const response = await fetch(`${baseUrl}/api/verify/${sessionId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n if (!response.ok) {\n throw new Error('Request failed');\n }\n },\n async sendAndReceive(data) {\n const response = await fetch(`${baseUrl}/api/verify/${sessionId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n if (!response.ok) {\n throw new Error('Request failed');\n }\n return response.json();\n },\n close() {},\n };\n}\n","let wasmModule = null;\nlet vmSession = null;\nlet challengeBundle = null;\nlet _faceData = null;\nlet _challengeParams = null;\nlet _bridge = null;\n\nfunction loadScript(url) {\n return new Promise((resolve, reject) => {\n const existing = document.querySelector(`script[src=\"${url}\"]`);\n if (existing) return resolve();\n\n const script = document.createElement('script');\n script.src = url;\n script.onload = resolve;\n script.onerror = () => {\n reject(new Error(`Failed to load ${url}`));\n };\n document.head.appendChild(script);\n });\n}\n\nexport async function initVM(session) {\n vmSession = session;\n\n await loadScript(session.wasmJs);\n\n const loaderModule = await import(session.loaderJs);\n wasmModule = await loaderModule.initModule(session.wasmBin);\n\n const initFn = session.exports.vm_init;\n const result = wasmModule[`_${initFn}`]();\n if (result !== 0) throw new Error('VM init failed');\n\n const bundleResponse = await fetch(session.challengeVmbc);\n challengeBundle = new Uint8Array(await bundleResponse.arrayBuffer());\n}\n\nexport async function decryptModel(session, modelId) {\n if (!wasmModule || !vmSession) {\n throw new Error('VM not loaded');\n }\n\n const modelInfo = session.models[modelId];\n if (!modelInfo) {\n throw new Error(`Unknown model: ${modelId}`);\n }\n\n const response = await fetch(modelInfo.url);\n if (!response.ok) {\n throw new Error(`Failed to fetch model: ${modelId}`);\n }\n\n const encrypted = new Uint8Array(await response.arrayBuffer());\n\n const decryptFn = session.exports.vm_decrypt_blob;\n const freeFn = session.exports.vm_free;\n const length = encrypted.length;\n\n const inputPtr = wasmModule._malloc(length);\n wasmModule.HEAPU8.set(encrypted, inputPtr);\n\n const outLenPtr = wasmModule._malloc(4);\n const outPtr = wasmModule[`_${decryptFn}`](inputPtr, length, outLenPtr);\n wasmModule._free(inputPtr);\n\n if (!outPtr) {\n wasmModule._free(outLenPtr);\n throw new Error(`Decryption failed: ${modelId}`);\n }\n\n const outLen = readU32(wasmModule, outLenPtr);\n wasmModule._free(outLenPtr);\n\n const result = new Uint8Array(outLen);\n result.set(wasmModule.HEAPU8.subarray(outPtr, outPtr + outLen));\n wasmModule[`_${freeFn}`](outPtr);\n return result.buffer;\n}\n\nfunction readU32(mod, ptr) {\n return (\n mod.HEAPU8[ptr] |\n (mod.HEAPU8[ptr + 1] << 8) |\n (mod.HEAPU8[ptr + 2] << 16) |\n (mod.HEAPU8[ptr + 3] << 24)\n );\n}\n\nfunction defineVmGlobal(name, getter) {\n try {\n delete window[name];\n } catch (_) {}\n Object.defineProperty(window, name, {\n get: getter,\n set() {},\n configurable: true,\n });\n}\n\nexport function setFaceData(faceData) {\n _faceData = faceData;\n defineVmGlobal('__vmFaceData', () => _faceData);\n}\n\nexport function setChallengeParams(params) {\n _challengeParams = params;\n defineVmGlobal('__vmChallenge', () => _challengeParams);\n}\n\nexport function registerBridge(bridge) {\n _bridge = Object.freeze({ ...bridge });\n defineVmGlobal('__vmBridge', () => _bridge);\n}\n\nexport function unregisterBridge() {\n _bridge = null;\n try {\n delete window.__vmBridge;\n } catch (_) {}\n}\n\nexport function executeChallenge() {\n if (!wasmModule || !challengeBundle) {\n throw new Error('VM not loaded');\n }\n\n const execFn = vmSession.exports.vm_exec_bytecode;\n const freeFn = vmSession.exports.vm_free;\n const length = challengeBundle.length;\n\n const inputPtr = wasmModule._malloc(length);\n wasmModule.HEAPU8.set(challengeBundle, inputPtr);\n\n const outLenPtr = wasmModule._malloc(4);\n const outPtr = wasmModule[`_${execFn}`](inputPtr, length, outLenPtr);\n wasmModule._free(inputPtr);\n\n if (!outPtr) {\n wasmModule._free(outLenPtr);\n const errFn = vmSession.exports.vm_last_error;\n let message = 'VM execution failed';\n if (errFn) {\n const errPtr = wasmModule[`_${errFn}`]();\n if (errPtr) {\n const detail = wasmModule.UTF8ToString(errPtr);\n if (detail) message = detail;\n }\n }\n throw new Error(message);\n }\n\n const outLen = readU32(wasmModule, outLenPtr);\n wasmModule._free(outLenPtr);\n\n const result = new Uint8Array(outLen);\n result.set(wasmModule.HEAPU8.subarray(outPtr, outPtr + outLen));\n wasmModule[`_${freeFn}`](outPtr);\n return result;\n}\n\nexport function toBase64(bytes) {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nexport function destroyVM() {\n if (!wasmModule || !vmSession) return;\n\n const destroyFn = vmSession.exports.vm_destroy;\n if (destroyFn) {\n wasmModule[`_${destroyFn}`]();\n }\n\n wasmModule = null;\n vmSession = null;\n challengeBundle = null;\n _faceData = null;\n _challengeParams = null;\n _bridge = null;\n\n for (const name of ['__vmFaceData', '__vmChallenge', '__vmBridge']) {\n try {\n delete window[name];\n } catch (_) {}\n }\n}\n\nexport function isVMLoaded() {\n return wasmModule !== null && vmSession !== null;\n}\n\nconst decryptedCache = new Map();\n\nasync function decryptAndCache(session, modelId) {\n if (decryptedCache.has(modelId)) {\n return decryptedCache.get(modelId);\n }\n\n const buffer = await decryptModel(session, modelId);\n decryptedCache.set(modelId, buffer);\n return buffer;\n}\n\nexport async function ensureModels(session, onProgress) {\n await decryptAndCache(session, 'mediapipe');\n onProgress?.(1);\n}\n\nexport async function getMediaPipeModelBuffer(session) {\n return decryptAndCache(session, 'mediapipe');\n}\n\nexport function clearModelCache() {\n decryptedCache.clear();\n}\n","import { loadVision, loadModel, initTracker, track, destroyTracker } from './face-tracker.js';\nimport { startPositioning } from './positioning.js';\nimport { initAgeEstimator, estimateAgeBurst } from './age-estimator.js';\nimport {\n createSession as createLivenessSession,\n processFrame,\n isComplete,\n isPassed,\n currentInstruction,\n currentTaskId,\n progress,\n} from './liveness.js';\nimport { createTransport } from './transport.js';\nimport {\n initVM,\n setFaceData,\n setChallengeParams,\n executeChallenge as execVM,\n registerBridge,\n unregisterBridge,\n destroyVM,\n toBase64,\n ensureModels,\n getMediaPipeModelBuffer,\n clearModelCache,\n} from './vm-client.js';\nimport {\n BURST_FRAMES,\n BURST_INTERVAL_MS,\n MAX_RETRIES,\n MOTION_CAPTURE_MS,\n MOTION_SAMPLE_MS,\n} from './constants.js';\n\nlet stream = null;\nlet videoElement = null;\n\nconst CAMERA_CONSTRAINTS = {\n video: {\n facingMode: 'user',\n width: { ideal: 640 },\n height: { ideal: 480 },\n },\n};\n\nexport function startCamera(video) {\n return navigator.mediaDevices.getUserMedia(CAMERA_CONSTRAINTS).then((s) => {\n stream = s;\n video.srcObject = stream;\n videoElement = video;\n\n return new Promise((resolve) => {\n video.onloadedmetadata = () => {\n video.play();\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n });\n };\n });\n });\n}\n\nexport function captureFrame() {\n if (!videoElement) return null;\n\n const canvas = document.createElement('canvas');\n canvas.width = videoElement.videoWidth;\n canvas.height = videoElement.videoHeight;\n\n const context = canvas.getContext('2d');\n context.drawImage(videoElement, 0, 0);\n return canvas;\n}\n\nexport function stopCamera() {\n if (stream) {\n stream.getTracks().forEach((track) => track.stop());\n stream = null;\n }\n if (videoElement) {\n videoElement.srcObject = null;\n videoElement = null;\n }\n}\n\nexport function isCameraActive() {\n return stream !== null && videoElement !== null;\n}\n\nfunction computeAge(ageResults) {\n if (!ageResults || ageResults.length === 0) return null;\n\n const ages = ageResults.map((r) => r.age).sort((a, b) => a - b);\n\n const trimmed = ages.length >= 3 ? ages.slice(1, -1) : ages;\n\n return trimmed.reduce((s, a) => s + a, 0) / trimmed.length;\n}\n\nconst TASK_LABELS = {\n 'turn-left': 'Turn your head left',\n 'turn-right': 'Turn your head right',\n nod: 'Nod your head',\n 'blink-twice': 'Blink twice',\n 'move-closer': 'Move closer then back',\n};\n\nfunction sleep(ms) {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nexport async function runChallenge(widget, emitter) {\n const mode = widget.params.mode || 'serverless';\n\n if (mode !== 'serverless' && !widget.params.sitekey) {\n const err = new Error('Configuration error');\n widget.showResult?.('fail', 'Verification failed');\n emitter.emit('error', err, widget.id);\n widget.params.errorCallback?.(err);\n return;\n }\n\n if (mode === 'serverless') {\n return runServerless(widget, emitter);\n }\n return runServer(widget, emitter);\n}\n\nasync function runServerless(widget, emitter) {\n const params = widget.params;\n let retryCount = 0;\n let modelBuffer = null;\n\n try {\n widget.openPopup();\n widget.setHeroStatus('Loading…');\n\n await Promise.all([loadVision(), initAgeEstimator()]);\n\n modelBuffer = await loadModel();\n widget.showReady();\n\n await waitForStart(widget);\n await startCameraFlow(widget, modelBuffer);\n\n const transport = createTransport('serverless', params);\n\n const attempt = async () => {\n widget.showLiveness();\n widget.setInstruction('');\n widget.setVideoStatus('Verifying…');\n\n const session = createLivenessSession();\n await runLivenessLoop(widget.popupElements.video, session, widget);\n\n if (session.failed || !isPassed(session)) {\n return { outcome: 'retry' };\n }\n\n widget.setInstruction('Hold still…');\n widget.setVideoStatus('Processing…');\n const frames = await captureFrameBurst(BURST_FRAMES, BURST_INTERVAL_MS);\n\n const ageResults = await estimateAgeBurst(frames);\n const estimatedAge = computeAge(ageResults);\n\n const result = await transport.verify({\n estimatedAge,\n livenessOk: true,\n });\n\n return {\n outcome: result.token ? 'pass' : 'fail',\n token: result.token,\n };\n };\n\n let result = await attempt();\n\n while (result.outcome === 'retry' && retryCount < MAX_RETRIES) {\n retryCount++;\n widget.showResult('retry', 'Please try again');\n await waitForStart(widget);\n await startCameraFlow(widget, modelBuffer);\n result = await attempt();\n }\n\n cleanupLocal();\n emitResult(widget, emitter, result);\n } catch (error) {\n cleanupLocal();\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', error, widget.id);\n params.errorCallback?.(error);\n }\n}\n\nasync function runServer(widget, emitter) {\n const params = widget.params;\n\n try {\n widget.openPopup();\n widget.setHeroStatus('Connecting…');\n\n const transport = createTransport(params.mode, params);\n const session = await transport.createSession();\n\n widget.setHeroStatus('Loading…');\n await initVM(session);\n\n widget.setHeroStatus('Preparing…');\n await ensureModels(session, () => {});\n\n await loadVision();\n const buf = await getMediaPipeModelBuffer(session);\n await initTracker(buf);\n\n registerBridge({\n trackFace: () => {\n const video = widget.popupElements?.video;\n if (!video) return 'null';\n const r = track(video, performance.now());\n if (!r) return 'null';\n return JSON.stringify({\n ts: r.timestampMs ?? performance.now(),\n faceCount: r.faceCount,\n headPose: r.headPose || null,\n blendshapes: r.blendshapes || null,\n boundingBox: r.boundingBox || null,\n });\n },\n captureFrame: () => (captureFrame() ? 'true' : 'null'),\n });\n\n widget.showReady();\n await waitForStart(widget);\n\n const video = widget.showCamera();\n widget.setVideoStatus('Requesting camera…');\n await startCamera(video);\n exposeMirrorVideo(video);\n\n widget.setVideoStatus('Position your face');\n await waitForPositioning(video, widget);\n\n widget.showLiveness();\n transport.openChannel();\n\n let challenge = await transport.receive();\n const rounds = session.rounds;\n\n for (let i = 0; i < rounds; i++) {\n if (!challenge) {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n if (challenge.type === 'verdict') {\n cleanupVM(transport);\n emitVerdict(widget, emitter, challenge);\n return;\n }\n\n if (challenge.type === 'timeout') {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n widget.setVideoStatus(`Step ${i + 1} of ${rounds}`);\n\n const task = challenge.token?.task;\n widget.setInstruction(TASK_LABELS[task] ?? 'Look at the camera');\n widget.setTask(task);\n widget.setProgress(i / rounds);\n\n const faceData = await captureMotion(widget);\n setFaceData(faceData);\n setChallengeParams(challenge.token);\n\n let vmOut;\n try {\n vmOut = execVM();\n } catch {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n const payload = {\n token: challenge.token,\n tokenSignature: challenge.tokenSignature,\n response: toBase64(vmOut),\n };\n\n const result = await transport.sendAndReceive(payload);\n\n if (!result) {\n cleanupVM(transport);\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n return;\n }\n\n if (result.complete) {\n cleanupVM(transport);\n emitVerdict(widget, emitter, result);\n return;\n }\n\n if (result.hint) {\n widget.setVideoStatus(result.hint);\n await sleep(1000);\n }\n\n challenge = result.nextChallenge || null;\n }\n\n cleanupVM(transport);\n } catch (error) {\n cleanupVM();\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', error, widget.id);\n params.errorCallback?.(error);\n }\n}\n\nfunction emitVerdict(widget, emitter, response) {\n const verdict = response?.verdict || response;\n const token = verdict?.token || null;\n const params = widget.params;\n\n if (token) {\n widget.token = token;\n widget.showResult('pass', 'Verified');\n emitter.emit('verified', token, widget.id);\n params.callback?.(token);\n return;\n }\n\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n params.errorCallback?.('failed');\n}\n\nasync function captureMotion(widget) {\n const video = widget.popupElements?.video;\n const history = [];\n const start = performance.now();\n\n while (performance.now() - start < MOTION_CAPTURE_MS) {\n const r = track(video, performance.now());\n if (r && r.faceCount === 1) {\n history.push({\n ts: r.timestampMs,\n headPose: r.headPose,\n blendshapes: r.blendshapes,\n boundingBox: r.boundingBox,\n });\n }\n await sleep(MOTION_SAMPLE_MS);\n }\n\n return {\n faceCount: history.length > 0 ? 1 : 0,\n motionHistory: history,\n };\n}\n\nfunction emitResult(widget, emitter, result) {\n const params = widget.params;\n\n if (result.outcome === 'pass') {\n widget.token = result.token || null;\n widget.showResult('pass', 'Verified');\n emitter.emit('verified', result.token, widget.id);\n params.callback?.(result.token);\n } else {\n widget.showResult('fail', 'Verification failed');\n emitter.emit('error', 'failed', widget.id);\n params.errorCallback?.('failed');\n }\n}\n\nfunction waitForStart(widget) {\n return new Promise((resolve) => {\n widget.onStartClick = () => {\n widget.onStartClick = null;\n resolve();\n };\n });\n}\n\nasync function startCameraFlow(widget, modelBuffer) {\n const video = widget.showCamera();\n widget.setVideoStatus('Requesting camera…');\n await startCamera(video);\n\n widget.setVideoStatus('Preparing…');\n await initTracker(modelBuffer);\n\n widget.setVideoStatus('Position your face');\n await waitForPositioning(video, widget);\n}\n\nfunction waitForPositioning(video, widget) {\n return new Promise((resolve, reject) => {\n const handle = startPositioning(video, {\n onStatus: (text) => widget.setVideoStatus(text),\n onReady: () => resolve(),\n });\n\n setTimeout(() => {\n handle.cancel();\n reject(new Error('Positioning timeout'));\n }, 30000);\n });\n}\n\nasync function runLivenessLoop(video, session, widget) {\n return new Promise((resolve) => {\n const loop = () => {\n const tracking = track(video, performance.now());\n if (tracking) processFrame(session, tracking);\n\n widget.setInstruction(currentInstruction(session) || 'Done');\n widget.setTask(currentTaskId(session));\n widget.setProgress(progress(session));\n widget.setVideoStatus(\n `Check ` +\n `${Math.min(session.currentIndex + 1, session.tasks.length)}` +\n ` of ${session.tasks.length}`\n );\n\n if (session.failed || isComplete(session)) {\n resolve();\n return;\n }\n\n requestAnimationFrame(loop);\n };\n\n requestAnimationFrame(loop);\n });\n}\n\nasync function captureFrameBurst(count, interval) {\n const frames = [];\n for (let i = 0; i < count; i++) {\n const frame = captureFrame();\n if (frame) frames.push(frame);\n if (i < count - 1) await sleep(interval);\n }\n return frames;\n}\n\nfunction cleanupLocal() {\n stopCamera();\n destroyTracker();\n}\n\nfunction cleanupVM(transport) {\n stopCamera();\n removeMirrorVideo();\n destroyTracker();\n unregisterBridge();\n destroyVM();\n clearModelCache();\n transport?.close();\n}\n\nfunction exposeMirrorVideo(source) {\n removeMirrorVideo();\n if (!source?.srcObject) return;\n const mirror = document.createElement('video');\n mirror.id = '__openage_mirror';\n mirror.srcObject = source.srcObject;\n mirror.autoplay = true;\n mirror.muted = true;\n mirror.playsInline = true;\n mirror.style.cssText =\n 'position:fixed;width:1px;height:1px;' + 'opacity:0;pointer-events:none;z-index:-1;';\n document.body.appendChild(mirror);\n}\n\nfunction removeMirrorVideo() {\n document.getElementById('__openage_mirror')?.remove();\n}\n","import { Widget, createModalWidget } from './widget.js';\nimport { runChallenge } from './challenge.js';\nimport { verifyToken, decodeToken } from './transport.js';\nimport { VERSION } from './constants.js';\n\nexport class EventEmitter {\n constructor() {\n this.listeners = new Map();\n }\n\n on(event, handler) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event).add(handler);\n return this;\n }\n\n off(event, handler) {\n const handlers = this.listeners.get(event);\n if (handlers) handlers.delete(handler);\n return this;\n }\n\n once(event, handler) {\n const wrapper = (...args) => {\n this.off(event, wrapper);\n handler(...args);\n };\n wrapper._original = handler;\n return this.on(event, wrapper);\n }\n\n emit(event, ...args) {\n const handlers = this.listeners.get(event);\n if (!handlers) return;\n for (const handler of [...handlers]) {\n handler(...args);\n }\n }\n\n removeAllListeners(event) {\n if (event) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n return this;\n }\n}\n\nconst emitter = new EventEmitter();\nconst widgets = new Map();\n\nfunction normalizeParams(params) {\n const globalConfig = typeof window !== 'undefined' ? window.openage || {} : {};\n\n return {\n mode: 'serverless',\n theme: 'auto',\n size: 'normal',\n minAge: 18,\n ...globalConfig,\n ...params,\n };\n}\n\nfunction startWidget(widget) {\n widget.onChallenge = () => {\n emitter.emit('opened', widget.id);\n runChallenge(widget, emitter);\n };\n}\n\nfunction render(container, params = {}) {\n const normalized = normalizeParams(params);\n const widget = new Widget(container, normalized);\n widgets.set(widget.id, widget);\n startWidget(widget);\n return widget.id;\n}\n\nfunction open(params = {}) {\n const normalized = normalizeParams(params);\n const widget = createModalWidget(normalized);\n widget.anchorElement = normalized.anchorElement || null;\n widgets.set(widget.id, widget);\n\n widget.onChallenge = () => {\n emitter.emit('opened', widget.id);\n runChallenge(widget, emitter);\n };\n\n widget.startChallenge();\n return widget.id;\n}\n\nfunction bind(element, params = {}) {\n const normalized = normalizeParams(params);\n const target = typeof element === 'string' ? document.querySelector(element) : element;\n\n if (!target) {\n throw new Error('OpenAge: element not found');\n }\n\n let isReplayingClick = false;\n let activeWidgetId = null;\n\n const replayTargetClick = () => {\n isReplayingClick = true;\n try {\n target.click();\n } finally {\n isReplayingClick = false;\n }\n };\n\n const clearActiveWidget = () => {\n activeWidgetId = null;\n };\n\n const handler = (event) => {\n if (isReplayingClick || activeWidgetId) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation?.();\n\n const widgetId = open({\n ...normalized,\n anchorElement: target,\n callback: (token) => {\n normalized.callback?.(token);\n clearActiveWidget();\n replayTargetClick();\n },\n errorCallback: (error) => {\n clearActiveWidget();\n normalized.errorCallback?.(error);\n },\n closeCallback: () => {\n clearActiveWidget();\n normalized.closeCallback?.();\n },\n });\n\n activeWidgetId = widgetId;\n\n return widgetId;\n };\n\n target.addEventListener('click', handler, true);\n\n return () => {\n target.removeEventListener('click', handler, true);\n };\n}\n\nfunction reset(widgetId) {\n widgets.get(widgetId)?.reset();\n}\n\nfunction remove(widgetId) {\n const widget = widgets.get(widgetId);\n if (!widget) return;\n widget.destroy();\n widgets.delete(widgetId);\n}\n\nfunction getToken(widgetId) {\n return widgets.get(widgetId)?.getToken() || null;\n}\n\nfunction execute(widgetId) {\n const widget = widgets.get(widgetId);\n if (!widget) return;\n widget.startChallenge();\n}\n\nfunction challenge(params = {}) {\n return new Promise((resolve, reject) => {\n open({\n ...params,\n callback: (token) => resolve(token),\n errorCallback: (error) => reject(typeof error === 'string' ? new Error(error) : error),\n closeCallback: () => reject(new Error('User dismissed')),\n });\n });\n}\n\nfunction on(event, handler) {\n emitter.on(event, handler);\n}\n\nfunction off(event, handler) {\n emitter.off(event, handler);\n}\n\nfunction once(event, handler) {\n emitter.once(event, handler);\n}\n\nfunction autoRender() {\n if (typeof document === 'undefined') return;\n\n const globalConfig = typeof window !== 'undefined' ? window.openage || {} : {};\n\n if (globalConfig.render === 'explicit') return;\n\n const elements = document.querySelectorAll('.openage');\n\n for (const element of elements) {\n const params = {\n sitekey: element.dataset.sitekey,\n theme: element.dataset.theme,\n size: element.dataset.size,\n action: element.dataset.action,\n mode: element.dataset.mode,\n server: element.dataset.server,\n };\n\n if (element.dataset.callback) {\n params.callback = (token) => {\n const fn = window[element.dataset.callback];\n if (typeof fn === 'function') fn(token);\n };\n }\n\n if (element.dataset.errorCallback) {\n params.errorCallback = (error) => {\n const fn = window[element.dataset.errorCallback];\n if (typeof fn === 'function') fn(error);\n };\n }\n\n if (element.dataset.expiredCallback) {\n params.expiredCallback = () => {\n const fn = window[element.dataset.expiredCallback];\n if (typeof fn === 'function') fn();\n };\n }\n\n if (element.dataset.bind) {\n const target = document.getElementById(element.dataset.bind);\n if (target) {\n bind(target, params);\n continue;\n }\n }\n\n render(element, params);\n }\n\n const onloadName = document.currentScript?.dataset?.onload;\n if (onloadName && typeof window[onloadName] === 'function') {\n window[onloadName]();\n }\n}\n\nif (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoRender);\n } else {\n autoRender();\n }\n}\n\nconst OpenAge = {\n render,\n open,\n bind,\n reset,\n remove,\n getToken,\n execute,\n challenge,\n on,\n off,\n once,\n verify: verifyToken,\n decode: decodeToken,\n version: VERSION,\n};\n\nexport default OpenAge;\nexport {\n render,\n open,\n bind,\n reset,\n remove,\n getToken,\n execute,\n challenge,\n on,\n off,\n once,\n verifyToken as verify,\n decodeToken as decode,\n VERSION as version,\n};\n"],"names":["loadScript","createLivenessSession","execVM"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAA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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).OpenAge={})}(this,function(e){"use strict";const n='<svg viewBox="0 0 100 120"\n fill="none" class="oa-face-svg">\n <ellipse cx="50" cy="55" rx="35" ry="45"\n stroke="currentColor" stroke-width="1.8"/>\n <ellipse cx="36" cy="45" rx="5" ry="3.5"\n fill="currentColor" class="oa-eye"/>\n <ellipse cx="64" cy="45" rx="5" ry="3.5"\n fill="currentColor" class="oa-eye"/>\n <line x1="50" y1="52" x2="48" y2="62"\n stroke="currentColor" stroke-width="1.5"\n stroke-linecap="round"/>\n <path d="M40 72 Q50 79 60 72"\n stroke="currentColor" stroke-width="1.5"\n stroke-linecap="round" fill="none"/>\n</svg>';function t(e){return"light"===e||"dark"===e?e:a()}function o(e,n){if("light"===n||"dark"===n)return;if("undefined"==typeof window)return;const t=()=>{e.setAttribute("data-theme",a())},o=[];for(const e of["(prefers-color-scheme: dark)","(prefers-color-scheme: light)"]){const n=i(e,t);n&&o.push(n)}if("function"==typeof MutationObserver){const e=new MutationObserver(t),n={attributes:!0,attributeFilter:["class","data-theme","style"]};document.documentElement&&e.observe(document.documentElement,n),document.body&&e.observe(document.body,n),o.push(()=>e.disconnect())}return()=>{for(const e of o)e()}}function a(){if("undefined"==typeof window)return"dark";const e=function(){if("undefined"==typeof document)return null;for(const e of[document.documentElement,document.body]){const n=r(e);if(n)return n}return null}();if(e)return e;const n=function(){if("function"!=typeof window.matchMedia)return null;if(window.matchMedia("(prefers-color-scheme: dark)").matches)return"dark";if(window.matchMedia("(prefers-color-scheme: light)").matches)return"light";return null}();return n||"dark"}function r(e){if(!e||"function"!=typeof window.getComputedStyle)return null;const n=function(e){const n=e.getAttribute("data-theme");if("light"===n||"dark"===n)return n;const t=e.className;if("string"!=typeof t)return null;if(/\bdark\b|theme-dark|dark-theme/i.test(t))return"dark";if(/\blight\b|theme-light|light-theme/i.test(t))return"light";return null}(e);if(n)return n;const t=window.getComputedStyle(e),o=function(e){if(!e||"normal"===e)return null;const n=e.toLowerCase(),t=n.includes("dark"),o=n.includes("light");return t&&!o?"dark":o&&!t?"light":null}(t.colorScheme);return o||function(e){if(!e||"transparent"===e)return null;const n=e.match(/rgba?\(([^)]+)\)/i);if(!n)return null;const t=n[1].split(",").slice(0,3).map(e=>Number.parseFloat(e.trim()));if(3!==t.length||t.some(Number.isNaN))return null;const[o,a,r]=t,i=(299*o+587*a+114*r)/1e3;return i<=140?"dark":i>=180?"light":null}(t.backgroundColor)}function i(e,n){if("function"!=typeof window.matchMedia)return null;const t=window.matchMedia(e);return"function"==typeof t.addEventListener?(t.addEventListener("change",n),()=>{t.removeEventListener("change",n)}):"function"==typeof t.addListener?(t.addListener(n),()=>{t.removeListener(n)}):null}const s='\n:host {\n --oa-bg: #0b0d11;\n --oa-surface: #14161d;\n --oa-border: #1f2230;\n --oa-text: #e8e8ed;\n --oa-text-muted: #7a7d8c;\n --oa-accent: #4ae68a;\n --oa-accent-dim: rgba(74, 230, 138, 0.12);\n --oa-danger: #ef4444;\n --oa-warn: #f59e0b;\n --oa-radius: 16px;\n --oa-font: \'DM Sans\', system-ui, -apple-system,\n sans-serif;\n --oa-mono: \'Space Mono\', monospace;\n\n display: block;\n font-family: var(--oa-font);\n color: var(--oa-text);\n line-height: 1.4;\n}\n\n:host([data-theme="light"]) {\n --oa-bg: #f8f9fb;\n --oa-surface: #ffffff;\n --oa-border: #e2e4ea;\n --oa-text: #1a1c24;\n --oa-text-muted: #6b6e7b;\n --oa-accent: #22c55e;\n --oa-accent-dim: rgba(34, 197, 94, 0.1);\n}\n\n* { box-sizing: border-box; margin: 0; padding: 0; }\n\n/* ── Checkbox ────────────────────────────────── */\n\n.oa-checkbox {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n background: var(--oa-surface);\n border: 2px solid var(--oa-border);\n border-radius: var(--oa-radius);\n cursor: pointer;\n user-select: none;\n transition: border-color 0.2s, box-shadow 0.2s;\n}\n\n.oa-checkbox:hover {\n border-color: var(--oa-text-muted);\n}\n\n.oa-checkbox.oa-verified {\n border-color: var(--oa-accent);\n cursor: default;\n}\n\n.oa-checkbox.oa-failed {\n border-color: var(--oa-danger);\n}\n\n.oa-checkbox.oa-retry {\n border-color: var(--oa-danger);\n}\n\n.oa-checkbox.oa-expired {\n border-color: var(--oa-warn);\n}\n\n.oa-checkbox.oa-loading {\n align-items: center;\n}\n\n.oa-check-box {\n width: 24px;\n height: 24px;\n border: 2px solid var(--oa-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.2s;\n}\n\n.oa-loading .oa-check-box {\n border-color: transparent;\n background: transparent;\n}\n\n.oa-loading .oa-check-box .oa-spinner {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n transform: translateY(2px);\n}\n\n.oa-verified .oa-check-box {\n background: var(--oa-accent);\n border-color: var(--oa-accent);\n color: var(--oa-bg);\n}\n\n.oa-failed .oa-check-box {\n background: var(--oa-danger);\n border-color: var(--oa-danger);\n color: white;\n}\n\n.oa-retry .oa-check-box {\n background: var(--oa-danger);\n border-color: var(--oa-danger);\n color: white;\n}\n\n.oa-check-box svg {\n width: 14px;\n height: 14px;\n}\n\n.oa-check-box .oa-spinner svg {\n width: 18px;\n height: 18px;\n}\n\n.oa-label {\n display: flex;\n flex-direction: column;\n gap: 1px;\n flex: 1;\n min-width: 0;\n}\n\n.oa-label-text {\n font-size: 13px;\n font-weight: 600;\n}\n\n.oa-right-section {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.oa-face-icon-wrap {\n width: 18px;\n height: 22px;\n color: var(--oa-text-muted);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.oa-face-icon-wrap .oa-face-icon-svg {\n width: 100%;\n height: 100%;\n}\n\n.oa-face-icon-wrap .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n animation: oa-idle-blink 5s ease-in-out infinite;\n}\n\n.oa-face-icon-wrap .oa-face-icon-svg {\n animation: oa-breathe 4s ease-in-out infinite;\n}\n\n.oa-branding-row {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n}\n\n.oa-branding-link {\n font-size: 10px;\n font-weight: 700;\n font-family: var(--oa-mono);\n color: var(--oa-text-muted);\n text-decoration: none;\n letter-spacing: -0.02em;\n cursor: pointer;\n}\n\n.oa-branding-link:hover {\n color: var(--oa-text);\n}\n\n.oa-links-row {\n display: flex;\n gap: 6px;\n justify-content: center;\n}\n\n.oa-links-row a {\n font-size: 9px;\n color: var(--oa-text-muted);\n text-decoration: none;\n opacity: 0.7;\n cursor: pointer;\n}\n\n.oa-links-row a:hover {\n opacity: 1;\n text-decoration: underline;\n}\n\n.oa-compact .oa-label-text {\n font-size: 11px;\n}\n\n.oa-compact .oa-face-icon-wrap {\n width: 16px;\n height: 20px;\n}\n\n/* ── Error banner (inline in checkbox) ───────── */\n\n.oa-error-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n margin-top: 6px;\n background: rgba(239, 68, 68, 0.08);\n border: 1px solid rgba(239, 68, 68, 0.2);\n border-radius: 8px;\n font-size: 12px;\n color: var(--oa-danger);\n animation: oa-fade-in 0.3s ease;\n}\n\n.oa-error-banner button {\n margin-left: auto;\n background: none;\n border: 1px solid var(--oa-danger);\n border-radius: 6px;\n color: var(--oa-danger);\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n cursor: pointer;\n font-family: var(--oa-font);\n flex-shrink: 0;\n}\n\n.oa-error-banner button:hover {\n background: rgba(239, 68, 68, 0.1);\n}\n\n/* ── Popup / Modal shell ─────────────────────── */\n\n.oa-popup {\n position: fixed;\n z-index: 100000;\n background: var(--oa-bg);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n box-shadow: 0 20px 60px rgba(0,0,0,0.4),\n 0 0 0 1px rgba(0,0,0,0.08);\n width: 340px;\n max-height: 90vh;\n overflow: hidden;\n animation: oa-popup-in 0.25s ease;\n display: flex;\n flex-direction: column;\n}\n\n.oa-modal-overlay {\n position: fixed;\n inset: 0;\n z-index: 99999;\n background: rgba(0,0,0,0.65);\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oa-fade-in 0.2s ease;\n backdrop-filter: blur(6px);\n}\n\n.oa-modal {\n background: var(--oa-bg);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n width: 360px;\n max-width: 95vw;\n max-height: 95vh;\n overflow: hidden;\n animation: oa-slide-in 0.3s ease;\n display: flex;\n flex-direction: column;\n}\n\n/* ── Header ──────────────────────────────────── */\n\n.oa-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n border-bottom: 1px solid var(--oa-border);\n flex-shrink: 0;\n}\n\n.oa-logo {\n font-family: var(--oa-mono);\n font-size: 0.85rem;\n letter-spacing: -0.03em;\n color: var(--oa-text-muted);\n text-decoration: none;\n cursor: pointer;\n}\n\n.oa-logo:hover {\n color: var(--oa-text);\n}\n\n.oa-logo strong {\n color: var(--oa-text);\n font-weight: 700;\n}\n\n.oa-badge {\n font-size: 0.55rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--oa-accent);\n background: var(--oa-accent-dim);\n padding: 2px 6px;\n border-radius: 100px;\n margin-left: 6px;\n}\n\n.oa-title {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.oa-close-btn {\n width: 28px;\n height: 28px;\n border: none;\n background: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n color: var(--oa-text-muted);\n transition: background 0.15s, color 0.15s;\n}\n\n.oa-close-btn:hover {\n background: var(--oa-border);\n color: var(--oa-text);\n}\n\n.oa-close-btn svg {\n width: 16px;\n height: 16px;\n}\n\n/* ── Body (viewport) ─────────────────────────── */\n\n.oa-body {\n flex: 1;\n position: relative;\n overflow: hidden;\n}\n\n/* ── Hero / start screen ─────────────────────── */\n\n.oa-hero {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n padding: 2rem 1.2rem 1.2rem;\n background: var(--oa-surface);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n margin: 10px;\n animation: oa-fade-in 0.4s ease;\n}\n\n.oa-hero-icon {\n width: 80px;\n height: 96px;\n color: var(--oa-text-muted);\n}\n\n.oa-hero-icon .oa-face-svg.oa-idle {\n animation: oa-breathe 4s ease-in-out infinite;\n}\n\n.oa-hero-icon .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n animation: oa-idle-blink 5s ease-in-out infinite;\n}\n\n.oa-hero-status {\n color: var(--oa-text-muted);\n font-size: 0.8rem;\n font-weight: 500;\n text-align: center;\n min-height: 1.4em;\n}\n\n.oa-hero-privacy {\n font-size: 0.68rem;\n color: var(--oa-text-muted);\n text-align: center;\n line-height: 1.5;\n max-width: 260px;\n opacity: 0.7;\n}\n\n.oa-hero-privacy svg {\n width: 10px;\n height: 10px;\n vertical-align: -2px;\n margin-right: 2px;\n}\n\n/* ── Start / Retry button ────────────────────── */\n\n.oa-actions {\n display: flex;\n justify-content: center;\n padding: 0 14px 14px;\n flex-shrink: 0;\n}\n\n.oa-btn {\n font-family: var(--oa-font);\n padding: 0.55rem 1.5rem;\n border: none;\n border-radius: 10px;\n font-size: 0.8rem;\n font-weight: 600;\n cursor: pointer;\n background: var(--oa-accent);\n color: var(--oa-bg);\n transition: transform 0.12s, opacity 0.15s;\n width: 100%;\n max-width: 240px;\n}\n\n.oa-btn:hover { opacity: 0.88; }\n.oa-btn:active { transform: scale(0.97); }\n\n/* ── Video area ──────────────────────────────── */\n\n.oa-video-area {\n position: relative;\n width: 100%;\n aspect-ratio: 3/4;\n max-height: 55vh;\n background: var(--oa-surface);\n overflow: hidden;\n border-radius: var(--oa-radius);\n margin: 10px;\n width: calc(100% - 20px);\n border: 1px solid var(--oa-border);\n animation: oa-fade-in 0.3s ease;\n}\n\n.oa-video-area video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transform: scaleX(-1);\n}\n\n/* ── Face guide overlay ──────────────────────── */\n\n.oa-face-guide {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 80%;\n max-width: 360px;\n aspect-ratio: 5/6;\n perspective: 400px;\n color: rgba(255, 255, 255, 0.45);\n pointer-events: none;\n z-index: 2;\n transition: opacity 0.4s ease;\n}\n\n.oa-face-guide .oa-face-svg {\n width: 100%;\n height: 100%;\n transform-origin: center center;\n filter: drop-shadow(\n 0 0 16px rgba(15, 23, 42, 0.16)\n );\n}\n\n.oa-face-guide .oa-eye {\n transform-box: fill-box;\n transform-origin: center;\n}\n\n.oa-face-guide[data-task="turn-left"] .oa-face-svg {\n animation: oa-turn-left 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task="turn-right"] .oa-face-svg {\n animation: oa-turn-right 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task="nod"] .oa-face-svg {\n animation: oa-nod 2s ease-in-out infinite;\n}\n.oa-face-guide[data-task="blink-twice"] .oa-eye {\n animation: oa-blink 2.4s ease-in-out infinite;\n}\n.oa-face-guide[data-task="move-closer"] .oa-face-svg {\n animation: oa-closer 2.5s ease-in-out infinite;\n}\n\n/* ── Challenge HUD (bottom gradient overlay) ── */\n\n.oa-challenge-hud {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1rem 0.8rem 0.6rem;\n background: linear-gradient(\n to top,\n rgba(11, 13, 17, 0.92) 0%,\n rgba(11, 13, 17, 0) 100%\n );\n z-index: 3;\n pointer-events: none;\n}\n\n.oa-challenge-text {\n font-size: 0.85rem;\n font-weight: 600;\n text-align: center;\n color: var(--oa-text);\n text-shadow: 0 1px 6px rgba(0, 0, 0, 0.7);\n margin-bottom: 0.4rem;\n}\n\n.oa-challenge-bar {\n height: 3px;\n background: rgba(255, 255, 255, 0.1);\n border-radius: 2px;\n overflow: hidden;\n}\n\n.oa-challenge-fill {\n height: 100%;\n background: var(--oa-accent);\n border-radius: 2px;\n transition: width 0.25s ease;\n}\n\n/* ── Video status (top gradient overlay) ─────── */\n\n.oa-video-status {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n padding: 0.8rem 0.8rem 1.2rem;\n background: linear-gradient(\n to bottom,\n rgba(11, 13, 17, 0.85) 0%,\n rgba(11, 13, 17, 0) 100%\n );\n z-index: 3;\n pointer-events: none;\n}\n\n.oa-video-status p {\n font-size: 0.75rem;\n font-weight: 500;\n text-align: center;\n color: var(--oa-text-muted);\n text-shadow: 0 1px 4px rgba(0, 0, 0, 0.5);\n}\n\n/* ── Result area ─────────────────────────────── */\n\n.oa-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n padding: 2rem 1.2rem;\n background: var(--oa-surface);\n border: 1px solid var(--oa-border);\n border-radius: var(--oa-radius);\n margin: 10px;\n animation: oa-fade-in 0.4s ease;\n}\n\n.oa-result-icon {\n font-size: 2.4rem;\n line-height: 1;\n}\n\n.oa-result-text {\n font-size: 0.85rem;\n font-weight: 500;\n text-align: center;\n}\n\n.oa-result-pass { color: var(--oa-accent); }\n.oa-result-fail { color: var(--oa-danger); }\n.oa-result-retry { color: var(--oa-warn); }\n\n.oa-hidden { display: none !important; }\n\n/* ── Animations ──────────────────────────────── */\n\n@keyframes oa-popup-in {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n}\n\n@keyframes oa-fade-in {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes oa-slide-in {\n from { opacity: 0; transform: translateY(16px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes oa-breathe {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.04); }\n}\n\n@keyframes oa-idle-blink {\n 0%, 42%, 48%, 100% { transform: scaleY(1); }\n 44%, 46% { transform: scaleY(0.05); }\n}\n\n@keyframes oa-turn-left {\n 0%, 100% { transform: rotateY(0); }\n 35%, 65% { transform: rotateY(-30deg); }\n}\n\n@keyframes oa-turn-right {\n 0%, 100% { transform: rotateY(0); }\n 35%, 65% { transform: rotateY(30deg); }\n}\n\n@keyframes oa-nod {\n 0%, 100% { transform: rotateX(0); }\n 30%, 50% { transform: rotateX(25deg); }\n}\n\n@keyframes oa-blink {\n 0%, 18%, 32%, 50%, 100% { transform: scaleY(1); }\n 22%, 28% { transform: scaleY(0.05); }\n 40%, 46% { transform: scaleY(0.05); }\n}\n\n@keyframes oa-closer {\n 0%, 100% { transform: scale(1); }\n 35%, 55% { transform: scale(1.3); }\n}\n';function l(e){return`\n <div class="oa-hero">\n <div class="oa-hero-icon">\n ${n.replace('class="oa-face-svg"','class="oa-face-svg oa-idle"')}\n </div>\n <p class="oa-hero-status">${e}</p>\n <p class="oa-hero-privacy">\n <svg viewBox="0 0 24 24"\n fill="none" stroke="currentColor" stroke-width="1.5">\n <path d="M12 2l8 4v6c0 5.5-3.8 10-8 12\n C7.8 22 4 17.5 4 12V6l8-4z"/>\n <path d="M9 12l2 2 4-4" stroke-width="2"\n stroke-linecap="round" stroke-linejoin="round"/>\n</svg>\n Open-source & privacy-focused.\n No photos or camera data leave your device.\n </p>\n </div>\n `}function c(e,n){return`\n <div class="oa-result ${{fail:"oa-result-fail",retry:"oa-result-retry"}[e]||""}">\n <div class="oa-result-icon">\n ${{fail:"✕",retry:"↻"}[e]||"?"}\n </div>\n <div class="oa-result-text">${n}</div>\n </div>\n `}const d="1.0.0",u="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.17",p=`${u}/wasm`,h=`${u}/vision_bundle.mjs`,f="https://cdn.jsdelivr.net/npm/face-api.js@0.22.2/weights",m=12;let g=0;class v{constructor(e,n){this.id="oa-"+ ++g,this.params=n,this.container=function(e){if("string"==typeof e)return document.querySelector(e);return e}(e),this.anchorElement=null,this.state="idle",this.token=null,this.popup=null,this.shadow=null,this.elements={},this.onChallenge=null,this.onStartClick=null,this.popupFrame=0,this.themeCleanup=null,this.render()}render(){const e=document.createElement("div");e.id=this.id,this.shadow=e.attachShadow({mode:"open"});const n=document.createElement("style");n.textContent=s,this.shadow.appendChild(n);const a=t(this.params.theme);if(e.setAttribute("data-theme",a),this.themeCleanup=o(e,this.params.theme),"invisible"===this.params.size)return e.style.display="none",this.container.appendChild(e),void(this.host=e);const r=document.createElement("div");r.innerHTML=`\n <div class="oa-widget-wrap">\n <div class="oa-checkbox" role="checkbox"\n aria-checked="false" tabindex="0">\n <div class="oa-check-box"></div>\n <div class="oa-label">\n <span class="oa-label-text">${"I am of age"}</span>\n </div>\n <div class="oa-right-section">\n <div class="oa-branding-row">\n <div class="oa-face-icon-wrap">\n <svg viewBox="0 0 100 120"\n fill="none" class="oa-face-icon-svg">\n <ellipse cx="50" cy="55" rx="35" ry="45"\n stroke="currentColor" stroke-width="2"/>\n <ellipse cx="36" cy="45" rx="5" ry="3.5"\n fill="currentColor" class="oa-eye"/>\n <ellipse cx="64" cy="45" rx="5" ry="3.5"\n fill="currentColor" class="oa-eye"/>\n <line x1="50" y1="52" x2="48" y2="62"\n stroke="currentColor" stroke-width="1.65"\n stroke-linecap="round"/>\n <path d="M40 72 Q50 79 60 72"\n stroke="currentColor" stroke-width="1.65"\n stroke-linecap="round" fill="none"/>\n</svg>\n </div>\n <a class="oa-branding-link"\n href="https://github.com/tn3w/OpenAge"\n target="_blank" rel="noopener">OpenAge</a>\n </div>\n <div class="oa-links-row">\n <a href="https://github.com/tn3w/OpenAge"\n target="_blank"\n rel="noopener">Terms</a>\n <a href="https://github.com/tn3w/OpenAge"\n target="_blank"\n rel="noopener">Privacy</a>\n </div>\n </div>\n </div>\n <div class="oa-error-slot"></div>\n </div>\n `,this.shadow.appendChild(r.firstElementChild);const i=this.shadow.querySelector(".oa-checkbox");"compact"===this.params.size&&i.classList.add("oa-compact"),i.addEventListener("click",e=>{e.target.closest("a")||"verified"!==this.state&&"loading"!==this.state&&(this.clearError(),this.startChallenge())}),i.addEventListener("keydown",e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),i.click())}),this.elements.checkbox=i,this.elements.checkBox=this.shadow.querySelector(".oa-check-box"),this.elements.errorSlot=this.shadow.querySelector(".oa-error-slot"),this.container.appendChild(e),this.host=e}startChallenge(){this.setState("loading"),this.onChallenge&&this.onChallenge(this)}createPopupShell(){const e=t(this.params.theme),n=document.createElement("div");n.setAttribute("data-theme",e);const a=n.attachShadow({mode:"open"}),r=document.createElement("style");r.textContent=s,a.appendChild(r);return{popupHost:n,popupShadow:a,themeCleanup:o(n,this.params.theme)}}openPopup(){if(this.popup)return this.getVideo();const e=this.getPopupAnchor();if(!e)return this.openModal();const{popupHost:n,popupShadow:t,themeCleanup:o}=this.createPopupShell(),a=document.createElement("div");a.className="oa-popup",a.innerHTML=this.buildPopupContent(),a.style.visibility="hidden",a.style.pointerEvents="none",t.appendChild(a),document.body.appendChild(n),this.popup={anchor:e,host:n,root:a,themeCleanup:o};return"modal"===y(e.getBoundingClientRect(),a.getBoundingClientRect()).mode?(n.remove(),o?.(),this.popup=null,this.openModal()):(this.bindPopupEvents(a,t),this.updatePopupPosition(),this.startPopupTracking(),this.getVideo())}openModal(){const{popupHost:e,popupShadow:n,themeCleanup:t}=this.createPopupShell(),o=document.createElement("div");o.className="oa-modal-overlay";const a=document.createElement("div");return a.className="oa-modal",a.innerHTML=this.buildPopupContent(),o.appendChild(a),n.appendChild(o),document.body.appendChild(e),o.addEventListener("click",e=>{e.target===o&&this.closePopup()}),this.popup={host:e,root:a,overlay:o,themeCleanup:t},this.bindPopupEvents(a,n),this.getVideo()}getPopupAnchor(){return this.anchorElement||this.elements.checkbox||this.host||null}startPopupTracking(){if(!this.popup||this.popup.overlay)return;const e=()=>{this.schedulePopupPosition()},n=[],t=(t,o)=>{window.addEventListener(t,e,o),n.push(()=>{window.removeEventListener(t,e,o)})};if(t("resize",{passive:!0}),t("scroll",{capture:!0,passive:!0}),window.visualViewport){const t=window.visualViewport;t.addEventListener("resize",e),t.addEventListener("scroll",e),n.push(()=>{t.removeEventListener("resize",e),t.removeEventListener("scroll",e)})}if("function"==typeof ResizeObserver){const t=new ResizeObserver(()=>{e()});t.observe(this.popup.root),t.observe(this.popup.anchor),t.observe(document.documentElement),document.body&&t.observe(document.body),n.push(()=>t.disconnect())}this.popup.cleanup=()=>{this.popupFrame&&(cancelAnimationFrame(this.popupFrame),this.popupFrame=0);for(const e of n)e()}}schedulePopupPosition(){this.popup&&!this.popup.overlay&&(this.popupFrame||(this.popupFrame=requestAnimationFrame(()=>{this.popupFrame=0,this.updatePopupPosition()})))}updatePopupPosition(){if(!this.popup||this.popup.overlay)return;const e=this.getPopupAnchor();if(!e||!e.isConnected)return void this.closePopup();this.popup.anchor=e;const n=y(e.getBoundingClientRect(),this.popup.root.getBoundingClientRect());if("modal"===n.mode)return this.closePopup(),void this.openModal();const t=`${Math.round(n.top)}px`,o=`${Math.round(n.left)}px`;this.popup.root.style.top!==t&&(this.popup.root.style.top=t),this.popup.root.style.left!==o&&(this.popup.root.style.left=o),this.popup.root.dataset.placement=n.placement,this.popup.root.style.visibility="visible",this.popup.root.style.pointerEvents="auto"}buildPopupContent(){return`\n <div class="oa-header">\n <div class="oa-title">\n <a class="oa-logo"\n href="https://github.com/tn3w/OpenAge"\n target="_blank" rel="noopener">\n Open<strong>Age</strong>\n </a>\n <span class="oa-badge">on-device</span>\n </div>\n <button class="oa-close-btn"\n aria-label="Close">\n <svg viewBox="0 0 24 24"\n fill="none" stroke="currentColor" stroke-width="2"\n stroke-linecap="round">\n <line x1="18" y1="6" x2="6" y2="18"/>\n <line x1="6" y1="6" x2="18" y2="18"/>\n</svg>\n </button>\n </div>\n <div class="oa-body">\n ${l("Initializing…")}\n </div>\n <div class="oa-actions oa-hidden">\n <button class="oa-btn oa-start-btn">\n Begin Verification\n </button>\n </div>\n `}bindPopupEvents(e,n){const t=e.querySelector(".oa-close-btn");t&&t.addEventListener("click",()=>{this.closePopup(),this.params.closeCallback?.()});const o=e.querySelector(".oa-start-btn");o&&o.addEventListener("click",()=>{this.onStartClick&&this.onStartClick()}),this.popupElements={body:e.querySelector(".oa-body"),actions:e.querySelector(".oa-actions"),startBtn:o,heroStatus:e.querySelector(".oa-hero-status")}}getVideo(){return this.popup?this.popup.root.querySelector("video"):null}showHero(e){this.popupElements?.body&&(this.popupElements.body.innerHTML=l(e),this.popupElements.heroStatus=this.popupElements.body.querySelector(".oa-hero-status"),this.hideActions())}showReady(){this.setHeroStatus("Ready to verify your age."),this.showActions("Begin Verification")}showCamera(){if(this.popupElements?.body)return this.popupElements.body.innerHTML='\n <div class="oa-video-area">\n <video autoplay playsinline muted></video>\n <div class="oa-face-guide">\n <svg viewBox="0 0 100 120"\n fill="none" class="oa-face-svg">\n <ellipse cx="50" cy="55" rx="35" ry="45"\n stroke="currentColor" stroke-width="1.8"\n stroke-dasharray="6 4"/>\n <ellipse cx="36" cy="45" rx="5" ry="3.5"\n fill="currentColor" class="oa-eye"/>\n <ellipse cx="64" cy="45" rx="5" ry="3.5"\n fill="currentColor" class="oa-eye"/>\n <line x1="50" y1="52" x2="48" y2="62"\n stroke="currentColor" stroke-width="1.5"\n stroke-linecap="round"/>\n <path d="M40 72 Q50 79 60 72"\n stroke="currentColor" stroke-width="1.5"\n stroke-linecap="round" fill="none"/>\n</svg>\n </div>\n <div class="oa-challenge-hud oa-hidden">\n <p class="oa-challenge-text"></p>\n <div class="oa-challenge-bar">\n <div class="oa-challenge-fill"\n style="width:0%"></div>\n </div>\n </div>\n <div class="oa-video-status">\n <p></p>\n </div>\n </div>\n ',this.popupElements.video=this.popupElements.body.querySelector("video"),this.popupElements.faceGuide=this.popupElements.body.querySelector(".oa-face-guide"),this.popupElements.challengeHud=this.popupElements.body.querySelector(".oa-challenge-hud"),this.popupElements.challengeText=this.popupElements.body.querySelector(".oa-challenge-text"),this.popupElements.challengeFill=this.popupElements.body.querySelector(".oa-challenge-fill"),this.popupElements.videoStatus=this.popupElements.body.querySelector(".oa-video-status p"),this.hideActions(),this.popupElements.video}showLiveness(){this.popupElements?.faceGuide&&this.popupElements.faceGuide.classList.remove("oa-hidden"),this.popupElements?.challengeHud&&this.popupElements.challengeHud.classList.remove("oa-hidden")}setHeroStatus(e){this.popupElements?.heroStatus&&(this.popupElements.heroStatus.textContent=e)}setVideoStatus(e){this.popupElements?.videoStatus&&(this.popupElements.videoStatus.textContent=e)}setInstruction(e){this.popupElements?.challengeText&&(this.popupElements.challengeText.textContent=e)}setStatus(e){this.setVideoStatus(e)}setProgress(e){this.popupElements?.challengeFill&&(this.popupElements.challengeFill.style.width=`${Math.round(100*e)}%`)}setTask(e){this.popupElements?.faceGuide&&this.popupElements.faceGuide.setAttribute("data-task",e||"")}showActions(e){this.popupElements?.actions&&(this.popupElements.actions.classList.remove("oa-hidden"),this.popupElements.startBtn&&(this.popupElements.startBtn.textContent=e))}hideActions(){this.popupElements?.actions&&this.popupElements.actions.classList.add("oa-hidden")}showResult(e,n){if("pass"===e)return this.closePopup(),void this.setState("verified");if("fail"!==e){if("retry"===e){if("invisible"!==this.params.size)return this.closePopup(),void this.setState("retry");this.popupElements?.body&&(this.popupElements.body.innerHTML=c(e,n)),this.hideActions(),this.showActions("Try Again")}}else"invisible"===this.params.size?(this.popupElements?.body&&(this.popupElements.body.innerHTML=c(e,n)),this.hideActions(),this.showActions("Try Again")):(this.closePopup(),this.setState("retry"))}showError(){this.setState("retry")}clearError(){this.elements.errorSlot&&(this.elements.errorSlot.innerHTML="")}closePopup(){this.popup&&(this.popup.cleanup?.(),this.popup.themeCleanup?.(),this.popup.host.remove(),this.popup=null,this.popupElements=null,"loading"===this.state&&this.setState("idle"))}setState(e){this.state=e;const n=this.elements.checkbox,t=this.elements.checkBox;if(n&&t)switch(n.classList.remove("oa-loading","oa-verified","oa-failed","oa-retry","oa-expired"),n.setAttribute("aria-checked","false"),t.innerHTML="",e){case"loading":n.classList.add("oa-loading"),t.innerHTML='<span class="oa-spinner"><svg viewBox="0 0 24 24"\n fill="none" stroke="currentColor" stroke-width="2.5">\n <circle cx="12" cy="12" r="10" opacity="0.2"/>\n <path d="M12 2 A10 10 0 0 1 22 12"\n stroke-linecap="round">\n <animateTransform attributeName="transform"\n type="rotate" from="0 12 12" to="360 12 12"\n dur="0.8s" repeatCount="indefinite"/>\n </path>\n</svg></span>';break;case"verified":n.classList.add("oa-verified"),n.setAttribute("aria-checked","true"),t.innerHTML='<svg viewBox="0 0 24 24"\n fill="none" stroke="currentColor" stroke-width="2.5"\n stroke-linecap="round" stroke-linejoin="round">\n <polyline points="20 6 9 17 4 12"/>\n</svg>';break;case"failed":n.classList.add("oa-failed"),t.innerHTML="✕";break;case"retry":n.classList.add("oa-retry"),t.innerHTML='<svg viewBox="0 0 16 16"\n xmlns="http://www.w3.org/2000/svg"\n fill="currentColor">\n <path d="m14.955 7.986.116.01a1 1 0 0 1 .85 1.13 8 8 0 0 1-13.374 4.728l-.84.84c-.63.63-1.707.184-1.707-.707V10h3.987c.89 0 1.337 1.077.707 1.707l-.731.731a6 6 0 0 0 8.347-.264 6 6 0 0 0 1.63-3.33 1 1 0 0 1 1.131-.848zM11.514.813a8 8 0 0 1 1.942 1.336l.837-.837c.63-.63 1.707-.184 1.707.707V6h-3.981c-.89 0-1.337-1.077-.707-1.707l.728-.729a6 6 0 0 0-9.98 3.591 1 1 0 1 1-1.98-.281A8 8 0 0 1 11.514.813"/>\n</svg>';break;case"expired":n.classList.add("oa-expired"),n.setAttribute("aria-checked","false")}}getToken(){return this.token}reset(){this.token=null,this.closePopup(),this.setState("idle")}destroy(){this.closePopup(),this.themeCleanup?.(),this.host?.remove()}}function y(e,n){const t={width:window.innerWidth,height:window.innerHeight},o=Math.max(n.width||0,340),a=Math.max(n.height||0,520);if(o>t.width-24||a>t.height-24)return{mode:"modal"};const r=function(e,n,t){return Math.min(Math.max(m,e),n-t-m)}(e.left+e.width/2-o/2,t.width,o),i=e.bottom+m,s=e.top-a-m;return i+a<=t.height-m||!(s>=m)?{mode:"popup",placement:"below",top:w(i,t.height,a),left:r}:{mode:"popup",placement:"above",top:w(s,t.height,a),left:r}}function w(e,n,t){return Math.min(Math.max(m,e),n-t-m)}let b=null,x=null,k=-1,E=null;async function C(){return E||(E=await import(h),b=E.FaceLandmarker,E)}async function S(e){const n=await C(),t=await n.FilesetResolver.forVisionTasks(p);x&&x.close(),k=-1,x=await b.createFromOptions(t,{baseOptions:{modelAssetBuffer:new Uint8Array(e),delegate:"GPU"},runningMode:"VIDEO",numFaces:2,outputFaceBlendshapes:!0,outputFacialTransformationMatrixes:!0})}function P(e,n){if(!x)return null;const t=function(e){const n=Number.isFinite(e)?e:performance.now(),t=Math.floor(n),o=Math.max(t,k+1);return k=o,o}(n),o=x.detectForVideo(e,t),a=o.faceLandmarks?.length??0;if(0===a)return{faceCount:0,timestampMs:t};const r=o.faceLandmarks[0];return{faceCount:a,timestampMs:t,landmarks:r,blendshapes:A(o.faceBlendshapes?.[0]),headPose:T(o.facialTransformationMatrixes?.[0]),boundingBox:L(r)}}function M(){x&&(x.close(),x=null),k=-1}function A(e){if(!e?.categories)return{};const n={};for(const t of e.categories)n[t.categoryName]=t.score;return n}function T(e){if(!e?.data||e.data.length<16)return{yaw:0,pitch:0,roll:0};const n=e.data,t=180/Math.PI;return{yaw:Math.atan2(n[8],n[10])*t,pitch:Math.asin(-Math.max(-1,Math.min(1,n[9])))*t,roll:Math.atan2(n[1],n[5])*t}}function L(e){let n=1,t=1,o=0,a=0;for(const r of e)r.x<n&&(n=r.x),r.y<t&&(t=r.y),r.x>o&&(o=r.x),r.y>a&&(a=r.y);const r=o-n,i=a-t;return{x:n,y:t,width:r,height:i,area:r*i}}let _=!1,V=null;async function $(){var e;_||(V=await(e="https://cdn.jsdelivr.net/npm/face-api.js@0.22.2/dist/face-api.min.js",new Promise((n,t)=>{if("undefined"==typeof window)return t(new Error("No DOM available"));const o=document.querySelector(`script[src="${e}"]`);if(o)return window.faceapi?n(window.faceapi):void o.addEventListener("load",()=>n(window.faceapi));const a=document.createElement("script");a.src=e,a.crossOrigin="anonymous",a.onload=()=>n(window.faceapi),a.onerror=()=>t(new Error(`Failed to load ${e}`)),document.head.appendChild(a)})),await Promise.all([V.nets.tinyFaceDetector.loadFromUri(f),V.nets.faceLandmark68TinyNet.loadFromUri(f),V.nets.ageGenderNet.loadFromUri(f)]),_=!0)}async function H(e){if(!V)throw new Error("Age estimator not initialized");const n=await V.detectSingleFace(e,new V.TinyFaceDetectorOptions({inputSize:224})).withFaceLandmarks(!0).withAgeAndGender();return n?{age:n.age,gender:n.gender,confidence:n.detection.score}:null}const O=[{id:"turn-left",instruction:"Turn your head to the left",check:e=>j(e,20)},{id:"turn-right",instruction:"Turn your head to the right",check:e=>j(e,-20)},{id:"nod",instruction:"Nod your head down then up",check:e=>function(e){if(e.length<10)return!1;const n=e[0].headPose.pitch;let t=!1,o=!1;for(const a of e){const e=a.headPose.pitch-n;e>15&&(t=!0),t&&Math.abs(e)<8&&(o=!0)}return t&&o}(e)},{id:"blink-twice",instruction:"Blink twice",check:e=>function(e){if(e.length<10)return!1;let n=0,t=!1;for(const o of e){const e=o.blendshapes.eyeBlinkLeft??0,a=o.blendshapes.eyeBlinkRight??0,r=e>.6&&a>.6;r&&!t?(n++,t=!0):r||(t=!1)}return n>=2}(e)},{id:"move-closer",instruction:"Move closer then back",check:e=>function(e){if(e.length<10)return!1;const n=e[0].boundingBox.area;let t=!1,o=!1;for(const a of e){const e=a.boundingBox.area/n;e>1.3&&(t=!0),t&&e<1.15&&(o=!0)}return t&&o}(e)}];function B(e=3){return[...O].sort(()=>Math.random()-.5).slice(0,e)}function R(e,n){if(e.failed||z(e))return;if(e.currentIndex>=e.tasks.length)return;if(!n||0===n.faceCount)return;if(n.faceCount>1)return e.failed=!0,void(e.failReason=null);const t={timestamp:n.timestampMs,headPose:n.headPose,blendshapes:n.blendshapes,boundingBox:n.boundingBox};0===e.history.length&&(e.taskStartTime=n.timestampMs),e.history.push(t);const o=n.timestampMs-e.taskStartTime;if(o>8e3)return void F(e);if(o<500)return;if(e.tasks[e.currentIndex].check(e.history)){if(function(e){if(e.length<5)return!1;const n=[];for(let t=1;t<e.length;t++){const o=Math.abs(e[t].headPose.yaw-e[t-1].headPose.yaw),a=Math.abs(e[t].headPose.pitch-e[t-1].headPose.pitch);n.push(o+a)}if(n.every(e=>e<.1))return!0;const t=n.reduce((e,n)=>e+n,0)/n.length;return n.reduce((e,n)=>e+(n-t)**2,0)/n.length<.01&&t>.5}(e.history))return e.failed=!0,void(e.failReason=null);e.completedTasks++,F(e)}}function z(e){return e.currentIndex>=e.tasks.length}function F(e){e.currentIndex++,e.history=[],e.taskStartTime=0;const n=e.tasks.length-e.currentIndex;e.completedTasks+n>=e.requiredPasses||(e.failed=!0,e.failReason=null)}function j(e,n){if(e.length<5)return!1;const t=e[0].headPose.yaw,o=Math.sign(n),a=Math.abs(n);return e.some(e=>(e.headPose.yaw-t)*o>a)}function q(e){const n="string"==typeof e?e:String.fromCharCode(...new Uint8Array(e));return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function N(e){const n=e+"=".repeat((4-e.length%4)%4),t=atob(n.replace(/-/g,"+").replace(/_/g,"/"));return Uint8Array.from(t,e=>e.charCodeAt(0))}let I=null;async function U(){return I||(I=await async function(){const e=crypto.getRandomValues(new Uint8Array(32));return crypto.subtle.importKey("raw",e,{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"])}()),I}async function D(e){const n=await U(),[t,o,a]=e.split(".");if(!t||!o||!a)return null;let r,i;try{i=(new TextEncoder).encode(`${t}.${o}`),r=N(a)}catch{return null}if(!await crypto.subtle.verify("HMAC",n,r,i))return null;const s=JSON.parse((new TextDecoder).decode(N(o)));return s.exp&&s.exp<Date.now()/1e3?null:s}function J(e){const[,n]=e.split(".");return n?JSON.parse((new TextDecoder).decode(N(n))):null}function Y(e,n={}){if("serverless"===e)return{async verify(e){const{estimatedAge:n,livenessOk:t}=e;if(!t)return{success:!1,token:null};const o=await async function(e){const n=await U(),t=q(JSON.stringify({alg:"HS256",typ:"JWT"})),o=q(JSON.stringify({...e,iat:Math.floor(Date.now()/1e3),exp:Math.floor(Date.now()/1e3)+300})),a=(new TextEncoder).encode(`${t}.${o}`);return`${t}.${o}.${q(await crypto.subtle.sign("HMAC",n,a))}`}({estimatedAge:n,livenessOk:!0,mode:"serverless"});return{success:!0,token:o}},close(){}};return function(e,n){let t=null,o=null;return{async createSession(){const o=[];"undefined"!=typeof WebSocket&&o.push("websocket"),o.push("poll");const a=await fetch(`${e}/api/session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sitekey:n.sitekey,action:n.action,supportedTransports:o})});if(!a.ok)throw new Error("Request failed");return t=await a.json(),t},openChannel(){if(!t)throw new Error("No session");o="websocket"===t.transport?function(e,n){const t=e.replace(/^http/,"ws").replace(/\/$/,""),o=new WebSocket(`${t}/api/ws/${n}`);let a=[],r=!1;const i=new Promise((e,n)=>{o.onopen=()=>{e()},o.onerror=()=>{n(new Error("Connection failed"))}});return o.onmessage=e=>{const n=JSON.parse(e.data),t=a.shift();t&&t(n)},o.onclose=()=>{r=!0;for(const e of a)e(null);a=[]},{receive:()=>r?Promise.resolve(null):new Promise(e=>{a.push(e)}),async send(e){await i,o.send(JSON.stringify(e))},async sendAndReceive(e){return await i,o.send(JSON.stringify(e)),this.receive()},close(){r=!0,o.close()}}}(e,t.sessionId):function(e,n){return{async receive(){const t=await fetch(`${e}/api/poll/${n}`);if(!t.ok)throw new Error("Request failed");return t.json()},async send(t){if(!(await fetch(`${e}/api/verify/${n}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).ok)throw new Error("Request failed")},async sendAndReceive(t){const o=await fetch(`${e}/api/verify/${n}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!o.ok)throw new Error("Request failed");return o.json()},close(){}}}(e,t.sessionId)},receive:async()=>o?o.receive():null,async send(e){if(o)return o.send(e)},sendAndReceive:async e=>o?o.sendAndReceive(e):null,async verify(t){if(o)return this.verifyViaChannel(t);const a=await fetch(`${e}/verify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({response:t.token,sitekey:n.sitekey,action:n.action})});return a.ok?a.json():{success:!1,token:null}},verifyViaChannel:async e=>(await o.send(e),o.receive()),getSession:()=>t,close(){o?.close(),o=null,t=null}}}("custom"===e?n.server:"https://api.openage.dev",n)}let G=null,W=null,Q=null,X=null,K=null,Z=null;async function ee(e){var n;W=e,await(n=e.wasmJs,new Promise((e,t)=>{if(document.querySelector(`script[src="${n}"]`))return e();const o=document.createElement("script");o.src=n,o.onload=e,o.onerror=()=>{t(new Error(`Failed to load ${n}`))},document.head.appendChild(o)}));const t=await import(e.loaderJs);G=await t.initModule(e.wasmBin);const o=e.exports.vm_init;if(0!==G[`_${o}`]())throw new Error("VM init failed");const a=await fetch(e.challengeVmbc);Q=new Uint8Array(await a.arrayBuffer())}function ne(e,n){return e.HEAPU8[n]|e.HEAPU8[n+1]<<8|e.HEAPU8[n+2]<<16|e.HEAPU8[n+3]<<24}function te(e,n){try{delete window[e]}catch(e){}Object.defineProperty(window,e,{get:n,set(){},configurable:!0})}function oe(e){X=e,te("__vmFaceData",()=>X)}function ae(e){K=e,te("__vmChallenge",()=>K)}function re(){if(!G||!Q)throw new Error("VM not loaded");const e=W.exports.vm_exec_bytecode,n=W.exports.vm_free,t=Q.length,o=G._malloc(t);G.HEAPU8.set(Q,o);const a=G._malloc(4),r=G[`_${e}`](o,t,a);if(G._free(o),!r){G._free(a);const e=W.exports.vm_last_error;let n="VM execution failed";if(e){const t=G[`_${e}`]();if(t){const e=G.UTF8ToString(t);e&&(n=e)}}throw new Error(n)}const i=ne(G,a);G._free(a);const s=new Uint8Array(i);return s.set(G.HEAPU8.subarray(r,r+i)),G[`_${n}`](r),s}function ie(e){let n="";for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return btoa(n)}const se=new Map;async function le(e,n){if(se.has(n))return se.get(n);const t=await async function(e,n){if(!G||!W)throw new Error("VM not loaded");const t=e.models[n];if(!t)throw new Error(`Unknown model: ${n}`);const o=await fetch(t.url);if(!o.ok)throw new Error(`Failed to fetch model: ${n}`);const a=new Uint8Array(await o.arrayBuffer()),r=e.exports.vm_decrypt_blob,i=e.exports.vm_free,s=a.length,l=G._malloc(s);G.HEAPU8.set(a,l);const c=G._malloc(4),d=G[`_${r}`](l,s,c);if(G._free(l),!d)throw G._free(c),new Error(`Decryption failed: ${n}`);const u=ne(G,c);G._free(c);const p=new Uint8Array(u);return p.set(G.HEAPU8.subarray(d,d+u)),G[`_${i}`](d),p.buffer}(e,n);return se.set(n,t),t}let ce=null,de=null;const ue={video:{facingMode:"user",width:{ideal:640},height:{ideal:480}}};function pe(e){return navigator.mediaDevices.getUserMedia(ue).then(n=>(ce=n,e.srcObject=ce,de=e,new Promise(n=>{e.onloadedmetadata=()=>{e.play(),n({width:e.videoWidth,height:e.videoHeight})}})))}function he(){if(!de)return null;const e=document.createElement("canvas");e.width=de.videoWidth,e.height=de.videoHeight;return e.getContext("2d").drawImage(de,0,0),e}function fe(){ce&&(ce.getTracks().forEach(e=>e.stop()),ce=null),de&&(de.srcObject=null,de=null)}const me={"turn-left":"Turn your head left","turn-right":"Turn your head right",nod:"Nod your head","blink-twice":"Blink twice","move-closer":"Move closer then back"};function ge(e){return new Promise(n=>setTimeout(n,e))}async function ve(e,n){const t=e.params.mode||"serverless";if("serverless"!==t&&!e.params.sitekey){const t=new Error("Configuration error");return e.showResult?.("fail","Verification failed"),n.emit("error",t,e.id),void e.params.errorCallback?.(t)}return"serverless"===t?async function(e,n){const t=e.params;let o=0,a=null;try{e.openPopup(),e.setHeroStatus("Loading…"),await Promise.all([C(),$()]),a=await async function(){const e=await fetch("https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/latest/face_landmarker.task");if(!e.ok)throw new Error("Failed to load face landmarker model");return new Uint8Array(await e.arrayBuffer())}(),e.showReady(),await be(e),await xe(e,a);const r=Y("serverless",t),i=async()=>{e.showLiveness(),e.setInstruction(""),e.setVideoStatus("Verifying…");const n={tasks:B(),currentIndex:0,history:[],taskStartTime:0,completedTasks:0,requiredPasses:2,failed:!1,failReason:null};if(await async function(e,n,t){return new Promise(o=>{const a=()=>{const r=P(e,performance.now());r&&R(n,r),t.setInstruction(function(e){return e.currentIndex>=e.tasks.length?null:e.tasks[e.currentIndex].instruction}(n)||"Done"),t.setTask(function(e){return e.currentIndex>=e.tasks.length?null:e.tasks[e.currentIndex].id}(n)),t.setProgress(function(e){return 0===e.tasks.length?1:Math.min(e.currentIndex/e.tasks.length,1)}(n)),t.setVideoStatus(`Check ${Math.min(n.currentIndex+1,n.tasks.length)} of ${n.tasks.length}`),n.failed||z(n)?o():requestAnimationFrame(a)};requestAnimationFrame(a)})}(e.popupElements.video,n,e),n.failed||!function(e){return e.completedTasks>=e.requiredPasses}(n))return{outcome:"retry"};e.setInstruction("Hold still…"),e.setVideoStatus("Processing…");const t=await async function(e,n){const t=[];for(let o=0;o<e;o++){const a=he();a&&t.push(a),o<e-1&&await ge(n)}return t}(5,200),o=await async function(e){const n=[];for(const t of e){const e=await H(t);e&&n.push(e)}return n}(t),a=function(e){if(!e||0===e.length)return null;const n=e.map(e=>e.age).sort((e,n)=>e-n),t=n.length>=3?n.slice(1,-1):n;return t.reduce((e,n)=>e+n,0)/t.length}(o),i=await r.verify({estimatedAge:a,livenessOk:!0});return{outcome:i.token?"pass":"fail",token:i.token}};let s=await i();for(;"retry"===s.outcome&&o<3;)o++,e.showResult("retry","Please try again"),await be(e),await xe(e,a),s=await i();Ee(),function(e,n,t){const o=e.params;"pass"===t.outcome?(e.token=t.token||null,e.showResult("pass","Verified"),n.emit("verified",t.token,e.id),o.callback?.(t.token)):(e.showResult("fail","Verification failed"),n.emit("error","failed",e.id),o.errorCallback?.("failed"))}(e,n,s)}catch(o){Ee(),e.showResult("fail","Verification failed"),n.emit("error",o,e.id),t.errorCallback?.(o)}}(e,n):async function(e,n){const t=e.params;try{e.openPopup(),e.setHeroStatus("Connecting…");const a=Y(t.mode,t),r=await a.createSession();e.setHeroStatus("Loading…"),await ee(r),e.setHeroStatus("Preparing…"),await async function(e){await le(e,"mediapipe")}(r),await C();const i=await async function(e){return le(e,"mediapipe")}(r);await S(i),o={trackFace:()=>{const n=e.popupElements?.video;if(!n)return"null";const t=P(n,performance.now());return t?JSON.stringify({ts:t.timestampMs??performance.now(),faceCount:t.faceCount,headPose:t.headPose||null,blendshapes:t.blendshapes||null,boundingBox:t.boundingBox||null}):"null"},captureFrame:()=>he()?"true":"null"},Z=Object.freeze({...o}),te("__vmBridge",()=>Z),e.showReady(),await be(e);const s=e.showCamera();e.setVideoStatus("Requesting camera…"),await pe(s),function(e){if(Se(),!e?.srcObject)return;const n=document.createElement("video");n.id="__openage_mirror",n.srcObject=e.srcObject,n.autoplay=!0,n.muted=!0,n.playsInline=!0,n.style.cssText="position:fixed;width:1px;height:1px;opacity:0;pointer-events:none;z-index:-1;",document.body.appendChild(n)}(s),e.setVideoStatus("Position your face"),await ke(s,e),e.showLiveness(),a.openChannel();let l=await a.receive();const c=r.rounds;for(let t=0;t<c;t++){if(!l)return Ce(a),e.showResult("fail","Verification failed"),void n.emit("error","failed",e.id);if("verdict"===l.type)return Ce(a),void ye(e,n,l);if("timeout"===l.type)return Ce(a),e.showResult("fail","Verification failed"),void n.emit("error","failed",e.id);e.setVideoStatus(`Step ${t+1} of ${c}`);const o=l.token?.task;e.setInstruction(me[o]??"Look at the camera"),e.setTask(o),e.setProgress(t/c);let r;oe(await we(e)),ae(l.token);try{r=re()}catch{return Ce(a),e.showResult("fail","Verification failed"),void n.emit("error","failed",e.id)}const i={token:l.token,tokenSignature:l.tokenSignature,response:ie(r)},s=await a.sendAndReceive(i);if(!s)return Ce(a),e.showResult("fail","Verification failed"),void n.emit("error","failed",e.id);if(s.complete)return Ce(a),void ye(e,n,s);s.hint&&(e.setVideoStatus(s.hint),await ge(1e3)),l=s.nextChallenge||null}Ce(a)}catch(o){Ce(),e.showResult("fail","Verification failed"),n.emit("error",o,e.id),t.errorCallback?.(o)}var o}(e,n)}function ye(e,n,t){const o=t?.verdict||t,a=o?.token||null,r=e.params;if(a)return e.token=a,e.showResult("pass","Verified"),n.emit("verified",a,e.id),void r.callback?.(a);e.showResult("fail","Verification failed"),n.emit("error","failed",e.id),r.errorCallback?.("failed")}async function we(e){const n=e.popupElements?.video,t=[],o=performance.now();for(;performance.now()-o<3e3;){const e=P(n,performance.now());e&&1===e.faceCount&&t.push({ts:e.timestampMs,headPose:e.headPose,blendshapes:e.blendshapes,boundingBox:e.boundingBox}),await ge(100)}return{faceCount:t.length>0?1:0,motionHistory:t}}function be(e){return new Promise(n=>{e.onStartClick=()=>{e.onStartClick=null,n()}})}async function xe(e,n){const t=e.showCamera();e.setVideoStatus("Requesting camera…"),await pe(t),e.setVideoStatus("Preparing…"),await S(n),e.setVideoStatus("Position your face"),await ke(t,e)}function ke(e,n){return new Promise((t,o)=>{const a=function(e,n){let t=0,o=!1;const a=()=>{if(o)return;const r=P(e,performance.now());r&&0!==r.faceCount?r.faceCount>1?(n.onStatus?.("Only one person please"),t=0):(n.onStatus?.("Hold still…"),t++):(n.onStatus?.("Look at the camera"),t=0),t>=10?n.onReady?.():setTimeout(a,100)};return a(),{cancel:()=>{o=!0}}}(e,{onStatus:e=>n.setVideoStatus(e),onReady:()=>t()});setTimeout(()=>{a.cancel(),o(new Error("Positioning timeout"))},3e4)})}function Ee(){fe(),M()}function Ce(e){fe(),Se(),M(),function(){Z=null;try{delete window.__vmBridge}catch(e){}}(),function(){if(!G||!W)return;const e=W.exports.vm_destroy;e&&G[`_${e}`](),G=null,W=null,Q=null,X=null,K=null,Z=null;for(const e of["__vmFaceData","__vmChallenge","__vmBridge"])try{delete window[e]}catch(e){}}(),se.clear(),e?.close()}function Se(){document.getElementById("__openage_mirror")?.remove()}class Pe{constructor(){this.listeners=new Map}on(e,n){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(n),this}off(e,n){const t=this.listeners.get(e);return t&&t.delete(n),this}once(e,n){const t=(...o)=>{this.off(e,t),n(...o)};return t._original=n,this.on(e,t)}emit(e,...n){const t=this.listeners.get(e);if(t)for(const e of[...t])e(...n)}removeAllListeners(e){return e?this.listeners.delete(e):this.listeners.clear(),this}}const Me=new Pe,Ae=new Map;function Te(e){return{mode:"serverless",theme:"auto",size:"normal",minAge:18,..."undefined"!=typeof window&&window.openage||{},...e}}function Le(e,n={}){const t=Te(n),o=new v(e,t);return Ae.set(o.id,o),function(e){e.onChallenge=()=>{Me.emit("opened",e.id),ve(e,Me)}}(o),o.id}function _e(e={}){const n=Te(e),t=function(e){return new v(document.createElement("div"),{...e,size:"invisible"})}(n);return t.anchorElement=n.anchorElement||null,Ae.set(t.id,t),t.onChallenge=()=>{Me.emit("opened",t.id),ve(t,Me)},t.startChallenge(),t.id}function Ve(e,n={}){const t=Te(n),o="string"==typeof e?document.querySelector(e):e;if(!o)throw new Error("OpenAge: element not found");let a=!1,r=null;const i=()=>{r=null},s=e=>{if(a||r)return;e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation?.();const n=_e({...t,anchorElement:o,callback:e=>{t.callback?.(e),i(),(()=>{a=!0;try{o.click()}finally{a=!1}})()},errorCallback:e=>{i(),t.errorCallback?.(e)},closeCallback:()=>{i(),t.closeCallback?.()}});return r=n,n};return o.addEventListener("click",s,!0),()=>{o.removeEventListener("click",s,!0)}}function $e(e){Ae.get(e)?.reset()}function He(e){const n=Ae.get(e);n&&(n.destroy(),Ae.delete(e))}function Oe(e){return Ae.get(e)?.getToken()||null}function Be(e){const n=Ae.get(e);n&&n.startChallenge()}function Re(e={}){return new Promise((n,t)=>{_e({...e,callback:e=>n(e),errorCallback:e=>t("string"==typeof e?new Error(e):e),closeCallback:()=>t(new Error("User dismissed"))})})}function ze(e,n){Me.on(e,n)}function Fe(e,n){Me.off(e,n)}function je(e,n){Me.once(e,n)}function qe(){if("undefined"==typeof document)return;if("explicit"===("undefined"!=typeof window&&window.openage||{}).render)return;const e=document.querySelectorAll(".openage");for(const n of e){const e={sitekey:n.dataset.sitekey,theme:n.dataset.theme,size:n.dataset.size,action:n.dataset.action,mode:n.dataset.mode,server:n.dataset.server};if(n.dataset.callback&&(e.callback=e=>{const t=window[n.dataset.callback];"function"==typeof t&&t(e)}),n.dataset.errorCallback&&(e.errorCallback=e=>{const t=window[n.dataset.errorCallback];"function"==typeof t&&t(e)}),n.dataset.expiredCallback&&(e.expiredCallback=()=>{const e=window[n.dataset.expiredCallback];"function"==typeof e&&e()}),n.dataset.bind){const t=document.getElementById(n.dataset.bind);if(t){Ve(t,e);continue}}Le(n,e)}const n=document.currentScript?.dataset?.onload;n&&"function"==typeof window[n]&&window[n]()}"undefined"!=typeof document&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",qe):qe());const Ne={render:Le,open:_e,bind:Ve,reset:$e,remove:He,getToken:Oe,execute:Be,challenge:Re,on:ze,off:Fe,once:je,verify:D,decode:J,version:d};e.EventEmitter=Pe,e.bind=Ve,e.challenge=Re,e.decode=J,e.default=Ne,e.execute=Be,e.getToken=Oe,e.off=Fe,e.on=ze,e.once=je,e.open=_e,e.remove=He,e.render=Le,e.reset=$e,e.verify=D,e.version=d,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
+
//# sourceMappingURL=openage.min.js.map
|