From 440a5387c432191a9e120f449cb4d754b1d2adc5 Mon Sep 17 00:00:00 2001 From: "goodbounties-nanoclaw-agent[bot]" <307944451+goodbounties-nanoclaw-agent[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2026 14:47:22 +0000 Subject: [PATCH 1/5] [BountyCoder] fix(ui): readable Button labels on non-primary variants, add passkey icon ButtonText was a named component, so Tamagui resolved its theme by falling back to the ancestor light_Button/dark_Button component theme (white text) even inside the `` that Button applies to non-primary variants. Secondary/outline/ghost/text labels were therefore white on light surfaces. Dropping the component name lets the label inherit the nearest theme. No change to presets.ts/theme.ts was needed. Also adds a `passkey` glyph to Icon, a Button variants story, and a smoke test asserting WCAG AA label contrast in light and dark. Co-Authored-By: Claude Code On-Behalf-Of: BountyCoder[onecli] (yaskkeryodtdijpv) --- .../stories/design-system/Button.stories.tsx | 63 ++++++++++++++++++ packages/ui/src/components/Button.tsx | 9 ++- packages/ui/src/components/Icon.tsx | 8 +++ tests/design-system/smoke.spec.ts | 57 ++++++++++++++++ .../test-results/story-button-dark.png | Bin 0 -> 12046 bytes .../test-results/story-button-light.png | Bin 0 -> 11557 bytes 6 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 examples/storybook/src/stories/design-system/Button.stories.tsx create mode 100644 tests/design-system/test-results/story-button-dark.png create mode 100644 tests/design-system/test-results/story-button-light.png diff --git a/examples/storybook/src/stories/design-system/Button.stories.tsx b/examples/storybook/src/stories/design-system/Button.stories.tsx new file mode 100644 index 00000000..5f3de3f6 --- /dev/null +++ b/examples/storybook/src/stories/design-system/Button.stories.tsx @@ -0,0 +1,63 @@ +/** + * Button — interactive primitive. + * + * Every variant must keep a readable label in both themes. The variants grid below + * is the regression fixture for the label-contrast smoke test in + * tests/design-system/smoke.spec.ts. + */ +import React from 'react' +import type { Decorator, Meta, StoryObj } from '@storybook/react' +import { GoodWidgetProvider } from '@goodwidget/core' +import { Button, ButtonText, XStack, YStack } from '@goodwidget/ui' + +/** Button variants that render a text label on a non-brand background. */ +const LABELLED_VARIANTS = ['primary', 'secondary', 'outline', 'ghost', 'text'] as const + +type ThemeMode = 'light' | 'dark' + +/** Renders the story inside the real provider using the theme chosen by the story parameters. */ +const withThemeModeProvider: Decorator = (Story, context) => { + const themeMode = (context.parameters.themeMode as ThemeMode | undefined) ?? 'light' + return ( + + + + + + ) +} + +const meta: Meta = { + title: 'Design System/Primitives/Button', + component: Button, + tags: ['autodocs', 'showcase'], + parameters: { layout: 'padded' }, + decorators: [withThemeModeProvider], +} +export default meta +type Story = StoryObj + +/** One button per labelled variant so label color can be asserted per variant. */ +function renderVariantsGrid() { + return ( + + {LABELLED_VARIANTS.map((variant) => ( + + ))} + + ) +} + +/** All labelled variants on the light theme. */ +export const VariantsLight: Story = { + parameters: { themeMode: 'light' }, + render: renderVariantsGrid, +} + +/** All labelled variants on the dark theme. */ +export const VariantsDark: Story = { + parameters: { themeMode: 'dark' }, + render: renderVariantsGrid, +} diff --git a/packages/ui/src/components/Button.tsx b/packages/ui/src/components/Button.tsx index eac8fa18..3cbcf57f 100644 --- a/packages/ui/src/components/Button.tsx +++ b/packages/ui/src/components/Button.tsx @@ -170,8 +170,15 @@ export const ButtonFrame = createComponent(Stack, { }, }) +/** + * Button label. Intentionally has no component `name`: Tamagui resolves a named + * component's theme by falling back to every ancestor component theme, which made + * the label pick up light_Button / dark_Button (white text) even inside the + * `` that Button applies to non-primary variants. Unnamed, the label + * simply inherits the nearest theme: the Button theme for primary, the surrounding + * theme for every other variant. + */ export const ButtonText = styled(TamaguiText, { - name: 'ButtonText', fontFamily: '$body', fontSize: '$3', fontWeight: '600', diff --git a/packages/ui/src/components/Icon.tsx b/packages/ui/src/components/Icon.tsx index 998d4e26..07f97f75 100644 --- a/packages/ui/src/components/Icon.tsx +++ b/packages/ui/src/components/Icon.tsx @@ -83,6 +83,14 @@ const SVG_PATHS: Record = { 'M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10zM16.24 7.76l-2.12 6.36-6.36 2.12 2.12-6.36 6.36-2.12z', user: 'M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2M12 11a4 4 0 100-8 4 4 0 000 8z', 'log-out': ['M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4', 'M16 17l5-5-5-5', 'M21 12H9'], + // Passkey: person (head + shoulders) with a key to its right, as in the passkey login designs + passkey: [ + 'M9 11a4 4 0 100-8 4 4 0 000 8z', + 'M2 21v-1a5 5 0 015-5h3', + 'M18 20a3 3 0 100-6 3 3 0 000 6z', + 'M18 20v3', + 'M18 22h2', + ], } // --------------------------------------------------------------------------- diff --git a/tests/design-system/smoke.spec.ts b/tests/design-system/smoke.spec.ts index 455e7403..f69de531 100644 --- a/tests/design-system/smoke.spec.ts +++ b/tests/design-system/smoke.spec.ts @@ -534,3 +534,60 @@ test('DataTable/Controllable story exposes a working range control for the neste await expect(addressColumnCell).toHaveJSProperty('offsetWidth', 350) await screenshotStory(page, 'tests/design-system/test-results/story-datatable-controllable-width.png') }) + +/** WCAG 2.x minimum contrast ratio for normal-size text. */ +const MINIMUM_TEXT_CONTRAST_RATIO = 4.5 + +/** Button variants drawn on a transparent background, whose label must follow the surrounding theme. */ +const TRANSPARENT_BACKGROUND_BUTTON_VARIANTS = ['secondary', 'outline', 'ghost', 'text'] as const + +for (const themeMode of ['light', 'dark'] as const) { + test(`Button/${themeMode}: non-primary labels are readable on the ${themeMode} background`, async ({ page }) => { + // Regression guard: ButtonText used to inherit the white light_Button/dark_Button text color + // even inside non-primary variants, so secondary/text labels were invisible on light surfaces. + await gotoStory(page, `design-system-primitives-button--variants-${themeMode}`) + const frame = getStoryFrame(page) + await expect(frame.getByTestId('Button-variants')).toBeVisible() + + for (const variant of TRANSPARENT_BACKGROUND_BUTTON_VARIANTS) { + const contrastRatio = await frame.getByTestId(`ButtonText-${variant}`).evaluate((labelElement) => { + /** Parse a computed `rgb()/rgba()` string into channels and alpha. */ + const parseColor = (cssColor: string) => { + const [red, green, blue, alpha = 1] = cssColor.match(/[\d.]+/g)!.map(Number) + return { red, green, blue, alpha } + } + /** WCAG relative luminance of an sRGB color. */ + const relativeLuminance = ({ red, green, blue }: { red: number; green: number; blue: number }) => { + const [linearRed, linearGreen, linearBlue] = [red, green, blue].map((channel) => { + const unit = channel / 255 + return unit <= 0.03928 ? unit / 12.92 : ((unit + 0.055) / 1.055) ** 2.4 + }) + return 0.2126 * linearRed + 0.7152 * linearGreen + 0.0722 * linearBlue + } + + // Walk up to the first ancestor that paints an opaque background (the story surface). + let surfaceElement: Element | null = labelElement.parentElement + let surfaceColor = parseColor(getComputedStyle(document.body).backgroundColor) + while (surfaceElement) { + const candidateColor = parseColor(getComputedStyle(surfaceElement).backgroundColor) + if (candidateColor.alpha === 1) { + surfaceColor = candidateColor + break + } + surfaceElement = surfaceElement.parentElement + } + + const labelLuminance = relativeLuminance(parseColor(getComputedStyle(labelElement).color)) + const surfaceLuminance = relativeLuminance(surfaceColor) + const lighter = Math.max(labelLuminance, surfaceLuminance) + const darker = Math.min(labelLuminance, surfaceLuminance) + return (lighter + 0.05) / (darker + 0.05) + }) + expect(contrastRatio, `${variant} label contrast in ${themeMode} theme`).toBeGreaterThanOrEqual( + MINIMUM_TEXT_CONTRAST_RATIO, + ) + } + + await screenshotStory(page, `tests/design-system/test-results/story-button-${themeMode}.png`) + }) +} diff --git a/tests/design-system/test-results/story-button-dark.png b/tests/design-system/test-results/story-button-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9d42a959796a7cf24cc3fd1e68d4cfc6e66b1f08 GIT binary patch literal 12046 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 z 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 literal 0 HcmV?d00001 From 94b61c3f761560c925d62a0c81666f56733ac183 Mon Sep 17 00:00:00 2001 From: "goodbounties-nanoclaw-agent[bot]" <307944451+goodbounties-nanoclaw-agent[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2026 15:28:02 +0000 Subject: [PATCH 2/5] [BountyCoder] feat(passkey-login-widget): add serverless passkey login widget WebAuthn PRF key derivation, encrypted Google Drive / iCloud backup storage, flow state machine, adapter hook, screens A1-D6 and the custom element, with unit tests for the crypto, storage and flow logic. Refs #307 Co-Authored-By: Claude Code On-Behalf-Of: BountyCoder[onecli] (yaskkeryodtdijpv) --- examples/storybook/package.json | 1 + packages/passkey-login-widget/package.json | 52 +++ .../src/PasskeyLoginWidget.tsx | 64 ++++ packages/passkey-login-widget/src/adapter.ts | 306 ++++++++++++++++++ .../src/components/BackupScreens.tsx | 90 ++++++ .../src/components/ErrorScreens.tsx | 129 ++++++++ .../src/components/LoginScreens.tsx | 55 ++++ .../src/components/PasskeyLoginWidgetView.tsx | 97 ++++++ .../src/components/ProgressSteps.tsx | 18 ++ .../src/components/ProviderChoice.tsx | 28 ++ .../src/components/ProviderLogo.tsx | 44 +++ .../src/components/ProviderTile.tsx | 54 ++++ .../src/components/RestoreScreens.tsx | 43 +++ .../src/components/ScreenCard.tsx | 71 ++++ packages/passkey-login-widget/src/config.ts | 30 ++ .../src/crypto/backupCipher.ts | 52 +++ .../src/crypto/backupErrors.ts | 15 + .../src/crypto/backupFileName.ts | 38 +++ .../src/crypto/backupFormat.test.ts | 127 ++++++++ .../src/crypto/backupFormat.ts | 90 ++++++ .../src/crypto/encoding.ts | 70 ++++ .../src/crypto/prfDerivation.test.ts | 71 ++++ .../src/crypto/prfDerivation.ts | 85 +++++ packages/passkey-login-widget/src/element.ts | 33 ++ .../src/flow/passkeyFlowMachine.test.ts | 189 +++++++++++ .../src/flow/passkeyFlowMachine.ts | 183 +++++++++++ .../src/flow/passkeyOperations.test.ts | 159 +++++++++ .../src/flow/passkeyOperations.ts | 85 +++++ packages/passkey-login-widget/src/index.ts | 24 ++ packages/passkey-login-widget/src/register.ts | 20 ++ .../src/storage/googleDriveStorage.test.ts | 134 ++++++++ .../src/storage/googleDriveStorage.ts | 200 ++++++++++++ .../src/storage/iCloudStorage.test.ts | 169 ++++++++++ .../src/storage/iCloudStorage.ts | 209 ++++++++++++ .../src/storage/loadExternalScript.ts | 23 ++ .../src/storage/rememberedProvider.test.ts | 42 +++ .../src/storage/rememberedProvider.ts | 32 ++ .../src/storage/storageAdapter.ts | 15 + .../passkey-login-widget/src/testFixtures.ts | 48 +++ .../src/webauthn/passkeyClient.ts | 111 +++++++ .../src/webauthn/passkeyErrors.test.ts | 40 +++ .../src/webauthn/passkeyErrors.ts | 52 +++ .../src/widgetRuntimeContract.ts | 106 ++++++ .../passkey-login-widget/tsconfig.build.json | 13 + packages/passkey-login-widget/tsconfig.json | 18 ++ packages/passkey-login-widget/tsup.config.ts | 15 + pnpm-lock.yaml | 40 +++ 47 files changed, 3590 insertions(+) create mode 100644 packages/passkey-login-widget/package.json create mode 100644 packages/passkey-login-widget/src/PasskeyLoginWidget.tsx create mode 100644 packages/passkey-login-widget/src/adapter.ts create mode 100644 packages/passkey-login-widget/src/components/BackupScreens.tsx create mode 100644 packages/passkey-login-widget/src/components/ErrorScreens.tsx create mode 100644 packages/passkey-login-widget/src/components/LoginScreens.tsx create mode 100644 packages/passkey-login-widget/src/components/PasskeyLoginWidgetView.tsx create mode 100644 packages/passkey-login-widget/src/components/ProgressSteps.tsx create mode 100644 packages/passkey-login-widget/src/components/ProviderChoice.tsx create mode 100644 packages/passkey-login-widget/src/components/ProviderLogo.tsx create mode 100644 packages/passkey-login-widget/src/components/ProviderTile.tsx create mode 100644 packages/passkey-login-widget/src/components/RestoreScreens.tsx create mode 100644 packages/passkey-login-widget/src/components/ScreenCard.tsx create mode 100644 packages/passkey-login-widget/src/config.ts create mode 100644 packages/passkey-login-widget/src/crypto/backupCipher.ts create mode 100644 packages/passkey-login-widget/src/crypto/backupErrors.ts create mode 100644 packages/passkey-login-widget/src/crypto/backupFileName.ts create mode 100644 packages/passkey-login-widget/src/crypto/backupFormat.test.ts create mode 100644 packages/passkey-login-widget/src/crypto/backupFormat.ts create mode 100644 packages/passkey-login-widget/src/crypto/encoding.ts create mode 100644 packages/passkey-login-widget/src/crypto/prfDerivation.test.ts create mode 100644 packages/passkey-login-widget/src/crypto/prfDerivation.ts create mode 100644 packages/passkey-login-widget/src/element.ts create mode 100644 packages/passkey-login-widget/src/flow/passkeyFlowMachine.test.ts create mode 100644 packages/passkey-login-widget/src/flow/passkeyFlowMachine.ts create mode 100644 packages/passkey-login-widget/src/flow/passkeyOperations.test.ts create mode 100644 packages/passkey-login-widget/src/flow/passkeyOperations.ts create mode 100644 packages/passkey-login-widget/src/index.ts create mode 100644 packages/passkey-login-widget/src/register.ts create mode 100644 packages/passkey-login-widget/src/storage/googleDriveStorage.test.ts create mode 100644 packages/passkey-login-widget/src/storage/googleDriveStorage.ts create mode 100644 packages/passkey-login-widget/src/storage/iCloudStorage.test.ts create mode 100644 packages/passkey-login-widget/src/storage/iCloudStorage.ts create mode 100644 packages/passkey-login-widget/src/storage/loadExternalScript.ts create mode 100644 packages/passkey-login-widget/src/storage/rememberedProvider.test.ts create mode 100644 packages/passkey-login-widget/src/storage/rememberedProvider.ts create mode 100644 packages/passkey-login-widget/src/storage/storageAdapter.ts create mode 100644 packages/passkey-login-widget/src/testFixtures.ts create mode 100644 packages/passkey-login-widget/src/webauthn/passkeyClient.ts create mode 100644 packages/passkey-login-widget/src/webauthn/passkeyErrors.test.ts create mode 100644 packages/passkey-login-widget/src/webauthn/passkeyErrors.ts create mode 100644 packages/passkey-login-widget/src/widgetRuntimeContract.ts create mode 100644 packages/passkey-login-widget/tsconfig.build.json create mode 100644 packages/passkey-login-widget/tsconfig.json create mode 100644 packages/passkey-login-widget/tsup.config.ts diff --git a/examples/storybook/package.json b/examples/storybook/package.json index 4e5e15b6..7d08cc3a 100644 --- a/examples/storybook/package.json +++ b/examples/storybook/package.json @@ -14,6 +14,7 @@ "@goodwidget/claim-widget-theme-demo": "workspace:*", "@goodwidget/citizen-claim-widget": "workspace:*", "@goodwidget/connect-a-wallet-widget": "workspace:*", + "@goodwidget/passkey-login-widget": "workspace:*", "@goodwidget/goodreserve-widget": "workspace:*", "@goodwidget/governance-widget": "workspace:*", "@goodwidget/streaming-widget": "workspace:*", diff --git a/packages/passkey-login-widget/package.json b/packages/passkey-login-widget/package.json new file mode 100644 index 00000000..e53fb1fd --- /dev/null +++ b/packages/passkey-login-widget/package.json @@ -0,0 +1,52 @@ +{ + "name": "@goodwidget/passkey-login-widget", + "version": "0.1.0-beta", + "description": "GoodWidget for serverless passkey login: derives a GoodDollar account key from a WebAuthn PRF passkey and backs it up (encrypted) to Google Drive or iCloud", + "type": "module", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "./element": { + "types": "./dist/element.d.ts", + "import": "./dist/element.js", + "require": "./dist/element.cjs" + }, + "./register": { + "types": "./dist/register.d.ts", + "import": "./dist/register.js", + "require": "./dist/register.cjs" + } + }, + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "lint": "eslint src/", + "test": "node --test --experimental-strip-types \"src/**/*.test.ts\"", + "clean": "rm -rf dist .turbo" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + }, + "dependencies": { + "@goodwidget/core": "workspace:*", + "@goodwidget/embed": "workspace:*", + "@goodwidget/ui": "workspace:*", + "viem": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^22.10.0", + "@types/react": "^18.3.0", + "@types/react-dom": "^18.3.0", + "react": "^18.3.0", + "react-dom": "^18.3.0", + "tsup": "^8.4.0", + "typescript": "^5.7.0" + } +} diff --git a/packages/passkey-login-widget/src/PasskeyLoginWidget.tsx b/packages/passkey-login-widget/src/PasskeyLoginWidget.tsx new file mode 100644 index 00000000..8aa017c4 --- /dev/null +++ b/packages/passkey-login-widget/src/PasskeyLoginWidget.tsx @@ -0,0 +1,64 @@ +import React from 'react' +import { GoodWidgetProvider } from '@goodwidget/core' +import { GoodWidgetDialog, ToastContainer } from '@goodwidget/ui' +import { usePasskeyLoginAdapter, type PasskeyLoginAdapterResult } from './adapter.ts' +import { passkeyLoginWidgetConfig } from './config.ts' +import { PasskeyLoginWidgetView } from './components/PasskeyLoginWidgetView.tsx' +import type { PasskeyLoginWidgetProps } from './widgetRuntimeContract.ts' + +/** Runs the flow and renders it; must sit inside the provider. */ +function PasskeyLoginWidgetRuntime({ + 'data-testid': dataTestId, + ...adapterProps +}: Omit) { + const adapter = usePasskeyLoginAdapter(adapterProps) + return +} + +/** Widget-local component themes first, so a host `config` can still override them. */ +function useMergedConfig(hostConfig: PasskeyLoginWidgetProps['config']) { + return React.useMemo( + () => ({ ...hostConfig, themes: { ...passkeyLoginWidgetConfig.themes, ...hostConfig?.themes } }), + [hostConfig], + ) +} + +export interface PasskeyLoginWidgetPreviewProps + extends Pick { + adapter: PasskeyLoginAdapterResult + 'data-testid'?: string +} + +/** Deterministic render path for Storybook / test fixtures that provide a fixed adapter result. */ +export function PasskeyLoginWidgetPreview({ + adapter, + themeOverrides, + config, + defaultTheme = 'dark', + 'data-testid': dataTestId, +}: PasskeyLoginWidgetPreviewProps) { + const mergedConfig = useMergedConfig(config) + return ( + + + + + + ) +} + +export function PasskeyLoginWidget({ + themeOverrides, + config, + defaultTheme = 'dark', + ...runtimeProps +}: PasskeyLoginWidgetProps) { + const mergedConfig = useMergedConfig(config) + return ( + + + + + + ) +} diff --git a/packages/passkey-login-widget/src/adapter.ts b/packages/passkey-login-widget/src/adapter.ts new file mode 100644 index 00000000..450d6c92 --- /dev/null +++ b/packages/passkey-login-widget/src/adapter.ts @@ -0,0 +1,306 @@ +import { useCallback, useEffect, useReducer, useRef } from 'react' +import type { Bytes } from './crypto/encoding.ts' +import { deriveAccountKey } from './crypto/prfDerivation.ts' +import { createInitialFlowState, passkeyFlowReducer, type PasskeyFlowState } from './flow/passkeyFlowMachine.ts' +import { + prepareAccountBackup, + restoreAccountFromProvider, + uploadPreparedBackup, + type PreparedBackup, + type RestoredAccount, +} from './flow/passkeyOperations.ts' +import { readRememberedProviderId, rememberProviderId } from './storage/rememberedProvider.ts' +import { authenticateWithPasskey, createPasskey, isPasskeyPrfSupported } from './webauthn/passkeyClient.ts' +import { PASSKEY_ERROR_MESSAGES, PasskeyFlowError, toPasskeyFlowError } from './webauthn/passkeyErrors.ts' +import type { + HexString, + PasskeyBackupStorage, + PasskeyErrorCode, + PasskeyLoginWidgetProps, + PasskeyProviderId, +} from './widgetRuntimeContract.ts' + +/** A provider as shown on the B2 / C1 tiles. */ +export interface PasskeyProviderOption { + id: PasskeyProviderId + label: string +} + +export interface PasskeyLoginAdapterActions { + /** A1 "Continue with passkey". */ + startLogin: () => void + /** D2 "Create new account" -> A3. */ + requestNewAccount: () => void + /** A3 "Create new account" -> A4. */ + confirmNewAccount: () => void + /** B1 "Set up passkey backup" -> A4. */ + startBackup: () => void + /** B2 "Continue" / C1 tile press. */ + chooseProvider: (providerId: PasskeyProviderId) => void + /** D2 "Retry", D4 "Try again", D5 "Retry", D6 "Try again". */ + retry: () => void + /** D3 "Try the other provider", D4 "Choose another provider". */ + chooseOtherProvider: () => void + /** D3 / D6 "Back". */ + goBack: () => void + /** B4 / C3 "Continue": hands the result to the host. */ + finish: () => void + /** "Use another login method", "Back to login methods", "Not now", "Skip for now". */ + skip: () => void +} + +export interface PasskeyLoginAdapterResult { + flowState: PasskeyFlowState + providerOptions: PasskeyProviderOption[] + /** Provider preselected on B2: the remembered one, else the first offered. */ + preselectedProviderId: PasskeyProviderId | null + actions: PasskeyLoginAdapterActions +} + +/** + * Secrets of the running flow. They live in a ref, never in React state or props, and are + * dropped as soon as the user leaves the flow or hands the result to the host. + */ +interface PasskeyFlowSecrets { + prfOutput: Bytes | null + /** Account key created for a new user; only released through `onLogin` once the backup exists. */ + newAccountPrivateKey: HexString | null + /** Encrypted backup, kept so D5 "Retry" does not need a new passkey prompt. */ + preparedBackup: PreparedBackup | null + restoredAccount: RestoredAccount | null +} + +const EMPTY_SECRETS: PasskeyFlowSecrets = { + prfOutput: null, + newAccountPrivateKey: null, + preparedBackup: null, + restoredAccount: null, +} + +/** Provider that needs no choice screen: the only one offered, or else the remembered one. */ +function pickKnownProviderId( + providers: PasskeyBackupStorage[], + rememberedProviderId: PasskeyProviderId | null, + useRemembered: boolean, +): PasskeyProviderId | null { + if (providers.length === 1) { + return providers[0].id + } + return useRemembered ? rememberedProviderId : null +} + +/** + * Runs the passkey flow: owns the screen state machine, performs the WebAuthn / crypto / storage + * work of each screen, and reports results to the host through the callbacks. + */ +export function usePasskeyLoginAdapter(props: PasskeyLoginWidgetProps): PasskeyLoginAdapterResult { + const { storage, rpId, appName, privateKey: existingUserPrivateKey } = props + const isExistingUser = existingUserPrivateKey !== undefined + + const [flowState, dispatch] = useReducer( + passkeyFlowReducer, + { isExistingUser, hasMultipleProviders: storage.length > 1 }, + createInitialFlowState, + ) + + // Callbacks and inputs are read through refs so the screen work always sees the latest props + const latestPropsRef = useRef(props) + latestPropsRef.current = props + const secretsRef = useRef({ ...EMPTY_SECRETS }) + const startedAttemptRef = useRef(null) + const supportCheckStartedRef = useRef(false) + + const reportFailure = useCallback((error: unknown, fallbackCode: PasskeyErrorCode) => { + const flowError = toPasskeyFlowError(error, fallbackCode) + dispatch({ type: 'FAILED', errorCode: flowError.code }) + latestPropsRef.current.onError?.({ code: flowError.code, message: flowError.message }) + }, []) + + const findProvider = useCallback((providerId: PasskeyProviderId | null): PasskeyBackupStorage => { + const provider = latestPropsRef.current.storage.find((candidate) => candidate.id === providerId) + if (!provider) { + throw new Error('No backup provider selected') + } + return provider + }, []) + + /** A2: ask for an existing passkey, then restore from the known provider or ask which one. */ + const verifyExistingPasskey = useCallback(async () => { + try { + const { prfOutput } = await authenticateWithPasskey(rpId) + secretsRef.current.prfOutput = prfOutput + const knownProviderId = pickKnownProviderId( + latestPropsRef.current.storage, + readRememberedProviderId(latestPropsRef.current.storage), + true, + ) + dispatch({ type: 'PASSKEY_VERIFIED', providerId: knownProviderId }) + } catch (error) { + reportFailure(error, 'PASSKEY_CANCELLED') + } + }, [reportFailure, rpId]) + + /** C2: find, read and decrypt the backup of the verified passkey. */ + const restoreFromProvider = useCallback( + async (providerId: PasskeyProviderId | null) => { + try { + const provider = findProvider(providerId) + const { prfOutput } = secretsRef.current + if (!prfOutput) { + throw new Error('Passkey was not verified') + } + secretsRef.current.restoredAccount = await restoreAccountFromProvider({ + provider, + prfOutput, + rpId, + onBackupFound: () => dispatch({ type: 'PROGRESS_ADVANCED' }), + }) + rememberProviderId(provider.id) + dispatch({ type: 'RESTORE_SUCCEEDED' }) + } catch (error) { + reportFailure(error, 'PROVIDER_AUTH_FAILED') + } + }, + [findProvider, reportFailure, rpId], + ) + + /** A4: create a fresh passkey, make (or take) the account key and encrypt it for the backup. */ + const createPasskeyAndEncryptKey = useCallback( + async (isNewAccount: boolean) => { + try { + const { prfOutput } = await createPasskey({ rpId, appName }) + secretsRef.current.prfOutput = prfOutput + dispatch({ type: 'PROGRESS_ADVANCED' }) + + // Existing users keep their own key; only a new account gets a key derived from the passkey + const accountPrivateKey = isNewAccount + ? await deriveAccountKey(prfOutput) + : (latestPropsRef.current.privateKey as HexString) + secretsRef.current.newAccountPrivateKey = isNewAccount ? accountPrivateKey : null + dispatch({ type: 'PROGRESS_ADVANCED' }) + + secretsRef.current.preparedBackup = await prepareAccountBackup({ + privateKey: accountPrivateKey, + prfOutput, + rpId, + }) + dispatch({ type: 'PROGRESS_ADVANCED' }) + + const knownProviderId = pickKnownProviderId( + latestPropsRef.current.storage, + readRememberedProviderId(latestPropsRef.current.storage), + false, + ) + dispatch({ type: 'PASSKEY_CREATED', providerId: knownProviderId }) + } catch (error) { + reportFailure(error, 'BACKUP_FAILED') + } + }, + [appName, reportFailure, rpId], + ) + + /** B3: upload the prepared (already encrypted) backup. */ + const uploadBackup = useCallback( + async (providerId: PasskeyProviderId | null) => { + try { + const provider = findProvider(providerId) + const { preparedBackup } = secretsRef.current + if (!preparedBackup) { + throw new Error('No backup prepared') + } + await uploadPreparedBackup(provider, preparedBackup) + rememberProviderId(provider.id) + dispatch({ type: 'BACKUP_SUCCEEDED' }) + } catch (error) { + reportFailure(error, 'BACKUP_FAILED') + } + }, + [findProvider, reportFailure], + ) + + // The work of a screen starts once per screen entry (attempt), never on plain re-renders + useEffect(() => { + if (startedAttemptRef.current === flowState.attempt) { + return + } + startedAttemptRef.current = flowState.attempt + + switch (flowState.screen) { + case 'A1_ENTRY': + case 'B1_BACKUP_PROMPT': + // Back at the start of the journey: nothing of the previous attempt is kept + secretsRef.current = { ...EMPTY_SECRETS } + break + case 'A2_AUTHENTICATING': + void verifyExistingPasskey() + break + case 'C2_RESTORE_PROGRESS': + void restoreFromProvider(flowState.providerId) + break + case 'A4_CREATE_PASSKEY': + void createPasskeyAndEncryptKey(flowState.flowKind === 'new-account') + break + case 'B3_BACKUP_PROGRESS': + void uploadBackup(flowState.providerId) + break + default: + break + } + }, [createPasskeyAndEncryptKey, flowState, restoreFromProvider, uploadBackup, verifyExistingPasskey]) + + // Browsers without WebAuthn / PRF go straight to D1 + useEffect(() => { + if (supportCheckStartedRef.current) { + return + } + supportCheckStartedRef.current = true + void isPasskeyPrfSupported().then((isSupported) => { + if (!isSupported) { + reportFailure( + new PasskeyFlowError('UNSUPPORTED_BROWSER', PASSKEY_ERROR_MESSAGES.UNSUPPORTED_BROWSER), + 'UNSUPPORTED_BROWSER', + ) + } + }) + }, [reportFailure]) + + const finish = useCallback(() => { + const { onLogin, onBackupComplete } = latestPropsRef.current + const { restoredAccount, newAccountPrivateKey, preparedBackup } = secretsRef.current + + if (flowState.screen === 'C3_RESTORE_SUCCESS' && restoredAccount) { + onLogin?.({ ...restoredAccount, isNewAccount: false }) + } + if (flowState.screen === 'B4_BACKUP_SUCCESS' && preparedBackup && flowState.providerId) { + if (flowState.flowKind === 'new-account' && newAccountPrivateKey) { + onLogin?.({ privateKey: newAccountPrivateKey, address: preparedBackup.address, isNewAccount: true }) + } + onBackupComplete?.({ address: preparedBackup.address, provider: flowState.providerId }) + } + // The result has been handed over; nothing secret stays inside the widget + secretsRef.current = { ...EMPTY_SECRETS } + }, [flowState.flowKind, flowState.providerId, flowState.screen]) + + const skip = useCallback(() => { + secretsRef.current = { ...EMPTY_SECRETS } + latestPropsRef.current.onSkip?.() + }, []) + + const actions: PasskeyLoginAdapterActions = { + startLogin: () => dispatch({ type: 'LOGIN_STARTED' }), + requestNewAccount: () => dispatch({ type: 'NEW_ACCOUNT_REQUESTED' }), + confirmNewAccount: () => dispatch({ type: 'NEW_ACCOUNT_CONFIRMED' }), + startBackup: () => dispatch({ type: 'BACKUP_REQUESTED' }), + chooseProvider: (providerId) => dispatch({ type: 'PROVIDER_CHOSEN', providerId }), + retry: () => dispatch({ type: 'RETRY_REQUESTED' }), + chooseOtherProvider: () => dispatch({ type: 'OTHER_PROVIDER_REQUESTED' }), + goBack: () => dispatch({ type: 'BACK_REQUESTED' }), + finish, + skip, + } + + const providerOptions = storage.map(({ id, label }) => ({ id, label })) + const preselectedProviderId = readRememberedProviderId(storage) ?? storage[0]?.id ?? null + + return { flowState, providerOptions, preselectedProviderId, actions } +} diff --git a/packages/passkey-login-widget/src/components/BackupScreens.tsx b/packages/passkey-login-widget/src/components/BackupScreens.tsx new file mode 100644 index 00000000..5adef44c --- /dev/null +++ b/packages/passkey-login-widget/src/components/BackupScreens.tsx @@ -0,0 +1,90 @@ +import React, { useState } from 'react' +import { Text, YStack } from '@goodwidget/ui' +import type { PasskeyLoginAdapterActions, PasskeyProviderOption } from '../adapter.ts' +import type { PasskeyProviderId } from '../widgetRuntimeContract.ts' +import { ProgressSteps } from './ProgressSteps.tsx' +import { ProviderChoice } from './ProviderChoice.tsx' +import { ScreenAction, ScreenCard } from './ScreenCard.tsx' + +/** B1: offers an already logged-in user to back up their account with a passkey. */ +export function BackupPromptScreen({ actions }: { actions: PasskeyLoginAdapterActions }) { + return ( + + + + + + + ) +} + +export interface BackupProviderScreenProps { + providerOptions: PasskeyProviderOption[] + /** Tile that starts out selected: the remembered provider, else the first one offered. */ + preselectedProviderId: PasskeyProviderId | null + onContinue: (providerId: PasskeyProviderId) => void +} + +/** B2: choose where the backup is stored; the chosen tile is confirmed with Continue. */ +export function BackupProviderScreen({ providerOptions, preselectedProviderId, onContinue }: BackupProviderScreenProps) { + const [selectedProviderId, setSelectedProviderId] = useState(preselectedProviderId) + return ( + + + + Encrypted with your passkey. Only you can decrypt it. + + { + if (selectedProviderId) { + onContinue(selectedProviderId) + } + }} + /> + + ) +} + +export interface BackupProgressScreenProps { + providerLabel: string +} + +/** B3: key is encrypted and being uploaded to the chosen provider. */ +export function BackupProgressScreen({ providerLabel }: BackupProgressScreenProps) { + const stepLabels = ['Passkey verified', 'Key encrypted', `Uploading to ${providerLabel}`] + return ( + + + + ) +} + +/** B4: the backup exists. */ +export function BackupSuccessScreen({ + providerLabel, + actions, +}: { + providerLabel: string + actions: PasskeyLoginAdapterActions +}) { + return ( + + + + ) +} diff --git a/packages/passkey-login-widget/src/components/ErrorScreens.tsx b/packages/passkey-login-widget/src/components/ErrorScreens.tsx new file mode 100644 index 00000000..f6aea474 --- /dev/null +++ b/packages/passkey-login-widget/src/components/ErrorScreens.tsx @@ -0,0 +1,129 @@ +import React from 'react' +import { Alert, YStack } from '@goodwidget/ui' +import type { PasskeyLoginAdapterActions } from '../adapter.ts' +import { ScreenAction, ScreenCard } from './ScreenCard.tsx' +import type { ReactNode } from 'react' + +interface ErrorScreenProps { + screenId: string + title: string + message?: string + children: ReactNode +} + +/** Shared D-screen layout: red alert, then the recovery actions. */ +function ErrorScreen({ screenId, title, message, children }: ErrorScreenProps) { + return ( + + + {children} + + ) +} + +/** D1: no WebAuthn / PRF support. Only way out is another login method. */ +export function UnsupportedBrowserScreen({ actions }: { actions: PasskeyLoginAdapterActions }) { + return ( + + + + + ) +} + +/** + * D2: the passkey request failed or was cancelled. WebAuthn cannot tell "cancelled" from "no + * passkey on this device", so a failed login attempt also offers to create a new account. + */ +export function PasskeyCancelledScreen({ + actions, + offersNewAccount, +}: { + actions: PasskeyLoginAdapterActions + offersNewAccount: boolean +}) { + return ( + + + {offersNewAccount && ( + + )} + + ) +} + +/** D3: no backup under this passkey at the chosen provider. */ +export function BackupNotFoundScreen({ + providerLabel, + offersOtherProvider, + actions, +}: { + providerLabel: string + offersOtherProvider: boolean + actions: PasskeyLoginAdapterActions +}) { + return ( + + {offersOtherProvider && } + + + ) +} + +/** D4: sign-in or consent with the provider failed. */ +export function ProviderAuthFailedScreen({ + providerLabel, + offersOtherProvider, + actions, +}: { + providerLabel: string + offersOtherProvider: boolean + actions: PasskeyLoginAdapterActions +}) { + return ( + + + {offersOtherProvider && ( + + )} + + ) +} + +/** D5: the backup could not be written. Skipping is only offered to users who are already logged in. */ +export function BackupFailedScreen({ + offersSkip, + actions, +}: { + offersSkip: boolean + actions: PasskeyLoginAdapterActions +}) { + return ( + + + {offersSkip && } + + ) +} + +/** D6: the backup could not be unlocked, or several backups matched one passkey (`AMBIGUOUS_BACKUP`). */ +export function DecryptFailedScreen({ + isAmbiguousBackup, + actions, +}: { + isAmbiguousBackup: boolean + actions: PasskeyLoginAdapterActions +}) { + const title = isAmbiguousBackup + ? 'More than one backup matches this passkey' + : "Couldn't unlock this backup with your passkey" + const message = isAmbiguousBackup + ? "We can't tell which account to restore. Contact support before continuing." + : undefined + return ( + + + + + ) +} diff --git a/packages/passkey-login-widget/src/components/LoginScreens.tsx b/packages/passkey-login-widget/src/components/LoginScreens.tsx new file mode 100644 index 00000000..a0f87816 --- /dev/null +++ b/packages/passkey-login-widget/src/components/LoginScreens.tsx @@ -0,0 +1,55 @@ +import React from 'react' +import { Alert, YStack } from '@goodwidget/ui' +import type { PasskeyLoginAdapterActions } from '../adapter.ts' +import { ProgressSteps } from './ProgressSteps.tsx' +import { ScreenAction, ScreenCard, WaitingState } from './ScreenCard.tsx' + +/** Steps shown while a new passkey and account are created (A4). */ +export const CREATE_PASSKEY_STEP_LABELS = ['Create passkey', 'Generate account', 'Encrypt key', 'Back up'] + +/** A1: entry screen of the login flow. */ +export function EntryScreen({ actions }: { actions: PasskeyLoginAdapterActions }) { + return ( + + + + + + + ) +} + +/** A2: waiting for the passkey prompt of the browser. */ +export function AuthenticatingScreen() { + return ( + + + + ) +} + +/** A3: confirms that continuing creates a brand-new account, and points existing users to the backup route. */ +export function NewAccountWarningScreen({ actions }: { actions: PasskeyLoginAdapterActions }) { + return ( + + + + + + + + + ) +} + +/** A4: creating the passkey, the account and the first backup. */ +export function CreatePasskeyScreen({ activeStepIndex }: { activeStepIndex: number }) { + return ( + + + + ) +} diff --git a/packages/passkey-login-widget/src/components/PasskeyLoginWidgetView.tsx b/packages/passkey-login-widget/src/components/PasskeyLoginWidgetView.tsx new file mode 100644 index 00000000..a2fb6b98 --- /dev/null +++ b/packages/passkey-login-widget/src/components/PasskeyLoginWidgetView.tsx @@ -0,0 +1,97 @@ +import React from 'react' +import { WidgetVersion, YStack } from '@goodwidget/ui' +import { version } from '../../package.json' +import type { PasskeyLoginAdapterResult } from '../adapter.ts' +import { BackupFailedScreen, BackupNotFoundScreen, DecryptFailedScreen, PasskeyCancelledScreen, ProviderAuthFailedScreen, UnsupportedBrowserScreen } from './ErrorScreens.tsx' +import { BackupProgressScreen, BackupPromptScreen, BackupProviderScreen, BackupSuccessScreen } from './BackupScreens.tsx' +import { AuthenticatingScreen, CreatePasskeyScreen, EntryScreen, NewAccountWarningScreen } from './LoginScreens.tsx' +import { RestoreProgressScreen, RestoreProviderScreen, RestoreSuccessScreen } from './RestoreScreens.tsx' + +/** Used in provider-dependent copy when no provider was picked yet. */ +const FALLBACK_PROVIDER_LABEL = 'your backup provider' + +export interface PasskeyLoginWidgetViewProps { + adapter: PasskeyLoginAdapterResult + 'data-testid'?: string +} + +/** Renders the screen the flow is currently on (A1-D6). All behavior lives in the adapter. */ +export function PasskeyLoginWidgetView({ + adapter, + 'data-testid': dataTestId = 'passkey-login-widget', +}: PasskeyLoginWidgetViewProps) { + const { flowState, providerOptions, preselectedProviderId, actions } = adapter + const providerLabel = + providerOptions.find((providerOption) => providerOption.id === flowState.providerId)?.label ?? + FALLBACK_PROVIDER_LABEL + const { hasMultipleProviders, isExistingUser } = flowState + + function renderScreen() { + switch (flowState.screen) { + case 'A1_ENTRY': + return + case 'A2_AUTHENTICATING': + return + case 'A3_NEW_ACCOUNT_WARNING': + return + case 'A4_CREATE_PASSKEY': + return + case 'B1_BACKUP_PROMPT': + return + case 'B2_BACKUP_PROVIDER': + return ( + + ) + case 'B3_BACKUP_PROGRESS': + return + case 'B4_BACKUP_SUCCESS': + return + case 'C1_RESTORE_PROVIDER': + return + case 'C2_RESTORE_PROGRESS': + return + case 'C3_RESTORE_SUCCESS': + return + case 'D1_UNSUPPORTED_BROWSER': + return + case 'D2_PASSKEY_CANCELLED': + return ( + + ) + case 'D3_BACKUP_NOT_FOUND': + return ( + + ) + case 'D4_PROVIDER_AUTH_FAILED': + return ( + + ) + case 'D5_BACKUP_FAILED': + return + case 'D6_DECRYPT_FAILED': + return + } + } + + return ( + + {renderScreen()} + + + ) +} diff --git a/packages/passkey-login-widget/src/components/ProgressSteps.tsx b/packages/passkey-login-widget/src/components/ProgressSteps.tsx new file mode 100644 index 00000000..4397e3f7 --- /dev/null +++ b/packages/passkey-login-widget/src/components/ProgressSteps.tsx @@ -0,0 +1,18 @@ +import React from 'react' +import { Stepper, type StepperStepItem } from '@goodwidget/ui' + +export interface ProgressStepsProps { + stepLabels: string[] + activeStepIndex: number +} + +/** Stepper for the A4 / B3 / C2 progress screens: earlier steps done, the active one running, the rest pending. */ +export function ProgressSteps({ stepLabels, activeStepIndex }: ProgressStepsProps) { + const steps: StepperStepItem[] = stepLabels.map((title, index) => ({ + id: `step-${index}`, + title, + status: index < activeStepIndex ? 'completed' : index === activeStepIndex ? 'active' : 'pending', + })) + // activeStepId null: the stepper must not scroll the host page + return +} diff --git a/packages/passkey-login-widget/src/components/ProviderChoice.tsx b/packages/passkey-login-widget/src/components/ProviderChoice.tsx new file mode 100644 index 00000000..1cb9d5b2 --- /dev/null +++ b/packages/passkey-login-widget/src/components/ProviderChoice.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { XStack } from '@goodwidget/ui' +import type { PasskeyProviderOption } from '../adapter.ts' +import type { PasskeyProviderId } from '../widgetRuntimeContract.ts' +import { ProviderTile } from './ProviderTile.tsx' + +export interface ProviderChoiceProps { + providerOptions: PasskeyProviderOption[] + selectedProviderId: PasskeyProviderId | null + onSelect: (providerId: PasskeyProviderId) => void +} + +/** Row of provider tiles exposed as one radio group. */ +export function ProviderChoice({ providerOptions, selectedProviderId, onSelect }: ProviderChoiceProps) { + return ( + + {providerOptions.map((providerOption) => ( + + ))} + + ) +} diff --git a/packages/passkey-login-widget/src/components/ProviderLogo.tsx b/packages/passkey-login-widget/src/components/ProviderLogo.tsx new file mode 100644 index 00000000..71a1b393 --- /dev/null +++ b/packages/passkey-login-widget/src/components/ProviderLogo.tsx @@ -0,0 +1,44 @@ +import React from 'react' +import type { PasskeyProviderId } from '../widgetRuntimeContract.ts' + +const LOGO_SIZE_PX = 32 + +/** Google Drive triangle in the brand colors (official logo geometry, viewBox 87.3 x 78). */ +function GoogleDriveLogo() { + return ( + + ) +} + +/** iCloud cloud glyph in Apple's blue. */ +function ICloudLogo() { + return ( + + ) +} + +const LOGO_BY_PROVIDER_ID: Record React.JSX.Element> = { + 'google-drive': GoogleDriveLogo, + icloud: ICloudLogo, +} + +/** Brand logo of a backup provider, decorative (the provider name is always printed next to it). */ +export function ProviderLogo({ providerId }: { providerId: PasskeyProviderId }) { + const Logo = LOGO_BY_PROVIDER_ID[providerId] + return +} diff --git a/packages/passkey-login-widget/src/components/ProviderTile.tsx b/packages/passkey-login-widget/src/components/ProviderTile.tsx new file mode 100644 index 00000000..790d6388 --- /dev/null +++ b/packages/passkey-login-widget/src/components/ProviderTile.tsx @@ -0,0 +1,54 @@ +import React from 'react' +import { createComponent, Stack, Text } from '@goodwidget/ui' +import type { PasskeyProviderId } from '../widgetRuntimeContract.ts' +import { ProviderLogo } from './ProviderLogo.tsx' + +/** + * Selectable provider tile. Named so the `light_/dark_PasskeyProviderTile` component themes + * in `config.ts` drive its surface; the selected state uses the primary / info tokens. + */ +const ProviderTileFrame = createComponent(Stack, { + name: 'PasskeyProviderTile', + tag: 'button', + flex: 1, + alignItems: 'center', + paddingVertical: '$5', + gap: '$2', + borderWidth: 2, + borderRadius: '$3', + backgroundColor: '$background', + borderColor: '$borderColor', + cursor: 'pointer', + hoverStyle: { backgroundColor: '$backgroundHover' }, + pressStyle: { backgroundColor: '$backgroundPress' }, + focusStyle: { outlineStyle: 'solid', outlineWidth: 2, outlineColor: '$borderColorFocus' }, + variants: { + selected: { + true: { borderColor: '$primary', backgroundColor: '$infoMuted' }, + }, + } as const, +}) + +export interface ProviderTileProps { + providerId: PasskeyProviderId + label: string + selected: boolean + onSelect: (providerId: PasskeyProviderId) => void +} + +/** One radio option of a provider choice group (B2 / C1). Native button: Space/Enter select it. */ +export function ProviderTile({ providerId, label, selected, onSelect }: ProviderTileProps) { + return ( + onSelect(providerId)} + data-testid={`provider-tile-${providerId}`} + > + + {label} + + ) +} diff --git a/packages/passkey-login-widget/src/components/RestoreScreens.tsx b/packages/passkey-login-widget/src/components/RestoreScreens.tsx new file mode 100644 index 00000000..9f28f17b --- /dev/null +++ b/packages/passkey-login-widget/src/components/RestoreScreens.tsx @@ -0,0 +1,43 @@ +import React from 'react' +import type { PasskeyLoginAdapterActions } from '../adapter.ts' +import { ProgressSteps } from './ProgressSteps.tsx' +import { ProviderChoice } from './ProviderChoice.tsx' +import type { PasskeyProviderOption } from '../adapter.ts' +import type { PasskeyProviderId } from '../widgetRuntimeContract.ts' +import { ScreenAction, ScreenCard } from './ScreenCard.tsx' + +/** Steps shown while an account is restored from a backup (C2). */ +export const RESTORE_STEP_LABELS = ['Passkey verified', 'Backup found', 'Decrypting'] + +/** C1: asks where the backup lives when the widget cannot tell. Pressing a tile continues immediately. */ +export function RestoreProviderScreen({ + providerOptions, + onSelect, +}: { + providerOptions: PasskeyProviderOption[] + onSelect: (providerId: PasskeyProviderId) => void +}) { + return ( + + + + ) +} + +/** C2: looking up, then decrypting the backup. */ +export function RestoreProgressScreen({ activeStepIndex }: { activeStepIndex: number }) { + return ( + + + + ) +} + +/** C3: the account was restored; Continue hands the key to the host. */ +export function RestoreSuccessScreen({ actions }: { actions: PasskeyLoginAdapterActions }) { + return ( + + + + ) +} diff --git a/packages/passkey-login-widget/src/components/ScreenCard.tsx b/packages/passkey-login-widget/src/components/ScreenCard.tsx new file mode 100644 index 00000000..98cefaa9 --- /dev/null +++ b/packages/passkey-login-widget/src/components/ScreenCard.tsx @@ -0,0 +1,71 @@ +import React from 'react' +import type { ReactNode } from 'react' +import { Button, ButtonText, Card, Heading, Icon, Spinner, Text, YStack, type IconName } from '@goodwidget/ui' + +export interface ScreenCardProps { + icon?: IconName + title?: string + description?: string + 'data-testid'?: string + children?: ReactNode +} + +/** Shared card shell of every screen: optional icon, title and description, then the screen body. */ +export function ScreenCard({ icon, title, description, 'data-testid': dataTestId, children }: ScreenCardProps) { + return ( + + {title && ( + + {icon && } + + {title} + + {description && ( + + {description} + + )} + + )} + {children} + + ) +} + +export interface ScreenActionProps { + label: string + onPress: () => void + /** primary: solid; secondary: outlined; text: centered low-emphasis link style. */ + variant?: 'primary' | 'secondary' | 'text' + 'data-testid'?: string +} + +/** Action button of a screen in one of the three emphasis levels used by the designs. */ +export function ScreenAction({ label, onPress, variant = 'primary', 'data-testid': dataTestId }: ScreenActionProps) { + if (variant === 'text') { + return ( + + + + ) + } + return ( + + ) +} + +/** Body of an in-progress screen: spinner plus a status line. */ +export function WaitingState({ message }: { message: string }) { + return ( + + + + {message} + + + ) +} diff --git a/packages/passkey-login-widget/src/config.ts b/packages/passkey-login-widget/src/config.ts new file mode 100644 index 00000000..698a08b9 --- /dev/null +++ b/packages/passkey-login-widget/src/config.ts @@ -0,0 +1,30 @@ +import type { GoodWidgetConfig } from '@goodwidget/core' +import { defaultTokenPreset } from '@goodwidget/ui' + +const color = defaultTokenPreset.tokens.color + +/** + * Component themes of the passkey login widget. `PasskeyProviderTile` is the selectable + * Google Drive / iCloud tile; its surface sits on the card, so it uses the page background + * and the regular border colors of each mode. + */ +export const passkeyLoginWidgetConfig = { + themes: { + light_PasskeyProviderTile: { + background: color.governanceBackground, + backgroundHover: color.governanceBackgroundHover, + backgroundPress: color.governanceBackgroundPress, + backgroundFocus: color.governanceBackgroundFocus, + borderColor: color.governanceBorder, + borderColorFocus: color.governancePrimary, + }, + dark_PasskeyProviderTile: { + background: color.backgroundDark, + backgroundHover: color.surfaceAlt, + backgroundPress: color.backgroundInput, + backgroundFocus: color.surfaceAlt, + borderColor: color.borderDark, + borderColorFocus: color.primary, + }, + }, +} as const satisfies GoodWidgetConfig diff --git a/packages/passkey-login-widget/src/crypto/backupCipher.ts b/packages/passkey-login-widget/src/crypto/backupCipher.ts new file mode 100644 index 00000000..831a9802 --- /dev/null +++ b/packages/passkey-login-widget/src/crypto/backupCipher.ts @@ -0,0 +1,52 @@ +import { BackupDecryptError } from './backupErrors.ts' +import { bytesToHex, hexToBytes, type Bytes } from './encoding.ts' +import type { HexString } from '../widgetRuntimeContract.ts' + +/** AES-GCM nonce length in bytes (96 bit, as recommended for GCM). */ +export const BACKUP_IV_BYTE_LENGTH = 12 + +const textEncoder = new TextEncoder() + +export interface EncryptedPayload { + iv: Bytes + /** AES-GCM output including the 16-byte authentication tag. */ + ciphertext: Bytes +} + +/** The address is bound to the ciphertext as AES-GCM additional data, so the pair cannot be swapped. */ +function additionalDataForAddress(address: HexString): Bytes { + return textEncoder.encode(address.toLowerCase()) +} + +/** Encrypts the private key with a fresh random IV on every call. */ +export async function encryptPrivateKey( + privateKey: HexString, + address: HexString, + encryptionKey: CryptoKey, +): Promise { + const iv = crypto.getRandomValues(new Uint8Array(BACKUP_IV_BYTE_LENGTH)) + const ciphertextBuffer = await crypto.subtle.encrypt( + { name: 'AES-GCM', iv, additionalData: additionalDataForAddress(address) }, + encryptionKey, + hexToBytes(privateKey), + ) + return { iv, ciphertext: new Uint8Array(ciphertextBuffer) } +} + +/** Decrypts the private key; any wrong key, tampered data or wrong address surfaces as `BackupDecryptError`. */ +export async function decryptPrivateKey( + payload: EncryptedPayload, + address: HexString, + encryptionKey: CryptoKey, +): Promise { + try { + const plaintextBuffer = await crypto.subtle.decrypt( + { name: 'AES-GCM', iv: payload.iv, additionalData: additionalDataForAddress(address) }, + encryptionKey, + payload.ciphertext, + ) + return bytesToHex(new Uint8Array(plaintextBuffer)) + } catch { + throw new BackupDecryptError('Backup could not be decrypted with this passkey') + } +} diff --git a/packages/passkey-login-widget/src/crypto/backupErrors.ts b/packages/passkey-login-widget/src/crypto/backupErrors.ts new file mode 100644 index 00000000..e035d947 --- /dev/null +++ b/packages/passkey-login-widget/src/crypto/backupErrors.ts @@ -0,0 +1,15 @@ +/** The backup JSON is malformed, has an unknown version, or carries an invalid address. Maps to D6. */ +export class BackupFormatError extends Error { + constructor(message: string) { + super(message) + this.name = 'BackupFormatError' + } +} + +/** The backup could not be decrypted, or the decrypted key does not match the stored address. Maps to D6. */ +export class BackupDecryptError extends Error { + constructor(message: string) { + super(message) + this.name = 'BackupDecryptError' + } +} diff --git a/packages/passkey-login-widget/src/crypto/backupFileName.ts b/packages/passkey-login-widget/src/crypto/backupFileName.ts new file mode 100644 index 00000000..cc61870d --- /dev/null +++ b/packages/passkey-login-widget/src/crypto/backupFileName.ts @@ -0,0 +1,38 @@ +import type { HexString } from '../widgetRuntimeContract.ts' + +/** Every backup file written by this widget starts with this prefix. */ +export const BACKUP_FILE_PREFIX = 'gwpk-' + +/** `prfTag` is 16 bytes in unpadded base64url, which is always 22 characters. */ +const BACKUP_FILE_NAME_PATTERN = /^gwpk-([A-Za-z0-9_-]{22})-(0x[0-9a-f]{40})\.json$/ + +export interface ParsedBackupFileName { + prfTag: string + /** Lowercase public address of the backed-up account. */ + address: HexString +} + +/** + * Builds `gwpk--
.json`. The address is lowercased so re-backing up + * the same account always produces the same name. Contains no secret material. + */ +export function buildBackupFileName(prfTag: string, address: HexString): string { + return `${BACKUP_FILE_PREFIX}${prfTag}-${address.toLowerCase()}.json` +} + +/** Parses a backup file name; returns null for anything this widget did not write. */ +export function parseBackupFileName(fileName: string): ParsedBackupFileName | null { + const match = BACKUP_FILE_NAME_PATTERN.exec(fileName) + if (!match) { + return null + } + return { prfTag: match[1], address: match[2] as HexString } +} + +/** + * Keeps only well-formed backup names that belong to the given passkey. + * Storage adapters use this so prefix filtering is identical for every provider. + */ +export function filterBackupNamesByTag(fileNames: string[], prfTag: string): string[] { + return fileNames.filter((fileName) => parseBackupFileName(fileName)?.prfTag === prfTag) +} diff --git a/packages/passkey-login-widget/src/crypto/backupFormat.test.ts b/packages/passkey-login-widget/src/crypto/backupFormat.test.ts new file mode 100644 index 00000000..121dca9c --- /dev/null +++ b/packages/passkey-login-widget/src/crypto/backupFormat.test.ts @@ -0,0 +1,127 @@ +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { decryptPrivateKey } from './backupCipher.ts' +import { BackupDecryptError, BackupFormatError } from './backupErrors.ts' +import { buildBackupFileName, filterBackupNamesByTag, parseBackupFileName } from './backupFileName.ts' +import { createBackupJson, parseBackupJson, restorePrivateKeyFromBackupJson } from './backupFormat.ts' +import { decodeBase64, decodeBase64Url, encodeBase64, hexToBytes } from './encoding.ts' +import { addressOfPrivateKey, deriveBackupEncryptionKey } from './prfDerivation.ts' +import { createFakePrfOutput } from '../testFixtures.ts' + +const PRIVATE_KEY = `0x${'22'.repeat(32)}` as const +const OTHER_PRIVATE_KEY = `0x${'33'.repeat(32)}` as const + +describe('backup file names', () => { + const prfTag = 'abcdefghijklmnopqrstuv' + const address = addressOfPrivateKey(PRIVATE_KEY) + + it('builds and parses gwpk--
.json with a lowercase address', () => { + const fileName = buildBackupFileName(prfTag, address.toUpperCase().replace('0X', '0x') as typeof address) + assert.equal(fileName, `gwpk-${prfTag}-${address}.json`) + assert.deepEqual(parseBackupFileName(fileName), { prfTag, address }) + }) + + it('rejects names this widget did not write', () => { + assert.equal(parseBackupFileName('notes.json'), null) + assert.equal(parseBackupFileName(`gwpk-short-${address}.json`), null) + assert.equal(parseBackupFileName(`gwpk-${prfTag}-${address}.txt`), null) + assert.equal(parseBackupFileName(`gwpk-${prfTag}-0xZZ.json`), null) + }) + + it('keeps only the names of the given passkey', () => { + const ownName = buildBackupFileName(prfTag, address) + const foreignName = buildBackupFileName('zzzzzzzzzzzzzzzzzzzzzz', address) + assert.deepEqual(filterBackupNamesByTag([ownName, foreignName, 'unrelated.json'], prfTag), [ownName]) + }) +}) + +describe('encoding', () => { + it('rejects non-canonical base64 and base64url', () => { + assert.throws(() => decodeBase64('AB==')) + assert.throws(() => decodeBase64('A')) + assert.throws(() => decodeBase64Url('a+b')) + assert.deepEqual(decodeBase64(encodeBase64(new Uint8Array([1, 2, 3]))), new Uint8Array([1, 2, 3])) + }) + + it('rejects malformed hex', () => { + assert.throws(() => hexToBytes('0x123')) + assert.throws(() => hexToBytes('12')) + }) +}) + +describe('backup JSON', () => { + async function createBackupFor(privateKey: typeof PRIVATE_KEY, passkeySeed: number) { + const encryptionKey = await deriveBackupEncryptionKey(createFakePrfOutput(passkeySeed)) + return { backupJson: await createBackupJson(privateKey, encryptionKey), encryptionKey } + } + + it('round-trips the private key and writes the documented v1 shape', async () => { + const { backupJson, encryptionKey } = await createBackupFor(PRIVATE_KEY, 1) + const content = JSON.parse(backupJson) + assert.deepEqual(Object.keys(content).sort(), ['address', 'ciphertext', 'iv', 'version']) + assert.equal(content.version, 1) + assert.equal(content.address, addressOfPrivateKey(PRIVATE_KEY)) + assert.equal(decodeBase64(content.iv).length, 12) + assert.ok(!backupJson.includes(PRIVATE_KEY.slice(2))) + + const restored = await restorePrivateKeyFromBackupJson(backupJson, encryptionKey) + assert.deepEqual(restored, { privateKey: PRIVATE_KEY, address: addressOfPrivateKey(PRIVATE_KEY) }) + }) + + it('uses a fresh IV for every backup of the same key', async () => { + const first = JSON.parse((await createBackupFor(PRIVATE_KEY, 1)).backupJson) + const second = JSON.parse((await createBackupFor(PRIVATE_KEY, 1)).backupJson) + assert.notEqual(first.iv, second.iv) + assert.notEqual(first.ciphertext, second.ciphertext) + }) + + it('fails to decrypt with another passkey', async () => { + const { backupJson } = await createBackupFor(PRIVATE_KEY, 1) + const wrongPasskeyKey = await deriveBackupEncryptionKey(createFakePrfOutput(2)) + await assert.rejects(restorePrivateKeyFromBackupJson(backupJson, wrongPasskeyKey), BackupDecryptError) + }) + + it('fails when the ciphertext was tampered with', async () => { + const { backupJson, encryptionKey } = await createBackupFor(PRIVATE_KEY, 1) + const content = JSON.parse(backupJson) + const tamperedBytes = decodeBase64(content.ciphertext) + tamperedBytes[0] ^= 1 + const tamperedJson = JSON.stringify({ ...content, ciphertext: encodeBase64(tamperedBytes) }) + await assert.rejects(restorePrivateKeyFromBackupJson(tamperedJson, encryptionKey), BackupDecryptError) + }) + + it('fails when the stored address was swapped (address is authenticated data)', async () => { + const { backupJson, encryptionKey } = await createBackupFor(PRIVATE_KEY, 1) + const swappedJson = JSON.stringify({ ...JSON.parse(backupJson), address: addressOfPrivateKey(OTHER_PRIVATE_KEY) }) + await assert.rejects(restorePrivateKeyFromBackupJson(swappedJson, encryptionKey), BackupDecryptError) + }) + + it('fails when the decrypted key does not belong to the stored address', async () => { + const encryptionKey = await deriveBackupEncryptionKey(createFakePrfOutput(1)) + const wrongAddress = addressOfPrivateKey(OTHER_PRIVATE_KEY) + // Encrypt PRIVATE_KEY but label it with another address: AAD matches, the key/address check must still fail + const { encryptPrivateKey } = await import('./backupCipher.ts') + const { iv, ciphertext } = await encryptPrivateKey(PRIVATE_KEY, wrongAddress, encryptionKey) + const mismatchedJson = JSON.stringify({ version: 1, address: wrongAddress, iv: encodeBase64(iv), ciphertext: encodeBase64(ciphertext) }) + assert.equal(await decryptPrivateKey({ iv, ciphertext }, wrongAddress, encryptionKey), PRIVATE_KEY) + await assert.rejects(restorePrivateKeyFromBackupJson(mismatchedJson, encryptionKey), BackupDecryptError) + }) + + it('rejects malformed backups', async () => { + const { backupJson } = await createBackupFor(PRIVATE_KEY, 1) + const content = JSON.parse(backupJson) + const malformedBackups = [ + 'not json', + '[]', + JSON.stringify({ ...content, version: 2 }), + JSON.stringify({ ...content, version: undefined }), + JSON.stringify({ ...content, address: '0x123' }), + JSON.stringify({ ...content, iv: encodeBase64(new Uint8Array(8)) }), + JSON.stringify({ ...content, ciphertext: encodeBase64(new Uint8Array(10)) }), + JSON.stringify({ ...content, ciphertext: 7 }), + ] + for (const malformedBackup of malformedBackups) { + assert.throws(() => parseBackupJson(malformedBackup), BackupFormatError) + } + }) +}) diff --git a/packages/passkey-login-widget/src/crypto/backupFormat.ts b/packages/passkey-login-widget/src/crypto/backupFormat.ts new file mode 100644 index 00000000..7ebc8dbb --- /dev/null +++ b/packages/passkey-login-widget/src/crypto/backupFormat.ts @@ -0,0 +1,90 @@ +import { BackupDecryptError, BackupFormatError } from './backupErrors.ts' +import { BACKUP_IV_BYTE_LENGTH, decryptPrivateKey, encryptPrivateKey } from './backupCipher.ts' +import { addressOfPrivateKey } from './prfDerivation.ts' +import { decodeBase64, encodeBase64 } from './encoding.ts' +import type { HexString } from '../widgetRuntimeContract.ts' + +/** The only backup format version. Older/newer versions are rejected, there are no compatibility shims. */ +export const BACKUP_FORMAT_VERSION = 1 + +/** 32-byte private key plus the 16-byte AES-GCM tag. */ +const MINIMUM_CIPHERTEXT_BYTE_LENGTH = 48 + +const ADDRESS_PATTERN = /^0x[0-9a-fA-F]{40}$/ + +/** Shape of the JSON file stored with the provider. */ +export interface BackupFileContent { + version: number + address: HexString + /** base64, 12 bytes */ + iv: string + /** base64, AES-GCM output including the tag */ + ciphertext: string +} + +/** Encrypts the account key and returns the versioned backup JSON to upload. */ +export async function createBackupJson(privateKey: HexString, encryptionKey: CryptoKey): Promise { + const address = addressOfPrivateKey(privateKey) + const { iv, ciphertext } = await encryptPrivateKey(privateKey, address, encryptionKey) + const content: BackupFileContent = { + version: BACKUP_FORMAT_VERSION, + address, + iv: encodeBase64(iv), + ciphertext: encodeBase64(ciphertext), + } + return JSON.stringify(content) +} + +/** Parses and validates backup JSON; throws `BackupFormatError` for anything that is not a valid v1 backup. */ +export function parseBackupJson(backupJson: string): BackupFileContent { + let parsed: unknown + try { + parsed = JSON.parse(backupJson) + } catch { + throw new BackupFormatError('Backup is not valid JSON') + } + if (typeof parsed !== 'object' || parsed === null) { + throw new BackupFormatError('Backup is not an object') + } + const { version, address, iv, ciphertext } = parsed as Record + if (version !== BACKUP_FORMAT_VERSION) { + throw new BackupFormatError(`Unsupported backup version: ${String(version)}`) + } + if (typeof address !== 'string' || !ADDRESS_PATTERN.test(address)) { + throw new BackupFormatError('Backup address is invalid') + } + if (typeof iv !== 'string' || typeof ciphertext !== 'string') { + throw new BackupFormatError('Backup is missing iv or ciphertext') + } + try { + if (decodeBase64(iv).length !== BACKUP_IV_BYTE_LENGTH) { + throw new Error('Wrong IV length') + } + if (decodeBase64(ciphertext).length < MINIMUM_CIPHERTEXT_BYTE_LENGTH) { + throw new Error('Ciphertext too short') + } + } catch { + throw new BackupFormatError('Backup iv or ciphertext is invalid') + } + return { version, address: address.toLowerCase() as HexString, iv, ciphertext } +} + +/** + * Decrypts a backup and verifies that the recovered key reproduces the stored address. + * Wrong passkey, corrupted data and address mismatch all throw (`BackupDecryptError`). + */ +export async function restorePrivateKeyFromBackupJson( + backupJson: string, + encryptionKey: CryptoKey, +): Promise<{ privateKey: HexString; address: HexString }> { + const content = parseBackupJson(backupJson) + const privateKey = await decryptPrivateKey( + { iv: decodeBase64(content.iv), ciphertext: decodeBase64(content.ciphertext) }, + content.address, + encryptionKey, + ) + if (addressOfPrivateKey(privateKey) !== content.address) { + throw new BackupDecryptError('Decrypted key does not match the backup address') + } + return { privateKey, address: content.address } +} diff --git a/packages/passkey-login-widget/src/crypto/encoding.ts b/packages/passkey-login-widget/src/crypto/encoding.ts new file mode 100644 index 00000000..4f7d1de0 --- /dev/null +++ b/packages/passkey-login-widget/src/crypto/encoding.ts @@ -0,0 +1,70 @@ +/** + * Byte <-> text encodings used by the backup format and file names. + * Decoders are strict: anything that is not canonical output of the matching encoder throws. + */ + +/** Byte array backed by a plain ArrayBuffer, which is what WebCrypto/WebAuthn accept as BufferSource. */ +export type Bytes = Uint8Array + +const BASE64_PATTERN = /^[A-Za-z0-9+/]*={0,2}$/ +const BASE64URL_PATTERN = /^[A-Za-z0-9_-]*$/ + +/** Standard base64 (with padding), used for the `iv` and `ciphertext` backup fields. */ +export function encodeBase64(bytes: Bytes): string { + let binary = '' + for (const byte of bytes) { + binary += String.fromCharCode(byte) + } + return btoa(binary) +} + +/** Strict inverse of `encodeBase64`; throws on invalid or non-canonical input. */ +export function decodeBase64(text: string): Bytes { + if (!BASE64_PATTERN.test(text) || text.length % 4 !== 0) { + throw new Error('Invalid base64') + } + const binary = atob(text) + const bytes = new Uint8Array(binary.length) + for (let index = 0; index < binary.length; index += 1) { + bytes[index] = binary.charCodeAt(index) + } + if (encodeBase64(bytes) !== text) { + throw new Error('Non-canonical base64') + } + return bytes +} + +/** URL-safe base64 without padding, used for the `prfTag` in backup file names. */ +export function encodeBase64Url(bytes: Bytes): string { + return encodeBase64(bytes).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') +} + +/** Strict inverse of `encodeBase64Url`. */ +export function decodeBase64Url(text: string): Bytes { + if (!BASE64URL_PATTERN.test(text)) { + throw new Error('Invalid base64url') + } + const padding = '='.repeat((4 - (text.length % 4)) % 4) + return decodeBase64(text.replace(/-/g, '+').replace(/_/g, '/') + padding) +} + +/** Lowercase 0x-prefixed hex of the given bytes. */ +export function bytesToHex(bytes: Bytes): `0x${string}` { + let hex = '0x' + for (const byte of bytes) { + hex += byte.toString(16).padStart(2, '0') + } + return hex as `0x${string}` +} + +/** Bytes of a 0x-prefixed hex string; throws when the string is not valid hex of even length. */ +export function hexToBytes(hex: string): Bytes { + if (!/^0x([0-9a-fA-F]{2})*$/.test(hex)) { + throw new Error('Invalid hex') + } + const bytes = new Uint8Array((hex.length - 2) / 2) + for (let index = 0; index < bytes.length; index += 1) { + bytes[index] = Number.parseInt(hex.slice(2 + index * 2, 4 + index * 2), 16) + } + return bytes +} diff --git a/packages/passkey-login-widget/src/crypto/prfDerivation.test.ts b/packages/passkey-login-widget/src/crypto/prfDerivation.test.ts new file mode 100644 index 00000000..87729c27 --- /dev/null +++ b/packages/passkey-login-widget/src/crypto/prfDerivation.test.ts @@ -0,0 +1,71 @@ +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { bytesToHex } from './encoding.ts' +import { + addressOfPrivateKey, + deriveAccountKey, + deriveBackupEncryptionKey, + deriveBackupFileTag, + toValidAccountKey, +} from './prfDerivation.ts' +import { createFakePrfOutput } from '../testFixtures.ts' + +describe('PRF derivation', () => { + it('derives the same account key and file tag from the same passkey', async () => { + const prfOutput = createFakePrfOutput(1) + assert.equal(await deriveAccountKey(prfOutput), await deriveAccountKey(createFakePrfOutput(1))) + assert.equal( + await deriveBackupFileTag(prfOutput, 'example.org'), + await deriveBackupFileTag(createFakePrfOutput(1), 'example.org'), + ) + }) + + it('derives a 32-byte hex account key that is different for different passkeys', async () => { + const firstKey = await deriveAccountKey(createFakePrfOutput(1)) + const secondKey = await deriveAccountKey(createFakePrfOutput(2)) + assert.match(firstKey, /^0x[0-9a-f]{64}$/) + assert.notEqual(firstKey, secondKey) + }) + + it('separates the account key, the file tag and the encryption key by label', async () => { + const prfOutput = createFakePrfOutput(3) + const accountKey = await deriveAccountKey(prfOutput) + const fileTag = await deriveBackupFileTag(prfOutput, 'example.org') + assert.equal(fileTag.length, 22) + assert.ok(!accountKey.includes(fileTag)) + const encryptionKey = await deriveBackupEncryptionKey(prfOutput) + assert.equal(encryptionKey.extractable, false) + assert.deepEqual(encryptionKey.usages.sort(), ['decrypt', 'encrypt']) + }) + + it('makes the file tag specific to the rpId', async () => { + const prfOutput = createFakePrfOutput(4) + assert.notEqual(await deriveBackupFileTag(prfOutput, 'a.example.org'), await deriveBackupFileTag(prfOutput, 'b.example.org')) + }) + + it('produces a base64url file tag without padding', async () => { + assert.match(await deriveBackupFileTag(createFakePrfOutput(5), 'example.org'), /^[A-Za-z0-9_-]{22}$/) + }) + + it('rejects scalars that are zero or not below the curve order', () => { + assert.throws(() => toValidAccountKey(new Uint8Array(32))) + const curveOrderBytes = Uint8Array.from( + Buffer.from('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 'hex'), + ) + assert.throws(() => toValidAccountKey(curveOrderBytes)) + assert.throws(() => toValidAccountKey(new Uint8Array(32).fill(255))) + assert.throws(() => toValidAccountKey(new Uint8Array(31).fill(1))) + }) + + it('accepts the largest valid scalar (order - 1)', () => { + const largestValidBytes = Uint8Array.from( + Buffer.from('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140', 'hex'), + ) + assert.equal(toValidAccountKey(largestValidBytes), bytesToHex(largestValidBytes)) + }) + + it('returns a lowercase address for a private key', () => { + const address = addressOfPrivateKey(`0x${'11'.repeat(32)}`) + assert.match(address, /^0x[0-9a-f]{40}$/) + }) +}) diff --git a/packages/passkey-login-widget/src/crypto/prfDerivation.ts b/packages/passkey-login-widget/src/crypto/prfDerivation.ts new file mode 100644 index 00000000..1f12b682 --- /dev/null +++ b/packages/passkey-login-widget/src/crypto/prfDerivation.ts @@ -0,0 +1,85 @@ +import { privateKeyToAddress } from 'viem/accounts' +import { encodeBase64Url, bytesToHex, type Bytes } from './encoding.ts' +import type { HexString } from '../widgetRuntimeContract.ts' + +/** + * Fixed, versioned PRF input. Changing it changes every derived value, so a new + * version means a new account family and must be a deliberate format bump. + */ +export const PRF_SALT_TEXT = 'goodwidget:passkey-login:prf:v1' + +/** HKDF `info` labels. Each derivation has its own label so none reveals anything about the others. */ +export const ACCOUNT_KEY_LABEL = 'goodwidget/passkey-login/v1/account-key' +export const BACKUP_ENCRYPTION_KEY_LABEL = 'goodwidget/passkey-login/v1/backup-encryption-key' +export const BACKUP_FILE_TAG_LABEL = 'goodwidget/passkey-login/v1/backup-file-tag' + +const ACCOUNT_KEY_BYTE_LENGTH = 32 +const BACKUP_FILE_TAG_BYTE_LENGTH = 16 + +/** Order of the secp256k1 group; a valid private key is an integer in [1, order - 1]. */ +const SECP256K1_CURVE_ORDER = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n + +const textEncoder = new TextEncoder() + +/** + * HKDF-SHA-256 over the PRF output. + * @param prfOutput secret PRF bytes (kept in memory only) + * @param label domain-separation label (HKDF info) + * @param salt HKDF salt; empty when the derivation is not site-specific + * @param byteLength number of bytes to derive + */ +async function hkdfSha256( + prfOutput: Bytes, + label: string, + salt: Bytes, + byteLength: number, +): Promise { + const inputKey = await crypto.subtle.importKey('raw', prfOutput, 'HKDF', false, ['deriveBits']) + const derivedBits = await crypto.subtle.deriveBits( + { name: 'HKDF', hash: 'SHA-256', salt, info: textEncoder.encode(label) }, + inputKey, + byteLength * 8, + ) + return new Uint8Array(derivedBits) +} + +/** Returns the key as hex when it is a valid secp256k1 scalar; throws otherwise. */ +export function toValidAccountKey(keyBytes: Bytes): HexString { + const keyHex = bytesToHex(keyBytes) + const keyScalar = BigInt(keyHex) + if (keyBytes.length !== ACCOUNT_KEY_BYTE_LENGTH || keyScalar === 0n || keyScalar >= SECP256K1_CURVE_ORDER) { + throw new Error('Derived bytes are not a valid secp256k1 private key') + } + return keyHex +} + +/** 32-byte account private key for a NEW account, derived from the passkey PRF output. */ +export async function deriveAccountKey(prfOutput: Bytes): Promise { + const keyBytes = await hkdfSha256(prfOutput, ACCOUNT_KEY_LABEL, new Uint8Array(0), ACCOUNT_KEY_BYTE_LENGTH) + return toValidAccountKey(keyBytes) +} + +/** AES-256-GCM key that encrypts the account key in the backup file. Non-extractable. */ +export async function deriveBackupEncryptionKey(prfOutput: Bytes): Promise { + const keyBytes = await hkdfSha256(prfOutput, BACKUP_ENCRYPTION_KEY_LABEL, new Uint8Array(0), 32) + return crypto.subtle.importKey('raw', keyBytes, { name: 'AES-GCM' }, false, ['encrypt', 'decrypt']) +} + +/** + * `prfTag`: one-way 22-character base64url tag, unique per passkey AND per rpId + * (rpId is the HKDF salt). Used in backup file names to find the backup of this passkey. + */ +export async function deriveBackupFileTag(prfOutput: Bytes, rpId: string): Promise { + const tagBytes = await hkdfSha256( + prfOutput, + BACKUP_FILE_TAG_LABEL, + textEncoder.encode(rpId), + BACKUP_FILE_TAG_BYTE_LENGTH, + ) + return encodeBase64Url(tagBytes) +} + +/** Lowercase public address of a private key. */ +export function addressOfPrivateKey(privateKey: HexString): HexString { + return privateKeyToAddress(privateKey).toLowerCase() as HexString +} diff --git a/packages/passkey-login-widget/src/element.ts b/packages/passkey-login-widget/src/element.ts new file mode 100644 index 00000000..cf53f4ba --- /dev/null +++ b/packages/passkey-login-widget/src/element.ts @@ -0,0 +1,33 @@ +import { createMiniAppElement } from '@goodwidget/embed' +import type React from 'react' +import { PasskeyLoginWidget } from './PasskeyLoginWidget.tsx' + +/** + * Custom Element wrapping the PasskeyLoginWidget React component. + * + * import { createGoogleDriveStorage } from '@goodwidget/passkey-login-widget' + * const el = document.querySelector('gw-passkey-login') + * el.storage = [createGoogleDriveStorage({ clientId })] // JS property: holds functions + * el.rpId = 'example.org' + * el.appName = 'Example' + * el.privateKey = '0x…' // only for the backup flow; JS property, never an attribute + * el.addEventListener('login', (event) => event.detail) // { privateKey, address, isNewAccount } + * + * Events: login, backup-complete, skip, error. + */ +export const PasskeyLoginWidgetElement = createMiniAppElement( + // Required props (storage, rpId, appName) are set by the host as properties, so the loose element prop type is intended + PasskeyLoginWidget as unknown as React.ComponentType>, + { + shadow: true, + defaultTheme: 'dark', + // The private key and the storage adapters are objects/secrets: JS properties only, never HTML attributes + props: { + privateKey: 'property', + storage: 'property', + themeOverrides: 'property', + config: 'property', + }, + events: ['login', 'backup-complete', 'skip', 'error'], + }, +) diff --git a/packages/passkey-login-widget/src/flow/passkeyFlowMachine.test.ts b/packages/passkey-login-widget/src/flow/passkeyFlowMachine.test.ts new file mode 100644 index 00000000..ae4d8852 --- /dev/null +++ b/packages/passkey-login-widget/src/flow/passkeyFlowMachine.test.ts @@ -0,0 +1,189 @@ +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { + createInitialFlowState, + passkeyFlowReducer, + type PasskeyFlowEvent, + type PasskeyFlowState, +} from './passkeyFlowMachine.ts' + +/** Applies events in order and returns the screens visited after each one. */ +function runEvents(initialState: PasskeyFlowState, events: PasskeyFlowEvent[]) { + const states = [initialState] + for (const event of events) { + states.push(passkeyFlowReducer(states[states.length - 1], event)) + } + return { finalState: states[states.length - 1], screens: states.map((state) => state.screen) } +} + +const newUserState = createInitialFlowState({ isExistingUser: false, hasMultipleProviders: true }) +const existingUserState = createInitialFlowState({ isExistingUser: true, hasMultipleProviders: true }) + +describe('passkey flow machine', () => { + it('starts at A1 for a new visitor and at B1 for an existing user', () => { + assert.equal(newUserState.screen, 'A1_ENTRY') + assert.equal(existingUserState.screen, 'B1_BACKUP_PROMPT') + }) + + it('logs in: A1 -> A2 -> C1 -> C2 -> C3 when no provider is known', () => { + const { screens } = runEvents(newUserState, [ + { type: 'LOGIN_STARTED' }, + { type: 'PASSKEY_VERIFIED', providerId: null }, + { type: 'PROVIDER_CHOSEN', providerId: 'icloud' }, + { type: 'RESTORE_SUCCEEDED' }, + ]) + assert.deepEqual(screens, ['A1_ENTRY', 'A2_AUTHENTICATING', 'C1_RESTORE_PROVIDER', 'C2_RESTORE_PROGRESS', 'C3_RESTORE_SUCCESS']) + }) + + it('skips C1 when the provider is remembered or the only one', () => { + const { screens, finalState } = runEvents(newUserState, [ + { type: 'LOGIN_STARTED' }, + { type: 'PASSKEY_VERIFIED', providerId: 'google-drive' }, + ]) + assert.deepEqual(screens, ['A1_ENTRY', 'A2_AUTHENTICATING', 'C2_RESTORE_PROGRESS']) + assert.equal(finalState.providerId, 'google-drive') + }) + + it('starts the restore progress at "Backup found" and advances to "Decrypting"', () => { + const { finalState } = runEvents(newUserState, [ + { type: 'LOGIN_STARTED' }, + { type: 'PASSKEY_VERIFIED', providerId: 'google-drive' }, + ]) + assert.equal(finalState.progressStepIndex, 1) + assert.equal(passkeyFlowReducer(finalState, { type: 'PROGRESS_ADVANCED' }).progressStepIndex, 2) + }) + + it('creates a new account: A1 -> A2 -> D2 -> A3 -> A4 -> B2 -> B3 -> B4', () => { + const { screens, finalState } = runEvents(newUserState, [ + { type: 'LOGIN_STARTED' }, + { type: 'FAILED', errorCode: 'PASSKEY_CANCELLED' }, + { type: 'NEW_ACCOUNT_REQUESTED' }, + { type: 'NEW_ACCOUNT_CONFIRMED' }, + { type: 'PASSKEY_CREATED', providerId: null }, + { type: 'PROVIDER_CHOSEN', providerId: 'google-drive' }, + { type: 'BACKUP_SUCCEEDED' }, + ]) + assert.deepEqual(screens, [ + 'A1_ENTRY', + 'A2_AUTHENTICATING', + 'D2_PASSKEY_CANCELLED', + 'A3_NEW_ACCOUNT_WARNING', + 'A4_CREATE_PASSKEY', + 'B2_BACKUP_PROVIDER', + 'B3_BACKUP_PROGRESS', + 'B4_BACKUP_SUCCESS', + ]) + assert.equal(finalState.flowKind, 'new-account') + }) + + it('skips B2 only when a single provider is offered', () => { + const { screens } = runEvents(newUserState, [ + { type: 'NEW_ACCOUNT_CONFIRMED' }, + { type: 'PASSKEY_CREATED', providerId: 'google-drive' }, + ]) + assert.deepEqual(screens, ['A1_ENTRY', 'A4_CREATE_PASSKEY', 'B3_BACKUP_PROGRESS']) + }) + + it('backs up an existing user with a fresh passkey: B1 -> A4 -> B2 -> B3 -> B4', () => { + const { screens, finalState } = runEvents(existingUserState, [ + { type: 'BACKUP_REQUESTED' }, + { type: 'PASSKEY_CREATED', providerId: null }, + { type: 'PROVIDER_CHOSEN', providerId: 'icloud' }, + { type: 'BACKUP_SUCCEEDED' }, + ]) + assert.deepEqual(screens, ['B1_BACKUP_PROMPT', 'A4_CREATE_PASSKEY', 'B2_BACKUP_PROVIDER', 'B3_BACKUP_PROGRESS', 'B4_BACKUP_SUCCESS']) + assert.equal(finalState.flowKind, 'backup') + }) + + it('starts the backup progress at "Uploading"', () => { + const { finalState } = runEvents(existingUserState, [ + { type: 'BACKUP_REQUESTED' }, + { type: 'PASSKEY_CREATED', providerId: 'icloud' }, + ]) + assert.equal(finalState.progressStepIndex, 2) + }) + + it('maps every error code to its screen, AMBIGUOUS_BACKUP sharing D6', () => { + const expectedScreens = { + UNSUPPORTED_BROWSER: 'D1_UNSUPPORTED_BROWSER', + PASSKEY_CANCELLED: 'D2_PASSKEY_CANCELLED', + BACKUP_NOT_FOUND: 'D3_BACKUP_NOT_FOUND', + PROVIDER_AUTH_FAILED: 'D4_PROVIDER_AUTH_FAILED', + BACKUP_FAILED: 'D5_BACKUP_FAILED', + DECRYPT_FAILED: 'D6_DECRYPT_FAILED', + AMBIGUOUS_BACKUP: 'D6_DECRYPT_FAILED', + } as const + for (const [errorCode, expectedScreen] of Object.entries(expectedScreens)) { + const failedState = passkeyFlowReducer(newUserState, { + type: 'FAILED', + errorCode: errorCode as keyof typeof expectedScreens, + }) + assert.equal(failedState.screen, expectedScreen) + assert.equal(failedState.errorCode, errorCode) + } + }) + + it('D2 Retry starts over at A1 (B1 for existing users)', () => { + const cancelledNewUser = runEvents(newUserState, [{ type: 'LOGIN_STARTED' }, { type: 'FAILED', errorCode: 'PASSKEY_CANCELLED' }, { type: 'RETRY_REQUESTED' }]) + assert.equal(cancelledNewUser.finalState.screen, 'A1_ENTRY') + const cancelledExistingUser = runEvents(existingUserState, [{ type: 'BACKUP_REQUESTED' }, { type: 'FAILED', errorCode: 'PASSKEY_CANCELLED' }, { type: 'RETRY_REQUESTED' }]) + assert.equal(cancelledExistingUser.finalState.screen, 'B1_BACKUP_PROMPT') + }) + + it('D4 / D5 / D6 Retry re-runs the screen that failed, keeping the provider', () => { + const restoreFailed = runEvents(newUserState, [ + { type: 'LOGIN_STARTED' }, + { type: 'PASSKEY_VERIFIED', providerId: 'icloud' }, + { type: 'FAILED', errorCode: 'DECRYPT_FAILED' }, + { type: 'RETRY_REQUESTED' }, + ]) + assert.equal(restoreFailed.finalState.screen, 'C2_RESTORE_PROGRESS') + assert.equal(restoreFailed.finalState.providerId, 'icloud') + + const backupFailed = runEvents(newUserState, [ + { type: 'NEW_ACCOUNT_CONFIRMED' }, + { type: 'PASSKEY_CREATED', providerId: 'google-drive' }, + { type: 'FAILED', errorCode: 'BACKUP_FAILED' }, + { type: 'RETRY_REQUESTED' }, + ]) + assert.equal(backupFailed.finalState.screen, 'B3_BACKUP_PROGRESS') + assert.equal(backupFailed.finalState.errorCode, null) + }) + + it('counts every retry as a new attempt so the screen work runs again', () => { + const failedState = runEvents(newUserState, [ + { type: 'LOGIN_STARTED' }, + { type: 'PASSKEY_VERIFIED', providerId: 'icloud' }, + { type: 'FAILED', errorCode: 'PROVIDER_AUTH_FAILED' }, + ]).finalState + const retriedState = passkeyFlowReducer(failedState, { type: 'RETRY_REQUESTED' }) + assert.ok(retriedState.attempt > failedState.attempt) + assert.equal(passkeyFlowReducer(retriedState, { type: 'PROGRESS_ADVANCED' }).attempt, retriedState.attempt) + }) + + it('"other provider" leads to C1 when restoring and to B2 when backing up', () => { + const restoring = runEvents(newUserState, [ + { type: 'LOGIN_STARTED' }, + { type: 'PASSKEY_VERIFIED', providerId: 'google-drive' }, + { type: 'FAILED', errorCode: 'BACKUP_NOT_FOUND' }, + { type: 'OTHER_PROVIDER_REQUESTED' }, + ]) + assert.equal(restoring.finalState.screen, 'C1_RESTORE_PROVIDER') + assert.equal(restoring.finalState.providerId, null) + + const backingUp = runEvents(existingUserState, [ + { type: 'BACKUP_REQUESTED' }, + { type: 'PASSKEY_CREATED', providerId: 'google-drive' }, + { type: 'FAILED', errorCode: 'PROVIDER_AUTH_FAILED' }, + { type: 'OTHER_PROVIDER_REQUESTED' }, + ]) + assert.equal(backingUp.finalState.screen, 'B2_BACKUP_PROVIDER') + }) + + it('"Back" returns to A1 for new visitors and B1 for existing users', () => { + const restoreFailed = runEvents(newUserState, [{ type: 'FAILED', errorCode: 'DECRYPT_FAILED' }, { type: 'BACK_REQUESTED' }]) + assert.equal(restoreFailed.finalState.screen, 'A1_ENTRY') + const existingFailed = runEvents(existingUserState, [{ type: 'FAILED', errorCode: 'DECRYPT_FAILED' }, { type: 'BACK_REQUESTED' }]) + assert.equal(existingFailed.finalState.screen, 'B1_BACKUP_PROMPT') + }) +}) diff --git a/packages/passkey-login-widget/src/flow/passkeyFlowMachine.ts b/packages/passkey-login-widget/src/flow/passkeyFlowMachine.ts new file mode 100644 index 00000000..dc155ed8 --- /dev/null +++ b/packages/passkey-login-widget/src/flow/passkeyFlowMachine.ts @@ -0,0 +1,183 @@ +import type { PasskeyErrorCode, PasskeyProviderId, PasskeyScreenId } from '../widgetRuntimeContract.ts' + +/** + * Pure state machine for the screens of the passkey flow (A1-D6). + * It holds no secrets: the PRF output and private keys live in the adapter, outside React state. + */ + +/** Which journey is running; decides where the recovery buttons of the D screens lead. */ +export type PasskeyFlowKind = + | 'login' // returning user restoring an account with an existing passkey + | 'new-account' // new user: fresh passkey, fresh account, first backup + | 'backup' // existing (already logged in) user backing up their account + +export interface PasskeyFlowState { + screen: PasskeyScreenId + flowKind: PasskeyFlowKind + /** The host passed a `privateKey`: the widget starts in the backup flow and D5 may be skipped. */ + isExistingUser: boolean + /** More than one backup provider is offered, so provider choice screens (B2/C1) and "other provider" buttons exist. */ + hasMultipleProviders: boolean + providerId: PasskeyProviderId | null + /** Index of the active step on the A4/B3/C2 progress screens. */ + progressStepIndex: number + /** + * Counts screen entries. The adapter starts the work of a screen once per attempt, so retrying + * a screen re-runs its work and a re-render (or React strict-mode effect replay) does not. + */ + attempt: number + /** Set on D screens: the failure that led there. */ + errorCode: PasskeyErrorCode | null + /** Screen that was running when the failure happened; D4/D5/D6 "retry" returns to it. */ + failedScreen: PasskeyScreenId | null +} + +export type PasskeyFlowEvent = + | { type: 'LOGIN_STARTED' } // A1 "Continue with passkey" -> A2 + | { type: 'PASSKEY_VERIFIED'; providerId: PasskeyProviderId | null } // A2 -> C2 (provider known) or C1 + | { type: 'NEW_ACCOUNT_REQUESTED' } // D2 -> A3 + | { type: 'NEW_ACCOUNT_CONFIRMED' } // A3 -> A4 + | { type: 'BACKUP_REQUESTED' } // B1 -> A4 (fresh passkey) + | { type: 'PASSKEY_CREATED'; providerId: PasskeyProviderId | null } // A4 -> B3 (provider known) or B2 + | { type: 'PROVIDER_CHOSEN'; providerId: PasskeyProviderId } // C1 -> C2, B2 -> B3 + | { type: 'PROGRESS_ADVANCED' } // next step on A4/B3/C2 + | { type: 'RESTORE_SUCCEEDED' } // C2 -> C3 + | { type: 'BACKUP_SUCCEEDED' } // B3 -> B4 + | { type: 'FAILED'; errorCode: PasskeyErrorCode } // any working screen -> D1..D6 + | { type: 'RETRY_REQUESTED' } // D2 "Retry", D4 "Try again", D5 "Retry", D6 "Try again" + | { type: 'OTHER_PROVIDER_REQUESTED' } // D3/D4 "other provider" -> C1 or B2 + | { type: 'BACK_REQUESTED' } // D3/D6 "Back" -> A1 (or B1 for existing users) + +export function createInitialFlowState(options: { + isExistingUser: boolean + hasMultipleProviders: boolean +}): PasskeyFlowState { + return { + screen: options.isExistingUser ? 'B1_BACKUP_PROMPT' : 'A1_ENTRY', + flowKind: options.isExistingUser ? 'backup' : 'login', + isExistingUser: options.isExistingUser, + hasMultipleProviders: options.hasMultipleProviders, + providerId: null, + progressStepIndex: 0, + attempt: 0, + errorCode: null, + failedScreen: null, + } +} + +/** Screen that shows which error. AMBIGUOUS_BACKUP shares the D6 layout. */ +const ERROR_SCREEN_BY_CODE: Record = { + UNSUPPORTED_BROWSER: 'D1_UNSUPPORTED_BROWSER', + PASSKEY_CANCELLED: 'D2_PASSKEY_CANCELLED', + BACKUP_NOT_FOUND: 'D3_BACKUP_NOT_FOUND', + PROVIDER_AUTH_FAILED: 'D4_PROVIDER_AUTH_FAILED', + BACKUP_FAILED: 'D5_BACKUP_FAILED', + DECRYPT_FAILED: 'D6_DECRYPT_FAILED', + AMBIGUOUS_BACKUP: 'D6_DECRYPT_FAILED', +} + +/** First screen of the journey, used by D2 "Retry" and the D3/D6 "Back" buttons. */ +function entryScreenOf(state: PasskeyFlowState): PasskeyScreenId { + return state.isExistingUser ? 'B1_BACKUP_PROMPT' : 'A1_ENTRY' +} + +/** Provider choice screen for the current journey: C1 when restoring, B2 when backing up. */ +function providerChoiceScreenOf(state: PasskeyFlowState): PasskeyScreenId { + return state.flowKind === 'login' ? 'C1_RESTORE_PROVIDER' : 'B2_BACKUP_PROVIDER' +} + +/** + * Step that is active when a progress screen is entered. B3 starts at "Uploading" and C2 at + * "Backup found" (searching), because the earlier steps already happened on the previous screens. + */ +const INITIAL_PROGRESS_STEP_BY_SCREEN: Partial> = { + B3_BACKUP_PROGRESS: 2, + C2_RESTORE_PROGRESS: 1, +} + +/** Moves to a screen and resets the per-screen progress and error fields. */ +function goToScreen( + state: PasskeyFlowState, + screen: PasskeyScreenId, + changes: Partial = {}, +): PasskeyFlowState { + return { + ...state, + screen, + progressStepIndex: INITIAL_PROGRESS_STEP_BY_SCREEN[screen] ?? 0, + attempt: state.attempt + 1, + errorCode: null, + failedScreen: null, + ...changes, + } +} + +export function passkeyFlowReducer(state: PasskeyFlowState, event: PasskeyFlowEvent): PasskeyFlowState { + switch (event.type) { + case 'LOGIN_STARTED': + return goToScreen(state, 'A2_AUTHENTICATING', { flowKind: 'login' }) + + case 'PASSKEY_VERIFIED': + // The provider is known when it was remembered or only one is offered: skip C1 + return event.providerId + ? goToScreen(state, 'C2_RESTORE_PROGRESS', { providerId: event.providerId }) + : goToScreen(state, 'C1_RESTORE_PROVIDER') + + case 'NEW_ACCOUNT_REQUESTED': + return goToScreen(state, 'A3_NEW_ACCOUNT_WARNING', { flowKind: 'new-account' }) + + case 'NEW_ACCOUNT_CONFIRMED': + return goToScreen(state, 'A4_CREATE_PASSKEY', { flowKind: 'new-account' }) + + case 'BACKUP_REQUESTED': + return goToScreen(state, 'A4_CREATE_PASSKEY', { flowKind: 'backup' }) + + case 'PASSKEY_CREATED': + // B2 is skipped only when a single provider is offered; with several the remembered one is just preselected + return event.providerId + ? goToScreen(state, 'B3_BACKUP_PROGRESS', { providerId: event.providerId }) + : goToScreen(state, 'B2_BACKUP_PROVIDER') + + case 'PROVIDER_CHOSEN': + return goToScreen( + state, + state.flowKind === 'login' ? 'C2_RESTORE_PROGRESS' : 'B3_BACKUP_PROGRESS', + { providerId: event.providerId }, + ) + + case 'PROGRESS_ADVANCED': + return { ...state, progressStepIndex: state.progressStepIndex + 1 } + + case 'RESTORE_SUCCEEDED': + return goToScreen(state, 'C3_RESTORE_SUCCESS') + + case 'BACKUP_SUCCEEDED': + return goToScreen(state, 'B4_BACKUP_SUCCESS') + + case 'FAILED': + return { + ...state, + screen: ERROR_SCREEN_BY_CODE[event.errorCode], + errorCode: event.errorCode, + failedScreen: state.screen, + attempt: state.attempt + 1, + progressStepIndex: 0, + } + + case 'RETRY_REQUESTED': + // D2 starts over; D4/D5/D6 re-run the step that failed + if (state.screen === 'D2_PASSKEY_CANCELLED') { + return goToScreen(state, entryScreenOf(state), { flowKind: state.isExistingUser ? 'backup' : 'login' }) + } + return goToScreen(state, state.failedScreen ?? entryScreenOf(state)) + + case 'OTHER_PROVIDER_REQUESTED': + return goToScreen(state, providerChoiceScreenOf(state), { providerId: null }) + + case 'BACK_REQUESTED': + return goToScreen(state, entryScreenOf(state), { flowKind: state.isExistingUser ? 'backup' : 'login' }) + + default: + return state + } +} diff --git a/packages/passkey-login-widget/src/flow/passkeyOperations.test.ts b/packages/passkey-login-widget/src/flow/passkeyOperations.test.ts new file mode 100644 index 00000000..ed078235 --- /dev/null +++ b/packages/passkey-login-widget/src/flow/passkeyOperations.test.ts @@ -0,0 +1,159 @@ +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { buildBackupFileName } from '../crypto/backupFileName.ts' +import { BackupDecryptError, BackupFormatError } from '../crypto/backupErrors.ts' +import { addressOfPrivateKey, deriveBackupFileTag } from '../crypto/prfDerivation.ts' +import { ProviderAuthError } from '../storage/storageAdapter.ts' +import { PasskeyFlowError } from '../webauthn/passkeyErrors.ts' +import { createFakePrfOutput, createInMemoryStorage } from '../testFixtures.ts' +import { prepareAccountBackup, restoreAccountFromProvider, uploadPreparedBackup } from './passkeyOperations.ts' + +const RP_ID = 'example.org' +const PRIVATE_KEY = `0x${'44'.repeat(32)}` as const + +/** Backs up PRIVATE_KEY under the given fake passkey and returns what was stored. */ +async function backUpWithPasskey(storage: ReturnType, passkeySeed: number) { + const backup = await prepareAccountBackup({ privateKey: PRIVATE_KEY, prfOutput: createFakePrfOutput(passkeySeed), rpId: RP_ID }) + await uploadPreparedBackup(storage, backup) + return backup +} + +describe('backing up', () => { + it('names the file after the passkey tag and the account address', async () => { + const storage = createInMemoryStorage() + const backup = await backUpWithPasskey(storage, 1) + const prfTag = await deriveBackupFileTag(createFakePrfOutput(1), RP_ID) + assert.equal(backup.fileName, buildBackupFileName(prfTag, addressOfPrivateKey(PRIVATE_KEY))) + assert.deepEqual([...storage.files.keys()], [backup.fileName]) + }) + + it('replaces the file when the same account is backed up again with the same passkey', async () => { + const storage = createInMemoryStorage() + await backUpWithPasskey(storage, 1) + await backUpWithPasskey(storage, 1) + assert.equal(storage.files.size, 1) + }) + + it('creates a separate file for every new passkey (one passkey = one account)', async () => { + const storage = createInMemoryStorage() + await backUpWithPasskey(storage, 1) + await backUpWithPasskey(storage, 2) + assert.equal(storage.files.size, 2) + }) + + it('never uploads the plaintext key', async () => { + const storage = createInMemoryStorage() + await backUpWithPasskey(storage, 1) + for (const [fileName, backupJson] of storage.files) { + assert.ok(!fileName.includes(PRIVATE_KEY.slice(2))) + assert.ok(!backupJson.includes(PRIVATE_KEY.slice(2))) + } + }) + + it('surfaces provider sign-in failures', async () => { + const storage = createInMemoryStorage() + storage.failAuthorization = true + await assert.rejects(backUpWithPasskey(storage, 1), ProviderAuthError) + }) +}) + +describe('restoring', () => { + it('restores the account with the same passkey and reports progress once the file is found', async () => { + const storage = createInMemoryStorage() + await backUpWithPasskey(storage, 1) + let backupFoundCalls = 0 + const restored = await restoreAccountFromProvider({ + provider: storage, + prfOutput: createFakePrfOutput(1), + rpId: RP_ID, + onBackupFound: () => { + backupFoundCalls += 1 + }, + }) + assert.deepEqual(restored, { privateKey: PRIVATE_KEY, address: addressOfPrivateKey(PRIVATE_KEY) }) + assert.equal(backupFoundCalls, 1) + }) + + it('reports BACKUP_NOT_FOUND when there is no file for this passkey', async () => { + const storage = createInMemoryStorage() + await backUpWithPasskey(storage, 1) + await assert.rejects( + restoreAccountFromProvider({ provider: storage, prfOutput: createFakePrfOutput(2), rpId: RP_ID }), + (error: PasskeyFlowError) => error.code === 'BACKUP_NOT_FOUND', + ) + }) + + it('reports BACKUP_NOT_FOUND when the listed file disappears before it is read', async () => { + const storage = createInMemoryStorage() + await backUpWithPasskey(storage, 1) + storage.readBackup = async () => null + await assert.rejects( + restoreAccountFromProvider({ provider: storage, prfOutput: createFakePrfOutput(1), rpId: RP_ID }), + (error: PasskeyFlowError) => error.code === 'BACKUP_NOT_FOUND', + ) + }) + + it('reports AMBIGUOUS_BACKUP when several files share one passkey tag', async () => { + const storage = createInMemoryStorage() + const backup = await backUpWithPasskey(storage, 1) + const prfTag = await deriveBackupFileTag(createFakePrfOutput(1), RP_ID) + storage.files.set(buildBackupFileName(prfTag, addressOfPrivateKey(`0x${'55'.repeat(32)}`)), backup.backupJson) + await assert.rejects( + restoreAccountFromProvider({ provider: storage, prfOutput: createFakePrfOutput(1), rpId: RP_ID }), + (error: PasskeyFlowError) => error.code === 'AMBIGUOUS_BACKUP', + ) + }) + + it('ignores files of other passkeys and foreign names', async () => { + const storage = createInMemoryStorage() + await backUpWithPasskey(storage, 2) + storage.files.set('gwpk-bogus.json', '{}') + await assert.rejects( + restoreAccountFromProvider({ provider: storage, prfOutput: createFakePrfOutput(1), rpId: RP_ID }), + (error: PasskeyFlowError) => error.code === 'BACKUP_NOT_FOUND', + ) + }) + + it('fails to decrypt a file that was renamed to another passkey tag', async () => { + const storage = createInMemoryStorage() + const backup = await backUpWithPasskey(storage, 2) + const prfTagOfPasskeyOne = await deriveBackupFileTag(createFakePrfOutput(1), RP_ID) + storage.files.clear() + storage.files.set(buildBackupFileName(prfTagOfPasskeyOne, addressOfPrivateKey(PRIVATE_KEY)), backup.backupJson) + await assert.rejects( + restoreAccountFromProvider({ provider: storage, prfOutput: createFakePrfOutput(1), rpId: RP_ID }), + BackupDecryptError, + ) + }) + + it('fails when the address in the file name differs from the decrypted account', async () => { + const storage = createInMemoryStorage() + const backup = await backUpWithPasskey(storage, 1) + const prfTag = await deriveBackupFileTag(createFakePrfOutput(1), RP_ID) + storage.files.clear() + storage.files.set(buildBackupFileName(prfTag, addressOfPrivateKey(`0x${'66'.repeat(32)}`)), backup.backupJson) + await assert.rejects( + restoreAccountFromProvider({ provider: storage, prfOutput: createFakePrfOutput(1), rpId: RP_ID }), + BackupDecryptError, + ) + }) + + it('fails with a format error for an unknown backup version', async () => { + const storage = createInMemoryStorage() + const backup = await backUpWithPasskey(storage, 1) + storage.files.set(backup.fileName, JSON.stringify({ ...JSON.parse(backup.backupJson), version: 2 })) + await assert.rejects( + restoreAccountFromProvider({ provider: storage, prfOutput: createFakePrfOutput(1), rpId: RP_ID }), + BackupFormatError, + ) + }) + + it('surfaces provider sign-in failures', async () => { + const storage = createInMemoryStorage() + storage.failAuthorization = true + await assert.rejects( + restoreAccountFromProvider({ provider: storage, prfOutput: createFakePrfOutput(1), rpId: RP_ID }), + ProviderAuthError, + ) + }) +}) diff --git a/packages/passkey-login-widget/src/flow/passkeyOperations.ts b/packages/passkey-login-widget/src/flow/passkeyOperations.ts new file mode 100644 index 00000000..7a0d9b1f --- /dev/null +++ b/packages/passkey-login-widget/src/flow/passkeyOperations.ts @@ -0,0 +1,85 @@ +import { filterBackupNamesByTag, buildBackupFileName, parseBackupFileName } from '../crypto/backupFileName.ts' +import { BackupDecryptError } from '../crypto/backupErrors.ts' +import { createBackupJson, restorePrivateKeyFromBackupJson } from '../crypto/backupFormat.ts' +import type { Bytes } from '../crypto/encoding.ts' +import { addressOfPrivateKey, deriveBackupEncryptionKey, deriveBackupFileTag } from '../crypto/prfDerivation.ts' +import { PASSKEY_ERROR_MESSAGES, PasskeyFlowError } from '../webauthn/passkeyErrors.ts' +import type { HexString, PasskeyBackupStorage } from '../widgetRuntimeContract.ts' + +/** + * UI-free building blocks of the flow: prepare an encrypted backup, upload it, restore it. + * They only ever hand ciphertext to a storage adapter. + */ + +export interface PreparedBackup { + address: HexString + fileName: string + /** Versioned backup JSON; ciphertext only. */ + backupJson: string +} + +export interface RestoredAccount { + privateKey: HexString + address: HexString +} + +/** Encrypts `privateKey` for this passkey and names the file `gwpk--
.json`. */ +export async function prepareAccountBackup(options: { + privateKey: HexString + prfOutput: Bytes + rpId: string +}): Promise { + const { privateKey, prfOutput, rpId } = options + const address = addressOfPrivateKey(privateKey) + const prfTag = await deriveBackupFileTag(prfOutput, rpId) + const encryptionKey = await deriveBackupEncryptionKey(prfOutput) + return { + address, + fileName: buildBackupFileName(prfTag, address), + backupJson: await createBackupJson(privateKey, encryptionKey), + } +} + +/** Signs in to the provider and writes the prepared backup (replacing a file with the same name). */ +export async function uploadPreparedBackup(provider: PasskeyBackupStorage, backup: PreparedBackup): Promise { + await provider.authorize() + await provider.writeBackup(backup.fileName, backup.backupJson) +} + +/** + * Finds this passkey's backup at the provider and decrypts it. + * 0 matches -> BACKUP_NOT_FOUND, more than 1 -> AMBIGUOUS_BACKUP. The decrypted key must reproduce + * both the address inside the file and the address in the file name, otherwise decrypt fails. + * @param onBackupFound called once the backup file has been located (drives the progress screen) + */ +export async function restoreAccountFromProvider(options: { + provider: PasskeyBackupStorage + prfOutput: Bytes + rpId: string + onBackupFound?: () => void +}): Promise { + const { provider, prfOutput, rpId, onBackupFound } = options + await provider.authorize() + + const prfTag = await deriveBackupFileTag(prfOutput, rpId) + const matchingFileNames = filterBackupNamesByTag(await provider.listBackupNames(prfTag), prfTag) + if (matchingFileNames.length === 0) { + throw new PasskeyFlowError('BACKUP_NOT_FOUND', PASSKEY_ERROR_MESSAGES.BACKUP_NOT_FOUND) + } + if (matchingFileNames.length > 1) { + throw new PasskeyFlowError('AMBIGUOUS_BACKUP', PASSKEY_ERROR_MESSAGES.AMBIGUOUS_BACKUP) + } + const [backupFileName] = matchingFileNames + onBackupFound?.() + + const backupJson = await provider.readBackup(backupFileName) + if (backupJson === null) { + throw new PasskeyFlowError('BACKUP_NOT_FOUND', PASSKEY_ERROR_MESSAGES.BACKUP_NOT_FOUND) + } + const restoredAccount = await restorePrivateKeyFromBackupJson(backupJson, await deriveBackupEncryptionKey(prfOutput)) + // The file name is only a hint; a forged name must not log anyone into a different account + if (parseBackupFileName(backupFileName)?.address !== restoredAccount.address) { + throw new BackupDecryptError('Backup file name does not match the decrypted account') + } + return restoredAccount +} diff --git a/packages/passkey-login-widget/src/index.ts b/packages/passkey-login-widget/src/index.ts new file mode 100644 index 00000000..ad5a86e0 --- /dev/null +++ b/packages/passkey-login-widget/src/index.ts @@ -0,0 +1,24 @@ +export { PasskeyLoginWidget, PasskeyLoginWidgetPreview } from './PasskeyLoginWidget.tsx' +export type { PasskeyLoginWidgetPreviewProps } from './PasskeyLoginWidget.tsx' +export { PasskeyLoginWidgetView } from './components/PasskeyLoginWidgetView.tsx' +export { usePasskeyLoginAdapter } from './adapter.ts' +export type { PasskeyLoginAdapterActions, PasskeyLoginAdapterResult, PasskeyProviderOption } from './adapter.ts' +export { createGoogleDriveStorage } from './storage/googleDriveStorage.ts' +export type { GoogleDriveStorageOptions } from './storage/googleDriveStorage.ts' +export { createICloudStorage } from './storage/iCloudStorage.ts' +export type { ICloudStorageOptions } from './storage/iCloudStorage.ts' +export { createInitialFlowState } from './flow/passkeyFlowMachine.ts' +export type { PasskeyFlowKind, PasskeyFlowState } from './flow/passkeyFlowMachine.ts' +export { passkeyLoginWidgetConfig } from './config.ts' +export { PASSKEY_ERROR_CODES, PASSKEY_SCREEN_IDS } from './widgetRuntimeContract.ts' +export type { + HexString, + PasskeyBackupResult, + PasskeyBackupStorage, + PasskeyErrorCode, + PasskeyLoginErrorDetail, + PasskeyLoginResult, + PasskeyLoginWidgetProps, + PasskeyProviderId, + PasskeyScreenId, +} from './widgetRuntimeContract.ts' diff --git a/packages/passkey-login-widget/src/register.ts b/packages/passkey-login-widget/src/register.ts new file mode 100644 index 00000000..68ed8257 --- /dev/null +++ b/packages/passkey-login-widget/src/register.ts @@ -0,0 +1,20 @@ +import { PasskeyLoginWidgetElement } from './element.ts' + +const DEFAULT_TAG_NAME = 'gw-passkey-login' + +/** + * Register the custom element. + * + * import '@goodwidget/passkey-login-widget/register' + * + * Or register under a custom tag: + * const tag = register('my-passkey-login') + */ +export function register(tagName: string = DEFAULT_TAG_NAME): string { + if (!customElements.get(tagName)) { + customElements.define(tagName, PasskeyLoginWidgetElement) + } + return tagName +} + +register() diff --git a/packages/passkey-login-widget/src/storage/googleDriveStorage.test.ts b/packages/passkey-login-widget/src/storage/googleDriveStorage.test.ts new file mode 100644 index 00000000..3c8f896f --- /dev/null +++ b/packages/passkey-login-widget/src/storage/googleDriveStorage.test.ts @@ -0,0 +1,134 @@ +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { createGoogleDriveStorage, GOOGLE_DRIVE_APPDATA_SCOPE } from './googleDriveStorage.ts' +import { ProviderAuthError } from './storageAdapter.ts' + +const OWN_FILE = 'gwpk-abcdefghijklmnopqrstuv-0x1111111111111111111111111111111111111111.json' + +interface RecordedRequest { + url: string + method: string + authorization: string | undefined + body: unknown +} + +/** Fake Drive: answers list requests from `pages` and records every request. */ +function createFakeDrive(pages: { files: { id: string; name: string }[]; nextPageToken?: string }[], fileContents = 'backup-json') { + const requests: RecordedRequest[] = [] + const fetchImplementation: typeof fetch = async (input, init) => { + const url = String(input) + requests.push({ + url, + method: init?.method ?? 'GET', + authorization: (init?.headers as Record | undefined)?.Authorization, + body: init?.body, + }) + if (url.includes('alt=media')) { + return new Response(fileContents) + } + if (url.startsWith('https://www.googleapis.com/drive/v3/files?')) { + const pageToken = new URL(url).searchParams.get('pageToken') + const pageIndex = pageToken ? Number(pageToken) : 0 + return Response.json(pages[pageIndex]) + } + return Response.json({}) + } + return { requests, fetchImplementation } +} + +function createAuthorizedStorage(fetchImplementation: typeof fetch) { + return createGoogleDriveStorage({ + clientId: 'test-client', + requestAccessToken: async () => ({ accessToken: 'token-1', expiresInSeconds: 3600 }), + fetchImplementation, + }) +} + +describe('Google Drive storage', () => { + it('only requests the drive.appdata scope', () => { + assert.equal(GOOGLE_DRIVE_APPDATA_SCOPE, 'https://www.googleapis.com/auth/drive.appdata') + }) + + it('lists only this passkey\'s files from the app data folder, across pages', async () => { + const { requests, fetchImplementation } = createFakeDrive([ + { files: [{ id: '1', name: 'unrelated.txt' }], nextPageToken: '1' }, + { files: [{ id: '2', name: OWN_FILE }, { id: '3', name: 'gwpk-zzzzzzzzzzzzzzzzzzzzzz-0x1111111111111111111111111111111111111111.json' }] }, + ]) + const storage = createAuthorizedStorage(fetchImplementation) + await storage.authorize() + assert.deepEqual(await storage.listBackupNames('abcdefghijklmnopqrstuv'), [OWN_FILE]) + assert.equal(requests.length, 2) + assert.ok(requests.every((request) => new URL(request.url).searchParams.get('spaces') === 'appDataFolder')) + assert.ok(requests.every((request) => request.authorization === 'Bearer token-1')) + }) + + it('reads a file by name and returns null when it does not exist', async () => { + const { requests, fetchImplementation } = createFakeDrive([{ files: [{ id: 'file-7', name: OWN_FILE }] }], 'the-json') + const storage = createAuthorizedStorage(fetchImplementation) + await storage.authorize() + assert.equal(await storage.readBackup(OWN_FILE), 'the-json') + assert.ok(requests.some((request) => request.url.includes('/files/file-7?alt=media'))) + assert.equal(await storage.readBackup('missing.json'), null) + }) + + it('creates the file in appDataFolder when it does not exist', async () => { + const { requests, fetchImplementation } = createFakeDrive([{ files: [] }]) + const storage = createAuthorizedStorage(fetchImplementation) + await storage.authorize() + await storage.writeBackup(OWN_FILE, '{"version":1}') + const createRequest = requests.find((request) => request.method === 'POST') + assert.ok(createRequest?.url.includes('uploadType=multipart')) + assert.ok(String(createRequest?.body).includes(`"parents":["appDataFolder"]`)) + assert.ok(String(createRequest?.body).includes(OWN_FILE)) + }) + + it('updates the existing file instead of creating a duplicate', async () => { + const { requests, fetchImplementation } = createFakeDrive([{ files: [{ id: 'file-7', name: OWN_FILE }] }]) + const storage = createAuthorizedStorage(fetchImplementation) + await storage.authorize() + await storage.writeBackup(OWN_FILE, '{"version":1}') + assert.ok(!requests.some((request) => request.method === 'POST')) + const updateRequest = requests.find((request) => request.method === 'PATCH') + assert.ok(updateRequest?.url.includes('/files/file-7?uploadType=media')) + assert.equal(updateRequest?.body, '{"version":1}') + }) + + it('maps 401 and 403 to ProviderAuthError and other failures to a plain error', async () => { + for (const status of [401, 403]) { + const storage = createAuthorizedStorage(async () => new Response('', { status })) + await storage.authorize() + await assert.rejects(storage.listBackupNames('abcdefghijklmnopqrstuv'), ProviderAuthError) + } + const failingStorage = createAuthorizedStorage(async () => new Response('', { status: 500 })) + await failingStorage.authorize() + await assert.rejects(failingStorage.listBackupNames('abcdefghijklmnopqrstuv'), (error: Error) => !(error instanceof ProviderAuthError)) + }) + + it('requires authorize before any request', async () => { + const storage = createAuthorizedStorage(async () => Response.json({ files: [] })) + await assert.rejects(storage.listBackupNames('abcdefghijklmnopqrstuv'), ProviderAuthError) + }) + + it('surfaces a failed sign-in as ProviderAuthError and reuses a valid token', async () => { + let tokenRequests = 0 + const storage = createGoogleDriveStorage({ + clientId: 'test-client', + requestAccessToken: async () => { + tokenRequests += 1 + return { accessToken: 'token', expiresInSeconds: 3600 } + }, + fetchImplementation: async () => Response.json({ files: [] }), + }) + await storage.authorize() + await storage.authorize() + assert.equal(tokenRequests, 1) + + const refusedStorage = createGoogleDriveStorage({ + clientId: 'test-client', + requestAccessToken: async () => { + throw new ProviderAuthError('closed') + }, + }) + await assert.rejects(refusedStorage.authorize(), ProviderAuthError) + }) +}) diff --git a/packages/passkey-login-widget/src/storage/googleDriveStorage.ts b/packages/passkey-login-widget/src/storage/googleDriveStorage.ts new file mode 100644 index 00000000..bd602e4a --- /dev/null +++ b/packages/passkey-login-widget/src/storage/googleDriveStorage.ts @@ -0,0 +1,200 @@ +import { filterBackupNamesByTag } from '../crypto/backupFileName.ts' +import { loadExternalScript } from './loadExternalScript.ts' +import { ProviderAuthError } from './storageAdapter.ts' +import type { PasskeyBackupStorage } from '../widgetRuntimeContract.ts' + +/** The only OAuth scope requested: files this OAuth client creates in its private app data folder. */ +export const GOOGLE_DRIVE_APPDATA_SCOPE = 'https://www.googleapis.com/auth/drive.appdata' + +const GOOGLE_IDENTITY_SERVICES_URL = 'https://accounts.google.com/gsi/client' +const DRIVE_FILES_URL = 'https://www.googleapis.com/drive/v3/files' +const DRIVE_UPLOAD_URL = 'https://www.googleapis.com/upload/drive/v3/files' +const APP_DATA_FOLDER = 'appDataFolder' +const LIST_PAGE_SIZE = 100 +/** Refresh slightly before the token really expires so a request never races the expiry. */ +const TOKEN_EXPIRY_MARGIN_MS = 60_000 + +export interface GoogleAccessToken { + accessToken: string + expiresInSeconds: number +} + +export interface GoogleDriveStorageOptions { + /** Google OAuth client ID (Web application). Must stay stable: backups live in this client's appDataFolder. */ + clientId: string + /** Test seam: replaces the Google Identity Services popup. */ + requestAccessToken?: () => Promise + /** Test seam: replaces `fetch`. */ + fetchImplementation?: typeof fetch +} + +interface DriveFile { + id: string + name: string +} + +interface GoogleTokenResponse { + access_token?: string + expires_in?: number | string + error?: string +} + +interface GoogleTokenClient { + requestAccessToken: (overrideConfig?: { prompt?: string }) => void +} + +interface GoogleIdentityServices { + accounts: { + oauth2: { + initTokenClient: (config: { + client_id: string + scope: string + callback: (response: GoogleTokenResponse) => void + error_callback: (error: { type?: string }) => void + }) => GoogleTokenClient + } + } +} + +/** Opens the Google consent / account popup and resolves with an access token for `drive.appdata`. */ +async function requestAccessTokenWithGoogleIdentityServices(clientId: string): Promise { + await loadExternalScript(GOOGLE_IDENTITY_SERVICES_URL) + const googleIdentityServices = (window as unknown as { google?: GoogleIdentityServices }).google + if (!googleIdentityServices) { + throw new ProviderAuthError('Google Identity Services is not available') + } + return new Promise((resolve, reject) => { + const tokenClient = googleIdentityServices.accounts.oauth2.initTokenClient({ + client_id: clientId, + scope: GOOGLE_DRIVE_APPDATA_SCOPE, + callback: (response) => { + if (response.error || !response.access_token) { + reject(new ProviderAuthError('Google sign-in was not completed')) + return + } + resolve({ accessToken: response.access_token, expiresInSeconds: Number(response.expires_in ?? 3600) }) + }, + // Popup closed or blocked + error_callback: () => reject(new ProviderAuthError('Google sign-in was cancelled')), + }) + tokenClient.requestAccessToken() + }) +} + +/** + * Google Drive backup storage. Uses only the `drive.appdata` scope and the hidden + * `appDataFolder`; every request goes straight from the browser to Google. + */ +export function createGoogleDriveStorage({ + clientId, + requestAccessToken = () => requestAccessTokenWithGoogleIdentityServices(clientId), + fetchImplementation = (...fetchArguments) => fetch(...fetchArguments), +}: GoogleDriveStorageOptions): PasskeyBackupStorage { + let cachedAccessToken: string | null = null + let cachedAccessTokenExpiresAt = 0 + + /** Drive request with the bearer token; 401/403 become `ProviderAuthError`, other failures a plain Error. */ + async function callDrive(url: string, init: RequestInit = {}): Promise { + if (!cachedAccessToken) { + throw new ProviderAuthError('Not signed in to Google') + } + const response = await fetchImplementation(url, { + ...init, + headers: { ...init.headers, Authorization: `Bearer ${cachedAccessToken}` }, + }) + if (response.status === 401 || response.status === 403) { + cachedAccessToken = null + throw new ProviderAuthError('Google rejected the request') + } + if (!response.ok) { + throw new Error(`Google Drive request failed with status ${response.status}`) + } + return response + } + + /** Lists every file in the app folder, following pagination. */ + async function listAllFiles(): Promise { + const files: DriveFile[] = [] + let pageToken: string | undefined + do { + const query = new URLSearchParams({ + spaces: APP_DATA_FOLDER, + pageSize: String(LIST_PAGE_SIZE), + fields: 'nextPageToken,files(id,name)', + }) + if (pageToken) { + query.set('pageToken', pageToken) + } + const page = (await (await callDrive(`${DRIVE_FILES_URL}?${query}`)).json()) as { + files?: DriveFile[] + nextPageToken?: string + } + files.push(...(page.files ?? [])) + pageToken = page.nextPageToken + } while (pageToken) + return files + } + + return { + id: 'google-drive', + label: 'Google Drive', + + async authorize() { + const tokenStillValid = cachedAccessToken !== null && Date.now() < cachedAccessTokenExpiresAt + if (tokenStillValid) { + return + } + const token = await requestAccessToken() + cachedAccessToken = token.accessToken + cachedAccessTokenExpiresAt = Date.now() + token.expiresInSeconds * 1000 - TOKEN_EXPIRY_MARGIN_MS + }, + + // Drive's `name contains` is token based, so the prefix filter runs client-side + async listBackupNames(prfTag) { + const files = await listAllFiles() + return filterBackupNamesByTag( + files.map((file) => file.name), + prfTag, + ) + }, + + async readBackup(fileName) { + const existingFile = (await listAllFiles()).find((file) => file.name === fileName) + if (!existingFile) { + return null + } + const response = await callDrive(`${DRIVE_FILES_URL}/${encodeURIComponent(existingFile.id)}?alt=media`) + return response.text() + }, + + // Drive allows duplicate names, so look the name up first: update when it exists, create otherwise + async writeBackup(fileName, backupJson) { + const existingFile = (await listAllFiles()).find((file) => file.name === fileName) + if (existingFile) { + await callDrive(`${DRIVE_UPLOAD_URL}/${encodeURIComponent(existingFile.id)}?uploadType=media`, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: backupJson, + }) + return + } + const multipartBoundary = `gwpk-${crypto.randomUUID()}` + const multipartBody = [ + `--${multipartBoundary}`, + 'Content-Type: application/json; charset=UTF-8', + '', + JSON.stringify({ name: fileName, parents: [APP_DATA_FOLDER] }), + `--${multipartBoundary}`, + 'Content-Type: application/json', + '', + backupJson, + `--${multipartBoundary}--`, + ].join('\r\n') + await callDrive(`${DRIVE_UPLOAD_URL}?uploadType=multipart`, { + method: 'POST', + headers: { 'Content-Type': `multipart/related; boundary=${multipartBoundary}` }, + body: multipartBody, + }) + }, + } +} diff --git a/packages/passkey-login-widget/src/storage/iCloudStorage.test.ts b/packages/passkey-login-widget/src/storage/iCloudStorage.test.ts new file mode 100644 index 00000000..02db1d14 --- /dev/null +++ b/packages/passkey-login-widget/src/storage/iCloudStorage.test.ts @@ -0,0 +1,169 @@ +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { CLOUDKIT_RECORD_TYPE, createICloudStorage, type CloudKitNamespace } from './iCloudStorage.ts' +import { ProviderAuthError } from './storageAdapter.ts' + +const PRF_TAG = 'abcdefghijklmnopqrstuv' +const ADDRESS = '0x1111111111111111111111111111111111111111' +const RECORD_NAME = `gwpk-${PRF_TAG}-${ADDRESS}` + +interface FakeRecord { + recordName: string + recordChangeTag?: string + fields: Record +} + +/** Fake CloudKit JS namespace with a private database held in a Map. */ +function createFakeCloudKit(options: { signedIn?: boolean; queryPageSize?: number } = {}) { + const { signedIn = true, queryPageSize = 100 } = options + const records = new Map() + const savedRecords: unknown[] = [] + const queries: unknown[] = [] + let configuredContainer: unknown = null + const cloudKit: CloudKitNamespace = { + configure(config) { + configuredContainer = config.containers[0] + }, + getDefaultContainer: () => ({ + setUpAuth: async () => (signedIn ? { userRecordName: 'user' } : null), + whenUserSignsIn: async () => ({ userRecordName: 'user' }), + privateCloudDatabase: { + async performQuery(query, queryOptions) { + queries.push(query) + const wantedTag = query.filterBy[0].fieldValue.value + const matching = [...records.values()].filter((record) => record.fields.prfTag.value === wantedTag) + const offset = Number(queryOptions?.continuationMarker ?? 0) + const page = matching.slice(offset, offset + queryPageSize) + const hasMore = offset + queryPageSize < matching.length + return { records: page, continuationMarker: hasMore ? String(offset + queryPageSize) : undefined } + }, + async fetchRecords(recordNames) { + const record = records.get(recordNames[0]) + return record + ? { records: [record] } + : { hasErrors: true, errors: [{ serverErrorCode: 'NOT_FOUND', recordName: recordNames[0] }] } + }, + async saveRecords(record) { + savedRecords.push(record) + const saved = record as FakeRecord + records.set(saved.recordName, { ...saved, recordChangeTag: 'tag-1' }) + return { records: [saved] } + }, + }, + }), + } + return { cloudKit, records, savedRecords, queries, getConfiguredContainer: () => configuredContainer } +} + +describe('iCloud storage', () => { + it('configures the container with the API token and the chosen environment', async () => { + const fake = createFakeCloudKit() + const storage = createICloudStorage({ + containerId: 'iCloud.test', + apiToken: 'api-token', + environment: 'production', + loadCloudKit: async () => fake.cloudKit, + }) + await storage.authorize() + assert.deepEqual(fake.getConfiguredContainer(), { + containerIdentifier: 'iCloud.test', + apiTokenAuth: { apiToken: 'api-token', persist: true }, + environment: 'production', + }) + }) + + it('requires authorize before any request', async () => { + const fake = createFakeCloudKit() + const storage = createICloudStorage({ containerId: 'c', apiToken: 't', loadCloudKit: async () => fake.cloudKit }) + await assert.rejects(storage.listBackupNames(PRF_TAG), ProviderAuthError) + }) + + it('writes a PasskeyBackup record named after the file and reads it back', async () => { + const fake = createFakeCloudKit() + const storage = createICloudStorage({ containerId: 'c', apiToken: 't', loadCloudKit: async () => fake.cloudKit }) + await storage.authorize() + await storage.writeBackup(`${RECORD_NAME}.json`, '{"version":1}') + assert.deepEqual(fake.savedRecords[0], { + recordType: CLOUDKIT_RECORD_TYPE, + recordName: RECORD_NAME, + fields: { prfTag: { value: PRF_TAG }, address: { value: ADDRESS }, payload: { value: '{"version":1}' } }, + }) + assert.equal(await storage.readBackup(`${RECORD_NAME}.json`), '{"version":1}') + assert.equal(await storage.readBackup(`gwpk-${PRF_TAG}-0x2222222222222222222222222222222222222222.json`), null) + }) + + it('replaces an existing record using its change tag', async () => { + const fake = createFakeCloudKit() + const storage = createICloudStorage({ containerId: 'c', apiToken: 't', loadCloudKit: async () => fake.cloudKit }) + await storage.authorize() + await storage.writeBackup(`${RECORD_NAME}.json`, 'first') + await storage.writeBackup(`${RECORD_NAME}.json`, 'second') + assert.equal(fake.records.size, 1) + assert.equal((fake.savedRecords[1] as FakeRecord).recordChangeTag, 'tag-1') + assert.equal(await storage.readBackup(`${RECORD_NAME}.json`), 'second') + }) + + it('lists by prfTag with a server-side query and follows pagination', async () => { + const fake = createFakeCloudKit({ queryPageSize: 1 }) + const storage = createICloudStorage({ containerId: 'c', apiToken: 't', loadCloudKit: async () => fake.cloudKit }) + await storage.authorize() + const secondAddress = '0x2222222222222222222222222222222222222222' + await storage.writeBackup(`${RECORD_NAME}.json`, 'a') + await storage.writeBackup(`gwpk-${PRF_TAG}-${secondAddress}.json`, 'b') + await storage.writeBackup(`gwpk-zzzzzzzzzzzzzzzzzzzzzz-${ADDRESS}.json`, 'c') + assert.deepEqual((await storage.listBackupNames(PRF_TAG)).sort(), [`${RECORD_NAME}.json`, `gwpk-${PRF_TAG}-${secondAddress}.json`]) + assert.equal(fake.queries.length, 2) + }) + + it('signs in through the Apple button when there is no session', async () => { + const fake = createFakeCloudKit({ signedIn: false }) + const appendedElements: unknown[] = [] + const originalDocument = (globalThis as { document?: unknown }).document + ;(globalThis as { document?: unknown }).document = { + createElement: () => ({ style: {}, appendChild: (child: unknown) => appendedElements.push(child), remove: () => appendedElements.splice(0) }), + body: { appendChild: (element: unknown) => appendedElements.push(element) }, + } + try { + const storage = createICloudStorage({ containerId: 'c', apiToken: 't', loadCloudKit: async () => fake.cloudKit }) + await storage.authorize() + await storage.writeBackup(`${RECORD_NAME}.json`, 'a') + assert.equal(appendedElements.length, 0, 'the sign-in overlay is removed again') + } finally { + ;(globalThis as { document?: unknown }).document = originalDocument + } + }) + + it('maps authentication errors to ProviderAuthError and other errors to a plain error', async () => { + const fake = createFakeCloudKit() + const container = fake.cloudKit.getDefaultContainer() + const failingDatabase = container.privateCloudDatabase + const authFailingCloudKit: CloudKitNamespace = { + configure: () => undefined, + getDefaultContainer: () => ({ + ...container, + privateCloudDatabase: { ...failingDatabase, performQuery: async () => ({ hasErrors: true, errors: [{ serverErrorCode: 'AUTHENTICATION_REQUIRED' }] }) }, + }), + } + const storage = createICloudStorage({ containerId: 'c', apiToken: 't', loadCloudKit: async () => authFailingCloudKit }) + await storage.authorize() + await assert.rejects(storage.listBackupNames(PRF_TAG), ProviderAuthError) + + const otherFailingCloudKit: CloudKitNamespace = { + configure: () => undefined, + getDefaultContainer: () => ({ + ...container, + privateCloudDatabase: { ...failingDatabase, performQuery: async () => ({ hasErrors: true, errors: [{ serverErrorCode: 'BAD_REQUEST' }] }) }, + }), + } + const otherStorage = createICloudStorage({ containerId: 'c', apiToken: 't', loadCloudKit: async () => otherFailingCloudKit }) + await otherStorage.authorize() + await assert.rejects(otherStorage.listBackupNames(PRF_TAG), (error: Error) => !(error instanceof ProviderAuthError)) + }) + + it('rejects names that are not backup file names', async () => { + const fake = createFakeCloudKit() + const storage = createICloudStorage({ containerId: 'c', apiToken: 't', loadCloudKit: async () => fake.cloudKit }) + await storage.authorize() + await assert.rejects(storage.writeBackup('other.json', 'x')) + }) +}) diff --git a/packages/passkey-login-widget/src/storage/iCloudStorage.ts b/packages/passkey-login-widget/src/storage/iCloudStorage.ts new file mode 100644 index 00000000..c772269b --- /dev/null +++ b/packages/passkey-login-widget/src/storage/iCloudStorage.ts @@ -0,0 +1,209 @@ +import { filterBackupNamesByTag, parseBackupFileName } from '../crypto/backupFileName.ts' +import { loadExternalScript } from './loadExternalScript.ts' +import { ProviderAuthError } from './storageAdapter.ts' +import type { PasskeyBackupStorage } from '../widgetRuntimeContract.ts' + +const CLOUDKIT_JS_URL = 'https://cdn.apple-cloudkit.com/ck/2/cloudkit.js' +/** CloudKit record type; it and a queryable index on `prfTag` must exist in the container (see QA.md). */ +export const CLOUDKIT_RECORD_TYPE = 'PasskeyBackup' +const APPLE_SIGN_IN_BUTTON_ELEMENT_ID = 'apple-sign-in-button' +const BACKUP_FILE_EXTENSION = '.json' + +export type ICloudEnvironment = 'development' | 'production' + +interface CloudKitRecord { + recordName: string + recordType?: string + recordChangeTag?: string + fields?: Record +} + +interface CloudKitServerError { + serverErrorCode?: string + recordName?: string +} + +interface CloudKitResponse { + hasErrors?: boolean + errors?: CloudKitServerError[] + records?: CloudKitRecord[] + continuationMarker?: string +} + +interface CloudKitDatabase { + performQuery( + query: { + recordType: string + filterBy: { fieldName: string; comparator: string; fieldValue: { value: string } }[] + }, + options?: { continuationMarker?: string }, + ): Promise + fetchRecords(recordNames: string[]): Promise + saveRecords(records: CloudKitRecord | CloudKitRecord[]): Promise +} + +export interface CloudKitContainer { + setUpAuth(): Promise + whenUserSignsIn(): Promise + privateCloudDatabase: CloudKitDatabase +} + +export interface CloudKitNamespace { + configure(config: { + containers: { + containerIdentifier: string + apiTokenAuth: { apiToken: string; persist: boolean } + environment: ICloudEnvironment + }[] + }): void + getDefaultContainer(): CloudKitContainer +} + +export interface ICloudStorageOptions { + /** CloudKit container identifier, e.g. `iCloud.org.gooddollar.passkey`. */ + containerId: string + /** CloudKit API token (public by design; restricted to allowed origins in the CloudKit Dashboard). */ + apiToken: string + environment?: ICloudEnvironment + /** Test seam: replaces loading CloudKit JS from Apple's CDN. */ + loadCloudKit?: () => Promise +} + +async function loadCloudKitFromAppleCdn(): Promise { + await loadExternalScript(CLOUDKIT_JS_URL) + const cloudKit = (window as unknown as { CloudKit?: CloudKitNamespace }).CloudKit + if (!cloudKit) { + throw new ProviderAuthError('CloudKit JS is not available') + } + return cloudKit +} + +/** + * CloudKit renders its own Apple sign-in button, and sign-in must start from a click on it. + * Shows that button in a small overlay and resolves once the user has signed in. + */ +async function signInWithAppleButton(container: CloudKitContainer): Promise { + const overlayElement = document.createElement('div') + overlayElement.style.cssText = + 'position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.5);z-index:2147483647' + const buttonElement = document.createElement('div') + buttonElement.id = APPLE_SIGN_IN_BUTTON_ELEMENT_ID + overlayElement.appendChild(buttonElement) + document.body.appendChild(overlayElement) + try { + await container.setUpAuth() + await container.whenUserSignsIn() + } finally { + overlayElement.remove() + } +} + +/** Throws `ProviderAuthError` for authentication problems and a plain Error for any other CloudKit failure. */ +function assertCloudKitResponseOk(response: CloudKitResponse): void { + if (!response.hasErrors) { + return + } + const errorCodes = (response.errors ?? []).map((error) => error.serverErrorCode) + if (errorCodes.some((code) => code === 'AUTHENTICATION_REQUIRED' || code === 'AUTHENTICATION_FAILED')) { + throw new ProviderAuthError('iCloud sign-in is required') + } + throw new Error(`CloudKit request failed: ${errorCodes.join(', ')}`) +} + +/** + * iCloud backup storage on CloudKit JS (private database). The backup of a passkey is + * one `PasskeyBackup` record whose `recordName` is the backup file name without `.json`. + */ +export function createICloudStorage({ + containerId, + apiToken, + environment = 'development', + loadCloudKit = loadCloudKitFromAppleCdn, +}: ICloudStorageOptions): PasskeyBackupStorage { + let signedInContainer: CloudKitContainer | null = null + + function requireDatabase(): CloudKitDatabase { + if (!signedInContainer) { + throw new ProviderAuthError('Not signed in to iCloud') + } + return signedInContainer.privateCloudDatabase + } + + /** Fetches one record; null when it does not exist. */ + async function fetchRecordOrNull(recordName: string): Promise { + const response = await requireDatabase().fetchRecords([recordName]) + const notFound = (response.errors ?? []).some((error) => error.serverErrorCode === 'NOT_FOUND') + if (response.hasErrors && !notFound) { + assertCloudKitResponseOk(response) + } + return response.records?.find((record) => record.recordName === recordName && record.fields) ?? null + } + + return { + id: 'icloud', + label: 'iCloud', + + async authorize() { + if (signedInContainer) { + return + } + const cloudKit = await loadCloudKit() + cloudKit.configure({ + containers: [{ containerIdentifier: containerId, apiTokenAuth: { apiToken, persist: true }, environment }], + }) + const container = cloudKit.getDefaultContainer() + const userIdentity = await container.setUpAuth() + if (!userIdentity) { + await signInWithAppleButton(container) + } + signedInContainer = container + }, + + // The `prfTag` field has a queryable index, so the lookup is a server-side query + async listBackupNames(prfTag) { + const database = requireDatabase() + const fileNames: string[] = [] + let continuationMarker: string | undefined + do { + const response = await database.performQuery( + { + recordType: CLOUDKIT_RECORD_TYPE, + filterBy: [{ fieldName: 'prfTag', comparator: 'EQUALS', fieldValue: { value: prfTag } }], + }, + continuationMarker ? { continuationMarker } : undefined, + ) + assertCloudKitResponseOk(response) + fileNames.push(...(response.records ?? []).map((record) => `${record.recordName}${BACKUP_FILE_EXTENSION}`)) + continuationMarker = response.continuationMarker + } while (continuationMarker) + return filterBackupNamesByTag(fileNames, prfTag) + }, + + async readBackup(fileName) { + const record = await fetchRecordOrNull(fileName.slice(0, -BACKUP_FILE_EXTENSION.length)) + const payload = record?.fields?.payload?.value + return typeof payload === 'string' ? payload : null + }, + + // Saving by recordName replaces the backup; an existing record must be saved with its change tag + async writeBackup(fileName, backupJson) { + const parsedName = parseBackupFileName(fileName) + if (!parsedName) { + throw new Error('Invalid backup file name') + } + const recordName = fileName.slice(0, -BACKUP_FILE_EXTENSION.length) + const existingRecord = await fetchRecordOrNull(recordName) + const response = await requireDatabase().saveRecords({ + recordType: CLOUDKIT_RECORD_TYPE, + recordName, + ...(existingRecord?.recordChangeTag ? { recordChangeTag: existingRecord.recordChangeTag } : {}), + fields: { + prfTag: { value: parsedName.prfTag }, + address: { value: parsedName.address }, + payload: { value: backupJson }, + }, + }) + assertCloudKitResponseOk(response) + }, + } +} diff --git a/packages/passkey-login-widget/src/storage/loadExternalScript.ts b/packages/passkey-login-widget/src/storage/loadExternalScript.ts new file mode 100644 index 00000000..c2dcc4ae --- /dev/null +++ b/packages/passkey-login-widget/src/storage/loadExternalScript.ts @@ -0,0 +1,23 @@ +const pendingScriptLoads = new Map>() + +/** Loads a third-party browser SDK once per page and resolves when it is ready. */ +export function loadExternalScript(scriptUrl: string): Promise { + const pendingLoad = pendingScriptLoads.get(scriptUrl) + if (pendingLoad) { + return pendingLoad + } + const scriptLoad = new Promise((resolve, reject) => { + const scriptElement = document.createElement('script') + scriptElement.src = scriptUrl + scriptElement.async = true + scriptElement.onload = () => resolve() + scriptElement.onerror = () => { + // Allow a later attempt to retry after a network failure + pendingScriptLoads.delete(scriptUrl) + reject(new Error(`Could not load ${scriptUrl}`)) + } + document.head.appendChild(scriptElement) + }) + pendingScriptLoads.set(scriptUrl, scriptLoad) + return scriptLoad +} diff --git a/packages/passkey-login-widget/src/storage/rememberedProvider.test.ts b/packages/passkey-login-widget/src/storage/rememberedProvider.test.ts new file mode 100644 index 00000000..c5d15745 --- /dev/null +++ b/packages/passkey-login-widget/src/storage/rememberedProvider.test.ts @@ -0,0 +1,42 @@ +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { createInMemoryStorage } from '../testFixtures.ts' +import { REMEMBERED_PROVIDER_STORAGE_KEY, readRememberedProviderId, rememberProviderId } from './rememberedProvider.ts' + +function createFakeBrowserStorage() { + const values = new Map() + return { + values, + getItem: (key: string) => values.get(key) ?? null, + setItem: (key: string, value: string) => { + values.set(key, value) + }, + } +} + +describe('remembered provider', () => { + const offeredProviders = [createInMemoryStorage('google-drive'), createInMemoryStorage('icloud')] + + it('stores only the provider id', () => { + const browserStorage = createFakeBrowserStorage() + rememberProviderId('icloud', browserStorage) + assert.deepEqual([...browserStorage.values], [[REMEMBERED_PROVIDER_STORAGE_KEY, 'icloud']]) + }) + + it('returns the remembered id only while that provider is still offered', () => { + const browserStorage = createFakeBrowserStorage() + rememberProviderId('icloud', browserStorage) + assert.equal(readRememberedProviderId(offeredProviders, browserStorage), 'icloud') + assert.equal(readRememberedProviderId([offeredProviders[0]], browserStorage), null) + }) + + it('returns null when nothing is remembered or storage is blocked', () => { + assert.equal(readRememberedProviderId(offeredProviders, createFakeBrowserStorage()), null) + const blockedStorage = { + getItem: () => { + throw new Error('blocked') + }, + } + assert.equal(readRememberedProviderId(offeredProviders, blockedStorage), null) + }) +}) diff --git a/packages/passkey-login-widget/src/storage/rememberedProvider.ts b/packages/passkey-login-widget/src/storage/rememberedProvider.ts new file mode 100644 index 00000000..cce8a7b8 --- /dev/null +++ b/packages/passkey-login-widget/src/storage/rememberedProvider.ts @@ -0,0 +1,32 @@ +import type { PasskeyBackupStorage, PasskeyProviderId } from '../widgetRuntimeContract.ts' + +/** localStorage key holding the id (and only the id) of the last provider used successfully. */ +export const REMEMBERED_PROVIDER_STORAGE_KEY = 'goodwidget.passkey-login.provider' + +/** + * Returns the remembered provider id when it is still one of the offered providers. + * Browsers that block localStorage simply behave as "nothing remembered". + */ +export function readRememberedProviderId( + offeredProviders: PasskeyBackupStorage[], + browserStorage: Pick | undefined = globalThis.localStorage, +): PasskeyProviderId | null { + try { + const rememberedId = browserStorage?.getItem(REMEMBERED_PROVIDER_STORAGE_KEY) + return offeredProviders.find((provider) => provider.id === rememberedId)?.id ?? null + } catch { + return null + } +} + +/** Remembers the provider id so the next restore can skip the provider choice. Failures are ignored. */ +export function rememberProviderId( + providerId: PasskeyProviderId, + browserStorage: Pick | undefined = globalThis.localStorage, +): void { + try { + browserStorage?.setItem(REMEMBERED_PROVIDER_STORAGE_KEY, providerId) + } catch { + // Remembering the provider is a convenience; the flow works without it. + } +} diff --git a/packages/passkey-login-widget/src/storage/storageAdapter.ts b/packages/passkey-login-widget/src/storage/storageAdapter.ts new file mode 100644 index 00000000..933afb55 --- /dev/null +++ b/packages/passkey-login-widget/src/storage/storageAdapter.ts @@ -0,0 +1,15 @@ +export type { + PasskeyBackupStorage, + PasskeyProviderId, +} from '../widgetRuntimeContract.ts' + +/** + * Thrown by storage adapters when provider sign-in, consent or a request authorization fails. + * Maps to the D4 screen / `PROVIDER_AUTH_FAILED`. + */ +export class ProviderAuthError extends Error { + constructor(message: string) { + super(message) + this.name = 'ProviderAuthError' + } +} diff --git a/packages/passkey-login-widget/src/testFixtures.ts b/packages/passkey-login-widget/src/testFixtures.ts new file mode 100644 index 00000000..edf196ca --- /dev/null +++ b/packages/passkey-login-widget/src/testFixtures.ts @@ -0,0 +1,48 @@ +import type { Bytes } from './crypto/encoding.ts' +import { ProviderAuthError } from './storage/storageAdapter.ts' +import type { PasskeyBackupStorage, PasskeyProviderId } from './widgetRuntimeContract.ts' + +/** Deterministic stand-in for a passkey PRF output; `seed` makes a different "passkey". */ +export function createFakePrfOutput(seed: number): Bytes { + return Uint8Array.from({ length: 32 }, (_, index) => (index * 7 + seed) % 256) +} + +export interface InMemoryStorageControls { + /** File name -> backup JSON currently stored. */ + files: Map + /** Make `authorize` fail with a provider auth error. */ + failAuthorization: boolean + /** Make `writeBackup` fail with a plain error. */ + failWrites: boolean +} + +/** In-memory `PasskeyBackupStorage` used by unit tests; behaves like a provider with an exact name lookup. */ +export function createInMemoryStorage( + id: PasskeyProviderId = 'google-drive', +): PasskeyBackupStorage & InMemoryStorageControls { + const storage: PasskeyBackupStorage & InMemoryStorageControls = { + id, + label: id === 'google-drive' ? 'Google Drive' : 'iCloud', + files: new Map(), + failAuthorization: false, + failWrites: false, + async authorize() { + if (storage.failAuthorization) { + throw new ProviderAuthError('sign-in failed') + } + }, + async listBackupNames(prfTag) { + return [...storage.files.keys()].filter((name) => name.startsWith(`gwpk-${prfTag}-`)) + }, + async readBackup(fileName) { + return storage.files.get(fileName) ?? null + }, + async writeBackup(fileName, backupJson) { + if (storage.failWrites) { + throw new Error('write failed') + } + storage.files.set(fileName, backupJson) + }, + } + return storage +} diff --git a/packages/passkey-login-widget/src/webauthn/passkeyClient.ts b/packages/passkey-login-widget/src/webauthn/passkeyClient.ts new file mode 100644 index 00000000..e488f20b --- /dev/null +++ b/packages/passkey-login-widget/src/webauthn/passkeyClient.ts @@ -0,0 +1,111 @@ +import type { Bytes } from '../crypto/encoding.ts' +import { PRF_SALT_TEXT } from '../crypto/prfDerivation.ts' +import { PASSKEY_ERROR_MESSAGES, PasskeyFlowError } from './passkeyErrors.ts' + +const PRF_SALT = new TextEncoder().encode(PRF_SALT_TEXT) + +/** ES256 and RS256: what every platform authenticator supports. */ +const SUPPORTED_SIGNATURE_ALGORITHMS: PublicKeyCredentialParameters[] = [ + { type: 'public-key', alg: -7 }, + { type: 'public-key', alg: -257 }, +] + +export interface CreatePasskeyOptions { + rpId: string + appName: string +} + +export interface PasskeyPrfResult { + /** Secret PRF output. Keep in memory only; never log, store or return to the host. */ + prfOutput: Bytes +} + +/** + * Whether this browser can run the flow. WebAuthn + (when the browser can tell) the PRF extension. + * Browsers without `getClientCapabilities` are confirmed at registration instead. + */ +export async function isPasskeyPrfSupported(): Promise { + if (typeof PublicKeyCredential === 'undefined' || !navigator.credentials) { + return false + } + const getClientCapabilities = ( + PublicKeyCredential as unknown as { getClientCapabilities?: () => Promise> } + ).getClientCapabilities + if (typeof getClientCapabilities !== 'function') { + return true + } + const capabilities = await getClientCapabilities.call(PublicKeyCredential) + return capabilities['extension:prf'] !== false +} + +/** Reads `prf.results.first` from a credential's extension results; null when the authenticator gave none. */ +function readPrfOutput(credential: PublicKeyCredential): Bytes | null { + const prfResults = (credential.getClientExtensionResults() as { prf?: { results?: { first?: BufferSource } } }).prf + ?.results + if (!prfResults?.first) { + return null + } + const first = prfResults.first + // Copy out of the view so offsets of a larger underlying buffer are not leaked into the result + return ArrayBuffer.isView(first) + ? new Uint8Array(first.buffer.slice(first.byteOffset, first.byteOffset + first.byteLength)) + : new Uint8Array(first) +} + +/** + * Asks the user for an existing discoverable passkey of this rpId and returns its PRF output. + * @param rpId relying party id + * @param credentialId limit the request to this credential (used right after creating a passkey) + */ +export async function authenticateWithPasskey(rpId: string, credentialId?: ArrayBuffer): Promise { + const assertion = (await navigator.credentials.get({ + publicKey: { + rpId, + // No server: the challenge only has to be fresh. The assertion itself is never verified. + challenge: crypto.getRandomValues(new Uint8Array(32)), + userVerification: 'required', + allowCredentials: credentialId ? [{ type: 'public-key', id: credentialId }] : [], + extensions: { prf: { eval: { first: PRF_SALT } } } as AuthenticationExtensionsClientInputs, + }, + })) as PublicKeyCredential | null + if (!assertion) { + throw new PasskeyFlowError('PASSKEY_CANCELLED', PASSKEY_ERROR_MESSAGES.PASSKEY_CANCELLED) + } + const prfOutput = readPrfOutput(assertion) + if (!prfOutput) { + throw new PasskeyFlowError('UNSUPPORTED_BROWSER', PASSKEY_ERROR_MESSAGES.UNSUPPORTED_BROWSER) + } + return { prfOutput } +} + +/** + * Creates a NEW discoverable passkey and returns its PRF output. + * When the authenticator only reports `prf.enabled` at registration, a follow-up + * assertion fetches the output. When PRF is unsupported nothing is kept and D1 is raised. + */ +export async function createPasskey({ rpId, appName }: CreatePasskeyOptions): Promise { + const accountLabel = `${appName} ${new Date().toISOString().slice(0, 10)}` + const credential = (await navigator.credentials.create({ + publicKey: { + rp: { id: rpId, name: appName }, + user: { id: crypto.getRandomValues(new Uint8Array(16)), name: accountLabel, displayName: accountLabel }, + // No server: the challenge only has to be fresh. The attestation is never verified. + challenge: crypto.getRandomValues(new Uint8Array(32)), + pubKeyCredParams: SUPPORTED_SIGNATURE_ALGORITHMS, + authenticatorSelection: { residentKey: 'required', userVerification: 'required' }, + extensions: { prf: { eval: { first: PRF_SALT } } } as AuthenticationExtensionsClientInputs, + }, + })) as PublicKeyCredential | null + if (!credential) { + throw new PasskeyFlowError('PASSKEY_CANCELLED', PASSKEY_ERROR_MESSAGES.PASSKEY_CANCELLED) + } + const prfOutputAtRegistration = readPrfOutput(credential) + if (prfOutputAtRegistration) { + return { prfOutput: prfOutputAtRegistration } + } + const prfExtension = (credential.getClientExtensionResults() as { prf?: { enabled?: boolean } }).prf + if (!prfExtension?.enabled) { + throw new PasskeyFlowError('UNSUPPORTED_BROWSER', PASSKEY_ERROR_MESSAGES.UNSUPPORTED_BROWSER) + } + return authenticateWithPasskey(rpId, credential.rawId) +} diff --git a/packages/passkey-login-widget/src/webauthn/passkeyErrors.test.ts b/packages/passkey-login-widget/src/webauthn/passkeyErrors.test.ts new file mode 100644 index 00000000..28b7467a --- /dev/null +++ b/packages/passkey-login-widget/src/webauthn/passkeyErrors.test.ts @@ -0,0 +1,40 @@ +import assert from 'node:assert/strict' +import { describe, it } from 'node:test' +import { BackupDecryptError, BackupFormatError } from '../crypto/backupErrors.ts' +import { ProviderAuthError } from '../storage/storageAdapter.ts' +import { PASSKEY_ERROR_MESSAGES, PasskeyFlowError, toPasskeyFlowError } from './passkeyErrors.ts' +import { PASSKEY_ERROR_CODES } from '../widgetRuntimeContract.ts' + +describe('toPasskeyFlowError', () => { + it('keeps errors that already carry a code', () => { + const original = new PasskeyFlowError('BACKUP_NOT_FOUND', 'x') + assert.equal(toPasskeyFlowError(original, 'BACKUP_FAILED'), original) + }) + + it('maps provider sign-in failures to D4', () => { + assert.equal(toPasskeyFlowError(new ProviderAuthError('no'), 'BACKUP_FAILED').code, 'PROVIDER_AUTH_FAILED') + }) + + it('maps decrypt and format failures to D6', () => { + assert.equal(toPasskeyFlowError(new BackupDecryptError('x'), 'BACKUP_FAILED').code, 'DECRYPT_FAILED') + assert.equal(toPasskeyFlowError(new BackupFormatError('x'), 'BACKUP_FAILED').code, 'DECRYPT_FAILED') + }) + + it('maps WebAuthn dialog dismissal to D2 and missing support to D1', () => { + assert.equal(toPasskeyFlowError(new DOMException('x', 'NotAllowedError'), 'BACKUP_FAILED').code, 'PASSKEY_CANCELLED') + assert.equal(toPasskeyFlowError(new DOMException('x', 'AbortError'), 'BACKUP_FAILED').code, 'PASSKEY_CANCELLED') + assert.equal(toPasskeyFlowError(new DOMException('x', 'NotSupportedError'), 'BACKUP_FAILED').code, 'UNSUPPORTED_BROWSER') + }) + + it('uses the fallback code for unknown errors and never leaks their message', () => { + const flowError = toPasskeyFlowError(new Error(`secret ${'0x11'.repeat(16)}`), 'BACKUP_FAILED') + assert.equal(flowError.code, 'BACKUP_FAILED') + assert.equal(flowError.message, PASSKEY_ERROR_MESSAGES.BACKUP_FAILED) + }) + + it('has a message for every error code', () => { + for (const code of PASSKEY_ERROR_CODES) { + assert.ok(PASSKEY_ERROR_MESSAGES[code].length > 0) + } + }) +}) diff --git a/packages/passkey-login-widget/src/webauthn/passkeyErrors.ts b/packages/passkey-login-widget/src/webauthn/passkeyErrors.ts new file mode 100644 index 00000000..2891afe3 --- /dev/null +++ b/packages/passkey-login-widget/src/webauthn/passkeyErrors.ts @@ -0,0 +1,52 @@ +import { BackupDecryptError, BackupFormatError } from '../crypto/backupErrors.ts' +import { ProviderAuthError } from '../storage/storageAdapter.ts' +import type { PasskeyErrorCode } from '../widgetRuntimeContract.ts' + +/** An error that already knows which D screen / `onError` code it belongs to. */ +export class PasskeyFlowError extends Error { + code: PasskeyErrorCode + + constructor(code: PasskeyErrorCode, message: string) { + super(message) + this.name = 'PasskeyFlowError' + this.code = code + } +} + +/** User-facing messages per code. They never include key material. */ +export const PASSKEY_ERROR_MESSAGES: Record = { + UNSUPPORTED_BROWSER: "This browser doesn't support passkey login.", + PASSKEY_CANCELLED: 'The passkey request was cancelled or no passkey was found.', + BACKUP_NOT_FOUND: 'No backup was found for this passkey.', + PROVIDER_AUTH_FAILED: "Couldn't connect to the backup provider.", + BACKUP_FAILED: 'The backup could not be written.', + DECRYPT_FAILED: "The backup couldn't be unlocked with this passkey.", + AMBIGUOUS_BACKUP: 'More than one backup was found for this passkey.', +} + +/** + * Maps anything thrown while running the flow to a `PasskeyFlowError`. + * WebAuthn cannot tell "no passkey" from "cancelled", so both are `PASSKEY_CANCELLED`. + * @param error the thrown value + * @param fallbackCode code to use when the error is not one of the known kinds + */ +export function toPasskeyFlowError(error: unknown, fallbackCode: PasskeyErrorCode): PasskeyFlowError { + if (error instanceof PasskeyFlowError) { + return error + } + if (error instanceof ProviderAuthError) { + return new PasskeyFlowError('PROVIDER_AUTH_FAILED', PASSKEY_ERROR_MESSAGES.PROVIDER_AUTH_FAILED) + } + if (error instanceof BackupDecryptError || error instanceof BackupFormatError) { + return new PasskeyFlowError('DECRYPT_FAILED', PASSKEY_ERROR_MESSAGES.DECRYPT_FAILED) + } + if (error instanceof DOMException) { + if (error.name === 'NotSupportedError') { + return new PasskeyFlowError('UNSUPPORTED_BROWSER', PASSKEY_ERROR_MESSAGES.UNSUPPORTED_BROWSER) + } + if (error.name === 'NotAllowedError' || error.name === 'AbortError') { + return new PasskeyFlowError('PASSKEY_CANCELLED', PASSKEY_ERROR_MESSAGES.PASSKEY_CANCELLED) + } + } + return new PasskeyFlowError(fallbackCode, PASSKEY_ERROR_MESSAGES[fallbackCode]) +} diff --git a/packages/passkey-login-widget/src/widgetRuntimeContract.ts b/packages/passkey-login-widget/src/widgetRuntimeContract.ts new file mode 100644 index 00000000..5a47fc88 --- /dev/null +++ b/packages/passkey-login-widget/src/widgetRuntimeContract.ts @@ -0,0 +1,106 @@ +import type { GoodWidgetConfig, GoodWidgetThemeOverrides } from '@goodwidget/core' + +/** 0x-prefixed hex string (private key or public address). */ +export type HexString = `0x${string}` + +/** Backup providers the widget knows how to talk to. */ +export type PasskeyProviderId = 'google-drive' | 'icloud' + +/** + * Error codes reported through `onError`. Each maps to one of the D screens. + * `AMBIGUOUS_BACKUP` reuses the D6 layout with its own copy. + */ +export const PASSKEY_ERROR_CODES = [ + 'UNSUPPORTED_BROWSER', // D1 + 'PASSKEY_CANCELLED', // D2 + 'BACKUP_NOT_FOUND', // D3 + 'PROVIDER_AUTH_FAILED', // D4 + 'BACKUP_FAILED', // D5 + 'DECRYPT_FAILED', // D6 + 'AMBIGUOUS_BACKUP', // D6 layout, different copy +] as const +export type PasskeyErrorCode = (typeof PASSKEY_ERROR_CODES)[number] + +/** Error payload for `onError`. Never contains key material. */ +export interface PasskeyLoginErrorDetail { + code: PasskeyErrorCode + message: string +} + +/** Payload for `onLogin`. This is the only callback that carries the private key. */ +export interface PasskeyLoginResult { + privateKey: HexString + address: HexString + isNewAccount: boolean +} + +/** Payload for `onBackupComplete`. Never contains the private key. */ +export interface PasskeyBackupResult { + address: HexString + provider: PasskeyProviderId +} + +/** + * Backup store (Google Drive, iCloud, or a test double). Adapters move an opaque + * JSON string and know nothing about keys. + */ +export interface PasskeyBackupStorage { + id: PasskeyProviderId + /** Human-readable provider name shown on the provider tiles. */ + label: string + /** Provider sign-in / consent. Throws `ProviderAuthError` when it fails. */ + authorize(): Promise + /** Names of backup files starting with `gwpk--`; empty when there are none. */ + listBackupNames(prfTag: string): Promise + /** Raw backup JSON, or null when the file is gone. */ + readBackup(fileName: string): Promise + /** Creates the file, or replaces the file that already has this name. */ + writeBackup(fileName: string, backupJson: string): Promise +} + +/** Screens of the flow. The ids follow the A1-D6 designs. */ +export const PASSKEY_SCREEN_IDS = [ + 'A1_ENTRY', + 'A2_AUTHENTICATING', + 'A3_NEW_ACCOUNT_WARNING', + 'A4_CREATE_PASSKEY', + 'B1_BACKUP_PROMPT', + 'B2_BACKUP_PROVIDER', + 'B3_BACKUP_PROGRESS', + 'B4_BACKUP_SUCCESS', + 'C1_RESTORE_PROVIDER', + 'C2_RESTORE_PROGRESS', + 'C3_RESTORE_SUCCESS', + 'D1_UNSUPPORTED_BROWSER', + 'D2_PASSKEY_CANCELLED', + 'D3_BACKUP_NOT_FOUND', + 'D4_PROVIDER_AUTH_FAILED', + 'D5_BACKUP_FAILED', + 'D6_DECRYPT_FAILED', +] as const +export type PasskeyScreenId = (typeof PASSKEY_SCREEN_IDS)[number] + +export interface PasskeyLoginWidgetProps { + /** + * Existing user: key of the account that is already logged in. Enables the backup + * flow (B). Omitted: login / create flow (A, C). A secret: on the custom element it + * is a JS property only, never an HTML attribute. + */ + privateKey?: HexString + /** Fired when the user presses Continue after a successful login or account creation. */ + onLogin?: (result: PasskeyLoginResult) => void + onBackupComplete?: (result: PasskeyBackupResult) => void + /** "Not now" (B1), "Skip for now" (D5, existing users) and "Use another login method" (A1, A3, D1). */ + onSkip?: () => void + onError?: (error: PasskeyLoginErrorDetail) => void + /** Backup providers offered to the user, in display order. */ + storage: PasskeyBackupStorage[] + /** WebAuthn relying party id, normally the host's registrable domain. */ + rpId: string + /** App name shown in the passkey dialog. */ + appName: string + themeOverrides?: GoodWidgetThemeOverrides + config?: GoodWidgetConfig + defaultTheme?: 'light' | 'dark' + 'data-testid'?: string +} diff --git a/packages/passkey-login-widget/tsconfig.build.json b/packages/passkey-login-widget/tsconfig.build.json new file mode 100644 index 00000000..074095b1 --- /dev/null +++ b/packages/passkey-login-widget/tsconfig.build.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": ".", + "allowImportingTsExtensions": true, + "paths": { + "react-native": ["./node_modules/react-native-web"] + } + }, + "include": ["src", "package.json"], + "exclude": ["src/**/*.test.ts", "src/testFixtures.ts"] +} diff --git a/packages/passkey-login-widget/tsconfig.json b/packages/passkey-login-widget/tsconfig.json new file mode 100644 index 00000000..bb144c29 --- /dev/null +++ b/packages/passkey-login-widget/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + // Editor/typecheck config only; emitting is tsup's job via tsconfig.build.json. + "noEmit": true, + // Logic modules import each other with explicit .ts so `node --test --experimental-strip-types` can run them. + "allowImportingTsExtensions": true, + "types": ["node"], + "paths": { + "@goodwidget/core": ["../core/src/index.ts"], + "@goodwidget/core/*": ["../core/src/*"], + "@goodwidget/ui": ["../ui/src/index.ts"], + "react-native": ["./node_modules/react-native-web"] + } + }, + "include": ["src", "package.json"] +} diff --git a/packages/passkey-login-widget/tsup.config.ts b/packages/passkey-login-widget/tsup.config.ts new file mode 100644 index 00000000..95c2de0d --- /dev/null +++ b/packages/passkey-login-widget/tsup.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'tsup' + +export default defineConfig({ + entry: { + index: 'src/index.ts', + element: 'src/element.ts', + register: 'src/register.ts', + }, + format: ['esm', 'cjs'], + dts: true, + sourcemap: true, + clean: true, + tsconfig: 'tsconfig.build.json', + external: ['react', 'react-dom', 'react-native', 'react-native-web'], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 391b3d5e..fe02a022 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -320,6 +320,9 @@ importers: '@goodwidget/connect-a-wallet-widget': specifier: workspace:* version: link:../../packages/connect-a-wallet-widget + '@goodwidget/passkey-login-widget': + specifier: workspace:* + version: link:../../packages/passkey-login-widget '@goodwidget/claim-widget-theme-demo': specifier: workspace:* version: link:../../packages/claim-widget-theme-demo @@ -733,6 +736,43 @@ importers: specifier: ^5.7.0 version: 5.9.3 + packages/passkey-login-widget: + dependencies: + '@goodwidget/core': + specifier: workspace:* + version: link:../core + '@goodwidget/embed': + specifier: workspace:* + version: link:../embed + '@goodwidget/ui': + specifier: workspace:* + version: link:../ui + viem: + specifier: ^2.0.0 + version: 2.48.4(typescript@5.9.3)(zod@4.1.11) + devDependencies: + '@types/node': + specifier: ^22.10.0 + version: 22.20.1 + '@types/react': + specifier: ^18.3.0 + version: 18.3.28 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.7(@types/react@18.3.28) + react: + specifier: ^18.3.0 + version: 18.3.1 + react-dom: + specifier: ^18.3.0 + version: 18.3.1(react@18.3.1) + tsup: + specifier: ^8.4.0 + version: 8.5.1(@swc/core@1.15.30)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.9.0) + typescript: + specifier: ^5.7.0 + version: 5.9.3 + packages/staking-migration-widget: dependencies: '@goodwidget/core': From a0f11f6c6f589e3c9293b85dd1f3bce4aa14a454 Mon Sep 17 00:00:00 2001 From: "goodbounties-nanoclaw-agent[bot]" <307944451+goodbounties-nanoclaw-agent[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2026 15:28:05 +0000 Subject: [PATCH 3/5] [BountyCoder] feat(passkey-login-widget): export ProviderAuthError for custom storage adapters Host apps and the Storybook mock storage need to signal provider sign-in failures (D4) from their own PasskeyBackupStorage implementations. Co-Authored-By: Claude Code On-Behalf-Of: BountyCoder[onecli] (yaskkeryodtdijpv) --- packages/passkey-login-widget/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/passkey-login-widget/src/index.ts b/packages/passkey-login-widget/src/index.ts index ad5a86e0..1d59788f 100644 --- a/packages/passkey-login-widget/src/index.ts +++ b/packages/passkey-login-widget/src/index.ts @@ -7,6 +7,7 @@ export { createGoogleDriveStorage } from './storage/googleDriveStorage.ts' export type { GoogleDriveStorageOptions } from './storage/googleDriveStorage.ts' export { createICloudStorage } from './storage/iCloudStorage.ts' export type { ICloudStorageOptions } from './storage/iCloudStorage.ts' +export { ProviderAuthError } from './storage/storageAdapter.ts' export { createInitialFlowState } from './flow/passkeyFlowMachine.ts' export type { PasskeyFlowKind, PasskeyFlowState } from './flow/passkeyFlowMachine.ts' export { passkeyLoginWidgetConfig } from './config.ts' From 9bf11655966c7efccdd876e2d43b0354df8fc5ed Mon Sep 17 00:00:00 2001 From: "goodbounties-nanoclaw-agent[bot]" <307944451+goodbounties-nanoclaw-agent[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2026 15:28:11 +0000 Subject: [PATCH 4/5] [BountyCoder] feat(storybook): passkey login widget fixtures, interaction harness, live story and docs Adds A1-D6 screen fixtures, interaction stories on in-memory storage, a manual Live story (VITE_PASSKEY_* values or controls, nothing committed) and the guide. Co-Authored-By: Claude Code On-Behalf-Of: BountyCoder[onecli] (yaskkeryodtdijpv) --- .../src/fixtures/passkeyMockStorage.ts | 55 ++++ examples/storybook/src/globals.d.ts | 4 + .../helpers/passkeyLoginWidgetStories.tsx | 288 ++++++++++++++++++ .../PasskeyLoginWidget.mdx | 96 ++++++ ...PasskeyLoginWidgetInteractions.stories.tsx | 40 +++ .../PasskeyLoginWidgetLive.stories.tsx | 43 +++ .../PasskeyLoginWidgetQA.stories.tsx | 128 ++++++++ 7 files changed, 654 insertions(+) create mode 100644 examples/storybook/src/fixtures/passkeyMockStorage.ts create mode 100644 examples/storybook/src/stories/helpers/passkeyLoginWidgetStories.tsx create mode 100644 examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidget.mdx create mode 100644 examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetInteractions.stories.tsx create mode 100644 examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetLive.stories.tsx create mode 100644 examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetQA.stories.tsx diff --git a/examples/storybook/src/fixtures/passkeyMockStorage.ts b/examples/storybook/src/fixtures/passkeyMockStorage.ts new file mode 100644 index 00000000..03b8ba7d --- /dev/null +++ b/examples/storybook/src/fixtures/passkeyMockStorage.ts @@ -0,0 +1,55 @@ +import { + ProviderAuthError, + type PasskeyBackupStorage, + type PasskeyProviderId, +} from '@goodwidget/passkey-login-widget' + +/** Failure switches a Playwright spec flips from the page to exercise the D screens. */ +export interface MockBackupStorageControls { + /** File name -> backup JSON currently stored. */ + files: Map + /** Makes `authorize` fail like a closed or denied provider sign-in. */ + failAuthorization: boolean + /** Makes `writeBackup` fail like a full or unreachable provider. */ + failWrites: boolean +} + +export interface MockBackupStorage extends PasskeyBackupStorage { + controls: MockBackupStorageControls +} + +const PROVIDER_LABELS: Record = { + 'google-drive': 'Google Drive', + icloud: 'iCloud', +} + +/** + * In-memory stand-in for a Drive / iCloud adapter. It stores the opaque backup JSON the widget + * hands over, so the widget's real crypto and flow run end to end without a network. + */ +export function createMockBackupStorage(providerId: PasskeyProviderId): MockBackupStorage { + const controls: MockBackupStorageControls = { files: new Map(), failAuthorization: false, failWrites: false } + return { + id: providerId, + label: PROVIDER_LABELS[providerId], + controls, + async authorize() { + if (controls.failAuthorization) { + // Adapters signal sign-in problems with ProviderAuthError; the widget shows the provider-auth screen + throw new ProviderAuthError('Mock provider sign-in failed') + } + }, + async listBackupNames(prfTag) { + return [...controls.files.keys()].filter((fileName) => fileName.startsWith(`gwpk-${prfTag}-`)) + }, + async readBackup(fileName) { + return controls.files.get(fileName) ?? null + }, + async writeBackup(fileName, backupJson) { + if (controls.failWrites) { + throw new Error('Mock provider write failed') + } + controls.files.set(fileName, backupJson) + }, + } +} diff --git a/examples/storybook/src/globals.d.ts b/examples/storybook/src/globals.d.ts index acb66b11..886d820b 100644 --- a/examples/storybook/src/globals.d.ts +++ b/examples/storybook/src/globals.d.ts @@ -7,6 +7,10 @@ interface ImportMetaEnv { readonly VITE_AI_CREDITS_FUNDING_VAULT_ADDRESS?: string readonly VITE_AI_CREDITS_VAULT_ADDRESS?: string readonly VITE_AI_CREDITS_GOODID_ADDRESS?: string + readonly VITE_PASSKEY_GOOGLE_CLIENT_ID?: string + readonly VITE_PASSKEY_ICLOUD_CONTAINER_ID?: string + readonly VITE_PASSKEY_ICLOUD_API_TOKEN?: string + readonly VITE_PASSKEY_ICLOUD_ENVIRONMENT?: string } interface ImportMeta { diff --git a/examples/storybook/src/stories/helpers/passkeyLoginWidgetStories.tsx b/examples/storybook/src/stories/helpers/passkeyLoginWidgetStories.tsx new file mode 100644 index 00000000..d0b9241b --- /dev/null +++ b/examples/storybook/src/stories/helpers/passkeyLoginWidgetStories.tsx @@ -0,0 +1,288 @@ +import React, { useMemo, useState } from 'react' +import { + PasskeyLoginWidget, + PasskeyLoginWidgetPreview, + createGoogleDriveStorage, + createICloudStorage, + createInitialFlowState, + type HexString, + type PasskeyBackupStorage, + type PasskeyFlowState, + type PasskeyLoginAdapterActions, + type PasskeyLoginAdapterResult, + type PasskeyProviderId, + type PasskeyScreenId, +} from '@goodwidget/passkey-login-widget' +import { createMockBackupStorage, type MockBackupStorage } from '../../fixtures/passkeyMockStorage' + +/** Width of the mobile-portrait card the designs were drawn at. */ +const WIDGET_WIDTH_PX = 400 + +/** Fixed demo private key of the logged-in user in the interaction stories; a throwaway, never used on a network. */ +const DEMO_PRIVATE_KEY: HexString = '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318' + +const PROVIDER_LABELS: Record = { 'google-drive': 'Google Drive', icloud: 'iCloud' } + +type ThemeMode = 'light' | 'dark' + +/** Frames a widget at the design width. */ +function WidgetFrame({ children }: { children: React.ReactNode }) { + return
{children}
+} + +// --------------------------------------------------------------------------- +// Screen fixtures: a fixed adapter result per screen, no WebAuthn and no storage +// --------------------------------------------------------------------------- + +const NOOP_ACTIONS: PasskeyLoginAdapterActions = { + startLogin: () => undefined, + requestNewAccount: () => undefined, + confirmNewAccount: () => undefined, + startBackup: () => undefined, + chooseProvider: () => undefined, + retry: () => undefined, + chooseOtherProvider: () => undefined, + goBack: () => undefined, + finish: () => undefined, + skip: () => undefined, +} + +export interface ScreenFixtureOptions { + screen: PasskeyScreenId + /** Existing (already logged-in) user: backup journey. */ + isExistingUser?: boolean + /** Both Google Drive and iCloud are offered. */ + hasMultipleProviders?: boolean + /** Fields of the flow state to override (provider, progress step, error code, failed screen). */ + flowState?: Partial + themeMode?: ThemeMode +} + +/** Renders one screen from a fixed adapter result. */ +export function ScreenFixtureStory({ + screen, + isExistingUser = false, + hasMultipleProviders = true, + flowState = {}, + themeMode = 'light', +}: ScreenFixtureOptions) { + const adapter: PasskeyLoginAdapterResult = { + flowState: { ...createInitialFlowState({ isExistingUser, hasMultipleProviders }), screen, ...flowState }, + providerOptions: [ + { id: 'google-drive', label: PROVIDER_LABELS['google-drive'] }, + ...(hasMultipleProviders ? [{ id: 'icloud' as const, label: PROVIDER_LABELS.icloud }] : []), + ], + preselectedProviderId: 'google-drive', + actions: NOOP_ACTIONS, + } + return ( + + + + ) +} + +// --------------------------------------------------------------------------- +// Event log shared by the interaction and live stories +// --------------------------------------------------------------------------- + +/** Window hook the Playwright specs read and drive. Only the mock-backed interaction stories create it. */ +export interface PasskeyStoryWindowHook { + storages: Record + /** Every host callback the widget fired, with the full payload (mock keys only). */ + events: { name: string; detail?: unknown }[] +} + +declare global { + interface Window { + __passkeyStory?: PasskeyStoryWindowHook + } +} + +interface EventLogLine { + name: string + text: string +} + +/** One line per host callback. The private key is never printed: only the address and a masked marker. */ +function describeEvent(name: string, detail?: Record): string { + if (name === 'login') { + return `login → address ${String(detail?.address)}, isNewAccount ${String(detail?.isNewAccount)}, privateKey ••••••••` + } + if (name === 'backup-complete') { + return `backup-complete → address ${String(detail?.address)}, provider ${String(detail?.provider)}` + } + if (name === 'error') { + return `error → ${String(detail?.code)}` + } + return name +} + +function EventLog({ lines }: { lines: EventLogLine[] }) { + return ( +
+ {lines.length === 0 ? 'No host callbacks yet' : lines.map((line, index) =>
{line.text}
)} +
+ ) +} + +// --------------------------------------------------------------------------- +// Interaction stories: the real widget with mock storage; WebAuthn is mocked by the spec +// --------------------------------------------------------------------------- + +export interface InteractionHarnessOptions { + providerIds: PasskeyProviderId[] + /** Existing (already logged-in) user: starts the backup journey. */ + isExistingUser?: boolean +} + +/** + * Runs the real widget against in-memory storage. "Restart widget" remounts it while keeping the + * stored backups, which is how a spec proves a backup written in one session restores in the next. + */ +export function InteractionHarnessStory({ providerIds, isExistingUser = false }: InteractionHarnessOptions) { + const [restartCount, setRestartCount] = useState(0) + const [isLoggedInUser, setIsLoggedInUser] = useState(isExistingUser) + const [logLines, setLogLines] = useState([]) + const mockStorages = useMemo(() => providerIds.map((providerId) => createMockBackupStorage(providerId)), [providerIds]) + + const windowHook = useMemo(() => { + const hook: PasskeyStoryWindowHook = { + storages: Object.fromEntries(mockStorages.map((mockStorage) => [mockStorage.id, mockStorage])), + events: [], + } + window.__passkeyStory = hook + return hook + }, [mockStorages]) + + function recordEvent(name: string, detail?: Record) { + windowHook.events.push({ name, detail }) + setLogLines((previousLines) => [...previousLines, { name, text: describeEvent(name, detail) }]) + } + + return ( + + recordEvent('login', { ...result })} + onBackupComplete={(result) => recordEvent('backup-complete', { ...result })} + onSkip={() => recordEvent('skip')} + onError={(error) => recordEvent('error', { ...error })} + /> + + {/* Switches between the login flow and the logged-in user's backup flow, keeping the stored backups */} + + + + ) +} + +// --------------------------------------------------------------------------- +// Live story: real passkey, real Google Drive / iCloud +// --------------------------------------------------------------------------- + +export interface LiveStoryArgs { + googleClientId: string + iCloudContainerId: string + iCloudApiToken: string + iCloudEnvironment: 'development' | 'production' + /** Run the existing-user flow with a throwaway account key instead of the login flow. */ + backUpThrowawayAccount: boolean +} + +/** A control value wins over the matching VITE_PASSKEY_* environment value. */ +function pickControlOrEnvironment(controlValue: string, environmentValue: string | undefined): string { + return controlValue.trim() !== '' ? controlValue.trim() : (environmentValue ?? '') +} + +/** Random 32-byte hex key for the throwaway account; lives only in memory of this story. */ +function createThrowawayPrivateKey(): HexString { + const keyBytes = crypto.getRandomValues(new Uint8Array(32)) + return `0x${Array.from(keyBytes, (byte) => byte.toString(16).padStart(2, '0')).join('')}` +} + +/** Real WebAuthn and real providers; each provider is offered only when its configuration is present. */ +export function LiveStory({ + googleClientId, + iCloudContainerId, + iCloudApiToken, + iCloudEnvironment, + backUpThrowawayAccount, +}: LiveStoryArgs) { + const [logLines, setLogLines] = useState([]) + const throwawayPrivateKey = useMemo(() => createThrowawayPrivateKey(), []) + + const resolvedGoogleClientId = pickControlOrEnvironment(googleClientId, import.meta.env.VITE_PASSKEY_GOOGLE_CLIENT_ID) + const resolvedContainerId = pickControlOrEnvironment(iCloudContainerId, import.meta.env.VITE_PASSKEY_ICLOUD_CONTAINER_ID) + const resolvedApiToken = pickControlOrEnvironment(iCloudApiToken, import.meta.env.VITE_PASSKEY_ICLOUD_API_TOKEN) + const resolvedEnvironment = + (import.meta.env.VITE_PASSKEY_ICLOUD_ENVIRONMENT as LiveStoryArgs['iCloudEnvironment'] | undefined) ?? + iCloudEnvironment + + const isGoogleConfigured = resolvedGoogleClientId !== '' + const isICloudConfigured = resolvedContainerId !== '' && resolvedApiToken !== '' + + const storage = useMemo( + () => [ + ...(isGoogleConfigured ? [createGoogleDriveStorage({ clientId: resolvedGoogleClientId })] : []), + ...(isICloudConfigured + ? [ + createICloudStorage({ + containerId: resolvedContainerId, + apiToken: resolvedApiToken, + environment: resolvedEnvironment, + }), + ] + : []), + ], + [isGoogleConfigured, isICloudConfigured, resolvedGoogleClientId, resolvedContainerId, resolvedApiToken, resolvedEnvironment], + ) + + function recordEvent(name: string, detail?: Record) { + setLogLines((previousLines) => [...previousLines, { name, text: describeEvent(name, detail) }]) + } + + return ( + +
+
Google Drive: {isGoogleConfigured ? 'configured' : 'not configured'}
+
iCloud: {isICloudConfigured ? 'configured' : 'not configured'}
+
+ {storage.length === 0 ? ( +
+ No backup provider is configured. Set the VITE_PASSKEY_* values or fill in the controls (see QA.md). +
+ ) : ( + provider.id).join('+')} + storage={storage} + rpId={window.location.hostname} + appName="GoodWidget Storybook" + privateKey={backUpThrowawayAccount ? throwawayPrivateKey : undefined} + defaultTheme="light" + onLogin={(result) => recordEvent('login', { ...result })} + onBackupComplete={(result) => recordEvent('backup-complete', { ...result })} + onSkip={() => recordEvent('skip')} + onError={(error) => recordEvent('error', { ...error })} + /> + )} + +
+ ) +} diff --git a/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidget.mdx b/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidget.mdx new file mode 100644 index 00000000..5cb5c1cc --- /dev/null +++ b/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidget.mdx @@ -0,0 +1,96 @@ +import { Canvas, Meta } from '@storybook/blocks'; +import * as InteractionStories from './PasskeyLoginWidgetInteractions.stories'; +import { DocsCallout, DocsCard, DocsGrid, DocsPage, DocsSection, DocsList } from '../docs/DocsLayout'; + + + + + + +
  • + New users get a fresh passkey. Its PRF output is expanded with HKDF-SHA-256 into the account key (secp256k1), a + backup encryption key (AES-256-GCM) and a file tag (`prfTag`). +
  • +
  • + The backup file is named {'gwpk--
    .json'} and holds only `version`, `address`, `iv` and + `ciphertext`. The address is authenticated as AES-GCM additional data. +
  • +
  • + Logging in again lists the files with the passkey's `prfTag`, reads the single match and decrypts it. No match + shows "No backup found"; several matches show "More than one backup matches this passkey". +
  • +
  • + Existing users (the host passes `privateKey`) get a fresh passkey that backs up their current key, so accounts + created with another login method can be restored by passkey. +
  • +
    +
    + + + + ```tsx + import { + PasskeyLoginWidget, + createGoogleDriveStorage, + createICloudStorage, + } from '@goodwidget/passkey-login-widget' + + signIn(privateKey, address, isNewAccount)} + onBackupComplete={({ address, provider }) => markBackedUp(address, provider)} + onSkip={() => showOtherLoginMethods()} + onError={({ code }) => report(code)} + /> + ``` + + + Pass `privateKey` only for a logged-in user (it enables the backup flow). A single configured provider skips the + provider choice screens. The widget remembers the last used provider id in localStorage + (`goodwidget.passkey-login.provider`) and never stores keys. + + + + + + + + + + + One fixture per screen, rendered from a fixed adapter result, in light and dark. + + + Manual story for a real passkey with Google Drive / iCloud. Needs the VITE_PASSKEY_* values described in + `tests/widgets/passkey-login-widget/QA.md`. + + + +
    diff --git a/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetInteractions.stories.tsx b/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetInteractions.stories.tsx new file mode 100644 index 00000000..689ea895 --- /dev/null +++ b/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetInteractions.stories.tsx @@ -0,0 +1,40 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { PasskeyLoginWidget } from '@goodwidget/passkey-login-widget' +import { InteractionHarnessStory, type InteractionHarnessOptions } from '../helpers/passkeyLoginWidgetStories' + +/** + * The real widget (real crypto and flow state machine) on in-memory backup storage. The browser's WebAuthn + * is mocked by the Playwright specs (virtual authenticator); open these stories by hand only with a real + * authenticator that supports the PRF extension. The "Restart widget" button remounts the widget while the + * stored backups stay, which is the round trip from "create and back up" to "log in with the same passkey". + */ +const meta: Meta = { + title: 'QA/PasskeyLoginWidget/Interactions', + component: PasskeyLoginWidget as unknown as React.ComponentType, + tags: ['qa'], + parameters: { layout: 'padded' }, + render: (harnessOptions) => , +} + +export default meta +type Story = StoryObj + +export const OneProvider: Story = { + name: 'Login and create (Google Drive only)', + args: { providerIds: ['google-drive'] }, +} + +export const TwoProviders: Story = { + name: 'Login and create (Google Drive and iCloud)', + args: { providerIds: ['google-drive', 'icloud'] }, +} + +export const ExistingUserOneProvider: Story = { + name: 'Existing user backup (Google Drive only)', + args: { providerIds: ['google-drive'], isExistingUser: true }, +} + +export const ExistingUserTwoProviders: Story = { + name: 'Existing user backup (Google Drive and iCloud)', + args: { providerIds: ['google-drive', 'icloud'], isExistingUser: true }, +} diff --git a/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetLive.stories.tsx b/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetLive.stories.tsx new file mode 100644 index 00000000..ff047c46 --- /dev/null +++ b/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetLive.stories.tsx @@ -0,0 +1,43 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { PasskeyLoginWidget } from '@goodwidget/passkey-login-widget' +import { LiveStory, type LiveStoryArgs } from '../helpers/passkeyLoginWidgetStories' + +/** + * Manual QA with a real passkey and the real Google Drive / iCloud providers. Tagged `manual`, so it is hidden + * from the default Storybook filter and from the automated suites. Values come from the controls or from the + * VITE_PASSKEY_* environment variables (a control wins); a provider without values is not offered. + * Use a throwaway Google / Apple account: the story writes real backups. + */ +const meta: Meta = { + title: 'QA/PasskeyLoginWidget/Live (real passkey + real providers)', + component: PasskeyLoginWidget as unknown as React.ComponentType, + tags: ['manual'], + parameters: { layout: 'padded' }, + args: { + googleClientId: '', + iCloudContainerId: '', + iCloudApiToken: '', + iCloudEnvironment: 'development', + backUpThrowawayAccount: false, + }, + argTypes: { + googleClientId: { control: 'text', description: 'Google OAuth Web client ID (VITE_PASSKEY_GOOGLE_CLIENT_ID)' }, + iCloudContainerId: { control: 'text', description: 'CloudKit container (VITE_PASSKEY_ICLOUD_CONTAINER_ID)' }, + iCloudApiToken: { control: 'text', description: 'CloudKit API token (VITE_PASSKEY_ICLOUD_API_TOKEN)' }, + iCloudEnvironment: { + control: 'inline-radio', + options: ['development', 'production'], + description: 'CloudKit environment (VITE_PASSKEY_ICLOUD_ENVIRONMENT wins when set)', + }, + backUpThrowawayAccount: { + control: 'boolean', + description: 'Run the existing-user backup flow with a random throwaway key instead of the login flow', + }, + }, + render: (liveArgs) => , +} + +export default meta +type Story = StoryObj + +export const Live: Story = { name: 'Live' } diff --git a/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetQA.stories.tsx b/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetQA.stories.tsx new file mode 100644 index 00000000..08e6b282 --- /dev/null +++ b/examples/storybook/src/stories/passkey-login-widget/PasskeyLoginWidgetQA.stories.tsx @@ -0,0 +1,128 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { PasskeyLoginWidgetPreview } from '@goodwidget/passkey-login-widget' +import { ScreenFixtureStory, type ScreenFixtureOptions } from '../helpers/passkeyLoginWidgetStories' + +/** + * One fixture per screen of the designs (A1-D6), rendered from a fixed adapter result: + * no WebAuthn, no storage. The theme is a control (`themeMode`), so the Playwright states spec + * opens every fixture in light and dark through the `args` URL parameter. + */ +const meta: Meta = { + title: 'QA/PasskeyLoginWidget/Screen Fixtures', + component: PasskeyLoginWidgetPreview as unknown as React.ComponentType, + tags: ['qa'], + parameters: { layout: 'padded' }, + args: { themeMode: 'light' }, + argTypes: { + themeMode: { control: 'inline-radio', options: ['light', 'dark'] }, + }, + render: (fixtureOptions) => , +} + +export default meta +type Story = StoryObj + +// ---- A: login / create account ---- +export const A1Entry: Story = { name: 'A1 Entry', args: { screen: 'A1_ENTRY' } } +export const A2Authenticating: Story = { name: 'A2 Authenticating', args: { screen: 'A2_AUTHENTICATING' } } +export const A3NewAccountWarning: Story = { + name: 'A3 New account warning', + args: { screen: 'A3_NEW_ACCOUNT_WARNING' }, +} +export const A4CreatePasskey: Story = { name: 'A4 Create passkey', args: { screen: 'A4_CREATE_PASSKEY' } } + +// ---- B: back up ---- +export const B1BackupPrompt: Story = { + name: 'B1 Backup prompt (existing user)', + args: { screen: 'B1_BACKUP_PROMPT', isExistingUser: true, flowState: { flowKind: 'backup' } }, +} +export const B2BackupProvider: Story = { + name: 'B2 Backup provider', + args: { screen: 'B2_BACKUP_PROVIDER', flowState: { flowKind: 'new-account' } }, +} +export const B3BackupProgress: Story = { + name: 'B3 Backup progress', + args: { + screen: 'B3_BACKUP_PROGRESS', + flowState: { flowKind: 'new-account', providerId: 'google-drive', progressStepIndex: 2 }, + }, +} +export const B4BackupSuccess: Story = { + name: 'B4 Backup success', + args: { screen: 'B4_BACKUP_SUCCESS', flowState: { flowKind: 'new-account', providerId: 'google-drive' } }, +} + +// ---- C: restore ---- +export const C1RestoreProvider: Story = { name: 'C1 Restore provider', args: { screen: 'C1_RESTORE_PROVIDER' } } +export const C2RestoreProgress: Story = { + name: 'C2 Restore progress', + args: { screen: 'C2_RESTORE_PROGRESS', flowState: { providerId: 'google-drive', progressStepIndex: 1 } }, +} +export const C3RestoreSuccess: Story = { + name: 'C3 Restore success', + args: { screen: 'C3_RESTORE_SUCCESS', flowState: { providerId: 'google-drive' } }, +} + +// ---- D: errors ---- +export const D1UnsupportedBrowser: Story = { + name: 'D1 Unsupported browser', + args: { screen: 'D1_UNSUPPORTED_BROWSER', flowState: { errorCode: 'UNSUPPORTED_BROWSER' } }, +} +export const D2PasskeyCancelled: Story = { + name: 'D2 Passkey cancelled (login)', + args: { + screen: 'D2_PASSKEY_CANCELLED', + flowState: { errorCode: 'PASSKEY_CANCELLED', failedScreen: 'A2_AUTHENTICATING' }, + }, +} +export const D3BackupNotFound: Story = { + name: 'D3 Backup not found (two providers)', + args: { + screen: 'D3_BACKUP_NOT_FOUND', + flowState: { errorCode: 'BACKUP_NOT_FOUND', providerId: 'google-drive', failedScreen: 'C2_RESTORE_PROGRESS' }, + }, +} +export const D3BackupNotFoundSingleProvider: Story = { + name: 'D3 Backup not found (one provider)', + args: { + screen: 'D3_BACKUP_NOT_FOUND', + hasMultipleProviders: false, + flowState: { errorCode: 'BACKUP_NOT_FOUND', providerId: 'google-drive', failedScreen: 'C2_RESTORE_PROGRESS' }, + }, +} +export const D4ProviderAuthFailed: Story = { + name: 'D4 Provider sign-in failed', + args: { + screen: 'D4_PROVIDER_AUTH_FAILED', + flowState: { errorCode: 'PROVIDER_AUTH_FAILED', providerId: 'google-drive', failedScreen: 'C2_RESTORE_PROGRESS' }, + }, +} +export const D5BackupFailedNewUser: Story = { + name: 'D5 Backup failed (new user)', + args: { + screen: 'D5_BACKUP_FAILED', + flowState: { errorCode: 'BACKUP_FAILED', flowKind: 'new-account', providerId: 'google-drive', failedScreen: 'B3_BACKUP_PROGRESS' }, + }, +} +export const D5BackupFailedExistingUser: Story = { + name: 'D5 Backup failed (existing user, can skip)', + args: { + screen: 'D5_BACKUP_FAILED', + isExistingUser: true, + flowState: { errorCode: 'BACKUP_FAILED', flowKind: 'backup', providerId: 'google-drive', failedScreen: 'B3_BACKUP_PROGRESS' }, + }, +} +export const D6DecryptFailed: Story = { + name: 'D6 Decrypt failed', + args: { + screen: 'D6_DECRYPT_FAILED', + flowState: { errorCode: 'DECRYPT_FAILED', providerId: 'google-drive', failedScreen: 'C2_RESTORE_PROGRESS' }, + }, +} +export const D6AmbiguousBackup: Story = { + name: 'D6 Ambiguous backup (D6 layout)', + args: { + screen: 'D6_DECRYPT_FAILED', + flowState: { errorCode: 'AMBIGUOUS_BACKUP', providerId: 'google-drive', failedScreen: 'C2_RESTORE_PROGRESS' }, + }, +} From 4ef6a20f4cb9c10a93d1314d16aa86ba8c7b9ab5 Mon Sep 17 00:00:00 2001 From: "goodbounties-nanoclaw-agent[bot]" <307944451+goodbounties-nanoclaw-agent[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2026 15:28:53 +0000 Subject: [PATCH 5/5] [BountyCoder] test(passkey-login-widget): Playwright specs, virtual-authenticator flows and QA notes States spec (A1-D6, light and dark), create/backup/restore round trips with a Chromium virtual authenticator (WebAuthn PRF) on mock storage, error recovery, key-safety and version specs, committed screenshots and QA.md. Co-Authored-By: Claude Code On-Behalf-Of: BountyCoder[onecli] (yaskkeryodtdijpv) --- tests/widgets/passkey-login-widget/QA.md | 46 ++++ .../errors-and-recovery.spec.ts | 215 ++++++++++++++++++ .../existing-user-backup.spec.ts | 49 ++++ .../interactionHelpers.ts | 115 ++++++++++ .../passkey-login-widget/key-safety.spec.ts | 135 +++++++++++ .../passkey-login-widget/new-account.spec.ts | 91 ++++++++ .../provider-choice.spec.ts | 107 +++++++++ .../restore-existing-passkey.spec.ts | 59 +++++ .../passkey-login-widget/states.spec.ts | 70 ++++++ .../test-results/dark/pl-a1-entry.png | Bin 0 -> 19753 bytes .../dark/pl-a2-authenticating.png | Bin 0 -> 16697 bytes .../dark/pl-a3-new-account-warning.png | Bin 0 -> 32874 bytes .../dark/pl-a4-create-passkey.png | Bin 0 -> 27619 bytes .../test-results/dark/pl-b1-backup-prompt.png | Bin 0 -> 29296 bytes .../dark/pl-b2-backup-provider.png | Bin 0 -> 25884 bytes .../dark/pl-b3-backup-progress.png | Bin 0 -> 27830 bytes .../dark/pl-b4-backup-success.png | Bin 0 -> 18843 bytes .../dark/pl-c1-restore-provider.png | Bin 0 -> 16852 bytes .../dark/pl-c2-restore-progress.png | Bin 0 -> 24690 bytes .../dark/pl-c3-restore-success.png | Bin 0 -> 16776 bytes .../dark/pl-d1-unsupported-browser.png | Bin 0 -> 17917 bytes .../dark/pl-d2-passkey-cancelled.png | Bin 0 -> 17227 bytes ...pl-d3-backup-not-found-single-provider.png | Bin 0 -> 13513 bytes .../dark/pl-d3-backup-not-found.png | Bin 0 -> 16817 bytes .../dark/pl-d4-provider-auth-failed.png | Bin 0 -> 18384 bytes .../pl-d5-backup-failed-existing-user.png | Bin 0 -> 18629 bytes .../dark/pl-d5-backup-failed-new-user.png | Bin 0 -> 15236 bytes .../dark/pl-d6-ambiguous-backup.png | Bin 0 -> 23006 bytes .../dark/pl-d6-decrypt-failed.png | Bin 0 -> 17500 bytes .../test-results/light/pl-a1-entry.png | Bin 0 -> 19827 bytes .../light/pl-a2-authenticating.png | Bin 0 -> 17162 bytes .../light/pl-a3-new-account-warning.png | Bin 0 -> 32696 bytes .../light/pl-a4-create-passkey.png | Bin 0 -> 28123 bytes .../light/pl-b1-backup-prompt.png | Bin 0 -> 30020 bytes .../light/pl-b2-backup-provider.png | Bin 0 -> 26348 bytes .../light/pl-b3-backup-progress.png | Bin 0 -> 27804 bytes .../light/pl-b4-backup-success.png | Bin 0 -> 19291 bytes .../light/pl-c1-restore-provider.png | Bin 0 -> 17299 bytes .../light/pl-c2-restore-progress.png | Bin 0 -> 24766 bytes .../light/pl-c3-restore-success.png | Bin 0 -> 17188 bytes .../light/pl-d1-unsupported-browser.png | Bin 0 -> 18236 bytes .../light/pl-d2-passkey-cancelled.png | Bin 0 -> 17449 bytes ...pl-d3-backup-not-found-single-provider.png | Bin 0 -> 13841 bytes .../light/pl-d3-backup-not-found.png | Bin 0 -> 17004 bytes .../light/pl-d4-provider-auth-failed.png | Bin 0 -> 18696 bytes .../pl-d5-backup-failed-existing-user.png | Bin 0 -> 18802 bytes .../light/pl-d5-backup-failed-new-user.png | Bin 0 -> 15450 bytes .../light/pl-d6-ambiguous-backup.png | Bin 0 -> 23208 bytes .../light/pl-d6-decrypt-failed.png | Bin 0 -> 17841 bytes .../test-results/version-a1-desktop-dark.png | Bin 0 -> 23397 bytes .../test-results/version-a1-desktop-light.png | Bin 0 -> 23466 bytes .../test-results/version-a1-mobile-dark.png | Bin 0 -> 20306 bytes .../test-results/version-a1-mobile-light.png | Bin 0 -> 20382 bytes .../passkey-login-widget/version.spec.ts | 24 ++ .../passkey-login-widget/webauthnFixture.ts | 91 ++++++++ 55 files changed, 1002 insertions(+) create mode 100644 tests/widgets/passkey-login-widget/QA.md create mode 100644 tests/widgets/passkey-login-widget/errors-and-recovery.spec.ts create mode 100644 tests/widgets/passkey-login-widget/existing-user-backup.spec.ts create mode 100644 tests/widgets/passkey-login-widget/interactionHelpers.ts create mode 100644 tests/widgets/passkey-login-widget/key-safety.spec.ts create mode 100644 tests/widgets/passkey-login-widget/new-account.spec.ts create mode 100644 tests/widgets/passkey-login-widget/provider-choice.spec.ts create mode 100644 tests/widgets/passkey-login-widget/restore-existing-passkey.spec.ts create mode 100644 tests/widgets/passkey-login-widget/states.spec.ts create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-a1-entry.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-a2-authenticating.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-a3-new-account-warning.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-a4-create-passkey.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-b1-backup-prompt.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-b2-backup-provider.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-b3-backup-progress.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-b4-backup-success.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-c1-restore-provider.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-c2-restore-progress.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-c3-restore-success.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-d1-unsupported-browser.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-d2-passkey-cancelled.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-d3-backup-not-found-single-provider.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-d3-backup-not-found.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-d4-provider-auth-failed.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-d5-backup-failed-existing-user.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-d5-backup-failed-new-user.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-d6-ambiguous-backup.png create mode 100644 tests/widgets/passkey-login-widget/test-results/dark/pl-d6-decrypt-failed.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-a1-entry.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-a2-authenticating.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-a3-new-account-warning.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-a4-create-passkey.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-b1-backup-prompt.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-b2-backup-provider.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-b3-backup-progress.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-b4-backup-success.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-c1-restore-provider.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-c2-restore-progress.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-c3-restore-success.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-d1-unsupported-browser.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-d2-passkey-cancelled.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-d3-backup-not-found-single-provider.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-d3-backup-not-found.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-d4-provider-auth-failed.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-d5-backup-failed-existing-user.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-d5-backup-failed-new-user.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-d6-ambiguous-backup.png create mode 100644 tests/widgets/passkey-login-widget/test-results/light/pl-d6-decrypt-failed.png create mode 100644 tests/widgets/passkey-login-widget/test-results/version-a1-desktop-dark.png create mode 100644 tests/widgets/passkey-login-widget/test-results/version-a1-desktop-light.png create mode 100644 tests/widgets/passkey-login-widget/test-results/version-a1-mobile-dark.png create mode 100644 tests/widgets/passkey-login-widget/test-results/version-a1-mobile-light.png create mode 100644 tests/widgets/passkey-login-widget/version.spec.ts create mode 100644 tests/widgets/passkey-login-widget/webauthnFixture.ts diff --git a/tests/widgets/passkey-login-widget/QA.md b/tests/widgets/passkey-login-widget/QA.md new file mode 100644 index 00000000..e2020909 --- /dev/null +++ b/tests/widgets/passkey-login-widget/QA.md @@ -0,0 +1,46 @@ +# Passkey login widget QA + +Covers `packages/passkey-login-widget` (issue #307, feature #305). + +## What the automated specs prove + +Run against a prestarted Storybook (`pnpm --filter storybook dev`, port 6006) with `pnpm test:demo tests/widgets/passkey-login-widget`. + +| Spec | Evidence | +| --- | --- | +| `states.spec.ts` | Every screen A1-D6 (incl. D3 single provider, D5 new/existing user, D6 ambiguous) in light and dark; screenshots in `test-results/{light,dark}/`. | +| `new-account.spec.ts`, `restore-existing-passkey.spec.ts`, `existing-user-backup.spec.ts`, `provider-choice.spec.ts` | Create, back up, restart and restore round trips; provider choice and remembered provider; exact key restore for an account whose key was not derived from the passkey. | +| `errors-and-recovery.spec.ts` | D1-D6, each with its recovery buttons and the `onError` code. | +| `key-safety.spec.ts` | The account key and PRF output never reach the DOM, web storage, console or the uploaded file; the file holds only ciphertext. | +| `version.spec.ts` | Version label in light/dark, desktop/mobile. | + +**Limits.** These specs use a Chromium virtual authenticator (real WebAuthn + PRF + WebCrypto) and an in-memory storage double. They do not prove that Google Drive, CloudKit, a platform authenticator or a real password manager work. Those checks are manual and listed below. + +## Manual live check (needs GoodDollar-owned values) + +Open `QA / PasskeyLoginWidget / Live (real passkey + real providers)`. Use a throwaway Google / Apple account: the story writes real backup files. + +| Variable (or story control) | Meaning | +| --- | --- | +| `VITE_PASSKEY_GOOGLE_CLIENT_ID` | Google OAuth "Web application" client ID. Add the Storybook origin as an authorized JavaScript origin. Backups live in this client's `appDataFolder`, so the ID must stay stable once users have backups. | +| `VITE_PASSKEY_ICLOUD_CONTAINER_ID` | CloudKit container identifier, e.g. `iCloud.org.gooddollar.passkey`. | +| `VITE_PASSKEY_ICLOUD_API_TOKEN` | CloudKit API token restricted to the Storybook origin. | +| `VITE_PASSKEY_ICLOUD_ENVIRONMENT` | `development` (default) or `production`. | + +Put them in `examples/storybook/.env.local` (git-ignored). Never commit them. + +Checklist: new account + backup, restart + restore, existing user backup (`backUpThrowawayAccount`), provider sign-in cancelled (D4), and a second backup file under the same passkey (ambiguous copy). The Live story must show "Google Drive: configured" before testing. + +## CloudKit handover (one-time container setup) + +In the CloudKit Dashboard, container schema: + +- Record type `PasskeyBackup` in the **private** database with fields `prfTag` (String), `address` (String) and `payload` (String). +- A **Queryable** index on `prfTag` (the lookup is a server-side query on it). +- An API token for the web origins, "Sign In Callback: none" (CloudKit JS renders its own Apple sign-in button, shown in a small overlay). +- Deploy the development schema to production before a production release. + +## Known gaps + +- Google Drive and iCloud adapters have unit tests with mocked transports only; the CloudKit sign-in overlay is unverified in a real browser. +- Wrong-passkey (D6) cannot be simulated with one virtual authenticator, so D6 is covered by tampered ciphertext, mismatched address, unknown version and ambiguous-backup files. diff --git a/tests/widgets/passkey-login-widget/errors-and-recovery.spec.ts b/tests/widgets/passkey-login-widget/errors-and-recovery.spec.ts new file mode 100644 index 00000000..8a7c625b --- /dev/null +++ b/tests/widgets/passkey-login-widget/errors-and-recovery.spec.ts @@ -0,0 +1,215 @@ +import { expect, test, type Page } from '@playwright/test' +import { addVirtualAuthenticator, stubWebAuthnFailure } from './webauthnFixture' +import { + createAccountAndBackUp, + expectScreen, + openInteractionStory, + pressButton, + readHostEvents, + readStoredBackup, + readStoredBackupNames, + replaceStoredBackups, + setStorageFailure, +} from './interactionHelpers' + +/** `onError` codes reported to the host so far. */ +async function readErrorCodes(page: Page): Promise<(string | undefined)[]> { + return (await readHostEvents(page)).filter((event) => event.name === 'error').map((event) => event.detail?.code) +} + +/** Creates and backs up an account, then restarts the widget so the next step is a login. */ +async function createBackedUpAccountAndRestart(page: Page, story: 'one-provider' | 'two-providers'): Promise { + await openInteractionStory(page, story) + await createAccountAndBackUp(page, story === 'two-providers' ? 'google-drive' : undefined) + await page.getByRole('button', { name: 'Restart widget' }).click() + await expectScreen(page, 'A1_ENTRY') +} + +test.describe('D1 unsupported browser', () => { + test('a browser without WebAuthn goes straight to D1', async ({ page }) => { + await stubWebAuthnFailure(page, 'no-webauthn') + await openInteractionStory(page, 'one-provider') + + await expectScreen(page, 'D1_UNSUPPORTED_BROWSER') + expect(await readErrorCodes(page)).toEqual(['UNSUPPORTED_BROWSER']) + await pressButton(page, 'Back to login methods') + expect((await readHostEvents(page)).at(-1)?.name).toBe('skip') + }) + + test('an authenticator without PRF ends on D1', async ({ page }) => { + await stubWebAuthnFailure(page, 'no-prf') + await openInteractionStory(page, 'one-provider') + + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'D1_UNSUPPORTED_BROWSER') + expect(await readErrorCodes(page)).toEqual(['UNSUPPORTED_BROWSER']) + }) +}) + +test.describe('D2 passkey cancelled', () => { + test('Retry returns to A1 and "Create new account" goes to A3', async ({ page }) => { + await stubWebAuthnFailure(page, 'user-cancelled') + await openInteractionStory(page, 'one-provider') + + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'D2_PASSKEY_CANCELLED') + expect(await readErrorCodes(page)).toEqual(['PASSKEY_CANCELLED']) + + // Retry starts over at A1; a second attempt is cancelled again + await pressButton(page, 'Retry') + await expectScreen(page, 'A1_ENTRY') + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'D2_PASSKEY_CANCELLED') + expect(await readErrorCodes(page)).toEqual(['PASSKEY_CANCELLED', 'PASSKEY_CANCELLED']) + + await pressButton(page, 'Create new account') + await expectScreen(page, 'A3_NEW_ACCOUNT_WARNING') + }) +}) + +test.describe('D3 backup not found', () => { + test('a passkey without any backup shows D3 and "Back" returns to A1', async ({ page }) => { + await addVirtualAuthenticator(page) + await createBackedUpAccountAndRestart(page, 'one-provider') + await replaceStoredBackups(page, 'google-drive', {}) + + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'D3_BACKUP_NOT_FOUND') + expect(await readErrorCodes(page)).toContain('BACKUP_NOT_FOUND') + // One provider only: no "other provider" button + await expect(page.getByRole('button', { name: 'Try the other provider' })).toHaveCount(0) + + await pressButton(page, 'Back') + await expectScreen(page, 'A1_ENTRY') + }) +}) + +test.describe('D4 provider sign-in failed', () => { + test('Try again works once the provider sign-in succeeds, and "Choose another provider" offers C1', async ({ page }) => { + await addVirtualAuthenticator(page) + await createBackedUpAccountAndRestart(page, 'two-providers') + await setStorageFailure(page, 'google-drive', 'failAuthorization', true) + + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'D4_PROVIDER_AUTH_FAILED') + expect(await readErrorCodes(page)).toContain('PROVIDER_AUTH_FAILED') + + await pressButton(page, 'Choose another provider') + await expectScreen(page, 'C1_RESTORE_PROVIDER') + await page.getByTestId('provider-tile-google-drive').click() + await expectScreen(page, 'D4_PROVIDER_AUTH_FAILED') + + await setStorageFailure(page, 'google-drive', 'failAuthorization', false) + await pressButton(page, 'Try again') + await expectScreen(page, 'C3_RESTORE_SUCCESS') + }) +}) + +test.describe('D5 backup failed', () => { + test('a new user stays logged out, can retry, and has no "Skip for now"', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'one-provider') + await setStorageFailure(page, 'google-drive', 'failWrites', true) + + await pressButton(page, 'Continue with passkey') + await pressButton(page, 'Create new account') + await pressButton(page, 'Create new account') + await expectScreen(page, 'D5_BACKUP_FAILED') + expect(await readErrorCodes(page)).toContain('BACKUP_FAILED') + await expect(page.getByRole('button', { name: 'Skip for now' })).toHaveCount(0) + // Not logged in: the key stays inside the widget until the backup exists + expect((await readHostEvents(page)).some((event) => event.name === 'login')).toBe(false) + + await setStorageFailure(page, 'google-drive', 'failWrites', false) + await pressButton(page, 'Retry') + await expectScreen(page, 'B4_BACKUP_SUCCESS') + await pressButton(page, 'Continue') + const loginEvent = (await readHostEvents(page)).find((event) => event.name === 'login') + expect(loginEvent?.detail?.isNewAccount).toBe(true) + }) + + test('an existing user can retry or skip', async ({ page }) => { + const authenticator = await addVirtualAuthenticator(page) + await openInteractionStory(page, 'existing-user-one-provider') + await setStorageFailure(page, 'google-drive', 'failWrites', true) + + await pressButton(page, 'Set up passkey backup') + await expectScreen(page, 'D5_BACKUP_FAILED') + await pressButton(page, 'Retry') + // Retry re-uploads the prepared backup without a second passkey prompt + await expectScreen(page, 'D5_BACKUP_FAILED') + expect(await authenticator.countCredentials()).toBe(1) + + await pressButton(page, 'Skip for now') + expect((await readHostEvents(page)).at(-1)?.name).toBe('skip') + }) +}) + +test.describe('D6 backup cannot be decrypted', () => { + /** Stored backup of the only account, for the tampering cases. */ + async function readOnlyBackup(page: Page): Promise<{ fileName: string; backup: Record }> { + const [fileName] = await readStoredBackupNames(page, 'google-drive') + const backupJson = await readStoredBackup(page, 'google-drive', fileName) + return { fileName, backup: JSON.parse(backupJson ?? '{}') as Record } + } + + async function expectDecryptFailureAfterTampering( + page: Page, + tamper: (stored: { fileName: string; backup: Record }) => Record, + expectedErrorCode: 'DECRYPT_FAILED' | 'AMBIGUOUS_BACKUP' = 'DECRYPT_FAILED', + ): Promise { + await addVirtualAuthenticator(page) + await createBackedUpAccountAndRestart(page, 'one-provider') + await replaceStoredBackups(page, 'google-drive', tamper(await readOnlyBackup(page))) + + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'D6_DECRYPT_FAILED') + expect(await readErrorCodes(page)).toContain(expectedErrorCode) + } + + test('a corrupted ciphertext shows D6', async ({ page }) => { + await expectDecryptFailureAfterTampering(page, ({ fileName, backup }) => ({ + [fileName]: JSON.stringify({ ...backup, ciphertext: `A${String(backup.ciphertext).slice(1)}` }), + })) + }) + + test('an address in the file that differs from the file name shows D6', async ({ page }) => { + await expectDecryptFailureAfterTampering(page, ({ fileName, backup }) => ({ + [fileName]: JSON.stringify({ ...backup, address: '0x0000000000000000000000000000000000000001' }), + })) + }) + + test('an unknown backup version shows D6', async ({ page }) => { + await expectDecryptFailureAfterTampering(page, ({ fileName, backup }) => ({ + [fileName]: JSON.stringify({ ...backup, version: 2 }), + })) + }) + + test('a file name whose address differs from the encrypted address shows D6', async ({ page }) => { + await expectDecryptFailureAfterTampering(page, ({ fileName, backup }) => ({ + [fileName.replace(/0x[0-9a-f]{40}/, '0x0000000000000000000000000000000000000001')]: JSON.stringify(backup), + })) + }) + + test('Try again retries and "Back" returns to A1', async ({ page }) => { + await expectDecryptFailureAfterTampering(page, ({ fileName, backup }) => ({ + [fileName]: JSON.stringify({ ...backup, version: 2 }), + })) + await pressButton(page, 'Try again') + await expectScreen(page, 'D6_DECRYPT_FAILED') + await pressButton(page, 'Back') + await expectScreen(page, 'A1_ENTRY') + }) + + test('several backups under one passkey show the ambiguous-backup copy on the D6 layout', async ({ page }) => { + await expectDecryptFailureAfterTampering( + page, + ({ fileName, backup }) => ({ + [fileName]: JSON.stringify(backup), + [fileName.replace(/0x[0-9a-f]{40}/, '0x0000000000000000000000000000000000000002')]: JSON.stringify(backup), + }), + 'AMBIGUOUS_BACKUP', + ) + await expect(page.getByTestId('screen-D6')).toContainText('More than one backup matches this passkey') + }) +}) diff --git a/tests/widgets/passkey-login-widget/existing-user-backup.spec.ts b/tests/widgets/passkey-login-widget/existing-user-backup.spec.ts new file mode 100644 index 00000000..fe337522 --- /dev/null +++ b/tests/widgets/passkey-login-widget/existing-user-backup.spec.ts @@ -0,0 +1,49 @@ +import { expect, test } from '@playwright/test' +import { addVirtualAuthenticator } from './webauthnFixture' +import { expectScreen, openInteractionStory, pressButton, readHostEvents, readStoredBackupNames } from './interactionHelpers' + +test('an existing user backs up their account with a fresh passkey and is not logged in again', async ({ page }) => { + const authenticator = await addVirtualAuthenticator(page) + await openInteractionStory(page, 'existing-user-one-provider') + + await expectScreen(page, 'B1_BACKUP_PROMPT') + await pressButton(page, 'Set up passkey backup') + await expectScreen(page, 'B4_BACKUP_SUCCESS') + expect(await authenticator.countCredentials()).toBe(1) + expect(await readStoredBackupNames(page, 'google-drive')).toHaveLength(1) + + await pressButton(page, 'Continue') + const hostEvents = await readHostEvents(page) + // Only the backup result: the user is already logged in, so there is no onLogin + expect(hostEvents.map((event) => event.name)).toEqual(['backup-complete']) + expect(hostEvents[0].detail?.provider).toBe('google-drive') + expect(JSON.stringify(hostEvents[0].detail)).not.toContain('privateKey') +}) + +test('every backup creates a new passkey and a new backup file', async ({ page }) => { + const authenticator = await addVirtualAuthenticator(page) + await openInteractionStory(page, 'existing-user-one-provider') + + for (let backupRun = 0; backupRun < 2; backupRun += 1) { + await expectScreen(page, 'B1_BACKUP_PROMPT') + await pressButton(page, 'Set up passkey backup') + await expectScreen(page, 'B4_BACKUP_SUCCESS') + await pressButton(page, 'Continue') + await page.getByRole('button', { name: 'Restart widget' }).click() + } + + expect(await authenticator.countCredentials()).toBe(2) + expect(await readStoredBackupNames(page, 'google-drive')).toHaveLength(2) +}) + +test('"Not now" skips the backup without touching passkeys or storage', async ({ page }) => { + const authenticator = await addVirtualAuthenticator(page) + await openInteractionStory(page, 'existing-user-one-provider') + + await expectScreen(page, 'B1_BACKUP_PROMPT') + await pressButton(page, 'Not now') + + expect((await readHostEvents(page)).map((event) => event.name)).toEqual(['skip']) + expect(await authenticator.countCredentials()).toBe(0) + expect(await readStoredBackupNames(page, 'google-drive')).toHaveLength(0) +}) diff --git a/tests/widgets/passkey-login-widget/interactionHelpers.ts b/tests/widgets/passkey-login-widget/interactionHelpers.ts new file mode 100644 index 00000000..bceca359 --- /dev/null +++ b/tests/widgets/passkey-login-widget/interactionHelpers.ts @@ -0,0 +1,115 @@ +import { expect, type Page } from '@playwright/test' + +const INTERACTION_STORY_PREFIX = '/iframe.html?id=qa-passkeyloginwidget-interactions--' + +/** Key of the remembered provider in localStorage (an id only, never key material). */ +export const REMEMBERED_PROVIDER_STORAGE_KEY = 'goodwidget.passkey-login.provider' + +/** Interaction stories: the real widget on in-memory storage. */ +export type InteractionStory = + | 'one-provider' + | 'two-providers' + | 'existing-user-one-provider' + | 'existing-user-two-providers' + +/** Host callback recorded by the interaction story harness (mock-only payloads). */ +export interface RecordedHostEvent { + name: string + detail?: { address?: string; privateKey?: string; isNewAccount?: boolean; provider?: string; code?: string } +} + +/** Shape of the `window.__passkeyStory` hook the interaction stories create. */ +interface StoryWindow { + __passkeyStory?: { + events: RecordedHostEvent[] + storages: Record; failAuthorization: boolean; failWrites: boolean } }> + } +} + +export async function openInteractionStory(page: Page, story: InteractionStory): Promise { + await page.setViewportSize({ width: 440, height: 900 }) + await page.goto(`${INTERACTION_STORY_PREFIX}${story}&viewMode=story`) + await expect(page.getByTestId('passkey-login-widget')).toBeVisible({ timeout: 20_000 }) +} + +/** Waits until the widget shows the given screen (`data-screen` of the widget root). */ +export async function expectScreen(page: Page, screen: string): Promise { + await expect(page.getByTestId('passkey-login-widget')).toHaveAttribute('data-screen', screen, { timeout: 15_000 }) +} + +export async function pressButton(page: Page, buttonName: string): Promise { + await page.getByTestId('passkey-login-widget').getByRole('button', { name: buttonName, exact: true }).click() +} + +export async function readHostEvents(page: Page): Promise { + return page.evaluate(() => (window as unknown as StoryWindow).__passkeyStory?.events ?? []) +} + +/** Backup file names currently stored in the mock storage of one provider. */ +export async function readStoredBackupNames(page: Page, providerId: string): Promise { + return page.evaluate((id) => [...((window as unknown as StoryWindow).__passkeyStory?.storages[id]?.controls.files.keys() ?? [])], providerId) +} + +/** Raw backup JSON of one stored file. */ +export async function readStoredBackup(page: Page, providerId: string, fileName: string): Promise { + return page.evaluate( + ([id, name]) => (window as unknown as StoryWindow).__passkeyStory?.storages[id]?.controls.files.get(name), + [providerId, fileName], + ) +} + +/** + * Runs the "new account" journey from A1 up to and including the Continue press on B4. + * @param chosenProviderId provider to pick on B2; omit when only one provider is offered (B2 is skipped) + */ +export async function createAccountAndBackUp(page: Page, chosenProviderId?: 'google-drive' | 'icloud'): Promise { + await expectScreen(page, 'A1_ENTRY') + await pressButton(page, 'Continue with passkey') + // A fresh authenticator has no passkey yet, so the request ends on D2, which offers a new account + await expectScreen(page, 'D2_PASSKEY_CANCELLED') + await pressButton(page, 'Create new account') + await expectScreen(page, 'A3_NEW_ACCOUNT_WARNING') + await pressButton(page, 'Create new account') + if (chosenProviderId) { + await expectScreen(page, 'B2_BACKUP_PROVIDER') + await page.getByTestId(`provider-tile-${chosenProviderId}`).click() + await pressButton(page, 'Continue') + } + await expectScreen(page, 'B4_BACKUP_SUCCESS') + await pressButton(page, 'Continue') +} + +/** Flips a failure switch of one mock provider storage. */ +export async function setStorageFailure( + page: Page, + providerId: string, + failure: 'failAuthorization' | 'failWrites', + isFailing: boolean, +): Promise { + await page.evaluate( + ([id, failureName, value]) => { + const storage = (window as unknown as StoryWindow).__passkeyStory?.storages[id as string] + if (storage) { + storage.controls[failureName as 'failAuthorization' | 'failWrites'] = value as boolean + } + }, + [providerId, failure, isFailing], + ) +} + +/** Replaces everything stored by one mock provider with the given file name -> JSON entries. */ +export async function replaceStoredBackups( + page: Page, + providerId: string, + backups: Record, +): Promise { + await page.evaluate( + ([id, entries]) => { + const storage = (window as unknown as StoryWindow).__passkeyStory?.storages[id as string] + if (storage) { + storage.controls.files = new Map(Object.entries(entries as Record)) + } + }, + [providerId, backups], + ) +} diff --git a/tests/widgets/passkey-login-widget/key-safety.spec.ts b/tests/widgets/passkey-login-widget/key-safety.spec.ts new file mode 100644 index 00000000..109673be --- /dev/null +++ b/tests/widgets/passkey-login-widget/key-safety.spec.ts @@ -0,0 +1,135 @@ +import { expect, test, type Page } from '@playwright/test' +import { addVirtualAuthenticator } from './webauthnFixture' +import { + REMEMBERED_PROVIDER_STORAGE_KEY, + createAccountAndBackUp, + expectScreen, + openInteractionStory, + pressButton, + readHostEvents, + readStoredBackup, + readStoredBackupNames, +} from './interactionHelpers' + +/** Window hook that records the PRF output of every WebAuthn call, so the spec knows what must never leak. */ +interface PrfSpyWindow { + __prfOutputsBase64?: string[] +} + +/** Wraps `navigator.credentials.create/get` to record PRF outputs (test-only spy; the widget code is untouched). */ +async function recordPrfOutputs(page: Page): Promise { + await page.addInitScript(() => { + const spyWindow = window as unknown as PrfSpyWindow + spyWindow.__prfOutputsBase64 = [] + const credentials = navigator.credentials + for (const methodName of ['create', 'get'] as const) { + const originalMethod = credentials[methodName].bind(credentials) as (options?: unknown) => Promise + ;(credentials as unknown as Record)[methodName] = async (options?: unknown) => { + const credential = (await originalMethod(options)) as PublicKeyCredential | null + const prfResults = (credential?.getClientExtensionResults() as { prf?: { results?: { first?: ArrayBuffer } } }) + ?.prf?.results + if (prfResults?.first) { + spyWindow.__prfOutputsBase64?.push(btoa(String.fromCharCode(...new Uint8Array(prfResults.first)))) + } + return credential + } + } + }) +} + +/** Console output of the page, collected for the whole test. */ +function collectConsoleText(page: Page): string[] { + const consoleLines: string[] = [] + page.on('console', (message) => consoleLines.push(message.text())) + page.on('pageerror', (error) => consoleLines.push(String(error))) + return consoleLines +} + +/** Every representation of a secret a leak could take: hex with/without 0x, base64 and base64url. */ +function secretRepresentations(secretBytesHex: string, secretBase64: string): string[] { + const hexWithoutPrefix = secretBytesHex.replace(/^0x/, '') + const base64Url = secretBase64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') + return [hexWithoutPrefix, `0x${hexWithoutPrefix}`, secretBase64, base64Url] +} + +function base64ToHex(valueBase64: string): string { + return Buffer.from(valueBase64, 'base64').toString('hex') +} + +/** Text the page exposes to anything but the host callback: DOM, both web storages and the console. */ +async function readEverythingVisibleToThePage(page: Page, consoleLines: string[]): Promise { + const domAndStorage = await page.evaluate(() => + JSON.stringify({ + html: document.documentElement.outerHTML, + localStorage: { ...localStorage }, + sessionStorage: { ...sessionStorage }, + }), + ) + return `${domAndStorage}\n${consoleLines.join('\n')}` +} + +test('neither the account key nor the PRF output leaks outside the login callback and the encrypted backup', async ({ page }) => { + const consoleLines = collectConsoleText(page) + await recordPrfOutputs(page) + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'one-provider') + await createAccountAndBackUp(page) + + // Second session: restore through the passkey, so both the create and the restore paths are covered + await page.getByRole('button', { name: 'Restart widget' }).click() + await expectScreen(page, 'A1_ENTRY') + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'C3_RESTORE_SUCCESS') + await pressButton(page, 'Continue') + + const hostEvents = await readHostEvents(page) + const loginEvents = hostEvents.filter((event) => event.name === 'login') + const accountPrivateKey = loginEvents[0].detail?.privateKey as string + expect(accountPrivateKey).toMatch(/^0x[0-9a-f]{64}$/) + + const prfOutputsBase64 = await page.evaluate(() => (window as unknown as PrfSpyWindow).__prfOutputsBase64 ?? []) + expect(prfOutputsBase64.length).toBeGreaterThan(0) + + const forbiddenValues = [ + ...secretRepresentations(accountPrivateKey, Buffer.from(accountPrivateKey.slice(2), 'hex').toString('base64')), + ...prfOutputsBase64.flatMap((prfOutputBase64) => secretRepresentations(base64ToHex(prfOutputBase64), prfOutputBase64)), + ] + + // 1. DOM, web storage and console never contain the key or the PRF output + const pageVisibleText = await readEverythingVisibleToThePage(page, consoleLines) + for (const forbiddenValue of forbiddenValues) { + expect(pageVisibleText).not.toContain(forbiddenValue) + } + + // 2. Only the remembered provider id is persisted by the widget + const storedKeys = await page.evaluate(() => [...Object.keys(localStorage), ...Object.keys(sessionStorage)]) + expect(storedKeys.filter((storedKey) => storedKey.startsWith('goodwidget.'))).toEqual([REMEMBERED_PROVIDER_STORAGE_KEY]) + + // 3. The uploaded file is versioned JSON of ciphertext only, with a name made of tag and address + const backupNames = await readStoredBackupNames(page, 'google-drive') + expect(backupNames).toHaveLength(1) + expect(backupNames[0]).toMatch(/^gwpk-[A-Za-z0-9_-]{22}-0x[0-9a-f]{40}\.json$/) + const backupJson = (await readStoredBackup(page, 'google-drive', backupNames[0])) as string + expect(Object.keys(JSON.parse(backupJson)).sort()).toEqual(['address', 'ciphertext', 'iv', 'version']) + for (const forbiddenValue of forbiddenValues) { + expect(backupJson).not.toContain(forbiddenValue) + expect(backupNames[0]).not.toContain(forbiddenValue) + } + + // 4. Only `onLogin` carries the key; both logins (create and restore) hand over the same key + expect(loginEvents[1].detail?.privateKey).toBe(accountPrivateKey) + const eventsWithoutLogin = hostEvents.filter((event) => event.name !== 'login') + for (const forbiddenValue of forbiddenValues) { + expect(JSON.stringify(eventsWithoutLogin)).not.toContain(forbiddenValue) + } +}) + +test('the event log of the story masks the key that onLogin delivers', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'one-provider') + await createAccountAndBackUp(page) + + await expect(page.getByTestId('passkey-event-log')).toContainText('privateKey ••••••••') + const accountPrivateKey = (await readHostEvents(page)).find((event) => event.name === 'login')?.detail?.privateKey as string + await expect(page.getByTestId('passkey-event-log')).not.toContainText(accountPrivateKey.slice(2)) +}) diff --git a/tests/widgets/passkey-login-widget/new-account.spec.ts b/tests/widgets/passkey-login-widget/new-account.spec.ts new file mode 100644 index 00000000..a3b20fd4 --- /dev/null +++ b/tests/widgets/passkey-login-widget/new-account.spec.ts @@ -0,0 +1,91 @@ +import { expect, test } from '@playwright/test' +import { addVirtualAuthenticator, stubPrfEnabledOnlyAtRegistration } from './webauthnFixture' +import { + createAccountAndBackUp, + expectScreen, + openInteractionStory, + pressButton, + readHostEvents, + readStoredBackup, + readStoredBackupNames, +} from './interactionHelpers' + +const HEX_PRIVATE_KEY = /^0x[0-9a-f]{64}$/ +const BACKUP_FILE_NAME = /^gwpk-[A-Za-z0-9_-]+-0x[0-9a-f]{40}\.json$/ + +test('a new account is created, backed up and handed to the host', async ({ page }) => { + const authenticator = await addVirtualAuthenticator(page) + await openInteractionStory(page, 'one-provider') + + await expectScreen(page, 'A1_ENTRY') + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'D2_PASSKEY_CANCELLED') + await pressButton(page, 'Create new account') + await expectScreen(page, 'A3_NEW_ACCOUNT_WARNING') + await pressButton(page, 'Create new account') + + // One provider: B2 is skipped. The backup is written before the host learns about the account. + await expectScreen(page, 'B4_BACKUP_SUCCESS') + await expect(page.getByTestId('screen-B4')).toContainText('Your account is backed up to Google Drive.') + expect(await authenticator.countCredentials()).toBe(1) + const storedNames = await readStoredBackupNames(page, 'google-drive') + expect(storedNames).toHaveLength(1) + expect(storedNames[0]).toMatch(BACKUP_FILE_NAME) + expect((await readHostEvents(page)).map((event) => event.name)).toEqual(['error']) + + await pressButton(page, 'Continue') + const hostEvents = await readHostEvents(page) + const loginEvent = hostEvents.find((event) => event.name === 'login') + const backupEvent = hostEvents.find((event) => event.name === 'backup-complete') + expect(loginEvent?.detail?.isNewAccount).toBe(true) + expect(loginEvent?.detail?.privateKey).toMatch(HEX_PRIVATE_KEY) + expect(backupEvent?.detail?.provider).toBe('google-drive') + expect(backupEvent?.detail?.address).toBe(loginEvent?.detail?.address) + // The backup file is named after the address the host received + expect(storedNames[0]).toContain(String(loginEvent?.detail?.address).toLowerCase()) + // The backup-complete payload never carries the key + expect(JSON.stringify(backupEvent?.detail)).not.toContain('privateKey') +}) + +test('the stored backup is an encrypted v1 envelope without the key', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'one-provider') + await createAccountAndBackUp(page) + + const [fileName] = await readStoredBackupNames(page, 'google-drive') + const backupJson = await readStoredBackup(page, 'google-drive', fileName) + const backup = JSON.parse(backupJson ?? '{}') as Record + const loginEvent = (await readHostEvents(page)).find((event) => event.name === 'login') + + expect(Object.keys(backup).sort()).toEqual(['address', 'ciphertext', 'iv', 'version']) + expect(backup.version).toBe(1) + expect(String(backup.address).toLowerCase()).toBe(String(loginEvent?.detail?.address).toLowerCase()) + expect(backupJson).not.toContain(String(loginEvent?.detail?.privateKey).slice(2)) +}) + +test('the new-account warning says a NEW account is created and points to the backup route and "Back to login methods" skips', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'one-provider') + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'D2_PASSKEY_CANCELLED') + await pressButton(page, 'Create new account') + await expectScreen(page, 'A3_NEW_ACCOUNT_WARNING') + await expect(page.getByTestId('screen-A3')).toContainText('Continuing will create a NEW account.') + await expect(page.getByTestId('screen-A3')).toContainText('Already have an account with Google, Facebook or SMS?') + + await pressButton(page, 'Back to login methods') + expect((await readHostEvents(page)).map((event) => event.name)).toEqual(['error', 'skip']) +}) + +test('a passkey that reports PRF only at registration gets a follow-up assertion', async ({ page }) => { + const authenticator = await addVirtualAuthenticator(page) + await stubPrfEnabledOnlyAtRegistration(page) + await openInteractionStory(page, 'one-provider') + + await createAccountAndBackUp(page) + + const loginEvent = (await readHostEvents(page)).find((event) => event.name === 'login') + expect(loginEvent?.detail?.privateKey).toMatch(HEX_PRIVATE_KEY) + expect(await authenticator.countCredentials()).toBe(1) + expect(await readStoredBackupNames(page, 'google-drive')).toHaveLength(1) +}) diff --git a/tests/widgets/passkey-login-widget/provider-choice.spec.ts b/tests/widgets/passkey-login-widget/provider-choice.spec.ts new file mode 100644 index 00000000..50224360 --- /dev/null +++ b/tests/widgets/passkey-login-widget/provider-choice.spec.ts @@ -0,0 +1,107 @@ +import { expect, test, type Page } from '@playwright/test' +import { addVirtualAuthenticator } from './webauthnFixture' +import { + createAccountAndBackUp, + expectScreen, + openInteractionStory, + pressButton, + readHostEvents, + readStoredBackupNames, + REMEMBERED_PROVIDER_STORAGE_KEY, +} from './interactionHelpers' + +/** Walks A1 -> D2 -> A3 -> A4 so the widget stands on B2 with a freshly created passkey. */ +async function reachBackupProviderChoice(page: Page): Promise { + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'D2_PASSKEY_CANCELLED') + await pressButton(page, 'Create new account') + await pressButton(page, 'Create new account') + await expectScreen(page, 'B2_BACKUP_PROVIDER') +} + +test('B2 offers radio tiles, preselects the first provider and backs up to the chosen one', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'two-providers') + await reachBackupProviderChoice(page) + + const driveTile = page.getByTestId('provider-tile-google-drive') + const iCloudTile = page.getByTestId('provider-tile-icloud') + await expect(page.getByRole('radiogroup', { name: 'Backup provider' })).toBeVisible() + await expect(driveTile).toHaveAttribute('role', 'radio') + await expect(driveTile).toHaveAttribute('aria-checked', 'true') + await expect(iCloudTile).toHaveAttribute('aria-checked', 'false') + + // Keyboard: focus the iCloud tile and activate it + await iCloudTile.focus() + await page.keyboard.press('Enter') + await expect(iCloudTile).toHaveAttribute('aria-checked', 'true') + await expect(driveTile).toHaveAttribute('aria-checked', 'false') + + await pressButton(page, 'Continue') + await expectScreen(page, 'B4_BACKUP_SUCCESS') + await expect(page.getByTestId('screen-B4')).toContainText('Your account is backed up to iCloud.') + expect(await readStoredBackupNames(page, 'icloud')).toHaveLength(1) + expect(await readStoredBackupNames(page, 'google-drive')).toHaveLength(0) +}) + +test('the chosen provider is remembered (id only) and skips the provider choice on the next login', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'two-providers') + await createAccountAndBackUp(page, 'icloud') + + const rememberedValue = await page.evaluate((key) => window.localStorage.getItem(key), REMEMBERED_PROVIDER_STORAGE_KEY) + expect(rememberedValue).toBe('icloud') + + await page.getByRole('button', { name: 'Restart widget' }).click() + await pressButton(page, 'Continue with passkey') + // Remembered: no C1, the restore goes straight to the remembered provider + await expectScreen(page, 'C3_RESTORE_SUCCESS') + await pressButton(page, 'Continue') + expect((await readHostEvents(page)).filter((event) => event.name === 'login')[1].detail?.isNewAccount).toBe(false) +}) + +test('C1 asks for the provider when none is remembered', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'two-providers') + await createAccountAndBackUp(page, 'google-drive') + + // Forget the provider: the next login must ask where the backup is + await page.evaluate((key) => window.localStorage.removeItem(key), REMEMBERED_PROVIDER_STORAGE_KEY) + await page.getByRole('button', { name: 'Restart widget' }).click() + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'C1_RESTORE_PROVIDER') + await expect(page.getByTestId('provider-tile-google-drive')).toBeVisible() + await expect(page.getByTestId('provider-tile-icloud')).toBeVisible() + + await page.getByTestId('provider-tile-google-drive').click() + await expectScreen(page, 'C3_RESTORE_SUCCESS') +}) + +test('D3 "Try the other provider" leads back to C1 and the backup is found there', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'two-providers') + await createAccountAndBackUp(page, 'icloud') + + // The backup lives in iCloud, but the user remembers Google Drive + await page.evaluate((key) => window.localStorage.setItem(key, 'google-drive'), REMEMBERED_PROVIDER_STORAGE_KEY) + await page.getByRole('button', { name: 'Restart widget' }).click() + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'D3_BACKUP_NOT_FOUND') + await expect(page.getByTestId('screen-D3')).toContainText('No backup found in Google Drive') + + await pressButton(page, 'Try the other provider') + await expectScreen(page, 'C1_RESTORE_PROVIDER') + await page.getByTestId('provider-tile-icloud').click() + await expectScreen(page, 'C3_RESTORE_SUCCESS') +}) + +test('a single configured provider never shows a provider choice, even when nothing is remembered', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'one-provider') + await createAccountAndBackUp(page) + + await page.evaluate((key) => window.localStorage.removeItem(key), REMEMBERED_PROVIDER_STORAGE_KEY) + await page.getByRole('button', { name: 'Restart widget' }).click() + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'C3_RESTORE_SUCCESS') +}) diff --git a/tests/widgets/passkey-login-widget/restore-existing-passkey.spec.ts b/tests/widgets/passkey-login-widget/restore-existing-passkey.spec.ts new file mode 100644 index 00000000..75c74f2d --- /dev/null +++ b/tests/widgets/passkey-login-widget/restore-existing-passkey.spec.ts @@ -0,0 +1,59 @@ +import { expect, test } from '@playwright/test' +import { addVirtualAuthenticator } from './webauthnFixture' +import { createAccountAndBackUp, expectScreen, openInteractionStory, pressButton, readHostEvents } from './interactionHelpers' + +/** Key of the logged-in user in the interaction stories (a throwaway demo key). */ +const DEMO_ACCOUNT_PRIVATE_KEY = '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318' + +test('a backed-up account is restored with the same passkey after the widget restarts', async ({ page }) => { + const authenticator = await addVirtualAuthenticator(page) + await openInteractionStory(page, 'one-provider') + await createAccountAndBackUp(page) + const createdLogin = (await readHostEvents(page)).find((event) => event.name === 'login') + + // New widget session, same passkey and same stored backup + await page.getByRole('button', { name: 'Restart widget' }).click() + await expectScreen(page, 'A1_ENTRY') + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'C3_RESTORE_SUCCESS') + await expect(page.getByTestId('screen-C3')).toContainText('Your account has been restored.') + expect(await authenticator.countCredentials()).toBe(1) + + await pressButton(page, 'Continue') + const restoredLogin = (await readHostEvents(page)).filter((event) => event.name === 'login')[1] + expect(restoredLogin.detail?.isNewAccount).toBe(false) + expect(restoredLogin.detail?.address).toBe(createdLogin?.detail?.address) + expect(restoredLogin.detail?.privateKey).toBe(createdLogin?.detail?.privateKey) +}) + +test('"Use another login method" hands control back to the host', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'one-provider') + await expectScreen(page, 'A1_ENTRY') + + await pressButton(page, 'Use another login method') + expect((await readHostEvents(page)).map((event) => event.name)).toEqual(['skip']) +}) + +test('an account whose key was not derived from the passkey is restored with its exact address', async ({ page }) => { + await addVirtualAuthenticator(page) + await openInteractionStory(page, 'existing-user-one-provider') + + // The logged-in user's own key (not derived from any passkey) is backed up with a new passkey + await pressButton(page, 'Set up passkey backup') + await expectScreen(page, 'B4_BACKUP_SUCCESS') + await pressButton(page, 'Continue') + const backedUpAddress = (await readHostEvents(page)).find((event) => event.name === 'backup-complete')?.detail?.address + + // Logged out again: the passkey alone brings the same account back, found by prfTag listing + await page.getByRole('button', { name: 'Restart as logged-out user' }).click() + await expectScreen(page, 'A1_ENTRY') + await pressButton(page, 'Continue with passkey') + await expectScreen(page, 'C3_RESTORE_SUCCESS') + await pressButton(page, 'Continue') + + const restoredLogin = (await readHostEvents(page)).find((event) => event.name === 'login') + expect(restoredLogin?.detail?.isNewAccount).toBe(false) + expect(restoredLogin?.detail?.address).toBe(backedUpAddress) + expect(restoredLogin?.detail?.privateKey).toBe(DEMO_ACCOUNT_PRIVATE_KEY) +}) diff --git a/tests/widgets/passkey-login-widget/states.spec.ts b/tests/widgets/passkey-login-widget/states.spec.ts new file mode 100644 index 00000000..0ceed490 --- /dev/null +++ b/tests/widgets/passkey-login-widget/states.spec.ts @@ -0,0 +1,70 @@ +import { expect, test } from '@playwright/test' + +const FIXTURE_STORY_PREFIX = '/iframe.html?id=qa-passkeyloginwidget-screen-fixtures--' + +// Every screen is checked in both themes so light/dark parity stays covered. +const THEMES = ['light', 'dark'] as const + +interface ScreenFixture { + /** Storybook story id suffix of the fixture. */ + storyId: string + /** `data-screen` value the widget root must report. */ + screen: string + /** `data-testid` of the screen card. */ + cardTestId: string + /** Texts the screen must show. */ + texts: string[] + /** Names of the buttons the screen must offer. */ + buttons: string[] + /** Screenshot file name, without theme folder or extension. */ + screenshotName: string +} + +const SCREEN_FIXTURES: ScreenFixture[] = [ + { storyId: 'a-1-entry', screen: 'A1_ENTRY', cardTestId: 'screen-A1', texts: ['Sign in with passkey'], buttons: ['Continue with passkey', 'Use another login method'], screenshotName: 'pl-a1-entry' }, + { storyId: 'a-2-authenticating', screen: 'A2_AUTHENTICATING', cardTestId: 'screen-A2', texts: ['Sign in with passkey'], buttons: [], screenshotName: 'pl-a2-authenticating' }, + { storyId: 'a-3-new-account-warning', screen: 'A3_NEW_ACCOUNT_WARNING', cardTestId: 'screen-A3', texts: ['Create new account'], buttons: ['Create new account', 'Back to login methods'], screenshotName: 'pl-a3-new-account-warning' }, + { storyId: 'a-4-create-passkey', screen: 'A4_CREATE_PASSKEY', cardTestId: 'screen-A4', texts: ['Creating your passkey'], buttons: [], screenshotName: 'pl-a4-create-passkey' }, + { storyId: 'b-1-backup-prompt', screen: 'B1_BACKUP_PROMPT', cardTestId: 'screen-B1', texts: ['Back up your account with a passkey'], buttons: ['Set up passkey backup', 'Not now'], screenshotName: 'pl-b1-backup-prompt' }, + { storyId: 'b-2-backup-provider', screen: 'B2_BACKUP_PROVIDER', cardTestId: 'screen-B2', texts: ['Choose where to back up', 'Google Drive', 'iCloud'], buttons: ['Continue'], screenshotName: 'pl-b2-backup-provider' }, + { storyId: 'b-3-backup-progress', screen: 'B3_BACKUP_PROGRESS', cardTestId: 'screen-B3', texts: ['Backing up your account'], buttons: [], screenshotName: 'pl-b3-backup-progress' }, + { storyId: 'b-4-backup-success', screen: 'B4_BACKUP_SUCCESS', cardTestId: 'screen-B4', texts: ['Backup complete', 'Your account is backed up to Google Drive.'], buttons: ['Continue'], screenshotName: 'pl-b4-backup-success' }, + { storyId: 'c-1-restore-provider', screen: 'C1_RESTORE_PROVIDER', cardTestId: 'screen-C1', texts: ['Where is your backup?', 'Google Drive', 'iCloud'], buttons: [], screenshotName: 'pl-c1-restore-provider' }, + { storyId: 'c-2-restore-progress', screen: 'C2_RESTORE_PROGRESS', cardTestId: 'screen-C2', texts: ['Restoring your account'], buttons: [], screenshotName: 'pl-c2-restore-progress' }, + { storyId: 'c-3-restore-success', screen: 'C3_RESTORE_SUCCESS', cardTestId: 'screen-C3', texts: ['Welcome back', 'Your account has been restored.'], buttons: ['Continue'], screenshotName: 'pl-c3-restore-success' }, + { storyId: 'd-1-unsupported-browser', screen: 'D1_UNSUPPORTED_BROWSER', cardTestId: 'screen-D1', texts: [], buttons: ['Back to login methods'], screenshotName: 'pl-d1-unsupported-browser' }, + { storyId: 'd-2-passkey-cancelled', screen: 'D2_PASSKEY_CANCELLED', cardTestId: 'screen-D2', texts: ['Passkey request cancelled'], buttons: ['Retry', 'Create new account'], screenshotName: 'pl-d2-passkey-cancelled' }, + { storyId: 'd-3-backup-not-found', screen: 'D3_BACKUP_NOT_FOUND', cardTestId: 'screen-D3', texts: ['No backup found in Google Drive'], buttons: ['Try the other provider', 'Back'], screenshotName: 'pl-d3-backup-not-found' }, + { storyId: 'd-3-backup-not-found-single-provider', screen: 'D3_BACKUP_NOT_FOUND', cardTestId: 'screen-D3', texts: ['No backup found in Google Drive'], buttons: ['Back'], screenshotName: 'pl-d3-backup-not-found-single-provider' }, + { storyId: 'd-4-provider-auth-failed', screen: 'D4_PROVIDER_AUTH_FAILED', cardTestId: 'screen-D4', texts: ["Couldn't connect to Google Drive"], buttons: ['Try again', 'Choose another provider'], screenshotName: 'pl-d4-provider-auth-failed' }, + { storyId: 'd-5-backup-failed-new-user', screen: 'D5_BACKUP_FAILED', cardTestId: 'screen-D5', texts: ['Backup failed. Your account is not backed up yet.'], buttons: ['Retry'], screenshotName: 'pl-d5-backup-failed-new-user' }, + { storyId: 'd-5-backup-failed-existing-user', screen: 'D5_BACKUP_FAILED', cardTestId: 'screen-D5', texts: ['Backup failed. Your account is not backed up yet.'], buttons: ['Retry', 'Skip for now'], screenshotName: 'pl-d5-backup-failed-existing-user' }, + { storyId: 'd-6-decrypt-failed', screen: 'D6_DECRYPT_FAILED', cardTestId: 'screen-D6', texts: [], buttons: ['Try again', 'Back'], screenshotName: 'pl-d6-decrypt-failed' }, + { storyId: 'd-6-ambiguous-backup', screen: 'D6_DECRYPT_FAILED', cardTestId: 'screen-D6', texts: ['More than one backup matches this passkey'], buttons: ['Try again', 'Back'], screenshotName: 'pl-d6-ambiguous-backup' }, +] + +for (const theme of THEMES) { + test.describe(`${theme} theme`, () => { + for (const fixture of SCREEN_FIXTURES) { + test(`${fixture.screenshotName} renders ${fixture.screen}`, async ({ page }) => { + await page.setViewportSize({ width: 440, height: 800 }) + await page.goto(`${FIXTURE_STORY_PREFIX}${fixture.storyId}&viewMode=story&args=themeMode:${theme}`) + + const widgetRoot = page.getByTestId('passkey-login-widget') + await expect(widgetRoot).toHaveAttribute('data-screen', fixture.screen, { timeout: 20_000 }) + await expect(page.getByTestId(fixture.cardTestId)).toBeVisible() + for (const text of fixture.texts) { + await expect(widgetRoot.getByText(text, { exact: false }).first()).toBeVisible() + } + for (const buttonName of fixture.buttons) { + await expect(widgetRoot.getByRole('button', { name: buttonName, exact: true })).toBeVisible() + } + + await page.screenshot({ + path: `tests/widgets/passkey-login-widget/test-results/${theme}/${fixture.screenshotName}.png`, + fullPage: true, + }) + }) + } + }) +} diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-a1-entry.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-a1-entry.png new file mode 100644 index 0000000000000000000000000000000000000000..545a5a885ddfdf31fc1eb9a594e332ff1f3a5a15 GIT binary patch literal 19753 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-a2-authenticating.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-a2-authenticating.png new file mode 100644 index 0000000000000000000000000000000000000000..6d11edfa751b4ac0fe775454501c4a4f8c4eda1e GIT binary patch literal 16697 zcmeHvS6Gu>*CrN3MBtSwU3v%UJrO}5^dcZ#x}ilv2^|FiMS6>Ll&16&S_q(Y2oUML z3853D*TCePYyOit`)9tHqwgdK`^tXye%4-lt@~c(`J}I_PX2)L0TB@qIY>j*kcjA3 zBN5S^C--j?Miy=_tq>9YLj+P)e(9IBGfxu4bUfd)pM1J7>v^&enDCUU{XVCD-oSGb z;e0)r-^DZ=_wx&5+KrI!4CSXvKbYOWdz(E_PeJ!j=l(*V1xD{;mcA(>%w5vojF zLSb@x#~b4%FQo2ikQQJQHM)riuyF9M37j`^^Iq+J6n;pixy{75y~UW3ks(YZ`v}$2 za{CG&6omS-!eMmkKtq@M3inrV^SS;B=<~=R0~`Q#krep5vGHWTs+qr! z;d2xm&IxSm^$s!)ewpvx-L2Nu)xEl!`ikf`W_6X8x4Y+sy1Kau961(Dl|ms}`KW_r zJt>LkqI75O&oF0{d7MZc-(|tJ(i1rVFgNAy?@BCfipDD+$36hqATlCSQc~KC=y$x7 zv}8m?q%UEVv_E0#3ByV~Q65`qc_}41=~jPI@W}DW;UQN02@yW4^Ci6=ZY@*pzj*{N z7V$K9-#xuz~HPWp=7K zC*2mCm%4KtQP`NinD|9*0MpLNSLD$V_q$QfVF85yM1IxVF$r7We>J1K2L;x6|ESyYGE z6FDAPzGp>(&wJ>)a;&J7DyJ2y2JL8 zmxArb zoSw(Ag%2M6+jHcnP+ZRX5k-PW^HGm$_YG8a)0jl!P&m)@QHt!ZZyYLx?QaZ6Dy2m? ze|tT8A=r|A5kDGXvXh|If8Ca%h8bji>mK|pC?BG#pVwAa)mYGeJAjfmYen_o;2`=F zMQ!ChW85c^s{%oO@S*R7I=u*GiDtvPs(M6#zt5)W?t2jqK2MIWt`Ax!<}LlRvkD?S z|9XJ(Cu+3^pO=?^nXug_BTGuPcqYou=h=Rjg!srH3nVz66;FCZxbVE%8gKP#%6`dk zxDNz_?Q!nDeh**ND~zL@1xezf4Io)hudiE8WX8|cb{Q_8S-nouHjRv>6r7#=EJz~% zT>sC9L<6|A*Nk^3;b1k5h5?y|hT`r!kgYq^j`H8$IDS{xtl#_9U?cb2{w}xfW47G- zR5lESx6aZ}glAjorxbi>EIP1wNL1Qq2f}#!kAtq?aLLzAN`I&PQRsI;l7N^z)wZS4 zSHm0BGpk;H|Dc-c-sQ-xt_3Xi{+S{szZQc^mApP*3XWIEQV-Ir?o*g5>%4tIq;8e< zG&VM>W2j;1xTOR6PBl>Xt&SQ&+Fv$Nw@m8`9In;FPp?~bG^1yTOvec)b4pk%?h!#` zML&M@<(yOwCWmg{p>n~m?52DA?@{R9wBUP2za0YK)^X347k2}Pz5DP=VIyAHpJD{z zw~vjpT$k9r+Po)W@EDe}EG=B>$6xvT9*nz->s2^WHu~;;%B-c(&H?JLa`|CFIL#LNm>^xkKNarOk zOy%xWNQdSMbFcJmv|~?Lwzrum9BB{o>o$CXA|CPPc>m;Hx>wXW6WYfCSl79k*}->s zxSo&-#DA&x>bIe$yw(bnP{3aBu$jIIkTM|$g>rrKZfQyC?(QBaYv&0GdldYRj{714 zc@Y`R&@?_Ch1vYXXC~t`8-Kf0LI|cJ?zI7vh?;XT6t8kwoN@;qX!rG(WZ+2-7|#qK zN95)y8=?hP{!b)CITX31dFFb0#t{#{qgh&ZdC&LhHAzs@3i@k)GA7)t0RZVeD^X{( z3=I=gWFQiN{r#l^0;T!+?Ob96(~ruEC2fMJ(F>uqu1m%wsB5f` z!7dEku=p>gbhL2vV;TNWfEW7T7893})xKH&FQ*X{jA~(`It6mt@-4rb9TUPI9Yk*l z#6zCl4vx-Kz2P>{VEhJr{gmYY3Mfo-16x+q!Ob%1T6T6}K1ow`_AS$EB%#fn@}Q$X z6**$TB`qaPZ9d^X{hvSHZ-DjA!|-Fz;g1NAL>7D9eqLp((iVc3vhRug^f~rZTwF(R;GqdBa zk~%az6dBS{WGo02C%X#hgX9EWJD&UP&9x5A&U0SRtHdke8$z>SxampjKx|{RJpnG& z)OzLOd%P-97m?#edcflkTp^k1kgN6b8~n8B%s|loxpT3uk5oV4;w;&s?Q*5sUVZT> z8=~oKqIrFOPK*Yg?_86x%DY@5scV=T+|0SDqiSmCvx05aKc`#QYFnbtH0A7kTumYK zD1j$WezwY=BBsS9ZGA4Zg(o4i(tSB__Usp*hZw|yUYYm~73o-9U%}fPomguE91goh z!@?|qQrA~xqQIlSH}hxZ+gLO0Y;idm83=m99iw3R&Z`Rn7 zl5(rE^$OG5tC7A?CwPq9ZgZD;vdVe5%LIAlcXBn=IQ6~v9-u|VMn|&Sb_D5d0{SA_g8v!>zDFVh z4mS?e#FQCWS$*g0Ot1gs@+7EkWTz40FcX?%pEkHAK)zVpU1K`TWp3ckl~ z%O|TkXJg5sPx;eRQxCH<+aSdbFJG=M=ANU!40G;AtgP5!#a$U92%XsR4(5Y(z@LKa$;Kt6MjG!x1Q&KDg2U8pHtCuI@C%;wg?UTVX{kSV4sbFc>y*hblO{bc2TBk>{b#B66h|W-)KN_`BxR zY2b^%c4Ci?)~tlpuAt!PV!JXizs9Z4 z3bxP+#kvFn(L;%_i1dZFn|BCpvIDZPu<#)T*jJP!)a+opS)}cctJ14RCI9s6gY}*$ z3I;dn9R-9VTm-WL(ZhT07n+(H8~2r0wzQ5h z-&2cc92LT?9e4^p{lz3#{f1;cS3W-wgjjl>7xKvBuBP3od1Gel6m|y-_xxHV z6dfHMfqyfj29Nai&J5Obt-+6HMk%k>zEZ-4;h#=#ns;^!D?597($9-%!A%QdgHF$9 zSkUmwvwe49X+=dM?5geh9MM@g0O$Ohr+kMJv8K`BC!JP#Gc$e?UhfPm#dbVV`t3E; zta_b#JB)^7$V}E|O-l*(>q?@~73>q$c?9-y>iZCMrL7-=kK9g5rqKt5*}XiD!6NluwMg=XG$Kt0-o&!dZ66C2uZNDPlc06cn%lB}xW^#WaSytufPN zL*mqi4>mMe@b=v!Q332dCDd$4vx>?6826n-Kd#aLDNi z^ppEOY-O^7Qv{fAnU%#hSx*i2=l=?N##wPFZ(d_l!LQaZo3@&cfZMLsX>M*f8=oFVJpW=7W{igaYYH#MCPHHWk~4F+H==!NAcwKX#5 zbwTL)s|E?HxO}JQ3oU5#*<+}74Lz%bQwn~}I@JD$&xm}TE@e{mS5!Rw>H-I%?#YxJ zSz-i+lv%byH@ghWP`f9&fpOum#4%WbBBTh0o7wdrJ(=+BGyv`Qirl}C(XEiYTek9| z-GH(F#2B+rjJ<;>Vfp-Z158g5$j3u`Stzx4xm&oPsxs`*ik z`^ZO+H@oVmKXGG9Ih?u{4ekxaj$^$!X{ZFvZ+D}{AiIAeb+%Yfj!MQ|nV6V@=N#VX zs+q1PWy0G$<|D^lC+dFe`?%U-vUz?8bikZ0=1&2Bvnx;BW0+*RwR^WW<=eqL6b2475?p*4}t`+#AAiG&qa)C_4 z(I7nFZ(Y-e4;|%6TU#!eOoyxLWChKy{fAqRPL<-;TYLXWTmLbS#nMiQB^<%&qP4lW zdHdTA*K=)~Y8sWVQ!(-5jCpCkGzQ*YH#G1RKkMV5R*D|6;0H6Pk1ry+PP|q9zNE{p z95q2uC#W&w!tWyh?%AnY=e?v$Rz#&{y|wT3pS^{P-8SIix{oWM>9Qhsh8N-uv(-xq z_w~^1sKU=$Yd%O*%lT|Io0wLkV(l&@Pv_qaie*61NqGO(TaM#jD2skuuO(iop%Tu0mVTR(#Gyn zP%I#p5A!QlyXbAo%YU?Nm7pEpplkbu#Bcoi-4(R-sh~tx<5^=@$ulOA)sr{0Gk}Nk%6bilGmWcE_*gFMgiFg0Z3Xj`*swg7p3M0`sOQffzrPQ?uQTJl5!0xm=*by`LS)pWJ4+OrAOq2 z(Y(QLH(!e=2DbhPbaG&>YNg?b59-R#&)?Y`sez(>PK>`RIdCaq+W_Y==^lqB;1wXG zRhT|qLsvIRq}&^}TF!*?_%@UwWu<0b&^A{a5!-Tka1^!t}X|ZSM+cZ^+Wn_0(x!l^Bme}1?+N^+&9#^#z= z>3yYwFXKGuhYEn)dvX#iOicE<`f{G_viw?R#jJr#vssb&&Eg7*wPKuv%3!+6M52AG zlD^frA%>iitX7xL-)8+P={wj0O!&nju<`fsiIw{AGL7LQPy z`!|=h!R=NyRVw<7sZbh!!lI7mn#^sDm!Z2~V-Scm_B|ZVMI|84@OJX2{gs~U<^3qA zx!&XZq@*DSKiV=OG0be@y2tYtZ7VA)&4IA3R8wo|H~Lye+sS$Wi5F7?11jlJH3R=l z3^0sVwr)WgZkkSJ1PQ!Oq~lYq^I*dHzo72Lmf%GB{1c4U%vYzoI|P?ze9zg?=u{(B zA6cEGV5rhC=cwN-IA0zSzf}mgfe+?94ave@M~1EDpF7Qvu!Xom779Sr*1_kCBQt-Y zvITuvDXWY{$$!?iZ~RLKXI3S+KWF=Qqij_ybZ-X|z^~pnVB>hA(Ra1;i)}6J(~!yR zhRl6Butq=*%BhK@Gc@G1vbNSsXi~<#sBZ5o(?Mi?u}$Ev&f#V%Y?i?F26U)8%T-!p zDHaW^fEQ|N&j-PJBVDtt_V8f4iL`QIo3}Vz zh4d*g0sZ{G!(REsuf~y6TJ1KP4v8O`x1CiAwm5o z_a?wr$Caut?@yA={4s$s9Z#)<23*}-O9s!p92EneW)bHUb2FX-|0V>l`8LqudXu=@ zg7+hwvB83D34yrtMM%&goy1KK@O+x>=I?j2rl41fK+&W&0xufI0By!Y+(lcCkar8y z(>hi^i?+CAU+I>QhFkkBr$(%cgq*NpKs=g@1;cn2z^7WJz>|ewOba{+yEW8CJKJP) zwRH`=-UNA_G)|%Xw`E%WYnhjKiMQs9d$S(6xVY>Zktwx(J~!J&#C%O{B9RYpyF4KP z9nWmhs4?lpPC zmgC%}k$3_?&H(?2om%_|rdq^kbi;6-|<;*#`Gn;kN92n z`x1APtyJ&zi&%K^PO^QOoEP;ORWfqIy`k=k{V_P96@PL$0l%$0tx#Zkkg6prJ&IAp z7n|B#>Nz>36%;7-3P#lC=R`jYBGn+iBCuWpFV7J7Nn%i?5*N8B^v6)Aw5+Ve1M%C* zn7N?Q2BA~_9;bGmjyOZ_hIgX;o0@eDi57JMWa$@KiWG4b2)B3#+*zScdKx*7PLtXGIbcl)E$8^^WLz-Ly7` z{RlGpp+5{=*pJb1E)s2x z-~C`)IY=Z@`jC^OonEx{?OD}V_qF1^`3CPzg~CEd_cdN_?gfI`^*>xgq~Dycm*TFw zTBfJv=-zV4-4(S$zO;&|kcrFnTv2P#1F=i=#IekWToXv(41hagASH7K6S}%gGE-cT zkWLBoZX-UTQU0{T#m){;R7B-l6z=np`3NMNj`-+4VT!6i^1S)$_Ot42(M6~CWc1mS=LcK2pQ%3{_~l7O#W+$q@oAwa z)ATIDZ9DmT4!6iQ9)(f$U~-OH26YB^*JY%n3yXHaz#9Uxe&gom25f7sz-7Z0Aix_! zM69H;5&~>1DY=*=*v4B*T{2#8QTw!NM{HJCP87_N_aF0=mZfO4$QOXm^UHIamaBIDu)2$pkx}M3L77a0 zkN@c6UKyJS!-NEd8{+Jpf{BSSWEzQC>kxey4cy-_*LazcURZh#TgAP+-)9Nn)mmu;0_^RMM3G>6qs3Y>c5`# zh?<(4deX}4NBYWiSB{+h!N=wBSqy!xlWrPCjpA>xR}t~uGkSWs#|( zJfrIWyQb!VMd9=zW6I9n`sqF|%k_t^j~E_>{Q7q86mU|;4;34Qv>w|!I;LVh-1=Qe zxOjUx)8M8a^Ywy<`daWgGxw%w7YZxCM4D`5cju{Z}mD*PXSYbP>IC#I%vUeZHVzDS>#_@&>mxNpW%c z?QAT2?u)ViQg(Et1qYt&&BK1SRx&H_#<685B|ZMXyv%pyDjV3@7I)H)>ekH!(Rx$=qePq36S7a zdl+(je43F-d6PHWMK6*PW!>b`5`lZd7x*5fKuu*a6Kv=#B*H(~-%n2QKwJhClqDT# z4mLaA8n0OV$|~=@#88a6z>HAtSf6Z3WpX{^R_lppnsyr8mT^lyy;xGdQ$X=%%`YSg zwx^337&tjTR0_t$NW^aK(3i=rfJlxp767E}m z(^@1FwbWF0&VyfsO6Ti?8wxk4PhR2JVp2la2QoMq8r%a*Xg)d*ec|egN}`(F=3t^` zq2=FnlPmA-eJhvN`}KR(_s%)kOv=7kwLxy#E6$$w4`+`*1(KeIlhm#j5n_wPhkD83 z)6tlTelp%+AY|boDNZ^bx3Z#iQzi#JrOmCB^18y~>2j1RD=KiKn2E88iN5YE&u%xl z=-y^m*v!IkepFwk^Wt@y$_qE`6y`S5%K0~6Gw=6X>l+v_EbWOx?7;jQQ?#_HjbY+k z8VkRVkI8F(Ua|!VKrH>)EO0qBC>Zt((y;enzFZ3!+IHfaM)~^ri?UHLc9j(idr;WL zPJfd>KfLLEaef|L9iZal6N|l|-8mw5&Zc8zv@|f_zUfv~*UU=Cob($rRW!O8n1D;oNtT;Mrobt3+&&Z?ksq-0mY`H(p*qlC1s{kw1 z$`oS4lFUjP@loqs1yqO1kH`DnCksM^9N3gyC3% zfC#2wc1;=kF|ZqDW>_0?+7iFZ%NH*~n{yM=*si$IFFIl4yLsLbMV`bAzccl<%u>#7 zT3OC*$-J4ltS0w^9IcjQkXV zK$ih{9)S%FC8ZlfSS-F7b%$_payrb!fx&gDX~wU5v~#k9#&%yJ=1AUE+pA5P7A6Wt zMdON+m_JzBN(NPtYMy^bFZUqY!*1Uxh_d*7K?s*=x~P7L>bs?8<%Oy5sXEPJPAC}U zdqH|xWWX8K&-8?l8L%Y3FB|k2J?K+df|5Bn_{=piI9ue1{;XNxBO2Skv!e)RLD!~D zb{#&-PV+h$;1?51WD~j^sFkIrWe|bX_D{ev=D3u$&(2 z&viX+i3^E*g*;DFVB3`&!PUi?=_hPI{yjDI29v1QO7j3a^82@VZJGL~tPJGdk-tQN zHUF%T`!ld_ouXY;Y2)z5u%Fv^h@{0xm*-hc4lDbX(l<@%pFPD`FYgJ4+UL(z>fNUK z&jl?4`w~Tux(8>mHl+AO&d7cywcDQa7s5QpB_$=mbMI7|Y+gM^L3+7%_c_G8q&fNK zu)5j@&|>>SdSpX<{21RZRlUKK`7O9%<4XzkIA#G?rY}jWSnS`j^l#gQ3-yFpbW;WN zS)85S<8la5_4^`-)R`g`glgI44#rzv)?fG5e;GtC zzmY%qJ6yY4J!h|cf^d7sZ>g!H@?enQjcb~b?$)mS;T4OGIwIB82B1&-h96Ukt9<93 zyh=aJDC`9b1ylTx(D*WxuB0vopFbs0=8TmT$Z~V@ZhF-r_~yHcN=ni= z^1MUKa0x|Ggy83b(dI(Q-;Yndj4w)T%kiD|w%z;O{5x_ZdM`;5n>8ZiqaK11LmG~> zcXtx(a_`2jb82p?d~0f)I?gMKUS}|7Z`qe5_Yw%hRxm|IMWq+>N2#1Ql+?|!Gp(5c z(sC+eG}G&gUy?d{12|Xo{a&GY2$fozQS;FFm|aZoRS;Gl0;#O3>R__8#%7jjMk>;B|c#8m#8^J*?U4utzB^D&htYREoS)Gff|} zvI^W$D7tU_2S95XDOJFbl$G^lr64UZWpvIUOTmLX(qjc7w*}cQc5&Y_V}r zSUP_$_hw+m`N+{zt$wT3lDT=rupa18=fLjw z&s#;uGF}&4rKi1bYW!n)bRTn4W-kN8v=;7EB*#WlCc=LP`GXdS)>cVQPbBp+WCOYp zpA7R;#M|@U_laxgF3MMMtPB?qrh7aG3JBP>HyVr_5whv-hmBPEOwt~3nQ#Qi;&eb+ zPI|y6_b$)Bj!Z;0v{lk{w^>6|v)ZnIwc7BW@cw=MY14n9EmE^r-GjogMEqQYvtN;f zn|DiKR16QAMD0OJTJwsLwE?&BiTLSRQOrBYVxl~>^B?ei2gmjPr`s``$wj&hqAk5X z+YNDS3edNN@{3E=T)0i}thae#68C8mG8M}jnxOU`@yNmaxfj8OpRiaJ(=}m4w)&sq zO2(NAn4NTcl1tiDW1QWqdjOX~yGNVJL-Jnr4#}&RMS}|B0h<=7HG)v+LH;)m9jT6b z_e&43gytlafb(!(pK7Gt=A0Ih0fTA`L``cYUC_}J7Vx=$gu0SS9*OVHoWv;tO!bk< z*>%!g>=xH}H^#IgR}nlw3l~m;Ti?qov}eCOZ+}5npeOwPxUaYr>m##RTT)i0J5NZc zCTJv^P4IB*_UZelV!Xf=<#IU_~c(6q#oc| z0>*3}l+lzB7w3&(OAT2SQ?nb6Q6|27(Su~_t>NVk4c7Gre-DNBZaW{>cYUVc(?uiR zCN;hu4gwvnoFC`llJ1}NbFYJ%bVMddxy#MH7~PB^k{$7sV5c}HiRblAJyO%6)x(@d zX(Co7BHhC)FD0E%#u}$K;sMrXri)MCyf%FGW+S@AwJZeWLL;uh(a|}wJvXn#a&8ng z=I=nF%M1)Sp3x~-t$xC%_kv(}asp?LYKJoHTfwJ&(Z;Fxx?st-uSdrERtjhM@E5Hc z_@Jh2{|h1ha1AW4gv4ySSl%}I(%5)cg-rg!f3wo@-&2hmO(?{?xVQ&_a6Eq2#v{gU zJD$pY$u(3`;zB4Q6(ZW`xqTH(K-bMR4!L(7!Tu5Pl?}v1_%D@}dS?DFOw)Ff^Ax|N z6Dmq=Z#@IjvC$LicZvnIPC)wd!s|E${u8MI9np~%mA(ROua4QuyiqS~WEpWl7F~OI zkW7^?Otj&gM4ev?J$Udyi>nOT-m^tbL5fDrwHI|4Rp&=y=~E;nCC4YmWu&Amh~9Ga zK88Jemz!IuXX(}%XB9~HS<`Y5(Pz)um?A)h6O3-Xl30w-xrpEXGoYYBG&NHwDZT?=$vYetl&Yhu&#xmo55 zZ%LefygUiHr27fa&L6zVF29kF`>27obnRo0`czO+)&?<8;o+xrcGMDLjngXS=8ymQ zqPR(r=;-6h-w)2-tZ^ELKv?{wRnCr`?uqf_ET^DV@Y~6v8PDmFJ!vg}6T?0YqL$8S z`JCN1)QQ5ey&eSxoTPdI%0(pP!Wr$t8`*|To3G9tcCEJq0>KlP>h zOceLx@}VcQ*u`*C{KTV2n~0r-#uAKLiw>8$Z{5g>WPb;f`?nE$l|F4ErIn2hB#6b! zB$g$y9KTnwSzGxOiM~@5>fRti3Hefs_g5}Iz4Olgx9^9k4{^axjKTLPPti#dhkuXB5RwX=!C_D?g3KMUP1NG|9U^J+^qZ0O^iU|?j;`6B+kz6e=V(!WJJv`|4I zr*y4!uZ#GcLLK5^G4hig%iTqCx=Z@-0qfH@Z!Rj_S%mr3i}DhFH+DKqrs|%?3#CiG z+4yzzQtsW09&Rpf%A`AbQCbSk)eU#9?(Agb2dXs}nfA0Ci1@Z%mb}=Mo!jrEVZ|LAH+5Fmi>;<{b-hcQoPER+{f-#fPivkC6aY;%4 z#ct~fy5oRE)^J!#KjCcoS|P$EWcPE)7U~N2RQ7QFEH2J7B>Lp%BF4tVeps^fzhVKx z<@HxPD#yn@>hnaTs%9W%YqU+oV{toe1LYh^tiv7g)55+;kVQ??4>2w-M9J1hD5;`| z7|1tFQMLc~Bc~g0E-oQdMG>;K)g+ByxIdmnrf(R8R1g9J+rDzDqsdIoU%pDnbaYbh z>PCCPqkfc@5BAN8RywJ^)NX&L3^jUHuuZvy)0+jGktq3b+<5-j~J{>3>|!;;0>^Y1l#n>lU@>QD7)uUg39G-Z_uZqu(_S+ znxrphs-&>PzJxamEk5B~`JvB#E<5jfM}GLgHkCOurO%eDs4p!GT>ovrrX}A%3c91C ze{o5oA&?4ByL<1Rlq55S37F_YGr2rGZ-5Z^&zLZj12Aj@3OgaSFC-*^bji&-REaimL%w z3^@fw1tnaQVI}dEHg^3>1NgxCLF%Z^sGu{g=z_Sl@8v%dF%GX2T#XC6x*jD~;{yF7 zKByB+j1TgM`{FA5*GGmT33Ywmp33hLYs?g)5H=hCBj~9Y{{Y&{`)|swmX(fsH&fUF_eJ16B#o68wf^2mosI!t85cZ@Wyd)MLZ>v6qXsQDb)( z5?Bd=tz*VJ~kVg>RZX@xv|l<7{Q13Z(}ERPK{{}(z|yOLn-6copp?MVuW?${xP6Fy zo6@K-1ONa);gM33k}1v2eW_S1G;wx?+Q^PN$%}&JsbG>+?~>Z{gQXp9Q_)J$jI@pp zSfQRdJ)D9;y+lBe{PV}8=gwe|C;h@-b)hG&yj>`;sL1?zKl}I{wnZZFAZXr%?l0wiAwiL?nV$MuC-dOo zV0{h0V5_t;6J+-S06>o8K_On9?oET!60KY+e>E4f3z2Z;I)Psx1?qK1B>4FIfd`M` z4}O1LP8`YYovKAc;ZlWjZY-IA-GDpzh@(0kIqd^9ZGv@$Zy`;SLsb{FK`9fir8Fz2Z^eO2#b1kOnA^^31r8;-_&gvPRK)M}JuS;wVOri^iSaC~#b z8X6*yKQy}y!=7Kw>wNt_)mYN6X{Ng^VaFz%*Ica30OR zZW?~7b(bjO>GYb0c@|$&ntrY6nqPy1t*ycaZ#+`PBdnar$v-1(;H(Pl!kSBdf&#rd z4C0o6=)%Gm85*8I|HlADuq9|Z$SHFa{_n7le&h+-3?X&zy)C#- z$jt_05^et!D6817Bs*~NmL@0r&4C{?u(%efBL!JEn;Xzi3@^F4hiWKyw3wg1imY{f zJ?|s0+_U=1#L5id*ZBqlv5^Dx{px_$9ibf*oi}DiuOEmb;J7sYZQ}ek)375-N8Lw~lB(Hw{5O(anziDq`YHS|- zx^oH?Xw(3Mwo4-`zCUAYEZ!zR0x*E!0+xG41uwN$l8p)+Ia{C%HXPjX#efSZ-CW6+ z?~}v46T(%VQ#uw{v}oSTE(mz)HYUq3nt*GISXkPaF(r`tVY@$uaq_uGci(>VPWcpZ zo<3t0zxP^~zJrPAg4X4KZ_!)dCwdn~_y4|u@4ubs{D06y_@6!ef9u!$kEs76>VIzs z@P9PwKN|HPjrzCr*4J=^;|ZS)X#Lms0{-ot`v0Hq=`|Y>(anv%@M$#RP44~cP3{np X9)7?%)CF1*MuT^#4g8o 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-b1-backup-prompt.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-b1-backup-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c553481985592751ed9a8c2357f28fe6cd25bd GIT binary patch literal 29296 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

    rKgIWuAZNolPcf6rc) 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 NsX#Qq)e7bz{{f!WJWc=r literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-b3-backup-progress.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-b3-backup-progress.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5f6dfc35f8216751070819ffd618ecc72aea9d GIT binary patch literal 27830 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-b4-backup-success.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-b4-backup-success.png new file mode 100644 index 0000000000000000000000000000000000000000..7570e816286c3aff067b9da7476ad94ca0f0cd20 GIT binary patch literal 18843 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 VX7uCj4NMD`;s-U^>h~YR{s)9tRX6|u literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-c1-restore-provider.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-c1-restore-provider.png new file mode 100644 index 0000000000000000000000000000000000000000..7b29805a806449fe8bc014da7530f5c91a10fe0b GIT binary patch literal 16852 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 WPqAxDv$B*UR6uq8=ao+#BK{Zkm{Vu~ literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-c2-restore-progress.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-c2-restore-progress.png new file mode 100644 index 0000000000000000000000000000000000000000..0f723c8421b39c621c8f18318d2c27f92c52d06a GIT binary patch literal 24690 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

    YzD!{Uw0qt9ZU3AP52JooeOV%Z9;#wz zx0WZa$}~@@=IEt1U>HO_fpfK;xnC$?hR*7?wxyn$Z zh-ZP#tBQ$^46!;Fg#-&HZ1V-&xr+H!uDiiNicb3EjGnc%_1AGBvPW4KEk4jG0}B1E zibm}Rr?>@SiS|zpHuLoos~VKJn-|JdEqURIADJIGehU+Hlsrm2KzanlF^}7-tX_Ji zW>l_!JoLbP_52-lY=XT@J&d2MjNJJlz(aSyCtaTLe+~kQ;m$EwZF8 z05{o_xLPyB5LY^S?U>((Wwk#>ST8it87J9CI!$!uT{^K<=UATRUIZNn&l<`%v3@;R ze2}9|nCUvT`>4l7LAB|RZgv2jjlT2#GIGn@S0mczu9$6u4mPbjCQ3~`+IymJDO=h< z!9Hn_LCAJdm7A42M7AT0skTrJkl>?{p=h^>eOojV8rZ%OzuQ~Nr17FY@=e6@Nak13 zvoCR=egChy{Ck7=fhtjxVa zs*`d=wRdm!>8_OFYpx(CP32+}3jhv(yr&HWnV4v) zz9c&8)rJ=(NBYeB4frMrkaSN5ssUw*M7!A=d zYPky8CGhm`zoGpv^0(H1e^%|8pLc^wF60BJMq2$pVFaIMkC}*bf3-@@UQna>`t<=d ztIQiLX`ZrMgi{X>AA|z(UDCad7QB~6ta{|ygTAAERvu0v_Ug^#hurHfhO$owxXj z&(t1r#jaFr@nG26I6(X;(J2T0&x zmhj1?_rzQOPp8^)go(r6C@IAJCnbo_WtW!x^;)W>-8pIsBenF+W{5E6I#J|1JnOri z|AIYMa-GLJG5O*7K({DLwCzL6w<6t7ow$3kBt7DhtnT+glG^{rPQ} z{ic?#NSkbOBltI8JlB{y0PdyZlW93tr4wiIJ3o=f06*D>zbl z?^9CrjQY86TpPXp7xvz^uvY5fhz%lPES^2))rFu%AYsPR{<6h!JcR@dDC9>08fS~m zW_25b4|C8S-D~u*Pd&f=UHXKn+NHM)u7i%VX8gs&0k5>|<0!f+q4TeRCv8@LsiaS{ zgp0Hwj-U}SZf;YrOQ^AT!5vkxGD78CGc@m^!-AOI4 z`5>p+_Zed?+-GMZPb>FKwD*WM@zGFuM;%Rz57zcc8~jSll*Na{77+1UrNt2N&gg7x zSpVz2Ro&qPsAWV4+ycBU4+)vyiH~=kn18P!?YG*$sI?czFTMKb#?{b**8QxH(X>Y+ zf3?1W=1s}vqzHt9>Vj8#Uo;_+J+Tkb9CHR9CbOZbmV~Jd2=JE!636EOvfg{FNVi$p zN<5z%947W8BvIz58}$ZmWYcBkNbDb8-9?bpihAW!xAh>7fx-MANqk7T)8$I2S#?Gy ziD>#eQRqQ61@Bz>yX5`9bEo(A``j*^4}{va<>TRAdsrCNOcA` ztPglJ1WgQm>sTWOyudb0VG?dNF1YO&98jd=NQG5PK0E0jHUK`A`PC{prMVH~?14;Z zxHsL|$BUX?W)|8KzcrTB$a5dIWbXT)V%eR8@V_=V#k57`+tB3QJohgNq6c06Jk0T*1^AmQq<$1;=G9HY>A%WVCNAMd!XVACr)}s@EOFg4_2K z>LcwQE9#70>NVXD&I|Im-KdRgIh-shDM7abDUh%nsbdGnDgI||G)X1uLB56Dr)B&A z{V$2w!JoO+aDv5m_ykCDd+>E0wS{4lcaKkD#_nmA`&^aOSa6OjE-wh+zJ`~H{ zFY%{L-mP{3h`A(Q#s)esc*I%KgtPa^|mRt?2*1 zrR4B2%<+loE;@>cHu&4-D69Xz1;D3oZ{mDkUmsTavBq`4#}s`t5}8kytIERo77Lx8 z&(`!mh3Oo;mKe82ul5=2&*Th(a#&Y5U$Z}fSz8`9cjNWRM&5PG@?0U7U4dEUNKsly8w1U2~2vhSR@mM)pc zpH3+r*-B-}aCz$*v7oO0UBd)iwVp5u=Huv z>*AdHfd1NWw!oHQjnYzHFXxS67G2#0S25GKZKD2XN>m_=fW83A&+HoYen)u*I&!7DNtD^KJ| z4RS}Qh->Pded=_u1Q8Z;pjGBjBKm?=TVk_qpNQaRMmP4v(7zsMk{xwE7I{kzo_Xk} z#g;!(gFNJF%Vn@U<|-X?c#&|uTt6Xll*bRKmx^uVw%Djo7QYC1mqt<8I?g~WINAD4 zNR&pDy)XzFD*?72<4+6X2K(K7_q%Oc{jfe`KYKIYrl+TS4$l<#XH8G1X=FAAUk$BV zf-`B`46lhHni3$r%t=YV){wO_lzM8_+1B>#cW|)TJa2KxDKT1)dI~zL>5XzhmDzcEV!wt(%AcPJrw-83(Gd{p zTFOdFa;Hec0x4lUa6n^<>gkC8IRFkjI>@{@+sz4HW~;0<0iDm#)5;O%v%KePl+C^N zo0gXooU7UutGKwh%p`F0G1;@+TpSf94eQ(P+yJwtF0+F^_SmL#gt|es@##5}d#vPI z0ZDS}SEq5=$`G*h?w8WQ7v}`L;x7-Al*L`vt-YYl6nAewJ^|WU?*uyZZ`+_-9L9lc zNM(!g>(=#y9NCt+U9mvvOA!3u6@7@+=~3;h!9@k9+{Qg6t}al$e1js(Yua{VKl;Fw z`JwUjf^-EEOVyiuByBw(a$1+_q=l0M*HmBhY?Zo9v=^+r^k3ncdCvJnS0`a8U3?)x zV>@f7aKK=7gD#3$^1a`v>ztoU-vW=g@AfQVGV|I*cjZ4-!b-cQAhXNb*LNtXRDPgx z%G_Tc$+}=0rdyn%j=UH}ggd5y3CuRJC3CzKlKQ{)Gk~jgdPZbp> zy}a_>UGLOw{qgAI93WegBng2STC0CWQ6l>Keps}(40KI6!gnqVGi8Bjl2rau3-C1Q z)}50?NS!@05kf;lbBgg-wpTi@wc~d{W=w(KK<3=riQTD~wAVH%^DTjiqq!*xeGS+C zVV6ny-IK0!3(`yjUJ}MN)(t*y{jg&-!=aiNSb9m5zQ`wRY~tXK7v8dkc6RHP2MGvd z(!?q|6`RgR%mqkp1t80YC&Hq$9wEK0orb1x2NRal5!MGnA zM%T37F}_rNGRFv>S7&vOPDrOSoL;!9oZLmgn(vLZed&BnDs8da+Wpb(hSg8DE@4~4 z?x#)9rMlQqdu4QkGnP zJAI}wvvF=|*IB@$B-gpd6g3S{d|FzXn|W*BB?KhYVja%nnO2ZMStoPUr<<^Xxqfxr z?7%9C&k`Q|$j9@NvP~#nRrRMhIyhCvY%>E6k~UC6HKF)3`P6TEiA#9zHi8KJx-}B9(H^2apTcr;B-u9bztFEY(s!-j`_j z=zIk|9}6n&xn20!?Qb}npd?T9C%S3swc-iQJlRiUACk!v5)%i@bxaV*4iYySQ~j;x z%O%jU*hwHK*NIT$t+&N`-J{2LJ}|IK$!_Ndx1S)ARyj(ezG`5jj_Qxz6z3Rw{InY| zRQqtUGh_bM{_5P!@uvUQG;uF4w9tY{$o8|)eetU%T?=3f?bfp- z;pK1WH;RT#SA7jWQG%0d?x{5xg*)dC=`2QGjcl6w2<$iCnJGAV93u*%TRP=7a@md! zK2l_Ikd7>23yH70g6X**OZsU!sCVIylM-PPYgp?aJ|v_n?@sAMniLIu zQ-zWMfLGEg%Os^(@Vtpg9{h7x&!!KQmhSjoB{*0TAAO&J_*= zm*>0E1H)N~KHCSo)V<8!6C-~q`cePE39G+7{+J6D#wf325`JhtM?{)Jhf^ZWWJ!Q; zY|f~dTRTA=bb_B!?ljafDoRYC9m*U$4FAgUX6PPvGbuL-HcB#jc1GLFdsjqF&rQb8 zQ^FIa)jnkG;z*mPD`|=SQykTWzwQ9Ke?u4Q8>9rjdR1xEtj6;AB0x?b)gVps@pr#P zW%7$8aPDOgY_^6^d->*0vIlNURRw!~At-sBCu<>)ZyuXC``>WR^F*0A2|AWWBNx)0 z_b7kUwKsTkAK+Z%Ot+}|`g9L^O(W3})4r!hYt&hZ)}?z){yg#l=3`4wlVHMoY28pp9ou-qrl|DTG3Z2o4puc6cM&4Ke@q%hSb^BFwXtFI7MH-FjGEz(ioB?F$~(n{g~J)5rmlk$EPK(xB0w`Vgfdbd@NLS zpZsmzeLr6>>6b5RtKr~B!iU{CXgq7be3=nxu;TML7z7hd?e@$;>#Ow%AlopdTB&H= zuffKXwbCqWsWUPQl_$}lNG(In1)UdD+=`&pVK0Js5Y6N7THDkMtk}|6oRH7WsP#r@LG;fSquZgq=?n0_WNZWPT*r@r-;{{5f9Wi>9G`tT z!!>XHt#R79gRs)QmPD$kmU7CrB;J0BBH#KPaU5H5erJ$WUcQ@b6l}*};=~*Kv~;K*i*5 zId%YL{~Pbl$VUntJR-l85#o*~xXFX$&>2oa0z>l~gp|$4*)|jJf|}qiGs}6?)+aGp zE3uUGCgDdwE;%EuZKOd(g8THYg7Lxao#3fq$wV%!*3Wyr5o0FxUhZ#sS>ow~3(ykkgy1cN7E@9} z&wZvtPrO1HcfpQOBP_AP4g2m>^fJKazDrGN6ZdrM3CyXT2a z_`NsYcYEF3u?&7MgEU0re}q-@kV%kPNy+h4y7Tg(ZU`g#HImH9s8mQCwp+q#OKz=H z`%b4WEn#5cJ{i^fvm8%*ehY@zD;5p#OF2kEL8WcO&Cj=JCyUpmyttJ$n@90(!RFY~ zpBa9kAuF+@zZf-vzjwd_O^%@SrfS|yAbMkot?kI2Os4Y=2eN6X!eSkIj3PG2r>J=4 zsUf6X|NS}aNhKn6$*Xq@`H~oV)WJn|{eUVO&>gqvT|u0H`6Y z{}5Zd@n+@2xg0|N8+TD5VslpmyR42|R>%JOrAzlYw5aTlN!ysoA1ZQ4 zD9gDDn9#`X+LJF*TUYYdyJeTIKKdZMDTb`6R@Q7C-KzRA@rUiH`Fv!wV_Y)=L92Dw-bU z2%9mz!+h*RGRANnMJ#l-o#Cpz@_XQTP+6J}yw$|sAe$IghJez&Y;;X`8!-L2A4rcj<17a~YrjvHq0)4x(9*cg zHP-vMxd$?B0{3~};=Cz~!>zD9u&CeAY~&&PbaM%KQM%^DO1X2E24u> z(j=r#XK1hz=--^b{o|t2uDNm9US3p)lQVE{@rIY@qy&jDDqb1;?2K6G=y2g+8*C7* zbG7G`0kf=l=KW8bS!t(KbphG;hj`y-qDj))G~#@)SB|MzI0GR^j9`Q zz~IH zs9UStUC)C}T2g2zFp!aCX`Xb`=dcE@{$A9WbvPq9upv;&Y%ny7X zb;`lf)!WmPCXAFm9lRid!rxa|LbeYtIP%Z|yJ6~rR|6!;Gws1VXf8U{T*~5qDHs;D zZ}7@Es7WQ{{Utt!`gx!T=+X#+^zY3ETawhOTae_-!C|-KtpQ|mYN}~v%HMD*EW!Si z7*UPYtfv%HX>0iHo z#mKJnG|LdX>PWU?qZ3)`+!--`b+v#V0&dYSPZ45aWAk65OMPikyVHsX#g&iA0||EY zrEic*c(m-r>306JC8OG&#zk@mjB^M>2unHl?7fhw5*sDuQ z<7w2kkXE?vRgC~gE=etS!N{01gjg%Lo?{kc`+uZeeB1urx*Lg!%DVnqju$0WhIb%v zviD{?A1v7w)m4It66#*qaMH?LxqR(7*%lTrzhHl?ch0Raf9w@#eZhC*=u%e;5kN^4&%e>)+LMVWI0#WQ+OMtyH`kc7?L~l9%nr%g1Z7 zW>|KRJrn~IKwb5go$xkzI(nTF)V;y92mb}^xKn=`*KK5Y56ffDGGurqwIr}dv|3UM z%VYL+*+5+SdL_x~q>pCfr?mthUj3%&eJFqMEge3bP%dr;j_%fhO8gh8RiGxCb6J4a z9vWMSMitaux{xebl2I7Evv0$ZzgG5+z)5dD64wg9?&x)ZcrX2podm7Slk&anhC`9* zbqe1pMRawnJ-hm7zq7t}I-u4avdps^cv9A3`(wTCT61gCW)XusYn9ySqfzcd78G=m zaJv@Q`W5WWBzSC7Sk^+5Fx&cOd~U(lrK=Xo!UT3IDsBHCEnu&aZMR=CsQSUh{1fGR zKz^(ZE|EB$QuP+vFXKEzLBMYLS58#W$S<(gbe`R^$f>Zxfu>9lVoI9rGrwMn{$)E< z<~pzR+pzM#V1M+&UUsLS!LH)fhhihOXd+;vuXraD6p;pkhD6eo{#WyZW~YLmNUm5| zdU5+>%A-+!GTn2#mwnAz??S*0J3BdUD^ZwdrTM@=4=1B_^TAC$DbP1xjlvQ=D*lgj z2popA8n+*|GGZ*VM|FoVWoph7os~}OO8SpWe1~@{hjEo<3uR#bhL&fmZlkbe6$m^>UpgW8Z6X-kWxba=E*_E`ScV|hPxT}Ti)+YO|-%9fJoF$A@UFr(yT5mRkVHJ#}6&06-sg|ktN^MiCjZl@& z8yyN1Wknu4uNy9woU7rS^6eJ*J8YV95kjQQJSp$P7W^vj%Qi2dI^ZfAJg^{tO4BW%}1l;w2_EYxUM7O&^NVH#S9!8buhY-lSmbo=$a+U{7I;rgR_3%Q?ws-;gVGQA*7K zG_<;ISCmu>)}Nbw;kF&#*#a0nmfUz9S*J&u6iPLB`-SWo9pH%0bxyI1L4GrfqxjbY zHeEfJZxOXjG?GQFHGd5GC&C|WSB<1js*5Uo_#W}|r{sECzL&Rnx+3IV55^77%k2P- zM!ET?(dulb)0#q2#Q0@WjCte?A~X5(5%TkHNwq^P}ZXW}$|X?~DJ zGRW&{YikP%{6f(!cA1i+wTkwCr|LXcing{GNnX`2GtlfUcr|5Hrm(m>+DX%8w%*tZ zQlU@i0bAs2{dKR|wNb_Dh?Dq7@%~2YRXlG>#=q&mU9SX=s+rWTKE2d+owxN(rda3T zE#4P1c2bLiB%5wm%*0CvLhnSpkJGDUhL_XqM*e_SXDn)LV{u}`XLnUKJXZmy)6n7H zPhQplz?iw9q{HddD+{fzUxqK9z)L%oBq$2y1^JJ*Xk1a}FY-kNG+ci6ovxQ>#KGw6 z7R;CQBB7-KgA&a40Ij99G>Wpoj+Ewe82C0JcY1v_EIcf6j4fuJ;rRl!%cPX+>h4yh zIo&FEZ!yC;6TO=2bM;qdcEzwsNjK6-tq-Tz;zR>dtRBi)X`lg!Ku)!3Onof=f;7A) zC>+cE9SKt?4t1`ZbGc}eK8bB>lT*&J{U!fm#K${%3cXl~cCC4nj*V4Iek1Z??DA2> zn}qZHTgvl&vc$)~TAiSxdh{x~vRfO{enb0u>Kl$n^_fvx98lIZMvp}2&GwU@y{1v_ zFTwu~1$JhRVo=xBW2;ctGqeFrH7wj?{w%nr^=qwikyL5qIkI^RJG#ZzTRLj4U!R}T zdf8+kd#-!MTl&@Asm@a>I}vtfLhfhJ;QdtOH;K{+o#TlDyFI_@3Yj|Hyat_`(LRNN>3aUNAGZ*4={?QBO?&Ms`+caMCI8+K4V zc9=WKYzQbU<2|mI9Ueb;<&TU!x#BtTwIm5a8seHL52}`a)Uk}J>c*eUa!o>4>gzWM z9rc-@HPMX6II&)XoQp*64IVpRqeJ?O5cKc!XI@6Eg*JX`CT=ye+IdghbWyA;^9LZ~ zvVxWzpvsi3b<$Q+QNRqU?WWIH6SYJ(Hpso+ z^<*gD(Ntjs5@-5VRe^H+s_FT$aynd8OhP3<{}tzp^+DH+_%3%pDt>dCr)eow{ocse z-^&V+o`@s}Ba!mdezHPxUEPNSClPP|HCbNiVJ(nnr(3^NWszwIBtCafKk<`LEK2r; z&xTnT4#jKn7>2Dt!%rH2glxa>Z382IXbgE)pH(*YLEIXe$~mwv3XURwR5K9jeS7g2 zpnon9_a>vq&13c%WW zjL|&0=T*$;Q>c568^-3L&Z0O3TO;x_N@ULB0=}z2%qLiAR@LUbMmfudKV6%x%MScBF ziYY#c_5DvcsYe2KiO2-Q@k@BvwYHLb=q(m%xy!CPWP1|CGA<>BFS63O4wn}WNwVl` zue{DvjuQ4Q_}xO3TIu4&HU*!j({r40d{$FecW)uY{IXu*59jn&!0Uhb5P)x|KG{U; zuMc$A8YyW0a(VXim>Y6lOgS@U~HifNz9-{mq`)@{7>%sJLC^SUDNZ3J1>d$XPdav;+z(16!Emv0CE-s7%A0O zzBbrOs&d+=I>sinh^zMVvdgHB@(Fg9h|h7BTPob_XbG`6I!)zgVaRmu%R7tPBT*|= zZ(x6dokNzW=8fl0-(`1P!PbMVw@zDWM>5AyqG#@~3AeJASJuP_F~^qW^20Z9jpouD z?=uSIIk}iK(POP`4j*!+l(Xs5pm|+C6ifLF>vV!R?5y?fBtObWXW0zC2EKyg(c-SI z#8}|1@Q4yioF06>l#40`rn4>L2^`_!!@sK$ey3V+vIXqL~@??$5I96K|hmO1Rx##|P zY?vye(qNlbpwmg4Dh1a25h|&{$)?{8Vi)Y)xUavF=e>%HhtF4%E&ln2zqir2oJ=E( z^JO8N<%p}Aw$>}T3NBQR9i1nOb8ueCS&|sZoSFeYnZzrrE5%ze^ZoI(7BzhzQ+5_5k3 z;;=l8shcEdrH(1yka%~d(_#{7ShDVaH`q71z9XMIn_+)jUQZupKUx;t>rUO@*_fbT zwjV{ika$mRG0y6?-BQPyglZF*_j~{HsgwcO$x^yMb98FXsY$#tHA3}Nk-<{Pwvty* zKd|vK>|_XT^x%mx)grZkail?jX{-)O1$vYO1SzU`ONe|O<9PlFBWEbMj;hLzJ{+K4 zRapCPvkIKeE+J#)tDu>@3@an-SB|z$m-$UYhsy38%{`?pG?a)Oh~2P9GKkeajk$zOC0sTnWG7eDSR7Lvv_gWe_z zxD6PsW7WRH^0pa3!!Lj0mbE^xxvP%b!ui22^&6~DLhk=jN3KMdTskc+3j-4qDF?LVG2L#l5{qhdpCWaN zP3X1ql{uA_XOlFt+2^!LKY!LZ^4?2`^d`g1fzKu0HG1?s{d zM^4h~!aS%EP18K8s^us?l(m(1psJ%{Ho2KwtQjAlv)^he2WO9(np#0)fB$@Ad&#d_ zlN*0-JlO7FR_)(0z$PTD(V@1zq4@NKyh{++Q?zG; zwvk?=o%0vuhI?N-hoHE7KY))f5nGYMTl<(9OXsv$A=yFPY`sLR#rG-)JnpL`_ zloSKR0;dzF6zcjny1gYv`ntZa?=Cs1)Ht%)=~$b+`<7qS!)YGv1b3O!e$24;BO)qJ zUo@Eca$5VZkWduiV29?jeJHkIPwaE zvWq+QO-v9l`e_)urQrQf_myL1+Uy1>(>+=j2n59k^Z)?gEK>e}GkIjjA;zNJ{_l?D zgF(rVAph-|{DD-^uRz&Y4RY~DDT@_v6AV*mg; z&>jLL`XvM0tvpq+pNZ|06$1-3f6vreNZFSvd;20~Wkmx$gG!?szoFTOB=*|%j(T%S zSU?tK1s#~I^C6VE&K(f?K>Giq1q^1I*cQb~o&Wd=2^p_4*KBQ+RQ-8RF!dr)3!ai0 zBk%WZZY5pF*HHB-3ybf0+KL0xn1`QDsL9<)?O><*K{z$jOH|Fbra=JDt1_2ByPh2J zp0-Gls-b(v#p76^Vl7r#zSqw|NWyZ`XfFv}H}qh4Fwk%xq8lb&++n!0Y-?7Yn4Xa# zpfrjmFOY|67Sw)4; z63K=U;*!!Kx5mBE(INl!?%=f~ucpEDUM^*W7plcVwzbib)VH8w}@Do>3-m&GF$!>Q0SW!t45q|#tN_E|Aq&j5TIWE z&-Z7GwZx5GmO9tgL)IkNf)C(B8Gv{J*?Y1;pQ=M(UFC+`+yA*g?Kql1HvT0?DqOBzjVeNhVyM;IxsR4Q`BZ5~Ll%AZNZ8`2_x6)qZ-!c3sg6D>Y?rH0M53j9DeYsdj z*z|W!mQp*IEq67eqy+QvcL}AKvm@rYwF+P`tGtu#&rN@9(|-w*PKwRR&kTF>iDPtB zF}6e-)#?b4ge|%Pb-F^<8>06_y?ck@^Vj6fSB7gFO|45+P@>?M4kIzk&->h7SHAl> zItV;~1qYXfJf`|VHDgCvqYWJh*4(S=^-y2=d%$n;Bm&pzp+B0r6YPwFCr{kFmb$~L z9}+|G*rj>j;bSO5+Y$N% zTh?fBFuf8IiA=s&cB>94*6jc_Cg_fP^CZq{vV_YeS9ra#(dvPImdz>+e0XowQJ$$ zro9ByECULs5;x>Di9;J2-ymHv$LZXenfzc?KZcQ0NyL6qs89x1Z+H1%ZpeK#=~4Vo z!Ek-9X}rV7Y6o6wWW_w_vaDbJVlBB)q_aV7kg+Xye`XunxqPZdtC?pbSp6kGZ=Bp} z@xA2J6|{-IF>F#||HvKrQZ7Wu|liNkHbN}2is2Q?k=M+iv#*hq;-r& za^nR{j)f0S+cKfgn_I4j-c@95PS-YhjU(C*?#+Uh{h-7lN{WQX&Pgko#>ZOEFDg`5 zV}5VQ>R@RTg+{#U!zw?Gxvb{@DObS<+aPq+^`CI;oX^?p=sKd4H&2o>S%dcd6DFYz zk31+eE&7J;+^C+{X3N4Ieiq|FTk4e?eE0F=0j52dZGw10@EGt45Nh6Zc&P8~Kb&Fp zSFdr}RTjh`jW7C-9L1Sd-~9J43{X7w^v`E{Ok26U8}cY*J?RdFUE^8}ppS{Fv7{Q? z+xq|Blw``Y;;{E~9E_B_dyvLX{WYHb`%1q@SeW@9OEBjnLR5*G-H{RhOcny$vj2{_%l&6P@K-xF@PxJ^WApkcXDkuko1Q%FwN~U(nIoqw*!-#Kfo=A+SpYnm4 zh_QNJy;vYK_S~h(HV3%Z?b~h~60o#>YzL%Bp5|0+^kOpoDIZ-P;M+#q-(ClEGyG^j z658N!*vJ#v`6Xu2G9drXsNxqC{WChv2`i8~ob^8JNAW4JP?nW{NzVl zxj->Up;x@wjobj!szM%`Ib43IUkDAbXIT#I@hMu*%X^-eH_UOoUpm{LZ!X2wKumdN$Hd$^tGnx1Gxe(+}Kjc)4=EWaq&BUhKqr z@%Z>#wZlZcl{Z7B(IUW;+bc5*E2i&C13zR!YLvwAO94&L?VwXs8ol|4FtAtxa(6(Ka3`a^BoQrMTRnpRK3YE z4EMi3`u^moqKJ!pQl8LS2(Zf%mADYz`ASok!v$J&*>ZO*rP=ky?vQAtxbO5Y&ZdV_iIRE%U;qF&9Rpi8a=)O;=En2qzy(QKSQoIZ7icth^(YNdxk>>k5039 zbg>3Lgx2F8zbI?G7EVcngD4e!jiF&i4mnMY)s>xt^q?q?xVq`j4YcoP3scgE42|oCZv-M(X}kFyG}0`=@RRm8vo@N&4J#!b{0$Ue8FK0*-tC7Wc5 z=EZGtBl8K63e@WeqO^`}$#Al{vA8#y;gr_@UZvmqB}klZ^UW+{lLVUTf>1Bu>fa~2 zpe#Dmp@LH1-LG3GL@bHME#}=D`I99 z=j2@w78XALDewy0u5`Q8dNQe+Oit!2Y;}Y!mh#)+$Yr&22T=Q)BKM=E6+zg%LCW0S zipquVn<8|Pyt=ISd}|=K_3{sJ9uj3(eqTT%@O!A&64Dh!h>=Q;9q^crE zR?CDf0z*-Gr|$Z8p3!URvcSIE)HJ!b(D$PX-IfSjX_>p&n3p-3@l(V4rnlU3T}@5u zfO8N5lNH?NxK$X=8GqzXRp%Ei?qZeymEL{k3$cbO%NK5JL~=Kg?>-c>R=<$j!tlRG zcvk|02Q+_*T=I+-*)C)LOgAQaTn#S`_L-q&W&-2jiTk6vT=BR{a6b&65P`tljzhAIz#60J~CSCs)enKvG8vv!XMYR@(qo0f&Y*$dVe#*?KO8lp$~C z#XhTp>v7hwAJQVqUC6vnTi~PkO1PZ~IhV&+a}DiSOWNDfQo6f(#J0#bDSjDhAb;Nr zJ-@lG)16LUJO|G;BV?$`gQCD@W}o{JwbS4m2L#=?bPB@WF3-g&uf9P4Dfk9-weH?D zj9BT>cKurDMo;v6tx#7;Q*aG@v~^s};e4h%E{6hDkeha}Z;Dx~Ecix>QIZf5pYOHb z$uVC!h(6fYemXn5n^FT$OMG5UV%8Qyce_9Kfb!=n4Q@two7z6W3^%1Fj`?P`pugSr$`lLi`x_P?Azk6LLa5bCPy zYG9VH7AAWPer1$$|8YfU!rhy+iks?mMg+Yd3?-I(xHr+7U7DgdKjN~b?Jb<5jYi>v zIWfK3jh^trZLyh}Yz{|^(X$%3-%@|m4E`wfeoMJjc|uIu1Cglg+fe~I8V#HCPJ(#! zEh4S)fU-3sj;&VZxfnn9-tvo#X53ALDcajEI@;aR0sp%=Js)9fYa4ty;^p=)V!Yqugh)#nz; z;^`y=K|T9)^Qkp6+&9ZOJEw&{8Tym_c;!b@T51;Amys-c5ZfARXguWAO3FlO-JWPo zUF*4>K9-VdK0Hjq(W{f0h7s&y)9uA?+aFbYZxvsf#+Ds2t}Bw3no|;=KWB}fAX;F4 z5h#r=r?-)%@h8h_Wa5k&ZTih?leNlmPqTxWC!w_{S!)Z7Y3a;)VPO{p;#lLso#rvD zu-+x9su=knKdFW7j|}gG=8QT>kFruT{LWVos&OX@W@u=5@YZ=bRS^IjUg#YtD#n%o z`nt4Inkv0$l|PyOa`=jtVSi~2Ss5{x_^#L~NYl66JyQUk`I~<(<@xP!rBKjiy~*Fk zXN(D9tzAB-`RfPPVueX58?MKD;jv#YtAh--Z$>0tW@9_I_BT6_6iUPmy?L_|^3|6M z?QT|Wy{A#f$^;6(`|@XIf~!Mrq@wGX)*_T!3*q?&9 zl&QuYOf$)!o5yeh>nkOf-*>ye*D@U(e*WCKuVq0(I5)2=3_rvm`A#8A0zbBn|J25* z`J+5rpbsGsh?yOsrsC?gYlDoBf;Dz**D5?|<~HlI$m4>YrNqQQO`kFEBvAd3*!`D2 z+pW>Q(faEJ4$SQq#%yhMw*{7EkERMBl(O$|sa`{|${Aw>f0bV_-AzfAztg?(=ql~Lc5_i&4^x)$WruEwmqi=8Ym#q_(NFOOs4=}*@@g9`Fg>_LH6cN(-HcE zD8v_mEc4U6JA1G-|D~W!Q?j$9PZquGFq*Ie6e5nVXBaE-9)dZqhdFLD6}gq(e#4~G z{46FXXZ^N&Zag40LPnOKf4!P-Wnx8CKF0$mc0-tn&Qa$QQ?0YT5tW~m4nBh6L}vk~ z$5AH z?HoH9Dp|fnekuPS=e?lB0k4+OwRxT0uXz5j4nlXcq_XFyL=`TB>h9Y!x5X;F78$=l zw6s%Q&AH)kx6B!`L`dbKc0}O4%9&MlpR~nD*sy~~M*poYt}mP~9Dz~CQX5R{t2drW zE6g`bo&XZNZ2N?Xa%r3E5VVbGbh~VEZhMbZnBKCJp1FHNh-mQ29Ioihj{Ri>CsA6F z*F)%NaFh3I(bcyPqzRhiEqjNTyyr)oyBG68D0IQmpJpBNb#n_rcld?&1HJPRWF>w< zK@eqNfHO6D;D&h7A2na%OH>-H2d7&w^n?s;fJYiEf$X32o&#Wejr++!>d~k>;H+8^ zBP>?alsK$&%pAV#8#AsNUc`=B=q)1HJ&$o zLho6Mv;z(&BZD_FzGE6>%K_b;7s_ZEoP-AsTH1}9em2+T#ts}lxrwGZe12T_rt#o3 zC@Lz^20t)RJJ+1W?-hZrCdyO*$x*K1hNkNBN3D&zp0E&aTesI?w3r-kaIT^p`2F$+ zDPm6Li*f&OZnOIY$C>)uUSMe@??ArRIeo{oCSj$pOr!MLTS%^f#}QpR?l;bfm*xQ( zNqodyqHbGdhz5~^Qezn)>12Xp<*r$W5Oy+VGKV}O`w*mH6SeOt%;!nWzHI7EAB;JS z?RXZjs@caZJ;OWvT;DUK8R+rRd|xfgE=A=e;8{g31w)wsv%&>(8Q=g1J119XDxiU~ za$tzfX?(>U7#w!N0sp3INV>S{L4LmFZa7cMC(%;tNX>^a1iJ|{ggggD;V+CylTL_C zmGkO4WOgb;{f^gi^ZGm4`wsge_#I00OA6A{wB?eoWkH{_q-;2kT3f0x6s$r}2>h7P zoyWv*i+(ryorFRhJc`kNS`Ixuj=~p8&5nzfW?YPR*``U@*|Kw^+Q0!MmDNw~GUcm=zX5Nx`jN){XM&DM zr$yp%AF|5 z13!t4BS&C9DsVus1B7*;X|ro($k(~i7eAD0WaO(%(>)um`CJw0&;0eYyS6alo@d@w zqUFKX7*J${+L)eopWQpJsKDPU{Os2K8pI1juFP#GyU)Hp>zz2NANneai`AUx*|thU zI|!ovu7|czF9t_rA3lXB9NCFXcrSE3omty%|3GV-Ok~K=G;7IAwE_9_MuW>{$=k;%b6$Ienglxa^zH(VQkT`NLR3(MseYa8nV8El-wt{O z6|GZt(FwGsh~15ZV8K0smW5a{s(`9stRUu{GrB7Ph)`Ci$loi#+i;%cA?v24K3nK^ zOU2khzRL7)i+65isPK9JQdHwKf300W0Vd&anf4pe^};u|9^eN sHji093^+axroJm@U9j+UdN2;Qaj{oD{t7-+)(V^HO)JAXebAj1hbRxYMrAhAu2q6MWQEKQNsY;bzLJ>haL4uUf zLhqpyN(g*;&;8Dy@82EYxo3vl_z1QAr?ltFp*0Y|qV&3SgQIS6(Cmk0= zG2Q+9cildaOBp_YHba9G(0QOo!$|)5NpZ~Ij}O?$xQeZYxPh(E-42gSh~uV5eJj^F z(sDt|8i4U0*@xqQ`|X=2xKO8hk1mua0YTKJ1i=R-niPTpHoiO0Ro)PO2rnQexT``& zKpsv@@PL?`fbSnof;ad7%Pv@!dTFa2oQJxI^B!oJSRWW0)zH+{j!yUzA1_8ALMtZ^ zGdG`m!kDEs^z>Q@vLw~jBje(#IoU6F9oog<=DZyg=8!#d+Td)!YiK+P3<#2wYiqa8 zzw;q!$w$`Cu5iJ_DZqHP2@R`o-O*;d-ud;<5c_vNqHClX12U80ll*Ba!H2IrpUkyf zVcHTBO&c5b^11OtLr-AK6;BG4G$D=~8I>ck$6$XF0uJrV&e>X|+4i<`-^a;f7HEN= zOs+wh_BS@}JF4Y%pJy2+co@`7AFd}#bo8$~m>5H$1RS%S<#J>dUK>o%&tkItwZp5D z1oyiYtQOabi~ltiXlqBOi+T_d&{TF5iSvsp<;X@AZ!(8yn86D?8D;w4 zbojfiP;$b@-#&hvSu4KC*y2kc=BMvM1qyb;g#dO2u3B2KJCS!)Vxm|5U2azKD;rkbK#Y%H zwAwbr*zW;pC?#1qE$7&}-$vYMG}!?vODSh2W2=3hvMf14f`m2yX>5D@{AotUos#0Q z<#M>pTxJG;9FT}oD(mUvw{{5V3U+R#DTrB5-YEpe?_jNMvAuV$#7R+E1$!H zIyBAab#NWS2U|@NPYu@OHNVKS3e5A2e>7u@D`Qi_PM=1W77tG-v>vM6+ihSsF@9Zs zhlE-shGx}EMqi&+8^W9jwThdNUZ9yac0;A+FbPvg|72t56MaX!VuxjR>d^P;E1iqr zcP13P`WSWwBK(SPIivSusAJ~X@_s6`7F`n2=(S`^%>7#XR+kK#GB1i2lILEqI*ZaC z3>9XQ;lg+S^=qr}39J2-tl0XHSyDtfcNuCjrD-5I&{I(@=g6JwSfsA#Uy+kbDz zzggez8A;jd>}LnlQh9-iM`mWoljW2c96!>UL01!FE+g{%-;SyE-vK9yJ>xXvCqnWh zrou`W_-Xj*Gi4Ad3W3W%pWjb;EILYx+lsSaKh5^q$ZRnbIB#zBe{7rhZ>zLU zadA=Ku*Ker;1e`$JZ5sHNnc}dt6Gk(DKhd==tIJY=z?DL@^WXHmTwZq##7pJAx`=| zk;PYMV&1C!{1lay)zUwgmOuK&7XJjmn_@MzrL7m>oN z`PHM8ffpem?4%J11*)oBTYIyOu)@a1{LNE|=7xu8q%@xczn2J!?|uH_>Uo1YVM%UL zan9f9d*`egCxPvVVKda95l>~?t^4@EqYa>n6Vw^4+O~soi&|B8nk$6SoNQ#xzGhhE z;TA3aM^lxFOo^X%9h!JQJLdr_^LkpZU#lf;ByGG;Qa~_1)`wM4ABZFWQHdGg)>D7N zK`W9$^#3Q5LlTZNFxhIXa^S)59Uj-4U3smzc+X6`v193*?A%m-x{B#`@WPpN7ERqL z;tS*|nRRBOIdr)~xbs3eBI)%jd>MHo z#GMg|Ex!7a-q6&P$$5m(s=<42F0b>ZE#Yuj{3kn2N|M0ix2<-*_oM+H`=+46!op*9 z1O03CU|GZjD|TyA$fTtU{121C`(U+d_fK?$uW-|z5{MVi?7UtS0Ko}8T6 zw>33Y7uz4CReib*yh2$txz%qDvZkLO-`;T20hG>8eaCR;0?pvim0q#~_nC`PPp~pS z|ItK#n@V4n`P^)t8D_pixkK1*Io&#Ve3G>@#BF~j_EZ!<_Flox-4@I*cGXyu%S4Da zPA>Hg3_MzHiYVye>1Q?HW}4rwVj(xf$p@XVuhUbBk_smy+{ZhJ{@5cdZgO&R7qxJB z8;U7VSX=td!^>-RwmeKPX!%Cu?e)d=bzfiK&`|lU0`}Jd3%2Mq=bNiP9Ofx3vKCQz;!_uCMPfhAU;Xc#V9H5nt zbn%eG8_)y-5l)emt1sk~=RLcvrF(ho4%EEJ3e^Cxo*ceZmfvr=?6!FK?w!6qlv_er z=5`N&3fzs1%MJ$)x+vdVa5{hg-fh99vsM>)ROqUFyj&A+3jZq%i^rJ#K?s`y%1Fu)R!(&%wEJ%PCPecYj|WJYQN( zh~CEUX4>O+W4NZ>k)-e7b9CtW5P0DGle++;G8d~da5utU! z7&E7kwOIf$Be4|HgL?j!4rI8%GiM+q?xfqbMnrE7?1`hIiUU_d+vOO@n+<$^e>MVw zS79VQ(WO9D0ipfsgub}p>kM%f;WnuX-L(MTE=4I{ZG#TnCBoD@ZaZ1$j^ys2Y>Z}#gGwJP z9Y2ZSE@yhU-@e+kq+ntLekH>FivB?a9{jr&;`9RKs`F$Sz~8x;mYB=HB}_dLkHEl`Z8Fnd%|W8v$jQmImwtNnoK4SC2VHGD)DeTs?~!$3M|;Y01AP4aPOI`^+ofY6-IO1= z7JyyA1SVU1^ERa$+*lV9+{>HWV#>3pl&E1$AJ#Yuwm$Hep0{Tu;^ON%yc`?&*iIZ2 z;o{4UvNn|a(6^F|HWrPP>&gyeI0XpxrI zurhd}3g2X${NUmwLRohsj+#Wo}@=uMGo$kCx0#}qfUK`&Nb z$}NS9-yW=+XkpSeNXzZW8vm?=6j-*iQexWLg0X4tpXAp(b#&suM!$y5FDc-uL-5XZ z`mPWOKQe@hv#>$9k(8E9M`+Z<;^NJk!EHkscWU0{*h%xEPcrzd!2r+{aZIXwJ=jf6 z$*iBP=(@o;jA|$wQ^IP43QJ0U!)@j`yFx2lTYu-lM}~f&Ji25H%v1CY&1rf5s9xX^ zhOIE{Q&*OP_ZFgYJ&-#}yU1>}8hbe$$G;|1hB$Vnr-%&Ms2;~Pky z=8*KM`7|@=L1;x~5X{o(JM96(G-!NLxuObI{PPx*Kl(J{)yW3DsSFZ|5)Rm#aS);1 zDvEt?(d^z_q}mtY5dE{76$OFRUt6^YzSSMOOa&22>U!Chd3K8^a@YmGjw;sko`$o9!gmx(vcwCsLI_&ohBWcV-E<~ zub0-84);@2=k4j{XV6@PefzfmxtRUUMHD^*tz@}Yi#%pGOrg;!PpCU4=kMm?04N*< z(tWGHxoU=lK;X|9*z)GYU25h3q;6AQTF3cu-r!homDa@2nrQXAT@AjfHjCS!k*}>&I{Yi1N zW@eM*)0B!k8jY!zH+}M?O^Y4rTw+VeUg3gmFiN^ zqM7-49ucOcr9;+{l_$z0V@3ZhDLp5^$1D1F44<3540w5XnA#;65J@k?nUlVg3Ynel zRCvw@O)n(eTy?klRw9n^1?eK+$)+IN=VJUc-mg2%6SU;N+NT2*o+ARMC-dqw96X)( zhy%F^%(E~#S~Ym7)U3Sfd)wpI%%Z;~_W7Oqe{un4VPY4I!P7M?od@4}Z~5pMdKx{E z4c|db&WK{N0Lcduz8ij^7h<|s+@myg0HV5F?;32Itgc%wW7)7S zJ3o-EK@`R(B^8~3Mb=Y$J3{?{B-ls1I$4j~*4o=GK@)@PZM#Z7hj#fl)8cihp{GT+ zP9~`1nHtpP!-%(PZ(hqWP?L4Ez5D%?E_!%L@GEw?eyr0Lu(oCoIbm!j-ON<>gwsK8 z7Iso=+B-JnOX?< z{IGW{{pS3$tk11A#_ez|V=Qzd*`Rcf)%+5^0L1NX^GdbDt}Zw8?gcO8vkQ+YXR>vL zx+k`&G4R>5;k+PtUgt&O3A&zMBnOWl+m=i`R835#+s>wJ_hF1up<6Gt(2V%xMk0@8 z2|BH%5LOTt@ETggSB`SqkQ=zwt6EXf%{)*Vvpcl>cAIR%x-n(~3I3bX_UyD8%X(4b z=h}Haxr?YgO?R0}%lMkz1vW*^aQ8?a3AtxZXIh1n9`Yn>EHy<}rMlWpL z;4mx|GvEtX>d8}yR0}}VF%h_oY%TTkM7H`BQXo#P8){6B--mnLz+OqXE335*-`1d+%%GVHvvCHdC zWllw+RHI2u>#2$L<=2gkwA6~l@`?&9ZWYqGbnUw*ynzZH*5Q3-&Gj(Y(XsCpeL%k7 z*$Tv_2~ee+lYf00iVO~r3_fq}3LQiUT(Ri)EOGF0<|_8NgU%PIFwO#B<&C@tn%lY6 zJaE5ESX&OPVeWi(b=~#7zdOOHHdn{Y-7M8hnR6Wj1u9$ostGq6=a`GJIBD=r9xHeg zN^QwEp+EG=*jFDh1dU*h);|UB^jWaB-|}M8?H{pry%Flp1U^LH{G#vVIeL4w9!3gD zP09;Bo1D7;!;fd+i0yQ->vq-VT>0?FcKTMHBUb*PGQHD~L9w3nj~lH!3VYLmY4BrG z#?F7y67HBGeyWMJX-n>zr0?>>7QX67s_+v{iT&`!QAt;sQA> zspRmyMT3x^U5pK(I1s({^;cFD))$HU{24Q215RSL7*cG-sCZyP(rhCFpnrcE9 z;2wi_%}5#CFE*Mx&%?B8w$3Iu5QsW~nzsE;EUS=!0QDlD2ChOa6x%&qy)Su^bTzf0 z+_J&Rnm!JZ^%*GmL6*b9cK3jawd-;h2rfg}9DIq{RvK1o3swdWyW^)L4OW>$QYog_ zTm4E8pX{SLu~GldATWArPjUEY+-YRRt)1WzkFePlX;xNcBlP8qpjSZZQny5ED{u76 zuE5?!HhthdE$_5qkLuRJqE%J0xapTuaqOh?D#q*+WfW=RiCaa zYzR0OVx2FC(*zBiiVFXaa*h9s&g}IvZSdMBP0#a;)H6)M&bkU^OE|Z8-Y*X^!@ zl~qrCE@%UuNkd2Hj#}}Pqi2yWYbmZQEF5B^w397V%{z^ii1@lD)t_;8;PE6sALiAa zW8^wDI4N6S_UhHEj{1O?UXlFCyy}CQiT9_c7HdJkK@elpOtY53evgSIN5X7l#Z2dV zPCeiZdtKAsgdiq7FBcFtYYfhv-p!Tse-~gJIe$EVQZqFv{jEa6VTjnQUs)C}ActeW}Zt!0wl->H?i(sH-HKYmnGJKEFDZPCoI-F*(e zL?n)wcqEvWo|ZL_L>d_x)n8SeVTiDy?D+X|uFr8HMEL~aT*j22BwG5lRwJzy-0uN` zQ^4h|JW|NMccU$gD?^;d@;Z1Zm1>0L!BWc`|x>@!V8AZeENFO0X9$2yrp5Ix{L(mJKuTG6uHHd7_rqHvj(WLRt-t{4vz|RdGpa zj(^|a@tuYCAeh3B0$WSnfWG~Og>lX?K0Q-?{U-l8UF01ez|%w_LM+24g*P0IoA8BC zb3kB#|KRMdNO%DYl+q3D=+=yZ!awi-S6#l99QxpVc*T0&T!cQx*z zr{`>YM}58T(a{NGw)vAMS!+T;s1i|$(2(kOdOTrbb~ALu7Fd8@JyA$JlijQ|SZBjs zF;;MMud}5n@idl{7%j?+lRFfbS^ADj?zr_^zT&r+P8LJ={-#(f;>^Dhv;YzxWXS^~ z4N2vJW~3T1Wxc%@vh}5&i*;7_%6Hz$&&qQpESh$f+IzN=WrsY<55hQH<{$wy`S*d> zzk)DUP_}v}ozwwSm`4%#OGxy(jPP0f-^jWeP0dbBpG%BMt5!H*BR!!;aWe-w;h+Xx z`5XE-s~Od?6)wKcKFOXs`}OXMMmZPEW$xm}I3{~9XQZ#xvGwV?wXQ+w2uEtJ>0w zt*vP)Emv0Gl~7qcoKbeC6&N4a`_4Z|dw)l)!#aO&M=b@~RNQ;&iA;1W$%he?TQhEIDZ%9hD)s9-L^&%U&mk(p?pX`#CyK-_bBX zbRem0tXk03pd0Y8>(JijZ}LbIQzLgW>u6~)1(7(0f9CM^0qZ z7(PO%*OXT$iB09<8*Zq4(G&xgOq9II$$3UbcxgBw=;L`9=5w${q&9|a2Ja!}s&_%# zcHp)0zp-^29?h;c4smO_e)Sn5-|{zasuDt;=@huXMRE7L@ym>i??0x}l$Fuy?d|RR zNTL(+qW${pXGO1GLB9Vrn;uql{D`7;FBEBd-d6HccT`^y9W4tOrMB4qRb_(O&YITg~Ibq+X3yUwvSqw<) zz&ktC;{ucYSO07ii-dLV;TP=&<_@Y z{!0C&pH|bM2PM|5k! z`EM{C$6-qL(4n{v7Cs|@$&9eQOdM-IJsn-W%NgTn*e}&S-{4WUl5h4U?M&MpsZI60 z4&avt8Jz06(>Et_Ykv^PiDbTmM!$u98L#`Lt-sB~;P+ewIxtsH8zHTbd&szn{;Q1V z3s>;AIG@20CeDrygizWgDi~`uQ6{21rq-r}>2av-CVj2p7rDS7rpXLb2@>HKUq4~T z8FX*>I=*g`_~zM-zvL_7QoG@#9oVzy|6D1_Z7#9NNp z@vxWp=>r%Ag4o(_t3zx}(CVYu*0TyhoS#pU^{13IRXP@i@I+B^kh$DyxI4tTOKVsH zPqMt8+ykMjxcbMJIuNj@Q6;vrvJb9IS!G`gWW>fI)ag`6O4n%V8RuLn2HG^b=Ug+v zkUVUM(&*?EetD}D^KP9=Gi_{4#r=Dxc-erHTTfrr#`@9=Nml%fWx~dF{)V4dyuVoz*HKwDGgxNXn4mio`Si$NA~W$!2E$&z;`5 zR!9=^)n(Zi)kXdmfBnsip^_rJ75ln^IUo`sI`2QGlB^YbbQG(!+ z%FMct$3ol5x{2`sU$UirtWjIxnwfo+GCJkAe&A5@Bj!MsoDts@vVNQ1#cS}T1=XeTS`kOWLsvF6ZoxN z44UA|1SVk{5V+CpK9)kSPHC>`fL!sdaivAqHXd;)V@C|Mmm2PvW#MKzmB(-vtVdVJ zlC-(BNj|*`b^dB9DvRA`dwPAM52!wuXr+4yGW~%Q5%k#hHC#Ikr+u#LW!@`CvR&E15o- z!cIxx$+rZmeEje1O;WX{HGpygQ*F)4%tog~|Aw$}hZRK%yQ*M6bsd<7!1k7S-o;K8obtrG!VbO1Vk;;=6vaDjOuEx6Z0J1k z%@-XekkPyp-)yisPOlF4)ggZDpt9}z+F}%4AG#48FHI2dp+}bM zblvL`341pZ{X|EFe-w?OzW%f!<)vMlwM>8OZJ)hd#LowN6uOu%g(Q&a8~6}79X^(o zB<>Pk=Zop@po5DO#A__Z(5wHGK_ey?jz|XiYL-y93z&?#LAzUT|8fb0CAW z?rfxDTIC{^)9q3t?52e2B`PtOfyY#NpAbar?pa%J!GxL&p(O0bb6dV~CAN#0@$l02eHG-ZEAmp97V>F4U2L3fMT6&NUsD|7c0Q?LH&RSDk`Z`v z>EO5|l=pSyu)Cj%EhO_q8>uPY%OT2#tKBA{IVkEk2$!bphKOL zW~!+U{Z}{3JqrMuoQqym)$h*~rI{$JS_pIX)fcl`80c!sV1(HzYaKTFQeafDEMwJ2 zN3W{&W&L?YbOkz`4^zwV@kJ)E) zZlSHSwuX=MTA~L^ftHafz4E+=o~e~WQq(m~(EWtnDyHip-;Fb?DYO<(2Fmj7###o| z`o?6gqfguA&82bE=YWJWX{n)WjE}%efvk~UiIWHlZR4f<=%>}qE0q(jI?DCGv(kq5 z+xB@=$*_-ZRdy$6Ox>*OS|Q&XwaHdmWjC>j|gaLpmBUDz^Z;Ad~y5sFV6$&lu1&GYp#zz-pax#z>L zFZRLy>8+cRbgN?7p5oqm8*4`!sO(XUOT`wgV<3nn(y+S(e@+w5I=m-Yo!3(J!0I#azFiLfh0 zzJ}&*O$|EeQYP8ZOWk~1T$M+yzP@^V&4O#yPqS;KiT5H3-ZV)M9TXm}^Zi+L!09Oc z9gEgXddzrXFB#y6Lj0Lhqr^3W(IjF&>ISw`{^(f=DAP$u_P& z>Z!W;Qp?`C|9{PPFpBrSl{Vocg^K=LUo%8s=6ITgTC_1&xO_Z3HF+9J_zV$Xch-j0rG zm!s=g&y?}(&1N$?>goo4eV-G62}1%ZhhE12I_w7kIM*;XROgxR1kbT=EFI1o>8YrE zn<<<-r5GXp#y8YH%wIR5c<0>l{rW8Ul{qssGAzBXSyOL9Jh_u_&Fx0P$rDwaIWhT@^{nO_BLEGBm ziannL8SL}3?FvCp44ZNN5;?99f1AJ?eJ(Qvrv@_~j*=vK2Cn>CKF5yQTHx8lsb91c zHq2kTb}}z%hzOqG$(`PI9NmPCcLuozI=qQaLn1&&xQ^;gHn}pzsOJ(^mXynhAKak~l$9x=?_XRpKT=n zBbRp^0ZYICCHUE$H9T)|;})s4Mp7~{&CsztO+s*w7PrVrOXJw0>hXsBy!uvVr->0? zF22pNFWW}ysgjoT9DK0`;l+*j$6X;p|F6v}y~@wH5-%%c3tM8rBrU2_YtqzTVMB^& zK9tnU2A=^(e=y!v*>;;}uD{mp@-!82CrEnzf^8$NruE5}|M-u8zC@sKTG^g}sfUYr z-l1Yd{V}r&f1$ME#_U=99WQMkbg0IQpRtL0bSWH;lR#!k3(606vGoBKBiSekPA7@G zB|UR2=f8M!e%CM%^i!G)GS-gS92^E@B#CE*BZ%w7Fpa{msvyx2i+^Nx20iwzZ-+BX zx!{$28kt$Ui;ZpNEa zU9a77uA6Hmc#v@E0}vy4O#z7VMa@k)L*>&m)%_)i9TFSA0)1}P_1q1> zfD{2oLXks$z27I$0lCR#ISuPyV`d{2=VVL^Y|X!Qph4QdPS^peEIOSpGR2y|s`X?S zFd#V|L-O;-wp&0$ifpz3li>PPN$WiF$AnSWL@bNi+c%L=X*<6TRsxPc?-dpQA&8{< z-%{d6a`DN_!z_h39zR!2&Vc?PcY?FW)TgC2&1AgCYfhg@@szi=O5!!ATztEX+4Fir z{~DhTE&Q2z0MB_zoAR4`9hvzZFMTz|i)izp$NwQ&J!QO|`c+sfYez|-%0>2V)B^ZK z%~YIP6-n@k-s_?0mjpR&DM*RE1`(x^QiQ1Y8(#Q)k*8-0&g80 zyIbZ{Qt(vA#nv}IA_C5@_4O64C5>Od1_3p`_YmLI6Aq2Pu_#pvh<-Zs^TfhzJF&OH zxMD_Arwg1=ix3xC5Gd-|6(soZQeH%#>0T5vUp6en`(j;r_w&OyVIyP}`gl#QAMw;{ z7jt<5qU43$_e=}hkGG!u@Kju?jj%xx%FN0J<4~xRY47K%Pq5~|d$N1#pIwnsS3%R2=&OjzC*MZOT#*;|T+K%#|YJTUl!s|Jb)R7tfomUp-8 zc>w2pKVgcYNdzP@T}}#f;{qJ8F9V$F8shdk2hShO#(CI{gn2syZ7?pti4_tNuc&f< z=7m}$T~b&!lj17})5x9Eg6ETuw+b3`m4Qr;)BF5*owu$DMEEde+GDo5HPI4^3=Y5C z2Je|oz{>g?U=0!rL~=K{ia9j~4KNv7Nc>A1^bG{CbgF947Ilp+5~F-MecF^PDx!p< zOYc(>9_YGtAf8G#B^J3)>J+{DVLV|!M1oYc7)5NcTF%aR*2FnZ3=(*$TQuK=2r!JS z<+EJsS3UzAO)p4h#B=lC%x2=K>*`O4)^Y%)0!;uM*g(PxrI{*p$HBHDRMpo2Us zX0*HGVatM^fz#+*-Pf=e7xr~gA0{w@x zJ41a}=62||>YVuypr4<%Wr&VLko%+(-PWU_k-<2CdhF*IXIJO6U;V_?*f8G%1VTJn zzyHC(JdgBi4Z&o2p{GMv%gN>7_2byOAK~A{n>>TZtn*tws`8Hpc!0YO8qs($IlH{D z&HhoK;`;Ab)-`G#+UnZyA!go*s!<*OIzkxG&)<)Wrz}2O#B9H+rmB4FJKuy@U7;Ob zv~OoWuHR^shDPu0$*hs9vkko{$N1k?+@~vpSAL)6Ey<~TK3M(2O!PZ9*cyPB3u+C2 zz2!cvtZl8MS>r$E)oE-VTgEr-*U%Uc&@`-YCYhR9zbSvE4vdP4kI$2Ek8Jlolbkeq zSb`a~6RTfu9G>uNXiiUmFbK<(1E{w0D%>-vfER2@uVZ>)BLVYE$VFsvpSRgr}MO|`H9LwSFSE<|%F+HRC zi7D+)YG2#IbfqJ1?k*|Cy1E)#8al%KPfr6oS}*A)>U}ECQzxf~HvH9%EO>MdJnqR7 zJFagWAZv||4Hr3)gkePm%JyunAYHmVc3hQe|Bbz$AL|-S7{dlOZETF7Nat+#gSgSs z8bI~+vv;^RnCg_%A0DLbxw^WhCKR4_55|S&+YkyVu@7c_Z78lUng}jHwakz6J2TV) z)mhE#UPg3CTo$(#74~lc`1ofT_yA0_taT^Tlj_P@MIBW-n8B7nSG}{w#_!IVVQR8; z28bP3mn+N3Mb_iqV#95r#F9ZjccWB8-+NIL>+w)0Ps;YR9Wa(DDrm4TBxN^x?=vG>{(-~7zvb}=*}vyI?t4$@j#j0Mh%~!rY-|#&prK`$vuJdz&65! zMA2k#T>;g$J<-mg=QdVe8eUkvl&VUm3PbK1S@E1+X-!xR5S}-3|p9 zHdxFKD@tFLV4$ze3_|l2TERurn~kpVOFr5IMy`oJr#pyUBV?H3dv0GY>YPdPJJaHW z-`QC|<*uezeyXjK=UL}*H9P>R+Ff$ix{ltIyPj6RW{DEl{H66sz={xhV{AO+BA=UF zHrBYwkL)Naa#~V%(FHjxb*Y)3iwQC+fZVK`7Fb=hO-!85UHABZy~r2hlsCEJerLC8 z-&S3H75(nWwudgIgYtb`n37q3^)H=+$WsloW_4~pv@wHXBCUhDt?B%17gK!O^ByER zVDpjo{?3jIr9^TzBjY;9xl_XE*vOy&3f6C(_)LXF+UJ-jCDpV_q2{lYwdZo_`MnX9 zs94TMiNCyM@k#OUtF~DYr9;vYHm$gW>ZM9paaM9~`iFa5UvR?Do=o4+3j49g6VY$U z%o}`k`BpJ3kio|}Qs*#h&Rxue04>FTPIb|}a(9T#m}!Ze%{mO2>m0(*M&TE|De!oG zvr36LD-WPa!N>H^jqkCJAQohCH+M@L#amgnREtY`e+n&&7wu@s|H{)g4`I)S|G~{}1ySoB0#@CULAsHJOOm$J5$!f5%V&guikZ7)=%Fck!K9TWM zkt%gVKaW`W{31vIW-_z+QR$(KNuOySdq^5Ryre4|s5Z5+ znV3aLRNEf!Gh3Kv?eyzpaIF5Q<7{kfmLhqfv(KEbC@Cnoz#9E)>AuPjOMYRbxW`IL zq5G&9fnY0t)m}p^)1Vjw+wmoAcxGdxk11U%m;k4Q0~R`tpgr2Pz-{0YP#qLIqx4 zrZ)P>44hgl^?X905mB{IaU=|5nG)_z({t%BeK))^_#=1Pci#R3aK~5 zW)(-trGw#XRjl&W&->PQT(OYX=)`MB-QW!wBBr@xUfonFM^~+S20}cZLbalCO1d+z zFI>t`!$4V!KbMk|{I)+a;*s|vVy`{qyIZl5(5hDPn%9#;&kahAujH}hi08WM+OsfF z6oaAI7FP!;K4jBGshn>ZDM{11_A%4_Ii-VaGWE!vgU&&FBg+9PD&MoJT? zKDhe-ZZ?Fk-XXaA@V|Vw;eW%1#{YT5f7{;C|8e#Ixca|#H}e0CsQ(#J|Cf%a{Rp!H z`~d<~|DG4{-=L!Xzu*xow?qU4x3_MpMmPBL6iEJc3=x6r8<(^nQ6E0wEd&~`bXBWg H*oOZ<)GzGi literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-d1-unsupported-browser.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-d1-unsupported-browser.png new file mode 100644 index 0000000000000000000000000000000000000000..5b1b7caf5acf2996f1d76957d67eb80b16529e81 GIT binary patch literal 17917 zcmeIaXH-*Pw>}!hh6pGsNLK;rAiaZtB1Nhc>4HF{cLD^6g2GQ}(n2o+p%)3A&=jcw zBB2u?bfkrz5CY`pz2}~B|KpDP<&1Ogf7}o6w>@^&-dStSxz}9Je4e?!80fvEy~%PD z007WxX+Ads04_BF08|feT&CQazr3&v0Ne&>Jy$gj%-Wv29&*>8vv*%7Nl$(woDQ$? zth4gQlG;7vd-t#2&-#aE7A)%Z{U56P-rw_OpWWlUb5ADx!#3^b%j|V^elq=sI#r)8 zyN6w!NkpSETL)GXXRSs02^Y%;@k1MaEPxLKL}mb>`i3^Z;C3<~?;+o%XQ~F5KZNI9 z0bEt32HXs10NlI61K|6gYw&|vD$mX@f7FX5@eDJh}o1by!#1I-?8?B=q{Z)HA zAnFnzDq?(->E464wZ!h;7nN3RkGLd|UQxED_ru{D+Q}ZnCrxQ5Q)woyN3nnp8Bea( zx1On`Po*d2{^6TPp%S4`XVVZ9sWFX>m{|7*Osuv3VCW@)veOoxJ$89Hzo6h&fwsve z3$=E1uI-lTP(wl@AjD*|fqiGD?x~Q8fZ>GZxB|bJvT$tjm4(rUVxZO=lhqt4qx@U+ zG{XG#tbm0sZJq5!J3EtRVC)sg_Yt=@mZbrmQTG||M}3Yo{#Vmux*L1zuO0%F_3X>O z@`4VB*#3(~$zKb*nIC+Gs8GFY@~8ewn{_yseBCKz{`xcPgk~gMaolt931&;>YRXi( zQ5@7eP9p&i;lu{*0)LJ&U1h27 z21Oh!y`w>G7>j#Zr9_Tj@%o*Vk3OR{vVeyop6=m%52@USOAjMrEEWqKCHZyml!n0? zDLrFX46rd5(uKB@iS5>3V=We=Rrz-kjg~powJ(><){d(8SY_;bR>oG**xnl00yFAm zvAzX-Fk`qkNf3~9$q~J_I-;x7=x9j`*b|UK&eS`*pT&I_z2=Cx(%a%E-*ky@qKN3P zSrMCe)NQkyX21))e91t|;PO9zOp_M=>8ilfU@2@50a(J-<_oh^4_xM zxMO5*ocmoSE_m@czIE2_r0@ECj$)UrWI=BmWal453|HKC`UMlcw2N8%d}z^-`Rwsj z(ycKlW93Z0vS;!)2R8GN(6oB0HNSbk?>wcxz4=E&T*2;Pc!U$(`lVaF+|IHK@Nz8h+~yLi)*!R&JEjxeq;$K zyy_TI2U~ZhhAs(_`=;>J$h%z8MsT{fAqnPKNLxsMhq$*7s#YGPfICjjN#4lM&o5KN zH|COoovCSe(le9VP-jI$mdr0dISFHgtR=C}h7{1@a1{T~i!bgmx`*dyR1x{_hIcch zam7zeASXq%uB(slR?hhG@#7BGt80;13k!?jpFC!CZFUX;_&8?U&`r5SYyfH*nC1KN zl^eE&IHMYhR9Qg_ddfDhr|V|a^9cx@owQAMrKcRuKYm89~V43E)$nrH-9-MrG3w#()T%n5KtRF=qG z9OR&zIuc>vJj^WS_ly{2TmqltafPfU7_Mcm94W8cf)1@yvq4{9Q7+~Vw$Y;v1Z6~S z^2r6!7pH?#T=0|E|2qO6JJ;6_K3t`^VKNXAOiX0T4SFVx2^pzo_AXW=T(eu;GOZ5W z8V62RSgnPkAj*fkot=4Ay;-s+8JVk_pS%k?h-d1es9(sL%tjaRNZ$ACIAv4DrnmFE zcWpvNTwg{K*5_LtGs`_6Oy~QP`br{om{6Rg*)Ge*!tGj(W|YJ`-gcG66lPn9fEk9< zziw>GqRvI|`qQ9-cJZ~5{9oa$Y{aR%*-Q=x9%yxD$kW5yq-GoV5JClop> zE9N}f<1a2|Kc*hNMwZ(~D|ba5c}~_KiBwT(pl^*AV!edGqxm~b1UZ|p0$jVH`F4I4 zgnF~J?L(2ovWM0pLO#UMnWgFD~y#H7RYaPbALe;$8arG(@JP(LwJo67CbBKFS{`2TSXeGa> zFm=v^SuSrthm(!LXU8%0NeoyoLmRaX{_Yy4rSfKWlh{EfGw;*<-HryDF&j z4e+#~XZt~&BS?LJ14uw&Qn+5InCIOChFy4Tpd?O%DN75h+vy^v)aWch=?s%xQ4P(~p`7nNNLxZRXpqIHYygCIOw#eX>o~O-)5* zL1xm|LofCbkil%8t0Ga&jtw}i*O*z9* z+yO_@75%wZ!#H)6vQO_j0@Sf;lurS(QWf>mbH2`ICVZ&er=)K_fq3z$M!d~#ZqwN| zgxk|N9V)Yv#R)u;U$#2*;Kj?%VX?O8(LJ%3dgB=E+TS222`C<8TGD6ZqO zE9Z?4BPs`C-x?8%bg2kVj&tmuLmq&Zy#CKw`zE?CX1CZ!+LuSvuN@s! znAxm88M4%hY68X;R|$V7u3aBpY0ANgD3I}o@duG&A%h98^IN^&dTBoYlu)BuMCDdh zk!;`E?LzDFz*je3n6ZFGuiQ_b?YbX?Up}^V5&ja#!NGuDIJMj*`kn4l0ll9gi(o* z_sZp*sLH#oH_B&gk-rBD@fMZedUJS9uH=k_;zXNr#mldq zymsi1+?7)c7Z)E4vfpjc7&h%%4CcIYidnUvzjvE?^bx;`NGmilMpWPCr0~fQRMea= zRvg`*)Z$p+=TQ>>HCE7dIO(gApI-$Vv29k)aXC1s0BJE;?gYVUfSQdqUl{ohX<|j( zUl|3wpUIECw|dL$=`$9r><+9k5s$|g zPc$4IA3LYU%vu-DH1NO-?cwVlU;1?$Juyq6J1Opa-%FnU7F==Mp^NHz71U)C9w$OB zNt-(c++muOl?csTcNv|#uEQ@1baG4mG8iMtANEAb*<(2MrspdwuF~iSCg3MMAEzKY zBQ@UWClbCh>u@ry8M~wYdU5KyNOc_B2<-fP?K_heYiRsDF!OMzj9^)CHK`^g07o2m`+(S2ts>KW_;}aAKDWU!&e9f0I1J zU%yFnFhukXJ2RE9N3|`8r$aLfy|rh=+N$S}*Em15wpybBkClEzx|(q=e<>aaG)Ih; zVi2sHtKCZV1i4kt`;3f_UT}B$=S-*X#K{MboOLM5^drE|uN)`N_<3nY06;%G z;OjWf+k3wcJ+*t|xJzH@tOc_?8!T%qY;2W)u>w~@_50Dc2wNPtZ*%WnF^AXH%%1n9 z=|ozsPYWE5#YJDEO@hAe;$^3HPuB7t_SL8LyY}hL&0&U5yZ@OB7#L2YsnhymbRnt` za`kynfM-pGiPc3$-6olxgUGGfQM+C?eN%$iHVONsaGdnT(2&+PXx%pm>o#3yw+esZ zB3M7}lCq4CZNy@$)YmI5jckI~9@V$4rANJ-lid7X4Lle01UYL4`ww!hg~&w`w)E~rtGM?hnkHZ@^x(l$Agms*Iw%4529zfHzgobv$h`mT`WO!%m(iq?IU{&#(SeZDMtJ-3yxx#gL<{>I=Nc^PD@n{yONs0U9k zL_7p*$xCu~N6yP?&n!5=GC?vo&H9itjxqw-C|Np%0+A>!Sh*k)o}6!!e+dVlt~V5;)@pOP}; zMwqMPpYbk7XGWC{&h~RP>2cDzpcUetQ*oHQ^VFWg%Hv%n=kvhT9eyJu6t_K)gOC){ zxjwv?KyTwanvDy~xi=k4s`fyCszDd?E}krn5|CZJir%Pknc0hO`on{ORS^nm$z}4! zliS(7rpM7b9w*$oE4U!mFd{o_Gq<}ZG`+o&v2 z(0r*A*s8oC=zJdXFBno~;dD~g!cKwFwXT?(H@ih4rgajipv@7m65>Ni(?qPoF4 zMs{!YkDaNnLYBL4uIqsJ?J9^I^Y!2wRAX4^>$$36+fgjTL|*tP7e|x$UX2|or#8;jOb>N38=4MO{-0C7f`RffFAD$Ls{I?$~O|Eq-)-K-e zS9362KjM7fSw6!YeK@k-lPQX$812FMcZ;4!l^UC!rSnqSnu*z?E1Jx2OIyZvwEya& zFqkKp^Ru#m;mT2Sqqnx%GZUm6DS}XuM3%3>v~+bd3yXu}WO_wggK`_CU_vu#aU}If zX+$ye`8>8-H!GO3c~@4RTC!uib1(w-NbJyWD}>l0zS1qr7RJ0ZcijvyDBAI|j-fgU zwwFr2O>eB_?fn^;J`Q|2_|LZZYayMna>A5*g3IJzJNlxe$LZax zZu=@{ig2bA5w3n=DZ4u^7H_&t2vQPYrLFyyaH&mn^OsI_BD(y_?1XS;kzUwtF{c%k zT@dFT_^-Lu(C3=Pqd^3&cfnZ!_%+=vEckGh0?~IuBPamW%*dyYYc|t^JqN*Xe#tyQ#b)tJzeq6bW-QgPRPAvW1g#KKcbcT34?IRbm2? zNvN!g?%un-U~~W7+SB6=6)#}G1O@2pKajBq@DB|9okTz19^B0!ikd?PCa2J5Sxjr@ z9cZ*Ie=Np;HZu|$+)u~)ui?9@pPHsnOwWbOkvl(BJ=YI9OaXedkqi%Y-Z3!B#D+ZO z3MIKuTEi(3DAEdCTl^`ro~!HZf~;)YEXdDKM-%;i9==1XemW<1b^xu!^aHy}JW^sK z&8Pc5*ho507`X(Ewx9gXuZ=qo9*An3KTMNriK2{C5Mw?6@{?jcDEHXalumIyusKul zw;LB8{u5&)qf_c~vO^z28ZS=8D|wIYA!8#jQGFhguJQuU+iPbK}` zEn=L8Nw5=<8jA;GEVz{=R(f#MTYds#|!RA zsL(d}f@eM#k-E<($R<0Eq|D4xkF@r;^n)0^&7h)>=eLth{3n{JE-ud3tChhWKl0u# zsz9o&8m8D{P3Vq&oXLf%vI9j!v5Xx?$zrNB_jVh1%;G2 zzOEYqBrlwD;3yD~ADpL4Do|`Rm3{2sh(IEw%AxwizwSYOGP#g@9Cvs)19w@o(%Xff zNZS}4#5dP|jgB7NZ=u(7ZTg&fRj*?m693x3~baY&|^T*^9KsI!JdFu7+TU^&xwr3AXcj1`v?>aQI5oYpibk5vjR__et-Eik2w?(0b{hg&L zu~!7#=@#!KSW2hTnmW*leGa7<#^mR-uQ)<3G4klvA#dochOl^4-_b1=C;!}22agCj zmLlUoQFfp6XjN5e;T_bCw&pE)K3N9R=tlw#RIM*6iXD{0I635{{nPQ3nN zrNHbtl)rNGm87~Q)+o15n3>An%2e6x>)=6Hs6p@xRvvDx#r>~#Tn^yD{Zm2K|L9mE zy-~>Wb1fV4hYxoOI0lfI`!*s90>;xgak`NIyL;W_;iQB})WSe*??vc{Asq zz+@XrANBfthdT-#DM@~Le+g{=s#atiGue(D9l8a)xgWKt zY>1nFiAy`|@LXo)Q9js~-Eh#<$4FnmiW$kI#>I=6Sjc`qt0#gS{!!hu+UoRN=Jhpe zrP+`Z9nUcIz`3&YtjaHbCgO=Tx{)PuOg$sNaM~tVnm1(ICEN<()cwgUSHiQ*P4bn$ zL+80}t~{}jqZo3!vx~0TJ4+%Ic}zkx5X-hd)p8n>arwi6-EF4z|UpyBKrsqRv0`6dZ{& z{8gy#c)EE}oWn`BGc^2oL_!)41^?i}aF)h>+UE-$pyWNFH=69cRH$C&U(aO`{CJF( zpl8{mr9?R3Y%t*+s$E=6Qpid~3H5ht*_QM7M;4iV8vf5(1!cy13hbe7_fdeZgim=D z*IugxRTnm`4AB?s=HSb_eS_Axk8dcftO zt{eSaP}@hYG24zId`LRO@m-$(7ozGjg$w8r(Q){vi^62(v&f43xW0QvPvH{omrg*v zDe3>uSGwV2Gbar&3YE~oS{ci=a}5xfa@(Zkt$HZ!fQ-|1+8skT3ggffoUCc}Knlea z0srmMOsHJ|4_BhoNPx{^(lCO7(9B66>Lf zk@56j#ol=@kfGPCu;qJ4bUck&&hd1W7vCi=jooK%X53h|`7tuHfAP;usWJ)mNxLMgR_q)*he4iBf6F09CmdhtT|KInTF7+2fKRh!^~3M)m@V})L(?%!vaP& zs^7d0YbYA5ale>0N_IbK;1b}|vBQ2s2I!Nx6*SZNRAKI#P?U}sPG=M%K2;l-Uv3TO8!<_ic^vl0CryMPw#W> z)2glFXp6V$-k__N*1|t_y0-TeebbH(SLo9gk38R=M9MQK<4-(@OnUUE0YBVHid3C< zdK-?b^U}KxL{DvQrbW`1fK|=Wc=VEpjMPb8v8`&$rG*=-sg0FCd6m8*ur}y5`(>~4 zcdF(YW1}2%$|q5-w1DGhdjxfufjPxQ-fzZXdC71G=cLi_Fvu9d!1KyE-oW`#IjYgh z92jmi!=sa#qosZM_?w`hWfu4WMsQ2RK${a}SDjkoO?3<%`$>Ze9CB7rq>>to%@g`d z4%(B6>QH6sw7YjU)ER#9I;QJ8-4(|XZ^E^~&=1NUc{ztj49i~c-50&{?ql+{^x9x6 znU}_b7(C<_;5f&9D>v>h9e!$9W9Q&FPY4(0+IePn3*bfbX3xjF5feMJI!YPI?5NSV zZkcT4)EPJjt;idz?!*u;kHrRp@~$;F%l)4FjEq@WEW3kh6D=KPE&&kLm|~ z$98=fbF@yzv6xHr?lnhe%*Td$>;u3LPICRIHpa$&jFFR;;*f=0Lg_UFmy9(n1lSXV zvoG0EKE07VAzhrKPWn5*Gak20h=}f{^Vm&FYl`E#4xp|9jDKZ__vXwZOYSSPCbzA4 z*)6<{h3vpg1TR9D_M>iLy?Qo^`|*Jyyg6Q3hM~d7iZ7tefs34x^oY#?K?kmmOtEoU z$+euLeO^n2LLnX=fdbPLdy13h*jp(=l#qK! zzTsiWes4FMVdeS3)}#!g7XFe>@5O)S0^rgxH)>kWCgu8MpfyPJMV8o{$-QGj^+F#L1A|bb_Lt*!@UB7Q^RH@xsiOaU{hFwc zC@$G*HfdOI26E;ej>f>q=SqZBPKTX-tuH-~lDfJ`N%N=6jpp#FT&Gad$vgUMSFQwl zw4LPBI25_1)bVD8PHe!H$Y<90Q4|3SDh6^9N@M2(yQIVq+rD^eO4(jqD3B*bJ5HK( z)(ggB&6^fL&16f@b^+GI&U27fin;bbNh&#fq~EPw-o5Nxpl_AuTd3)Gwj6Wt7rv-> zt2v-~@A6kx;31PW(|$&%ZByGAZaT*q8xny2(hK%zaXzU(P($hv3Aw)QCudy;m3P+( zDrWf3ua1YSN`DHq(8{brr04i~TgX}6LT>YJyVAw!RwT=DWO51HqZ*ANF22wasBr1p zZzWKCt54s<@^Q}t-dtWukC4&5tw`Fr*M7mc^j`3hY-v+d;Do*kavgXQJ2?y5%_fQN zz?gE}$IH4!eIekrX{Ip~vIH6HJldW_UCNc2;@BMM!A{sbWU~1q`t+#*j%zEWUO$9z zeDFQs_G2!tdC2b2-8dC#K|vCRS%T|Vmnh=saVaUYvB7f^|D~7nmG-MQHTEVE*B&{Q zm(SU_%nMw9Fx|S_PR3qD3kwJ&cECq9;=_DM_`25Cvp9B)%F&;;O?= zFUVRl50a}4JlpTZ&LP-C^>QUvCp_j_S|#kVuFP^m&Uh3S$2fRH@f)O_nFcXVg^lz0 z*V3K|Up~_?Wg_$%ew_WPl-??@R?JQNBg@TQ=$<*@b5C*|>vKp+R!Kh=tJ#mQU2~iI zQ8Q}DjtxG%-yAVJR$-o0oE!Wc-?=H}+UPzPcKFX0Qq-W~Ipb9GsNvxSk$|i&0^vfE zxsO*PTz0Q?bs>$u;civ^OC?YSQo1#;9Ji&sT1#J8H&vsKxG!iH8+7658|LGaU)SDt zjt5IX((XUF?KSPlMCpFbZY!yM(PJ!?zVi1^o>c3U^k#LJkb+$B5?V(jv6u1Qy$s!t z2ZRYr55=9j*Jf1~pI0TLMTTA0N&FNa4p-L22uV%i$ctUbQ4yf;9gRB{z zDk=)`@=hZ06b@=(;m^A516J0%q4;TF$ms?XoK;_L^|_W zGoyZs19J3{)#HJ*PqJWmZYZw1!QE1a-!e|7ptrS^{0nwM?0cuLpQ8wabhM-5gS6@1 z`ec2Zbp1PS)>kRoE{U7_!rAw!mAP;ad~9MiOXw`1cqkT&RS_0GU;3!-Kz>Cbv~!Aa z#0*~o&U$sX!rT|vgsfK@?Krk!J| z<3Fr0ZOSZ+Vj7D3u}xDC4vX&U$(mkh%jp;yJ!wA;4$cg)RtS(cRrZfWWE)-tY@nTg z>sDRvV4Go5aK_;1TMwuby95q>)vMG;R8Y zbHH>u2ZX${skOE3!S^29Ub!f;kxA+m+6BAKHfdetc=tG0$FXxA)At`ydv>gwpWHzu z<}ThEvHhd|(%|${x&$OSEeUx)qFPH+^TGLS(o6Pn)itcxCKR$xc4`RFqJkNUbPxWX zO-WsMtl7cTi>WlKS2Ycmzz38!(39Md!+}aef#L%h#qDqH?2qod5D~6s)Al^KVHrYq z?)4e#a-ht8L$cjV;cR+&zQ>XEJ}o5_~1GRvq`rmWN6I4fBJ)S{eE%ObfqNKNBg zsl+QYDSKtDYv>*$n$uCEOAq97?_NuyNC+tTQ&bddREnFsm)9Q>=c|iDRM6^rDsK4o zF3-SCt>p^2N8?@+g2;dh#FtJ*%}+aF-w9Z%c%_RN0bg8smFm2E>pDq7Krb+t8!rchfMj2BH*Cd?Isf-(nxrRL^hm0^X=9Ty@H zSm|)Zt$|?29dWw}clsGyNHfFBvRtP*{L!d>(i6E2L*jXS$I9kFO8H!4fD|I8FwU9H zG@7xwhtrGD(vXI{UGPwZ(rt%oAq*`B~q4h7d~d4 zLrg8MlOk&zvWJ87tDJ(?^F9w>X};$+If&v2v;RF*a0|o)HB`~`MjHvLFf2#&48ZdS zb;UMmYb9Pj;iiT4HBg@3=ue5ekqapwifBt}>9ubSV|o--Oj~4OzORF+ zl+(|0LePa*1RAwf;)w|oNGXadi^in1Onu>H4e8eA@7ApGIOyHgT7GL_ zu&_Pt3p|&6Iq^7M&{}=>Rp3r)b4RYfkLYI+{`VP5)e|7mwbuCdG4B@sSM zyAsAHN2?Hc0dwT~YvrjLF63yJM`AlyDNqxP)31fpV0M&(v$!S5)=hmSoP{5aGWcUN zUVcIIrcp-Ve2-J~e7LKMJs}Yugqy|kJXv|C^7a{om}Ld(52oxL&D6KhanT+h$ws0TKAyG^xO3I%>g8>+15(c zBQt9P0efiK=n)h~_JxfShZ^TY4>rWs-odW$TKA*lM{3@I&39dwvEo+!O9F=t&T|7+ zMboRos^$U5S+y}NwI>}guH7bmI{HLM^=r0ISjn@0QyplOKo1BrmPSoUPwtdnMY7x5 zvzR*8c@|S{?RMCewjm+^2qQ{EW)^mTLJ}Ttphb&zqByZt6O{ zbux28oml+n(W8j!CS!c@=we{dwyP1d%x08@prM7!lAz-`iC|l^xqytIfTPt^#5APa zf$BKtitA`mzu3qKdPmUA6XD-yJjp3qgDmSYR1ul`+n3OK@8=4!r7C^8}5oqYCB?XAfL%@GO zplUl4{!;cr{oMfkTHVyPF6u@GxPt;N{1gXf*qrH}SsQ0|fk|!#6Z2EufX&C@a8n2^ z)xYj`RIC=LI`a?Uk#i358*YHkux)Q^*yN-UoC2ZRNr?G|`?=6Mc`V?=d2(G#XTy?2 zLBolM!D%&l_ztL!E5G>?U{&_9r9wW2=$Yj_#)zfWzVqX)8wDcX0`L_#kt#18+KRa( z=wFAqABqll-T-euilw1h(6o==U8}o>F@i|^pFgU8XXu>gzRk@TGqbv->a1(|xAENz z=YnMlM7DAM^(Bm1r-GTxT#uZLFuF3#Y8`^+in|s|!KrCnk~JqMB&zjTF&At08`^gi z-QTKq@L&57T#-jkUhure5~V(OLt977=1)Z?&FL#iz?ja}^;XWKu46{_`gS;sk z+f^)b752lOIF!+zCNFECuNjMJ38ld1N9XAE?-ZEt+=NV_jD48(sJuWml&Gth$C0Rv zYehon(_~Kfpgg+%qI|RF~=a zgH!z23T%W5SKggoj*|wk-PzusyE&Zhps&cYf((l)j|W5APcr39m}EWclp1^~b1%$; zxXc)HjI?nDlw`6cR7NAPn|0T&4}#nA9pGi_IXdkw6Ixp~Mc+5hOZ=aea_Wo7Kubcb zl>7HfdAJ|F{=&}w?OZLP6v*!qR2MB!cBtwMcPE;N@C=>a1GSCcnMOAdfvy8=6v)k3 zJO@|+TXlR-n|&<;>u)=Qn_^7ESdK^qk=62Q;pml)MR2n$)i3R&V5s!2rQfFS1g(Vd z)$}mp2J|w4N2Tkyv91$fV42nM7U)$W!QFE#BRg^D@n{Xc2&ieOA@T?kUsZ4GC;R@T zu|bAVck{(o5whEhkS)h$DaZ0#?wx$FjX;;mZ-9ZT_5tDE>ziontEpouF6)G*awJ9n zyE<(|e!6lQ5S3Sz!*K;rANgMry-P79cX#uc3f{TZS*-QyKh)j~z@VV3svj?11DyQG zdq%cK9F+T@Sf~fKv#c^Z#sL7%wOvn4dXi-dctX>_LwlNqlhqmUfj&AudL|8CFF>eB z$n#?vzF$5e<1zLJ0LbOORPWYp(PacvnA9||$kMPljT_r>rj9M3HSNL&{AVrzuqXB< zwxH2%E+;2}$Ij%w)Y0qPjMT^-jQBPTPv>q~1OuidPtinw-T4od{E_$dt5>g_V3zE; zQblYt6Vg`&^yJHp3+rUFO?1Yn?uX*;X|1WKR!0PJm zY_qHS0Auvx#rjP?Ubnl2Ay%b5u9QzpV<){@K7LPBsZ$r1DZ%>a62PV(*W+*ZxF zZTnTP!rJY_4qt*T(&mnH+T?&wpS^~W3Dj1CM_YoQ;NWO3g!`gXAjD7j`l6U<0FdQ_ zD&1Wz@YR2wL2hOS=4;xm3MPO0z^<}g)LY+6)Zj2Ob${-a9#&Qy~T3aOZX`QO>r1(=oE&}Ix7bavwN^Q zoK?3CF*9O_8b+b2cMPp5YmmO7pyEfAYjRQ`vI2E4q0@3-%LyCqdDHTIc{H| zJY9NVE?ahW8O?{SYndb?c(b{A=+a4*bq6ZM-|}6LAG7ev2n+Rz_8}$8KG(KbMrEyD zaD=mOI5X<_dswO^t;v}yNLO02v!NfBI!8+($>rNQJ`OjjX`@}U{ZzzeHbBtqjR3_=BK~80<0!ZIc;o_Dmg9 zPU?Kbw>9UN&AmRGl9b&jAuc48|5Qc)CVS03HD&MVa|@f008MJ^@(T5Nq8 zK1z4C1QmM9%nqs5#4=D+&8OF|F|O<+hQ}|;Z6i=^(O=_equrXEceK+tL><#VaYG=J z^tpweSOM4M&r?exYxpZNH&XJaXYT8?dhRHPN3i~;NGgS4cywjv1ZD>&UaR^( z&`K@w)%xy0>^It}A4P>Fe3FXdrRF-#Qs9@T4RbsLC236`^71-AJTtFLoO*PxsT=0&)>%iM5kZ4&a zP0)8#>*D%)^B_8!W>tAQ-MNMx@usy9(M=H{z8@*dZuOc@XWqaxq}8(a^dNmx$M4-| z^w2dIt#)$gO4HENT`k(eAlY4N% zAoEHvh_vz1>G8ROY~b*mZSX&FUy}4!TTGDZYAoE1Ztt!+KJR)TwK!YnkrFb$(#3fD z!5b^%d-vGbIPNqDtQrwx`gw&F6(0kE4Zx3y4--aeSSKqatF<-L>q&VFx3#|3BYn9O zxr2W_F7TqcJ}A*OSKr&s_l9erOvYrm#_N+|b~)=<^{J-l!Y#=bs<{ z^vzQ6eRN39YZ>=%+k$+3sg3z{Kl@)5cky3hLO&ezj}qqZe$icZU7ogF_~By#4P|z; z2DH|Lcy6D zS3X=qqRnHo-Sgnj4^3y0Z?OKOxFbLQA#srTGUyuq{4_#jy+H9tHYoyaix z-0u63OSv1>fsYS&Dn;(%D6c5slp3VDcbKHah506(4AmMO$9k$>70|5F1~5C`2rqtSI^vEAKQ52&ec zdfdJ{$=9TsMqvPUd2_S2*`3kX8MxRl>1Jp>aVm080u{_cFwo=0JG3y2>VRuHrV$E- zHgP@*eWDdsb(>$T!_Mir_RV?4jsobgA{6*R*JEHVeGv!WqxbfYT*2&gr6Uj!V7ps`yuW4fFBaEC!v z^{04tN{aWhnx>8!>VZ%;G$WNw^SpIAR77a<$!Z1{k7{Y7_U^}fhBHlwZtGmpXda}s zcf+(BwXP*JIeDe2ydUA?v+}sHS4J<+J-NyMP{UUher03!ee#r$RJRGTR%g1$!?xaU zWM1xlLRevI_Vi)`E$q95g6qrs^LyYqRVa&*X}IqkH%v||g!(-Qp2j7_GNJUM^?;^k zyX~2dV>zEE(A3m^bPe4l1TK1Lt2Xes^13wnA^(sTqH^}pQ@+6UxWTeex3>GE6j_V9 z8rRq8hCX|ki(CD)_Uwy5{+cS=w!zl;Z6g#zh2vE_xrftiMqmBvr)FSI-%`>W2rPnc z{NFrJ9^;j+u<>Zhl!7%+%SuXF9A69hJXSxn_OxHr?AdAaKnl8#CtElYvAyvvzC^(i z_JD!;?pAQjC_laTw(`2!MUuy*4U-$U=%A#u_(bWUzQ`)&EBuUFg2lP8Z7QCf#KnXW zxRt!!Z!Qx_JlYv^J ziljK_t~Qy%8QXT=;-E}A^t4F|PcJXGjPvw_ugMHE?09r`Q7o3Bunt$Mn}Hh6P6RiV zW2)F$S?;9oDtoF16m7eMKF{6%d|(81|IxL$Ys>g~trGoe(ba_)>r=(>+OaPT4%Qlohl1CO_epTekRJ{43aD}e>cW`{Tk3x@MrYJ z0)Lg8?sVE%>-cF3qL9kM=e5hUp;#<8vM{1=QAn@{HCuPn~!T< zkE>HDgcSv@Y07x3jWSZ=H9D!b8>yv;lZ^QqCsmATvQ(U?c=I@0lZ1V}B;>!`(xWw0 zs9-5SVO@OJSTD|zi15j%_W;(PBKNiEI3mjnJ6@mqTGVa4Z%j>QOm)K;O&~>e%NhPw zDg-3-x?@@m4~%E-I+SPBz2~AyOl|izdcBc~ocG=Xj!pD=u08L4!u;$UI@?-5CU$rj zK&h4Wj}mb;6WRCqC0!;WVZGZ_yh&@UvZ0k~+O(;w>qCYjrCKc`}~id5>xaBcja|qiULoWw)BFvgbrF3Dpjn(ApAt6`4_Q}_d^#9 z{%TNDXN1E7LD`bu@}$&E)*1dkYJjtPsQ@>%|Mye~|8FQl{`X(}7fXx(KP(9Uw=Mpg zwqS1ja0UQe4gc490sn)A`v11ef734iw#EPW;SvA#$$$Ig|9YOo|DXI}iA*`Wg-qUl k5Mn{Oxc0Brmx4y^qyC#y$%0A0HG9fp#T5? literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-d2-passkey-cancelled.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-d2-passkey-cancelled.png new file mode 100644 index 0000000000000000000000000000000000000000..2786c9a9758731e91d7e12b48388e52d571a9b78 GIT binary patch literal 17227 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-d3-backup-not-found.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-d3-backup-not-found.png new file mode 100644 index 0000000000000000000000000000000000000000..30a45e02147886b20255772f0b39f244bac36be9 GIT binary patch literal 16817 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-d4-provider-auth-failed.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-d4-provider-auth-failed.png new file mode 100644 index 0000000000000000000000000000000000000000..8daab96fc8534d903b043fc8dae99ad78fe966ff GIT binary patch literal 18384 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-d5-backup-failed-existing-user.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-d5-backup-failed-existing-user.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b682dca28dda8a925d86882224d7e603a68fbd GIT binary patch literal 18629 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-d5-backup-failed-new-user.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-d5-backup-failed-new-user.png new file mode 100644 index 0000000000000000000000000000000000000000..6fc5018b79ec4e53de9e9b638c1b6dc82ea6fba9 GIT binary patch literal 15236 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

    $TE=9^&Aqf7fyB2i)kHnJPjxV#s1O@kX=IQHu7 z{lSy*$;rgKYYYr)>B+-QB+S-Sd2v~hv@oBfWGVJ1M+BTSv7J^ONuFiJH3ellaX>o7 zD+8WtbdOJryY%;#7nL8u&pvruMpM_OF49f0FFazh z%#!UMYXZ7uD!lX1*GtFWAv`)tcV~3s>^F9YtFZqs#(6$G|KLh;Mq1WLO_Rd@_TG3_ zW_=A87bna!8pBn~7_j44qVO{cJIQ1$C++SnU)!9PRffo`mAkh6v1>wq>lq{~yfPj& z`n$e9IIUQR(JL_avYGa`tSHafEvB7AOv$#lWJQCvH@C=_G>1)Z)qsS%4 zD=ozNjog``RO&jZ#=>^2pF?!4UKe@`B2aO5;>o=|)Hkazr`&Lp@<7doAG2Kx^r=cc6Z-&3l~Ee?_>&DD1sCq&FYu`tpzXQ#ypgq1u((XZSnwJ^2? zGBanVpmXa2Yx4Nvps~;5MV@c{?CqcW1zS}|&Ky7{rzR%cPHt%3Syelbk=niY&2gdS z#-U8FkwLi%t{4pIv=`d&k^0@$WoqUIH~dp%Exw`=>mD~zf+TB5v|Iw!T)j=Lt)nsu z@*azVu`rgP&E3a~i;FF1w_@7R#XYFPU@Hw_Qf)`Tj$JNiqP-`E?FTj(;HJ)m? z5sMVFrl*5z1QF8XQ~BOIyyj0teJ_045H52Cj$T#jjI^`@rjG;#qQk?>kqazljDXPI zSXZi?xx}gqvMlnYpP#jB6zpZ?>f3kz?t5vhnM%AOK|A5#gRQL*M`ZDVxPW({+H((~X>m0^opc*T=g}+o_mpl1qzQA& zWQ|@aFkKKFsc49d?&8CD!Eu~06_7I(>9j6^#DtX=tGMoQ{mUv(ylj|4mgi(y9M06- zyw}=z?azu<%q-W3i0Cg>20u8O%4-MZa=U|rL;1M9lQqNo7{r4CcPzq_e1&x+$3C1In&yw!mmyKZ2!^3U6hoSyM0I2(TtA=hX(Kdz40PBNgKhH z`+D_V;Pdqx1c6^0i9n6k<@X#^zkl=e*vabuks(AAWixZ0zhjK->qMRG`OQHRvvm{J z`RcmUewXkIMny-|xuphk3qaLB=>}NGabQ;}{-!nh^(I~kjg-k+YZM6+Uhnws+-b7+rRWyL0Pe-g*u znRC6@zw>CCEN?L9l8M8Po?{MhCo}umaehoJgO9%;tV;E+Yh9F?p(cFfpeO7u*}Tw! z@R@=TE=JE8#2QYrXR?JQnOUJscS;hfG@f#H*4UL@;dE#6eAe5bFV_D{PY=JWm6g>G z6N@>s*9u3LD8FgSP*2?G? z7M66`)7rdpy5SL*>O0&$E;Wq*?V`;%=3yMr-sc&{R8B)*N^+!!`3;Evu2{V)=W`^S zCMYbjJJV8F`nXTn#F{4#(zC7l=4D>wnmxwM;0`ULspX3Y(;brwkITx-MdYM&%6&dr zmAWv61&2;T!}i2qTek$p!I&DfVTe1UPwpi1QdiEsJv zuJ8M;2<;Y3ouf$h7Aj`ck;FCF8%R_n)Pz3l;7nchl4D{w5*KC6P7z`dF;TnU z9s>Z}y!X#P0^tsPrYK7tFPC6n{&4}Gn#ynOOr|gze%Xa}OFD``doW0_6dT(Oi*NosggX&bvbd7)CV5S%$UtzBk-i6MK1&~k3q z1b%wGx~Ba+%0iLQqh67h_oKK{p$dwX61;DojIhW3<=Xmjpi*33^ypASzja2q%>DWE z%I-0sq)SZbH6fH#KI9TMC?AUbhEE%X{`~W!!1txL&Zdw= zeCvqCAA1VTHTDBYC9Jzg+(YBUM!<=&GQR59P=sHzl%9@3#qE>BLBG*Wr6o6%MkS2DGCTv)5PPy@(;PW^|G>8dOKcnT|BoK+L&;6N0hYYl#{Q0 zmuXO{WzyG^c__Q=Lf5f#exZ2w!>M8*G6yNpZ~buW z+eDk!ij_PP)D!$G|1LX8m*Ld^m-Hp`6r|`})yA!A1q*G2MSXHvUVn0d_dtAHluJ_I z8C{Z#ZrKq+woKgU>daNNO7xc~V4FjTlX2x=?kcJl0#?|WsS@u#Ovm!!!pWfIZkgxX zNuQX)EPxM!RjT5lC{W&cR%GqU19!l+NBzeCTZ?&WpDe1U{eR#_|0#$1?|c6_-~8`c z{r9Z?8w3B1f&a$9e`DakG4Owm0U|p9Kq6_=c?^*MrKS9*K)wusgo&+&(6h^uR{+}2 M44#&&z54jS0O=%)ZU6uP literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/dark/pl-d6-ambiguous-backup.png b/tests/widgets/passkey-login-widget/test-results/dark/pl-d6-ambiguous-backup.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa244824d1b169106fbd368a51944e82a797cba GIT binary patch literal 23006 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 lk7pnhZM}JM@1Mz`d=pY^Zoz; literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-a1-entry.png b/tests/widgets/passkey-login-widget/test-results/light/pl-a1-entry.png new file mode 100644 index 0000000000000000000000000000000000000000..1d87a15880c8906b2ee196daf62c4e19d74c9c1a GIT binary patch literal 19827 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-a3-new-account-warning.png b/tests/widgets/passkey-login-widget/test-results/light/pl-a3-new-account-warning.png new file mode 100644 index 0000000000000000000000000000000000000000..ae5e650992190b48b5960d3cbe7da62d30f2edac GIT binary patch literal 32696 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-a4-create-passkey.png b/tests/widgets/passkey-login-widget/test-results/light/pl-a4-create-passkey.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b41121a1a32a2858308635084542c52f009b78 GIT binary patch literal 28123 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

    0L2YJw++9y0BPz@xqxqKVIU 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 NLLMwv@!Z(|e*rrZ$Eg4S literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-b1-backup-prompt.png b/tests/widgets/passkey-login-widget/test-results/light/pl-b1-backup-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..acffc14e8193dd3c65466589b0414876976fcd77 GIT binary patch literal 30020 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 WIonw&U)|tF?x`qh0?Xf8hW`&*sHFw~ literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-b2-backup-provider.png b/tests/widgets/passkey-login-widget/test-results/light/pl-b2-backup-provider.png new file mode 100644 index 0000000000000000000000000000000000000000..4c52e5b8b779f89b019da57dd1e014330dc52026 GIT binary patch literal 26348 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 T>suqy0?<^|RjF2b5&8cB(aNEA literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-b3-backup-progress.png b/tests/widgets/passkey-login-widget/test-results/light/pl-b3-backup-progress.png new file mode 100644 index 0000000000000000000000000000000000000000..de24843163a06503e62c3127bffacedbaf0092e3 GIT binary patch literal 27804 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-b4-backup-success.png b/tests/widgets/passkey-login-widget/test-results/light/pl-b4-backup-success.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c90ee1ecf1cc764190ab88b4025d418ead3a90 GIT binary patch literal 19291 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 Mr>mdKI;Vst0Mv0?5&!@I literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-c1-restore-provider.png b/tests/widgets/passkey-login-widget/test-results/light/pl-c1-restore-provider.png new file mode 100644 index 0000000000000000000000000000000000000000..d95cef8950c16b48951974cc19acb6351ee6b53c GIT binary patch literal 17299 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 VQ(f|cP)4Y<)bwB0Jb(4^{{U76iG2V7 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-c2-restore-progress.png b/tests/widgets/passkey-login-widget/test-results/light/pl-c2-restore-progress.png new file mode 100644 index 0000000000000000000000000000000000000000..c958029ad8f83c133ea66704ae1d850608f37372 GIT binary patch literal 24766 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-c3-restore-success.png b/tests/widgets/passkey-login-widget/test-results/light/pl-c3-restore-success.png new file mode 100644 index 0000000000000000000000000000000000000000..acb8a5c7f0d3c350cb8df77127bbcdd217481e1c GIT binary patch literal 17188 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 Lc?o;|F7$r@x_Ds} literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-d1-unsupported-browser.png b/tests/widgets/passkey-login-widget/test-results/light/pl-d1-unsupported-browser.png new file mode 100644 index 0000000000000000000000000000000000000000..03c77bb48e5d71202650e92c79d0cf99fa3f9d9d GIT binary patch literal 18236 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 ZlHL}cK$mCOYNCZiLq$iq;mzBR{|oM*#vuRz literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-d2-passkey-cancelled.png b/tests/widgets/passkey-login-widget/test-results/light/pl-d2-passkey-cancelled.png new file mode 100644 index 0000000000000000000000000000000000000000..fa0b69be7ec37b4a7473b0c10f5c077db5a904db GIT binary patch literal 17449 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-d3-backup-not-found-single-provider.png b/tests/widgets/passkey-login-widget/test-results/light/pl-d3-backup-not-found-single-provider.png new file mode 100644 index 0000000000000000000000000000000000000000..78cc754244625589a2f91db7c16da9e98e1f124f GIT binary patch literal 13841 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 VK9E}(yp{kIWL4jly)_N`KLDyM&&U7( literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-d4-provider-auth-failed.png b/tests/widgets/passkey-login-widget/test-results/light/pl-d4-provider-auth-failed.png new file mode 100644 index 0000000000000000000000000000000000000000..a3368cf0ebd7e42f734fb778af7702d29a0b5cc0 GIT binary patch literal 18696 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-d5-backup-failed-existing-user.png b/tests/widgets/passkey-login-widget/test-results/light/pl-d5-backup-failed-existing-user.png new file mode 100644 index 0000000000000000000000000000000000000000..1b5192064fd096f9b40b7b88e10a094738cdbf73 GIT binary patch literal 18802 zcmeHvXH-*d*Jdn;NP9$zbQO>e0@9nPbm>jH0s*Ok&^wBVQl*5@K_K)Z1PDDU(n6D7 z0)!Tj5<+hwFnMRzH-Bci@3>PcyOyJi=ohW~hSIX-9a^ z+OG;v9%Dd0Fj9*`IcYqnfCwf&M!b6mnkT3u(y5zVB}W-9o?-$h_+SCdT`JnV9mD^CT&``Cy¬-bPMNoSC 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 E1JygQ#Q*>R literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-d5-backup-failed-new-user.png b/tests/widgets/passkey-login-widget/test-results/light/pl-d5-backup-failed-new-user.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a4b9863d415165229d1c91a675985248592ac0 GIT binary patch literal 15450 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-d6-ambiguous-backup.png b/tests/widgets/passkey-login-widget/test-results/light/pl-d6-ambiguous-backup.png new file mode 100644 index 0000000000000000000000000000000000000000..e4983ac93049487197419e26ae7ed521f97d0067 GIT binary patch literal 23208 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 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/light/pl-d6-decrypt-failed.png b/tests/widgets/passkey-login-widget/test-results/light/pl-d6-decrypt-failed.png new file mode 100644 index 0000000000000000000000000000000000000000..874d53eedade92070cd13fc7f1193fe20b0af43b GIT binary patch literal 17841 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 E0OeFO00000 literal 0 HcmV?d00001 diff --git a/tests/widgets/passkey-login-widget/test-results/version-a1-desktop-light.png b/tests/widgets/passkey-login-widget/test-results/version-a1-desktop-light.png new file mode 100644 index 0000000000000000000000000000000000000000..8195c35b31f66a975cafacd62f5c568ebb312ab3 GIT binary patch literal 23466 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 q> { + for (const themeName of ['dark', 'light']) { + for (const viewport of [ + { name: 'desktop', width: 1280, height: 900 }, + { name: 'mobile', width: 430, height: 932 }, + ]) { + await captureVersionScreenshot(page, [`Passkey Login v${version}`], { + url: `/iframe.html?id=qa-passkeyloginwidget-screen-fixtures--a-1-entry&viewMode=story&args=themeMode:${themeName}`, + path: `tests/widgets/passkey-login-widget/test-results/version-a1-${viewport.name}-${themeName}.png`, + width: viewport.width, + height: viewport.height, + }) + } + } +}) diff --git a/tests/widgets/passkey-login-widget/webauthnFixture.ts b/tests/widgets/passkey-login-widget/webauthnFixture.ts new file mode 100644 index 00000000..1caa05b8 --- /dev/null +++ b/tests/widgets/passkey-login-widget/webauthnFixture.ts @@ -0,0 +1,91 @@ +import type { CDPSession, Page } from '@playwright/test' + +/** Handle on a Chromium virtual authenticator that stores passkeys and answers the PRF extension. */ +export interface VirtualAuthenticator { + cdpSession: CDPSession + authenticatorId: string + /** Passkeys currently stored on the authenticator. */ + countCredentials(): Promise +} + +/** + * Attaches a virtual platform authenticator (resident keys, user verification, PRF / hmac-secret) + * through the Chrome DevTools Protocol. The widget's real WebAuthn calls run against it unchanged, + * so the same passkey derives the same PRF output across widget restarts. + */ +export async function addVirtualAuthenticator(page: Page): Promise { + const cdpSession = await page.context().newCDPSession(page) + await cdpSession.send('WebAuthn.enable') + const { authenticatorId } = await cdpSession.send('WebAuthn.addVirtualAuthenticator', { + options: { + protocol: 'ctap2', + ctap2Version: 'ctap2_1', + transport: 'internal', + hasResidentKey: true, + hasUserVerification: true, + isUserVerified: true, + automaticPresenceSimulation: true, + hasPrf: true, + }, + }) + return { + cdpSession, + authenticatorId, + async countCredentials() { + const { credentials } = await cdpSession.send('WebAuthn.getCredentials', { authenticatorId }) + return credentials.length + }, + } +} + +/** Ways the browser's WebAuthn can misbehave, for the error screens. */ +export type WebAuthnFailureMode = + /** The user dismisses the passkey dialog (`navigator.credentials.*` rejects with NotAllowedError). */ + | 'user-cancelled' + /** The browser has no WebAuthn at all (`PublicKeyCredential` is undefined). */ + | 'no-webauthn' + /** The authenticator answers without PRF results. */ + | 'no-prf' + +/** Replaces WebAuthn before the page loads, so the widget meets the chosen failure. */ +export async function stubWebAuthnFailure(page: Page, failureMode: WebAuthnFailureMode): Promise { + await page.addInitScript((mode) => { + if (mode === 'no-webauthn') { + Object.defineProperty(window, 'PublicKeyCredential', { value: undefined, configurable: true }) + return + } + const rejectAsCancelled = () => Promise.reject(new DOMException('The operation was cancelled.', 'NotAllowedError')) + if (mode === 'user-cancelled') { + navigator.credentials.create = rejectAsCancelled + navigator.credentials.get = rejectAsCancelled + return + } + // no-prf: a credential whose extension results carry no PRF output + const credentialWithoutPrf = { + id: 'stub', + type: 'public-key', + rawId: new Uint8Array([1, 2, 3, 4]).buffer, + getClientExtensionResults: () => ({}), + } + navigator.credentials.create = () => Promise.resolve(credentialWithoutPrf as unknown as Credential) + navigator.credentials.get = () => Promise.resolve(credentialWithoutPrf as unknown as Credential) + }, failureMode) +} + +/** + * Makes passkey creation report only `prf: { enabled: true }` without PRF results, like authenticators + * that evaluate PRF at assertion time only. The widget must then run a follow-up `get()`. + * Call after `addVirtualAuthenticator` so the wrapped `create` still reaches the virtual authenticator. + */ +export async function stubPrfEnabledOnlyAtRegistration(page: Page): Promise { + await page.addInitScript(() => { + const createWithAuthenticator = navigator.credentials.create.bind(navigator.credentials) + navigator.credentials.create = async (options) => { + const credential = (await createWithAuthenticator(options)) as PublicKeyCredential + Object.defineProperty(credential, 'getClientExtensionResults', { + value: () => ({ prf: { enabled: true } }), + }) + return credential + } + }) +}