@splitin/verification-react 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +32 -0
  3. package/README.md +14 -0
  4. package/dist/appeal.cjs +63 -0
  5. package/dist/appeal.cjs.map +1 -0
  6. package/dist/appeal.d.cts +21 -0
  7. package/dist/appeal.d.ts +21 -0
  8. package/dist/appeal.d.ts.map +1 -0
  9. package/dist/appeal.js +61 -0
  10. package/dist/appeal.js.map +1 -0
  11. package/dist/index.cjs +126 -0
  12. package/dist/index.cjs.map +1 -0
  13. package/dist/index.d.cts +49 -0
  14. package/dist/index.d.ts +49 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +118 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/launcher.cjs +501 -0
  19. package/dist/launcher.cjs.map +1 -0
  20. package/dist/launcher.d.cts +39 -0
  21. package/dist/launcher.d.ts +39 -0
  22. package/dist/launcher.d.ts.map +1 -0
  23. package/dist/launcher.js +499 -0
  24. package/dist/launcher.js.map +1 -0
  25. package/dist/operations.cjs +225 -0
  26. package/dist/operations.cjs.map +1 -0
  27. package/dist/operations.d.cts +37 -0
  28. package/dist/operations.d.ts +37 -0
  29. package/dist/operations.d.ts.map +1 -0
  30. package/dist/operations.js +223 -0
  31. package/dist/operations.js.map +1 -0
  32. package/dist/retry.cjs +16 -0
  33. package/dist/retry.cjs.map +1 -0
  34. package/dist/retry.d.cts +9 -0
  35. package/dist/retry.d.ts +9 -0
  36. package/dist/retry.d.ts.map +1 -0
  37. package/dist/retry.js +14 -0
  38. package/dist/retry.js.map +1 -0
  39. package/dist/status.cjs +27 -0
  40. package/dist/status.cjs.map +1 -0
  41. package/dist/status.d.cts +8 -0
  42. package/dist/status.d.ts +8 -0
  43. package/dist/status.d.ts.map +1 -0
  44. package/dist/status.js +25 -0
  45. package/dist/status.js.map +1 -0
  46. package/dist/support.cjs +12 -0
  47. package/dist/support.cjs.map +1 -0
  48. package/dist/support.d.cts +8 -0
  49. package/dist/support.d.ts +8 -0
  50. package/dist/support.d.ts.map +1 -0
  51. package/dist/support.js +10 -0
  52. package/dist/support.js.map +1 -0
  53. package/package.json +92 -0
  54. package/src/styles.css +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugins/stripe.tsx","../src/plugins/persona.tsx","../src/plugins/plaid.tsx","../src/appeal/AppealForm.tsx","../src/copy.ts","../src/hooks/runtime.ts","../src/support/SupportLink.tsx","../src/launcher/VerificationLauncher.tsx"],"names":["useState","useCallback","jsx","useEffect","jsxs","error","StripeIdentityLauncher","PersonaEmbeddedLauncher","PlaidLegacyLauncher","useRef"],"mappings":"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","file":"launcher.js","sourcesContent":["import { useCallback, useState } from 'react';\n\nexport interface ProviderLauncherProps {\n launchSecret: string;\n publishableKey?: string;\n environmentId?: string;\n inquiryId?: string;\n onCallback: () => void;\n onError: (message: string) => void;\n onOpened?: () => void;\n onPause?: () => void;\n}\n\nexport default function StripeIdentityLauncher({\n launchSecret,\n publishableKey,\n onCallback,\n onError,\n onOpened,\n}: ProviderLauncherProps) {\n const [opening, setOpening] = useState(false);\n\n const open = useCallback(async () => {\n if (opening) return;\n const key = publishableKey ?? '';\n if (!key.startsWith('pk_')) {\n onError('Secure identity verification is not configured on this device. Use the hosted fallback or contact support.');\n return;\n }\n setOpening(true);\n onOpened?.();\n try {\n const { loadStripe } = await import('@stripe/stripe-js');\n const stripe = await loadStripe(key);\n if (!stripe) throw new Error('stripe_unavailable');\n const result = await stripe.verifyIdentity(launchSecret);\n if (result.error) {\n onError(result.error.message || 'Identity verification could not continue. Check camera permissions or use the hosted fallback.');\n return;\n }\n onCallback();\n } catch {\n onError('Identity verification could not open. Check your connection, camera permission, or use the hosted fallback.');\n } finally {\n setOpening(false);\n }\n }, [launchSecret, onCallback, onError, onOpened, opening, publishableKey]);\n\n return (\n <button type=\"button\" className=\"siv-button\" data-variant=\"primary\" data-testid=\"stripe-identity-launcher\" disabled={opening} onClick={() => void open()}>\n {opening ? 'Opening secure verification…' : 'Verify identity securely'}\n </button>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport type { ProviderLauncherProps } from './stripe.tsx';\n\nexport default function PersonaEmbeddedLauncher({\n inquiryId,\n environmentId,\n launchSecret,\n onCallback,\n onError,\n onOpened,\n onPause,\n}: ProviderLauncherProps) {\n const mountRef = useRef<HTMLDivElement>(null);\n const clientRef = useRef<{ open(): void; destroy(): void } | null>(null);\n const generationRef = useRef(0);\n const [ready, setReady] = useState(false);\n const [opening, setOpening] = useState(false);\n\n const prepare = useCallback(async () => {\n if (clientRef.current || !mountRef.current || !inquiryId) return;\n const generation = ++generationRef.current;\n setOpening(true);\n try {\n const { Client } = await import('persona');\n if (generation !== generationRef.current || !mountRef.current) return;\n const client = new Client({\n inquiryId,\n environmentId,\n ...(launchSecret ? { sessionToken: launchSecret } : {}),\n parent: mountRef.current,\n frameWidth: '100%',\n frameHeight: '100%',\n onReady: () => {\n if (generation !== generationRef.current) return;\n onOpened?.();\n setReady(true);\n setOpening(false);\n client.open();\n },\n onComplete: () => onCallback(),\n onCancel: () => onPause?.(),\n onError: () => {\n setOpening(false);\n onError('Secure verification could not open in this browser. Use the hosted or continuation option below.');\n },\n });\n clientRef.current = client;\n } catch {\n setOpening(false);\n onError('Secure verification could not open in this browser. Use the hosted or continuation option below.');\n }\n }, [environmentId, inquiryId, launchSecret, onCallback, onError, onOpened, onPause]);\n\n useEffect(() => {\n void prepare();\n return () => {\n generationRef.current += 1;\n clientRef.current?.destroy();\n clientRef.current = null;\n setReady(false);\n };\n }, [prepare]);\n\n return (\n <section aria-label=\"Identity verification\" data-testid=\"verification-persona-embedded\">\n <div ref={mountRef} className=\"siv-record\" style={{ minHeight: 'min(560px, 62dvh)', position: 'relative' }}>\n {opening ? <p className=\"siv-copy\" role=\"status\">Preparing secure verification…</p> : null}\n </div>\n {ready ? (\n <button type=\"button\" className=\"siv-button\" onClick={() => { onOpened?.(); clientRef.current?.open(); }}>\n Reopen secure verification\n </button>\n ) : null}\n <p className=\"siv-disclosure\">Verification technology provided by Persona.</p>\n </section>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nimport type { ProviderLauncherProps } from './stripe.tsx';\n\ntype PlaidHook = (config: {\n token: string;\n onSuccess: () => void;\n onExit: (error: { display_message?: string | null } | null) => void;\n}) => { open: () => void; ready: boolean; error: Error | null };\n\nexport default function PlaidLegacyLauncher(props: ProviderLauncherProps) {\n const [usePlaidLink, setUsePlaidLink] = useState<PlaidHook | null>(null);\n const onError = props.onError;\n\n useEffect(() => {\n let cancelled = false;\n void import('react-plaid-link').then((mod) => {\n if (!cancelled) setUsePlaidLink(() => mod.usePlaidLink as PlaidHook);\n }).catch(() => {\n onError('Verification could not open in this browser.');\n });\n return () => { cancelled = true; };\n }, [onError]);\n\n if (!usePlaidLink) {\n return (\n <button type=\"button\" className=\"siv-button\" data-variant=\"primary\" disabled>\n Preparing secure verification…\n </button>\n );\n }\n return <PlaidReady usePlaidLink={usePlaidLink} {...props} />;\n}\n\nfunction PlaidReady({\n usePlaidLink,\n launchSecret,\n onCallback,\n onError,\n onOpened,\n onPause,\n}: ProviderLauncherProps & { usePlaidLink: PlaidHook }) {\n const onSuccess = useCallback(() => onCallback(), [onCallback]);\n const onExit = useCallback((error: { display_message?: string | null } | null) => {\n if (error) onError(error.display_message || 'Verification closed before it could finish.');\n else onPause?.();\n }, [onError, onPause]);\n const { open, ready, error } = usePlaidLink({ token: launchSecret, onSuccess, onExit });\n\n useEffect(() => {\n if (error) onError('Verification could not open in this browser.');\n }, [error, onError]);\n\n return (\n <button type=\"button\" className=\"siv-button\" data-variant=\"primary\" disabled={!ready} onClick={() => { onOpened?.(); open(); }}>\n {ready ? 'Open secure verification' : 'Preparing secure verification…'}\n </button>\n );\n}\n","import { useState } from 'react';\n\nexport interface AppealFormProps {\n attemptId?: string;\n onSubmit?: (input: {\n attemptId?: string;\n reasonCode: 'non_biometric_alternative' | 'decision_appeal' | 'accessibility_support';\n nonBiometricPathRequested: boolean;\n }) => Promise<{ appealId: string; status: string }>;\n onSubmitted?: (result: { appealId: string; status: string }) => void;\n onCancel?: () => void;\n}\n\nexport function AppealForm({ attemptId, onSubmit, onSubmitted, onCancel }: AppealFormProps) {\n const [reasonCode, setReasonCode] = useState<'non_biometric_alternative' | 'decision_appeal' | 'accessibility_support'>('non_biometric_alternative');\n const [busy, setBusy] = useState(false);\n const [result, setResult] = useState<{ appealId: string; status: string } | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n return (\n <form\n className=\"siv siv-dialog\"\n aria-labelledby=\"siv-appeal-title\"\n onSubmit={(event) => {\n event.preventDefault();\n if (!onSubmit) {\n setError('Appeal submission is not configured.');\n return;\n }\n setBusy(true);\n void onSubmit({\n attemptId,\n reasonCode,\n nonBiometricPathRequested: reasonCode === 'non_biometric_alternative',\n }).then((next) => {\n setResult(next);\n onSubmitted?.(next);\n }).catch((cause) => {\n setError(cause instanceof Error ? cause.message : 'Verification review could not be requested.');\n }).finally(() => setBusy(false));\n }}\n >\n <h2 className=\"siv-title\" id=\"siv-appeal-title\">Request a verification review</h2>\n <p className=\"siv-copy\">Support sees only a safe review reference. Identity documents remain with the verification provider.</p>\n <label className=\"siv-field\">\n <span>What do you need?</span>\n <select className=\"siv-select\" value={reasonCode} onChange={(event) => setReasonCode(event.target.value as typeof reasonCode)}>\n <option value=\"non_biometric_alternative\">Cannot use a selfie</option>\n <option value=\"decision_appeal\">Appeal a decision</option>\n <option value=\"accessibility_support\">Accessibility support</option>\n </select>\n </label>\n {result ? <p role=\"status\">Your review is open. Reference {result.appealId.slice(0, 8)}.</p> : null}\n {error ? <p role=\"alert\">{error}</p> : null}\n <div className=\"siv-actions\">\n <button type=\"button\" className=\"siv-button\" onClick={onCancel}>Close</button>\n <button type=\"submit\" className=\"siv-button\" data-variant=\"primary\" disabled={busy || !onSubmit}>Submit review request</button>\n </div>\n </form>\n );\n}\n\nexport default AppealForm;\n","import type { VerificationPackageCode } from '@splitin/verification-adapter-sdk';\n\nexport function verificationCopy(packageCode: VerificationPackageCode | string): {\n title: string;\n description: string;\n reviewTitle: string;\n} {\n switch (packageCode) {\n case 'business_kyb':\n return {\n title: 'Secure business verification',\n description: 'The legal business is verified separately from your identity. You can pause and resume without starting over.',\n reviewTitle: 'Business review is in progress',\n };\n case 'ownership_review':\n return {\n title: 'Ownership and authority review',\n description: 'We are reviewing authority for this organization. Your action stays saved.',\n reviewTitle: 'Ownership review is in progress',\n };\n case 'associated_person_idv':\n return {\n title: 'Associated person verification',\n description: 'This identity check supports a separate business relationship review.',\n reviewTitle: 'Relationship review is in progress',\n };\n default:\n return {\n title: 'Secure identity verification',\n description: 'You can pause and resume without starting over. Your action stays saved.',\n reviewTitle: 'Identity review is in progress',\n };\n }\n}\n\nexport const CAMERA_HELP = [\n 'Allow camera access in browser settings, close other camera apps, then retry.',\n 'Use an up-to-date Safari, Chrome, Firefox, or Edge browser. If an in-app browser blocks the camera, open the continuation link in your main browser.',\n];\n","import { useCallback, useEffect, useState } from 'react';\nimport { isBrowserOnline, subscribeOnlineStatus } from '@splitin/verification-web';\n\nexport function useOnlineStatus(): boolean {\n const [online, setOnline] = useState(isBrowserOnline);\n useEffect(() => subscribeOnlineStatus(setOnline), []);\n return online;\n}\n\nexport function useFocusRecovery(active: boolean): void {\n useEffect(() => {\n if (!active || typeof document === 'undefined') return;\n const previous = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n return () => { previous?.focus(); };\n }, [active]);\n}\n\nexport function useBusy<T extends string>(): [T | null, (key: T, task: () => Promise<void>) => Promise<void>] {\n const [busy, setBusy] = useState<T | null>(null);\n const run = useCallback(async (key: T, task: () => Promise<void>) => {\n if (busy) return;\n setBusy(key);\n try { await task(); } finally { setBusy(null); }\n }, [busy]);\n return [busy, run];\n}\n","export function SupportLink({ href = '/support/verification', children = 'Contact support' }: {\n href?: string;\n children?: string;\n}) {\n return (\n <a className=\"siv-link\" href={href} rel=\"noopener noreferrer\">\n {children}\n </a>\n );\n}\n\nexport default SupportLink;\n","import { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState, type ComponentType } from 'react';\nimport {\n clientSurface,\n createQrDataUrl,\n isInstalledPwa,\n prefersReducedMotion,\n type VerificationStatusEnvelope,\n} from '@splitin/verification-web';\n\nimport { AppealForm, type AppealFormProps } from '../appeal/AppealForm.tsx';\nimport { CAMERA_HELP, verificationCopy } from '../copy.ts';\nimport { useBusy, useFocusRecovery, useOnlineStatus } from '../hooks/runtime.ts';\nimport type { ProviderLauncherProps } from '../plugins/stripe.tsx';\nimport { SupportLink } from '../support/SupportLink.tsx';\n\nconst StripeIdentityLauncher = lazy(() => import('../plugins/stripe.tsx'));\nconst PersonaEmbeddedLauncher = lazy(() => import('../plugins/persona.tsx'));\nconst PlaidLegacyLauncher = lazy(() => import('../plugins/plaid.tsx'));\n\nexport interface VerificationLauncherProps {\n open: boolean;\n session: VerificationStatusEnvelope;\n onOpenChange: (open: boolean) => void;\n onSessionChange: (session: VerificationStatusEnvelope) => void;\n onStatusRefresh: () => Promise<boolean | VerificationStatusEnvelope>;\n pause?: () => Promise<VerificationStatusEnvelope | { status: VerificationStatusEnvelope['status'] }>;\n retry?: () => Promise<VerificationStatusEnvelope>;\n cancel?: () => Promise<VerificationStatusEnvelope | { status: VerificationStatusEnvelope['status'] }>;\n createContinuationUrl?: (token: string) => string;\n supportHref?: string;\n stripePublishableKey?: string;\n personaEnvironmentId?: string;\n onAppeal?: AppealFormProps['onSubmit'];\n plugins?: Record<string, ComponentType<ProviderLauncherProps>>;\n}\n\nexport function VerificationLauncher({\n open,\n session,\n onOpenChange,\n onSessionChange,\n onStatusRefresh,\n pause,\n retry,\n cancel,\n createContinuationUrl,\n supportHref = '/support/verification',\n stripePublishableKey,\n personaEnvironmentId,\n onAppeal,\n plugins,\n}: VerificationLauncherProps) {\n const online = useOnlineStatus();\n const [busy, run] = useBusy<'pause' | 'cancel' | 'retry' | 'refresh'>();\n const [message, setMessage] = useState<string | null>(null);\n const [qrDataUrl, setQrDataUrl] = useState<string | null>(null);\n const [appealOpen, setAppealOpen] = useState(false);\n const reducedMotion = prefersReducedMotion();\n const surface = clientSurface();\n const mediaDevicesMissing = typeof navigator === 'undefined' || !navigator.mediaDevices;\n const [started, setStarted] = useState(!reducedMotion);\n const [cameraHelp, setCameraHelp] = useState(mediaDevicesMissing);\n const dialogRef = useRef<HTMLDivElement>(null);\n useFocusRecovery(open);\n\n const continuationUrl = useMemo(() => {\n if (!session.continuation) return null;\n if (createContinuationUrl) return createContinuationUrl(session.continuation.token);\n return session.continuation.token;\n }, [createContinuationUrl, session.continuation]);\n\n useEffect(() => {\n let live = true;\n setQrDataUrl(null);\n if (!continuationUrl) return;\n void createQrDataUrl(continuationUrl).then((url) => { if (live) setQrDataUrl(url); });\n return () => { live = false; };\n }, [continuationUrl]);\n\n const refresh = useCallback(async () => {\n await run('refresh', async () => {\n const result = await onStatusRefresh();\n if (typeof result === 'object') {\n onSessionChange(result);\n setMessage(result.status === 'verified'\n ? 'Verified. Returning to your saved action…'\n : 'Your status is not approved yet. We’ll keep your action saved.');\n return;\n }\n setMessage(result\n ? 'Verified. Returning to your saved action…'\n : 'Your status is not approved yet. We’ll keep your action saved.');\n });\n }, [onSessionChange, onStatusRefresh, run]);\n\n const providerCallback = useCallback(() => {\n setMessage('Verification was submitted. Checking the server-side result now.');\n void refresh();\n }, [refresh]);\n\n const handlePluginError = useCallback((errorMessage: string) => {\n setMessage(errorMessage);\n if (/camera|permission/i.test(errorMessage) || typeof navigator === 'undefined' || !navigator.mediaDevices) {\n setCameraHelp(true);\n }\n }, []);\n\n const pauseAndClose = useCallback(async () => {\n await run('pause', async () => {\n if (pause) {\n const result = await pause();\n if ('attemptId' in result) onSessionChange(result);\n else onSessionChange({ ...session, status: result.status, canResume: true });\n }\n onOpenChange(false);\n });\n }, [onOpenChange, onSessionChange, pause, run, session]);\n\n if (!open) return null;\n\n const launcherKey = session.launch?.launcherKey ?? session.launcherKey ?? 'none';\n const blocked = session.status === 'processing' || session.status === 'manual_review_required';\n const unavailable = session.status === 'provider_unavailable' || !online;\n const nonInteractive = session.presentation === 'none';\n const copy = verificationCopy(session.packageCode);\n const launchSecret = session.launch?.transientSecret ?? '';\n const CustomPlugin = plugins?.[launcherKey];\n const pluginProps: ProviderLauncherProps = {\n launchSecret,\n publishableKey: stripePublishableKey,\n inquiryId: session.launch?.continuationReference,\n environmentId: personaEnvironmentId,\n onCallback: providerCallback,\n onError: handlePluginError,\n onOpened: () => undefined,\n onPause: () => { void pauseAndClose(); },\n };\n\n return (\n <>\n <div\n className=\"siv siv-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"siv-launcher-title\"\n data-testid=\"verification-launcher\"\n data-reduced-motion={reducedMotion ? 'true' : 'false'}\n data-surface={surface}\n ref={dialogRef}\n >\n <header className=\"siv-header\">\n <div>\n <h2 className=\"siv-title\" id=\"siv-launcher-title\">{copy.title}</h2>\n <p className=\"siv-copy\">{copy.description}</p>\n </div>\n <button type=\"button\" className=\"siv-button\" aria-label=\"Pause verification and close\" onClick={() => void pauseAndClose()} disabled={Boolean(busy)}>Pause</button>\n </header>\n\n <div aria-live=\"polite\" aria-atomic=\"true\" className=\"siv-live\">\n {!online ? <p className=\"siv-alert\" role=\"status\">You are offline. Your place is saved. Reconnect to resume verification.</p> : null}\n {blocked ? <p className=\"siv-alert\" role=\"status\">{session.status === 'manual_review_required' ? 'A review is in progress.' : 'We are checking your verification.'} The protected action stays blocked until an approved server-side decision arrives.</p> : null}\n {nonInteractive && !blocked && !unavailable ? <p className=\"siv-alert\" role=\"status\">{copy.reviewTitle}. No additional browser step is required right now.</p> : null}\n {unavailable && online ? <p className=\"siv-alert\" role=\"status\">Verification is temporarily unavailable. Retry later, continue on another device, or contact support.</p> : null}\n {message ? <p className=\"siv-alert\" role=\"status\">{message}</p> : null}\n {cameraHelp ? (\n <div data-testid=\"verification-camera-help\" className=\"siv-alert\" role=\"status\">\n {CAMERA_HELP.map((line) => <p key={line} className=\"siv-copy\">{line}</p>)}\n <p className=\"siv-copy\"><strong>Continue on another device</strong> if this camera cannot open.</p>\n </div>\n ) : null}\n </div>\n\n {reducedMotion && !started && !blocked && !unavailable ? (\n <button type=\"button\" className=\"siv-button\" data-variant=\"primary\" onClick={() => setStarted(true)}>\n Start verification\n </button>\n ) : null}\n\n {started && !blocked && !unavailable && CustomPlugin ? <CustomPlugin {...pluginProps} /> : null}\n {started && !blocked && !unavailable && !CustomPlugin && launcherKey === 'persona_embedded' && session.launch ? (\n <Suspense fallback={<p role=\"status\">Preparing secure verification…</p>}>\n <PersonaEmbeddedLauncher {...pluginProps} inquiryId={session.launch.continuationReference} />\n </Suspense>\n ) : null}\n {started && !blocked && !unavailable && !CustomPlugin && launcherKey === 'plaid_link' && launchSecret ? (\n <Suspense fallback={<p role=\"status\">Preparing secure verification…</p>}>\n <PlaidLegacyLauncher {...pluginProps} />\n </Suspense>\n ) : null}\n {started && !blocked && !unavailable && !CustomPlugin && launcherKey === 'stripe_identity' && launchSecret ? (\n <Suspense fallback={<p role=\"status\">Preparing secure verification…</p>}>\n <StripeIdentityLauncher {...pluginProps} />\n </Suspense>\n ) : null}\n\n {session.providerDisclosure ? <p className=\"siv-disclosure\" data-testid=\"verification-provider-disclosure\">{session.providerDisclosure}</p> : null}\n {session.launch?.hostedUrl ? (\n <a className=\"siv-link\" data-testid=\"verification-hosted-fallback\" href={session.launch.hostedUrl} target=\"_blank\" rel=\"noopener noreferrer\">Open hosted verification</a>\n ) : null}\n\n {!nonInteractive ? (\n <section className=\"siv-grid\" aria-label=\"Continue on another device\" data-emphasis={cameraHelp ? 'true' : 'false'}>\n <p className=\"siv-copy\">Use a one-time link or scan the QR code. The link contains no provider result and expires shortly.</p>\n <button type=\"button\" className=\"siv-button\" disabled={!continuationUrl} onClick={() => continuationUrl && void navigator.clipboard.writeText(continuationUrl).then(() => setMessage('Secure continuation link copied. It expires shortly and works once.'))}>Copy secure continuation link</button>\n <div data-testid=\"verification-qr-fallback\">\n {qrDataUrl ? (\n <img\n src={qrDataUrl}\n alt=\"QR code to continue verification on another device\"\n width={144}\n height={144}\n className={reducedMotion ? undefined : 'siv-qr-animate'}\n />\n ) : <p className=\"siv-copy\">QR code unavailable. Use the continuation link.</p>}\n </div>\n </section>\n ) : null}\n\n {!nonInteractive ? (\n <details data-testid=\"verification-browser-troubleshooting\">\n <summary>Camera or browser trouble?</summary>\n {CAMERA_HELP.map((line) => <p key={line} className=\"siv-copy\">{line}</p>)}\n {isInstalledPwa() ? <p className=\"siv-copy\">This app is installed. If the camera is blocked, open the continuation link in your system browser.</p> : null}\n <SupportLink href={supportHref} />\n </details>\n ) : null}\n\n <footer className=\"siv-footer siv-actions\">\n <button type=\"button\" className=\"siv-button\" data-variant=\"danger\" onClick={() => void run('cancel', async () => {\n if (!cancel) return;\n const result = await cancel();\n onSessionChange('attemptId' in result ? result : { ...session, status: result.status, canResume: false, canRetry: true });\n setMessage('Verification was canceled. Your saved action was not submitted.');\n })} disabled={Boolean(busy)}>Cancel verification</button>\n <button type=\"button\" className=\"siv-button\" onClick={() => setAppealOpen(true)} disabled={Boolean(busy)}>Request a review</button>\n <button type=\"button\" className=\"siv-button\" onClick={() => void run('retry', async () => {\n if (!retry || !session.canRetry || !online) return;\n onSessionChange(await retry());\n })} disabled={Boolean(busy) || !session.canRetry || !online}>Retry</button>\n <button type=\"button\" className=\"siv-button\" data-variant=\"primary\" onClick={() => void refresh()} disabled={Boolean(busy) || !online}>Check status</button>\n </footer>\n </div>\n {appealOpen ? (\n <AppealForm\n attemptId={session.attemptId}\n onSubmit={onAppeal}\n onSubmitted={() => setAppealOpen(false)}\n onCancel={() => setAppealOpen(false)}\n />\n ) : null}\n </>\n );\n}\n\nexport default VerificationLauncher;\n"]}
@@ -0,0 +1,225 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/operations/OperationsConsole.tsx
7
+ var TABS = ["health", "routes", "circuits", "attempts", "review", "reconciliation", "redaction", "audit"];
8
+ function OperationsConsole({ client }) {
9
+ const [snapshot, setSnapshot] = react.useState({ generatedAt: "" });
10
+ const [tab, setTab] = react.useState("health");
11
+ const [error, setError] = react.useState(null);
12
+ const [busy, setBusy] = react.useState(null);
13
+ const headers = react.useCallback((extra = {}) => {
14
+ const csrf = client.getCsrfToken?.();
15
+ return {
16
+ "Idempotency-Key": client.createIdempotencyKey?.() ?? (globalThis.crypto?.randomUUID?.() ?? `idem_${Date.now()}`),
17
+ ...csrf ? { "X-CSRF-Token": csrf } : {},
18
+ ...extra
19
+ };
20
+ }, [client]);
21
+ const refresh = react.useCallback(async () => {
22
+ const [health, routes, circuits, attempts, review, audit, reconciliation, redaction] = await Promise.all([
23
+ client.get("/v1/admin/health"),
24
+ client.get("/v1/admin/routes"),
25
+ client.get("/v1/admin/circuits"),
26
+ client.get("/v1/admin/attempts"),
27
+ client.get("/v1/admin/review"),
28
+ client.get("/v1/admin/audit"),
29
+ client.get("/v1/admin/reconciliation"),
30
+ client.get("/v1/admin/redaction")
31
+ ]);
32
+ setSnapshot({
33
+ generatedAt: health.generatedAt,
34
+ runtime: health.runtime,
35
+ health: health.health,
36
+ alerts: health.alerts,
37
+ routes: routes.routes,
38
+ routeChanges: routes.routeChanges,
39
+ circuits: circuits.circuits,
40
+ attempts: attempts.attempts,
41
+ appeals: review.appeals,
42
+ manualExceptions: review.manualExceptions,
43
+ policyVersions: review.policyVersions,
44
+ audit: audit.audit,
45
+ reconciliationJobs: reconciliation.jobs,
46
+ queues: reconciliation.queues,
47
+ privacyRequests: redaction.privacyRequests,
48
+ redactionJobs: redaction.jobs
49
+ });
50
+ }, [client]);
51
+ const mutate = react.useCallback(async (path, body, key) => {
52
+ setBusy(key);
53
+ try {
54
+ await client.mutate(path, body, headers());
55
+ await refresh();
56
+ setError(null);
57
+ } catch (cause) {
58
+ setError(cause instanceof Error ? cause.message : "The operation could not be completed.");
59
+ } finally {
60
+ setBusy(null);
61
+ }
62
+ }, [client, headers, refresh]);
63
+ react.useEffect(() => {
64
+ void refresh().catch((cause) => setError(cause instanceof Error ? cause.message : "Operations are unavailable."));
65
+ }, [refresh]);
66
+ const productionEnabled = react.useMemo(() => (snapshot.runtime ?? []).some((row) => row.provider_environment === "production" && row.enabled === true), [snapshot.runtime]);
67
+ return /* @__PURE__ */ jsxRuntime.jsxs("main", { className: "siv", children: [
68
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "siv-header", children: [
69
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
70
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "siv-title", children: "Identity operations" }),
71
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "siv-copy", children: "Provider health, governed routes, reviews, appeals and privacy queues. Identity documents stay in provider dashboards. Routing policy is never shown to end users." })
72
+ ] }),
73
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "siv-button", onClick: () => void refresh(), children: "Refresh" })
74
+ ] }),
75
+ error ? /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", children: error }) : null,
76
+ productionEnabled ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "siv-alert", role: "status", children: "Production routing is active. Review routes, approval expiry and provider health." }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "siv-alert", role: "status", children: "Production is fail-closed until runtime enablement and a separately approved policy are both present." }),
77
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "siv-tabs", role: "tablist", "aria-label": "Operations sections", children: TABS.map((item) => /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", role: "tab", className: "siv-button siv-tab", "aria-selected": tab === item, onClick: () => setTab(item), children: item }, item)) }),
78
+ tab === "health" ? /* @__PURE__ */ jsxRuntime.jsx(RecordList, { title: "Provider health", records: [...snapshot.runtime ?? [], ...snapshot.health ?? [], ...snapshot.alerts ?? []], empty: "No runtime, provider-health or alert records." }) : null,
79
+ tab === "routes" ? /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
80
+ /* @__PURE__ */ jsxRuntime.jsx(RouteChangeForm, { busy, currentActorId: client.currentActorId, changes: snapshot.routeChanges ?? [], onMutate: (body, key) => mutate("/v1/admin/routes", body, key) }),
81
+ /* @__PURE__ */ jsxRuntime.jsx(RecordList, { title: "Routes", records: snapshot.routes ?? [], empty: "No reviewed route policies." })
82
+ ] }) : null,
83
+ tab === "circuits" ? /* @__PURE__ */ jsxRuntime.jsx(CircuitForm, { busy, onSubmit: (body) => mutate("/v1/admin/circuits", body, `circuit:${body.provider}`), records: snapshot.circuits ?? [] }) : null,
84
+ tab === "attempts" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "siv-grid", children: (snapshot.attempts ?? []).map((row) => /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "siv-record", children: [
85
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: String(row.package_code ?? "Verification attempt") }),
86
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "siv-copy", children: [
87
+ String(row.id),
88
+ " \xB7 ",
89
+ String(row.status)
90
+ ] }),
91
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "siv-button", disabled: Boolean(busy), onClick: () => void mutate("/v1/admin/reconciliation", { attemptId: row.id }, `reconcile:${row.id}`), children: "Reconcile" })
92
+ ] }, String(row.id))) }) : null,
93
+ tab === "review" ? /* @__PURE__ */ jsxRuntime.jsx(ReviewPanel, { snapshot, busy, currentActorId: client.currentActorId, onMutate: (body, key) => mutate("/v1/admin/review", body, key) }) : null,
94
+ tab === "reconciliation" ? /* @__PURE__ */ jsxRuntime.jsx(RecordList, { title: "Reconciliation", records: snapshot.reconciliationJobs ?? [], empty: "No reconciliation jobs." }) : null,
95
+ tab === "redaction" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "siv-grid", children: (snapshot.privacyRequests ?? []).map((row) => /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "siv-record", children: [
96
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
97
+ String(row.request_reference ?? "Privacy request"),
98
+ " \xB7 ",
99
+ String(row.status)
100
+ ] }),
101
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "siv-button", disabled: Boolean(busy), onClick: () => void mutate("/v1/admin/redaction", { privacyRequestId: row.id }, `redact:${row.id}`), children: "Approve redaction" })
102
+ ] }, String(row.id))) }) : null,
103
+ tab === "audit" ? /* @__PURE__ */ jsxRuntime.jsx(RecordList, { title: "Audit", records: snapshot.audit ?? [], empty: "No immutable operational audit events." }) : null,
104
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "siv-copy", children: [
105
+ "Last refreshed ",
106
+ snapshot.generatedAt || "not yet",
107
+ ". Raw webhooks, launch secrets and identity documents are never displayed."
108
+ ] })
109
+ ] });
110
+ }
111
+ function RecordList({ title, records, empty }) {
112
+ if (!records.length) return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "siv-copy", children: empty });
113
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { "aria-label": title, className: "siv-grid", children: records.map((row, index) => /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "siv-record", children: [
114
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: String(row.alert_code ?? row.provider ?? row.action ?? row.package_code ?? row.id ?? "Operational record") }),
115
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "siv-copy", children: String(row.status ?? row.lifecycle ?? "") })
116
+ ] }, `${row.id ?? index}`)) });
117
+ }
118
+ function RouteChangeForm({ busy, currentActorId, changes, onMutate }) {
119
+ const [targetRoutePolicyId, setTarget] = react.useState("");
120
+ const [action, setAction] = react.useState("drain");
121
+ const [reasonCode, setReason] = react.useState("operator_requested_drain");
122
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "siv-grid", children: [
123
+ /* @__PURE__ */ jsxRuntime.jsxs("form", { className: "siv-record", onSubmit: (event) => {
124
+ event.preventDefault();
125
+ void onMutate({ operation: "propose", targetRoutePolicyId, action, reasonCode }, "propose");
126
+ }, children: [
127
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "siv-title", children: "Governed route change" }),
128
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "siv-copy", children: "Proposal and approval must be performed by different authorized staff." }),
129
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "siv-field", children: [
130
+ "Route policy ID",
131
+ /* @__PURE__ */ jsxRuntime.jsx("input", { className: "siv-input", value: targetRoutePolicyId, onChange: (event) => setTarget(event.target.value) })
132
+ ] }),
133
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "siv-field", children: [
134
+ "Action",
135
+ /* @__PURE__ */ jsxRuntime.jsxs("select", { className: "siv-select", value: action, onChange: (event) => setAction(event.target.value), children: [
136
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "drain", children: "Drain" }),
137
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "activate", children: "Activate" }),
138
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "rollback", children: "Rollback" })
139
+ ] })
140
+ ] }),
141
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "siv-field", children: [
142
+ "Reason code",
143
+ /* @__PURE__ */ jsxRuntime.jsx("input", { className: "siv-input", value: reasonCode, onChange: (event) => setReason(event.target.value) })
144
+ ] }),
145
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "submit", className: "siv-button", disabled: Boolean(busy) || !targetRoutePolicyId, children: "Propose" })
146
+ ] }),
147
+ changes.map((row) => {
148
+ const sameProposer = currentActorId && row.proposedBy === currentActorId;
149
+ return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "siv-record", children: [
150
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
151
+ String(row.action),
152
+ " \xB7 ",
153
+ String(row.status)
154
+ ] }),
155
+ /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "siv-button", disabled: Boolean(busy), onClick: () => void onMutate({ operation: "approve", requestId: row.id }, `approve:${row.id}`), children: [
156
+ "Approve",
157
+ sameProposer ? " (server will enforce separation of duties)" : ""
158
+ ] }),
159
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "siv-button", disabled: Boolean(busy), onClick: () => void onMutate({ operation: "apply", requestId: row.id }, `apply:${row.id}`), children: "Apply" })
160
+ ] }, String(row.id));
161
+ })
162
+ ] });
163
+ }
164
+ function CircuitForm({ busy, onSubmit, records }) {
165
+ const [provider, setProvider] = react.useState("test_fake");
166
+ const [providerEnvironment, setEnv] = react.useState("sandbox");
167
+ const [status, setStatus] = react.useState("healthy");
168
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
169
+ /* @__PURE__ */ jsxRuntime.jsxs("form", { className: "siv-record", onSubmit: (event) => {
170
+ event.preventDefault();
171
+ void onSubmit({ provider, providerEnvironment, status });
172
+ }, children: [
173
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "siv-title", children: "Provider circuit" }),
174
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "siv-field", children: [
175
+ "Provider",
176
+ /* @__PURE__ */ jsxRuntime.jsx("input", { className: "siv-input", value: provider, onChange: (event) => setProvider(event.target.value) })
177
+ ] }),
178
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "siv-field", children: [
179
+ "Environment",
180
+ /* @__PURE__ */ jsxRuntime.jsxs("select", { className: "siv-select", value: providerEnvironment, onChange: (event) => setEnv(event.target.value), children: [
181
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "sandbox", children: "Sandbox" }),
182
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "production", children: "Production" })
183
+ ] })
184
+ ] }),
185
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "siv-field", children: [
186
+ "State",
187
+ /* @__PURE__ */ jsxRuntime.jsxs("select", { className: "siv-select", value: status, onChange: (event) => setStatus(event.target.value), children: [
188
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "healthy", children: "Healthy" }),
189
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "degraded", children: "Degraded" }),
190
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "unavailable", children: "Unavailable" }),
191
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "circuit_open", children: "Circuit open" })
192
+ ] })
193
+ ] }),
194
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "submit", className: "siv-button", disabled: Boolean(busy), children: "Update circuit" })
195
+ ] }),
196
+ /* @__PURE__ */ jsxRuntime.jsx(RecordList, { title: "Circuits", records, empty: "No circuit records." })
197
+ ] });
198
+ }
199
+ function ReviewPanel({ snapshot, busy, currentActorId, onMutate }) {
200
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "siv-grid", children: [
201
+ (snapshot.appeals ?? []).map((row) => /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "siv-record", children: [
202
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
203
+ "Appeal \xB7 ",
204
+ String(row.reason_code ?? "review")
205
+ ] }),
206
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "siv-button", disabled: Boolean(busy), onClick: () => void onMutate({ operation: "begin_appeal_review", appealId: row.id }, `review:${row.id}`), children: "Begin review" })
207
+ ] }, `appeal:${row.id}`)),
208
+ (snapshot.manualExceptions ?? []).map((row) => /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "siv-record", children: [
209
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
210
+ String(row.decision),
211
+ " \xB7 ",
212
+ String(row.status)
213
+ ] }),
214
+ /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "siv-button", disabled: Boolean(busy), onClick: () => void onMutate({ operation: "approve_manual_exception", requestId: row.id }, `approve-exc:${row.id}`), children: [
215
+ "Approve",
216
+ currentActorId && row.proposedBy === currentActorId ? " (server will enforce separation of duties)" : ""
217
+ ] }),
218
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "siv-button", disabled: Boolean(busy), onClick: () => void onMutate({ operation: "apply_manual_exception", requestId: row.id }, `apply-exc:${row.id}`), children: "Apply decision" })
219
+ ] }, `exc:${row.id}`))
220
+ ] });
221
+ }
222
+
223
+ exports.OperationsConsole = OperationsConsole;
224
+ //# sourceMappingURL=operations.cjs.map
225
+ //# sourceMappingURL=operations.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/operations/OperationsConsole.tsx"],"names":["useState","useCallback","useEffect","useMemo","jsxs","jsx"],"mappings":"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","file":"operations.cjs","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\n\nexport interface OperationsRecord {\n id?: string;\n [key: string]: string | number | boolean | null | undefined;\n}\n\nexport interface OperationsSnapshot {\n generatedAt: string;\n runtime?: OperationsRecord[];\n health?: OperationsRecord[];\n alerts?: OperationsRecord[];\n routes?: OperationsRecord[];\n routeChanges?: OperationsRecord[];\n circuits?: OperationsRecord[];\n attempts?: OperationsRecord[];\n appeals?: OperationsRecord[];\n manualExceptions?: OperationsRecord[];\n audit?: OperationsRecord[];\n reconciliationJobs?: OperationsRecord[];\n privacyRequests?: OperationsRecord[];\n redactionJobs?: OperationsRecord[];\n policyVersions?: OperationsRecord[];\n queues?: Record<string, number>;\n jobs?: OperationsRecord[];\n}\n\nexport interface OperationsClient {\n get(path: string): Promise<unknown>;\n mutate(path: string, body: unknown, headers: Record<string, string>): Promise<unknown>;\n createIdempotencyKey?: () => string;\n getCsrfToken?: () => string | null;\n currentActorId?: string;\n}\n\nconst TABS = ['health', 'routes', 'circuits', 'attempts', 'review', 'reconciliation', 'redaction', 'audit'] as const;\n\nexport function OperationsConsole({ client }: { client: OperationsClient }) {\n const [snapshot, setSnapshot] = useState<OperationsSnapshot>({ generatedAt: '' });\n const [tab, setTab] = useState<(typeof TABS)[number]>('health');\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n\n const headers = useCallback((extra: Record<string, string> = {}) => {\n const csrf = client.getCsrfToken?.();\n return {\n 'Idempotency-Key': client.createIdempotencyKey?.() ?? (globalThis.crypto?.randomUUID?.() ?? `idem_${Date.now()}`),\n ...(csrf ? { 'X-CSRF-Token': csrf } : {}),\n ...extra,\n };\n }, [client]);\n\n const refresh = useCallback(async () => {\n const [health, routes, circuits, attempts, review, audit, reconciliation, redaction] = await Promise.all([\n client.get('/v1/admin/health') as Promise<OperationsSnapshot>,\n client.get('/v1/admin/routes') as Promise<OperationsSnapshot>,\n client.get('/v1/admin/circuits') as Promise<OperationsSnapshot>,\n client.get('/v1/admin/attempts') as Promise<OperationsSnapshot>,\n client.get('/v1/admin/review') as Promise<OperationsSnapshot>,\n client.get('/v1/admin/audit') as Promise<OperationsSnapshot>,\n client.get('/v1/admin/reconciliation') as Promise<OperationsSnapshot>,\n client.get('/v1/admin/redaction') as Promise<OperationsSnapshot>,\n ]);\n setSnapshot({\n generatedAt: health.generatedAt,\n runtime: health.runtime,\n health: health.health,\n alerts: health.alerts,\n routes: routes.routes,\n routeChanges: routes.routeChanges,\n circuits: circuits.circuits,\n attempts: attempts.attempts,\n appeals: review.appeals,\n manualExceptions: review.manualExceptions,\n policyVersions: review.policyVersions,\n audit: audit.audit,\n reconciliationJobs: reconciliation.jobs as OperationsRecord[] | undefined,\n queues: reconciliation.queues,\n privacyRequests: redaction.privacyRequests,\n redactionJobs: redaction.jobs as OperationsRecord[] | undefined,\n });\n }, [client]);\n\n const mutate = useCallback(async (path: string, body: unknown, key: string) => {\n setBusy(key);\n try {\n await client.mutate(path, body, headers());\n await refresh();\n setError(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : 'The operation could not be completed.');\n } finally {\n setBusy(null);\n }\n }, [client, headers, refresh]);\n\n useEffect(() => { void refresh().catch((cause) => setError(cause instanceof Error ? cause.message : 'Operations are unavailable.')); }, [refresh]);\n\n const productionEnabled = useMemo(() => (snapshot.runtime ?? []).some((row) => row.provider_environment === 'production' && row.enabled === true), [snapshot.runtime]);\n\n return (\n <main className=\"siv\">\n <header className=\"siv-header\">\n <div>\n <h1 className=\"siv-title\">Identity operations</h1>\n <p className=\"siv-copy\">Provider health, governed routes, reviews, appeals and privacy queues. Identity documents stay in provider dashboards. Routing policy is never shown to end users.</p>\n </div>\n <button type=\"button\" className=\"siv-button\" onClick={() => void refresh()}>Refresh</button>\n </header>\n {error ? <p role=\"alert\">{error}</p> : null}\n {productionEnabled\n ? <p className=\"siv-alert\" role=\"status\">Production routing is active. Review routes, approval expiry and provider health.</p>\n : <p className=\"siv-alert\" role=\"status\">Production is fail-closed until runtime enablement and a separately approved policy are both present.</p>}\n\n <div className=\"siv-tabs\" role=\"tablist\" aria-label=\"Operations sections\">\n {TABS.map((item) => (\n <button key={item} type=\"button\" role=\"tab\" className=\"siv-button siv-tab\" aria-selected={tab === item} onClick={() => setTab(item)}>{item}</button>\n ))}\n </div>\n\n {tab === 'health' ? <RecordList title=\"Provider health\" records={[...(snapshot.runtime ?? []), ...(snapshot.health ?? []), ...(snapshot.alerts ?? [])]} empty=\"No runtime, provider-health or alert records.\" /> : null}\n {tab === 'routes' ? (\n <section>\n <RouteChangeForm busy={busy} currentActorId={client.currentActorId} changes={snapshot.routeChanges ?? []} onMutate={(body, key) => mutate('/v1/admin/routes', body, key)} />\n <RecordList title=\"Routes\" records={snapshot.routes ?? []} empty=\"No reviewed route policies.\" />\n </section>\n ) : null}\n {tab === 'circuits' ? <CircuitForm busy={busy} onSubmit={(body) => mutate('/v1/admin/circuits', body, `circuit:${body.provider}`)} records={snapshot.circuits ?? []} /> : null}\n {tab === 'attempts' ? (\n <div className=\"siv-grid\">\n {(snapshot.attempts ?? []).map((row) => (\n <article key={String(row.id)} className=\"siv-record\">\n <p>{String(row.package_code ?? 'Verification attempt')}</p>\n <p className=\"siv-copy\">{String(row.id)} · {String(row.status)}</p>\n <button type=\"button\" className=\"siv-button\" disabled={Boolean(busy)} onClick={() => void mutate('/v1/admin/reconciliation', { attemptId: row.id }, `reconcile:${row.id}`)}>Reconcile</button>\n </article>\n ))}\n </div>\n ) : null}\n {tab === 'review' ? <ReviewPanel snapshot={snapshot} busy={busy} currentActorId={client.currentActorId} onMutate={(body, key) => mutate('/v1/admin/review', body, key)} /> : null}\n {tab === 'reconciliation' ? <RecordList title=\"Reconciliation\" records={snapshot.reconciliationJobs ?? []} empty=\"No reconciliation jobs.\" /> : null}\n {tab === 'redaction' ? (\n <div className=\"siv-grid\">\n {(snapshot.privacyRequests ?? []).map((row) => (\n <article key={String(row.id)} className=\"siv-record\">\n <p>{String(row.request_reference ?? 'Privacy request')} · {String(row.status)}</p>\n <button type=\"button\" className=\"siv-button\" disabled={Boolean(busy)} onClick={() => void mutate('/v1/admin/redaction', { privacyRequestId: row.id }, `redact:${row.id}`)}>Approve redaction</button>\n </article>\n ))}\n </div>\n ) : null}\n {tab === 'audit' ? <RecordList title=\"Audit\" records={snapshot.audit ?? []} empty=\"No immutable operational audit events.\" /> : null}\n <p className=\"siv-copy\">Last refreshed {snapshot.generatedAt || 'not yet'}. Raw webhooks, launch secrets and identity documents are never displayed.</p>\n </main>\n );\n}\n\nfunction RecordList({ title, records, empty }: { title: string; records: OperationsRecord[]; empty: string }) {\n if (!records.length) return <p className=\"siv-copy\">{empty}</p>;\n return (\n <section aria-label={title} className=\"siv-grid\">\n {records.map((row, index) => (\n <article key={`${row.id ?? index}`} className=\"siv-record\">\n <p>{String(row.alert_code ?? row.provider ?? row.action ?? row.package_code ?? row.id ?? 'Operational record')}</p>\n <p className=\"siv-copy\">{String(row.status ?? row.lifecycle ?? '')}</p>\n </article>\n ))}\n </section>\n );\n}\n\nfunction RouteChangeForm({ busy, currentActorId, changes, onMutate }: {\n busy: string | null;\n currentActorId?: string;\n changes: OperationsRecord[];\n onMutate: (body: unknown, key: string) => Promise<void>;\n}) {\n const [targetRoutePolicyId, setTarget] = useState('');\n const [action, setAction] = useState('drain');\n const [reasonCode, setReason] = useState('operator_requested_drain');\n return (\n <div className=\"siv-grid\">\n <form className=\"siv-record\" onSubmit={(event) => { event.preventDefault(); void onMutate({ operation: 'propose', targetRoutePolicyId, action, reasonCode }, 'propose'); }}>\n <h2 className=\"siv-title\">Governed route change</h2>\n <p className=\"siv-copy\">Proposal and approval must be performed by different authorized staff.</p>\n <label className=\"siv-field\">Route policy ID<input className=\"siv-input\" value={targetRoutePolicyId} onChange={(event) => setTarget(event.target.value)} /></label>\n <label className=\"siv-field\">Action\n <select className=\"siv-select\" value={action} onChange={(event) => setAction(event.target.value)}>\n <option value=\"drain\">Drain</option>\n <option value=\"activate\">Activate</option>\n <option value=\"rollback\">Rollback</option>\n </select>\n </label>\n <label className=\"siv-field\">Reason code<input className=\"siv-input\" value={reasonCode} onChange={(event) => setReason(event.target.value)} /></label>\n <button type=\"submit\" className=\"siv-button\" disabled={Boolean(busy) || !targetRoutePolicyId}>Propose</button>\n </form>\n {changes.map((row) => {\n const sameProposer = currentActorId && row.proposedBy === currentActorId;\n return (\n <article key={String(row.id)} className=\"siv-record\">\n <p>{String(row.action)} · {String(row.status)}</p>\n <button type=\"button\" className=\"siv-button\" disabled={Boolean(busy)} onClick={() => void onMutate({ operation: 'approve', requestId: row.id }, `approve:${row.id}`)}>\n Approve{sameProposer ? ' (server will enforce separation of duties)' : ''}\n </button>\n <button type=\"button\" className=\"siv-button\" disabled={Boolean(busy)} onClick={() => void onMutate({ operation: 'apply', requestId: row.id }, `apply:${row.id}`)}>Apply</button>\n </article>\n );\n })}\n </div>\n );\n}\n\nfunction CircuitForm({ busy, onSubmit, records }: {\n busy: string | null;\n records: OperationsRecord[];\n onSubmit: (body: { provider: string; providerEnvironment: string; status: string }) => Promise<void>;\n}) {\n const [provider, setProvider] = useState('test_fake');\n const [providerEnvironment, setEnv] = useState('sandbox');\n const [status, setStatus] = useState('healthy');\n return (\n <section>\n <form className=\"siv-record\" onSubmit={(event) => { event.preventDefault(); void onSubmit({ provider, providerEnvironment, status }); }}>\n <h2 className=\"siv-title\">Provider circuit</h2>\n <label className=\"siv-field\">Provider<input className=\"siv-input\" value={provider} onChange={(event) => setProvider(event.target.value)} /></label>\n <label className=\"siv-field\">Environment\n <select className=\"siv-select\" value={providerEnvironment} onChange={(event) => setEnv(event.target.value)}>\n <option value=\"sandbox\">Sandbox</option>\n <option value=\"production\">Production</option>\n </select>\n </label>\n <label className=\"siv-field\">State\n <select className=\"siv-select\" value={status} onChange={(event) => setStatus(event.target.value)}>\n <option value=\"healthy\">Healthy</option>\n <option value=\"degraded\">Degraded</option>\n <option value=\"unavailable\">Unavailable</option>\n <option value=\"circuit_open\">Circuit open</option>\n </select>\n </label>\n <button type=\"submit\" className=\"siv-button\" disabled={Boolean(busy)}>Update circuit</button>\n </form>\n <RecordList title=\"Circuits\" records={records} empty=\"No circuit records.\" />\n </section>\n );\n}\n\nfunction ReviewPanel({ snapshot, busy, currentActorId, onMutate }: {\n snapshot: OperationsSnapshot;\n busy: string | null;\n currentActorId?: string;\n onMutate: (body: unknown, key: string) => Promise<void>;\n}) {\n return (\n <div className=\"siv-grid\">\n {(snapshot.appeals ?? []).map((row) => (\n <article key={`appeal:${row.id}`} className=\"siv-record\">\n <p>Appeal · {String(row.reason_code ?? 'review')}</p>\n <button type=\"button\" className=\"siv-button\" disabled={Boolean(busy)} onClick={() => void onMutate({ operation: 'begin_appeal_review', appealId: row.id }, `review:${row.id}`)}>Begin review</button>\n </article>\n ))}\n {(snapshot.manualExceptions ?? []).map((row) => (\n <article key={`exc:${row.id}`} className=\"siv-record\">\n <p>{String(row.decision)} · {String(row.status)}</p>\n <button type=\"button\" className=\"siv-button\" disabled={Boolean(busy)} onClick={() => void onMutate({ operation: 'approve_manual_exception', requestId: row.id }, `approve-exc:${row.id}`)}>\n Approve{currentActorId && row.proposedBy === currentActorId ? ' (server will enforce separation of duties)' : ''}\n </button>\n <button type=\"button\" className=\"siv-button\" disabled={Boolean(busy)} onClick={() => void onMutate({ operation: 'apply_manual_exception', requestId: row.id }, `apply-exc:${row.id}`)}>Apply decision</button>\n </article>\n ))}\n </div>\n );\n}\n\nexport default OperationsConsole;\n"]}
@@ -0,0 +1,37 @@
1
+ import * as react from 'react';
2
+
3
+ interface OperationsRecord {
4
+ id?: string;
5
+ [key: string]: string | number | boolean | null | undefined;
6
+ }
7
+ interface OperationsSnapshot {
8
+ generatedAt: string;
9
+ runtime?: OperationsRecord[];
10
+ health?: OperationsRecord[];
11
+ alerts?: OperationsRecord[];
12
+ routes?: OperationsRecord[];
13
+ routeChanges?: OperationsRecord[];
14
+ circuits?: OperationsRecord[];
15
+ attempts?: OperationsRecord[];
16
+ appeals?: OperationsRecord[];
17
+ manualExceptions?: OperationsRecord[];
18
+ audit?: OperationsRecord[];
19
+ reconciliationJobs?: OperationsRecord[];
20
+ privacyRequests?: OperationsRecord[];
21
+ redactionJobs?: OperationsRecord[];
22
+ policyVersions?: OperationsRecord[];
23
+ queues?: Record<string, number>;
24
+ jobs?: OperationsRecord[];
25
+ }
26
+ interface OperationsClient {
27
+ get(path: string): Promise<unknown>;
28
+ mutate(path: string, body: unknown, headers: Record<string, string>): Promise<unknown>;
29
+ createIdempotencyKey?: () => string;
30
+ getCsrfToken?: () => string | null;
31
+ currentActorId?: string;
32
+ }
33
+ declare function OperationsConsole({ client }: {
34
+ client: OperationsClient;
35
+ }): react.JSX.Element;
36
+
37
+ export { type OperationsClient, OperationsConsole, type OperationsSnapshot };
@@ -0,0 +1,37 @@
1
+ import * as react from 'react';
2
+
3
+ interface OperationsRecord {
4
+ id?: string;
5
+ [key: string]: string | number | boolean | null | undefined;
6
+ }
7
+ interface OperationsSnapshot {
8
+ generatedAt: string;
9
+ runtime?: OperationsRecord[];
10
+ health?: OperationsRecord[];
11
+ alerts?: OperationsRecord[];
12
+ routes?: OperationsRecord[];
13
+ routeChanges?: OperationsRecord[];
14
+ circuits?: OperationsRecord[];
15
+ attempts?: OperationsRecord[];
16
+ appeals?: OperationsRecord[];
17
+ manualExceptions?: OperationsRecord[];
18
+ audit?: OperationsRecord[];
19
+ reconciliationJobs?: OperationsRecord[];
20
+ privacyRequests?: OperationsRecord[];
21
+ redactionJobs?: OperationsRecord[];
22
+ policyVersions?: OperationsRecord[];
23
+ queues?: Record<string, number>;
24
+ jobs?: OperationsRecord[];
25
+ }
26
+ interface OperationsClient {
27
+ get(path: string): Promise<unknown>;
28
+ mutate(path: string, body: unknown, headers: Record<string, string>): Promise<unknown>;
29
+ createIdempotencyKey?: () => string;
30
+ getCsrfToken?: () => string | null;
31
+ currentActorId?: string;
32
+ }
33
+ declare function OperationsConsole({ client }: {
34
+ client: OperationsClient;
35
+ }): react.JSX.Element;
36
+
37
+ export { type OperationsClient, OperationsConsole, type OperationsSnapshot };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sources":["operations.d.ts"],"names":[],"mappings":"AAAA"}