@splitin/verification-server 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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/catalog.ts","../src/errors.ts","../src/types.ts","../src/engine-adapter.ts","../src/auth.ts","../src/json.ts","../src/handler.ts","../src/openapi.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const API_CONTRACT_VERSION = '1.0.0' as const;\n\nexport type RouteAuth = 'none' | 'actor' | 'operator' | 'system';\n\nexport interface RouteDefinition {\n id: string;\n method: 'GET' | 'POST' | 'OPTIONS';\n path: string;\n auth: RouteAuth;\n csrf: boolean;\n idempotency: boolean;\n mutation: boolean;\n}\n\nexport const V1_ROUTES: readonly RouteDefinition[] = Object.freeze([\n { id: 'sessions.create', method: 'POST', path: '/v1/sessions', auth: 'actor', csrf: true, idempotency: true, mutation: true },\n { id: 'sessions.resume', method: 'POST', path: '/v1/sessions/:id/resume', auth: 'actor', csrf: true, idempotency: true, mutation: true },\n { id: 'sessions.get', method: 'GET', path: '/v1/sessions/:id', auth: 'actor', csrf: false, idempotency: false, mutation: false },\n { id: 'sessions.retry', method: 'POST', path: '/v1/sessions/:id/retry', auth: 'actor', csrf: true, idempotency: true, mutation: true },\n { id: 'sessions.pause', method: 'POST', path: '/v1/sessions/:id/pause', auth: 'actor', csrf: true, idempotency: true, mutation: true },\n { id: 'sessions.cancel', method: 'POST', path: '/v1/sessions/:id/cancel', auth: 'actor', csrf: true, idempotency: true, mutation: true },\n { id: 'appeals.create', method: 'POST', path: '/v1/appeals', auth: 'actor', csrf: true, idempotency: true, mutation: true },\n { id: 'support.escalations', method: 'POST', path: '/v1/support/escalations', auth: 'actor', csrf: true, idempotency: true, mutation: true },\n { id: 'webhooks.ingest', method: 'POST', path: '/v1/webhooks/:provider', auth: 'none', csrf: false, idempotency: false, mutation: true },\n { id: 'protectedActions.evaluate', method: 'POST', path: '/v1/protected-actions/evaluate', auth: 'actor', csrf: true, idempotency: true, mutation: true },\n { id: 'admin.health', method: 'GET', path: '/v1/admin/health', auth: 'operator', csrf: false, idempotency: false, mutation: false },\n { id: 'admin.routes.get', method: 'GET', path: '/v1/admin/routes', auth: 'operator', csrf: false, idempotency: false, mutation: false },\n { id: 'admin.routes.mutate', method: 'POST', path: '/v1/admin/routes', auth: 'operator', csrf: true, idempotency: true, mutation: true },\n { id: 'admin.circuits.get', method: 'GET', path: '/v1/admin/circuits', auth: 'operator', csrf: false, idempotency: false, mutation: false },\n { id: 'admin.circuits.mutate', method: 'POST', path: '/v1/admin/circuits', auth: 'operator', csrf: true, idempotency: true, mutation: true },\n { id: 'admin.attempts', method: 'GET', path: '/v1/admin/attempts', auth: 'operator', csrf: false, idempotency: false, mutation: false },\n { id: 'admin.review.get', method: 'GET', path: '/v1/admin/review', auth: 'operator', csrf: false, idempotency: false, mutation: false },\n { id: 'admin.review.mutate', method: 'POST', path: '/v1/admin/review', auth: 'operator', csrf: true, idempotency: true, mutation: true },\n { id: 'admin.audit', method: 'GET', path: '/v1/admin/audit', auth: 'operator', csrf: false, idempotency: false, mutation: false },\n { id: 'admin.reconciliation.get', method: 'GET', path: '/v1/admin/reconciliation', auth: 'operator', csrf: false, idempotency: false, mutation: false },\n { id: 'admin.reconciliation.mutate', method: 'POST', path: '/v1/admin/reconciliation', auth: 'operator', csrf: true, idempotency: true, mutation: true },\n { id: 'admin.redaction.get', method: 'GET', path: '/v1/admin/redaction', auth: 'operator', csrf: false, idempotency: false, mutation: false },\n { id: 'admin.redaction.mutate', method: 'POST', path: '/v1/admin/redaction', auth: 'operator', csrf: true, idempotency: true, mutation: true },\n { id: 'workers.claim', method: 'POST', path: '/v1/workers/claim', auth: 'system', csrf: false, idempotency: true, mutation: true },\n { id: 'workers.process', method: 'POST', path: '/v1/workers/process', auth: 'system', csrf: false, idempotency: true, mutation: true },\n]);\n\nexport function listV1Paths(): string[] {\n return [...new Set(V1_ROUTES.map((route) => route.path))].sort();\n}\n\nexport interface MatchedRoute {\n route: RouteDefinition;\n params: Record<string, string>;\n}\n\nexport function matchV1Route(method: string, pathname: string, basePath = ''): MatchedRoute | null {\n const relative = stripBasePath(pathname, basePath);\n const normalizedMethod = method.toUpperCase();\n if (normalizedMethod === 'OPTIONS') {\n const found = V1_ROUTES.find((route) => matchPath(route.path, relative));\n return found ? { route: { ...found, method: 'OPTIONS', csrf: false, idempotency: false, mutation: false }, params: matchPath(found.path, relative) ?? {} } : null;\n }\n for (const route of V1_ROUTES) {\n if (route.method !== normalizedMethod) continue;\n const params = matchPath(route.path, relative);\n if (params) return { route, params };\n }\n return null;\n}\n\nfunction stripBasePath(pathname: string, basePath: string): string {\n const normalized = normalizePath(pathname);\n const base = normalizePath(basePath);\n if (!base || base === '/') return normalized;\n if (normalized === base) return '/';\n if (normalized.startsWith(`${base}/`)) return normalized.slice(base.length) || '/';\n return normalized;\n}\n\nfunction normalizePath(value: string): string {\n const path = value.split('?')[0] ?? '/';\n if (!path.startsWith('/')) return `/${path}`;\n return path.replace(/\\/+$/, '') || '/';\n}\n\nfunction matchPath(pattern: string, pathname: string): Record<string, string> | null {\n const patternParts = normalizePath(pattern).split('/').filter(Boolean);\n const pathParts = normalizePath(pathname).split('/').filter(Boolean);\n if (patternParts.length !== pathParts.length) return null;\n const params: Record<string, string> = {};\n for (let index = 0; index < patternParts.length; index += 1) {\n const expected = patternParts[index]!;\n const actual = pathParts[index]!;\n if (expected.startsWith(':')) {\n params[expected.slice(1)] = decodeURIComponent(actual);\n continue;\n }\n if (expected !== actual) return null;\n }\n return params;\n}\n","import { ProviderError, toSafeProviderFailure } from '@splitin/verification-adapter-sdk';\n\nexport const API_ERROR_CODES = [\n 'UNAUTHENTICATED',\n 'FORBIDDEN',\n 'CSRF_REJECTED',\n 'ORIGIN_NOT_ALLOWED',\n 'IDEMPOTENCY_KEY_REQUIRED',\n 'INVALID_IDEMPOTENCY_KEY',\n 'INVALID_REQUEST',\n 'UNSUPPORTED_REQUEST_FIELD',\n 'INVALID_JSON',\n 'PAYLOAD_TOO_LARGE',\n 'NOT_FOUND',\n 'METHOD_NOT_ALLOWED',\n 'CONFLICT',\n 'SEPARATION_OF_DUTIES',\n 'RATE_LIMITED',\n 'PROVIDER_UNAVAILABLE',\n 'VERIFICATION_REQUIRED',\n 'INTERNAL_ERROR',\n] as const;\n\nexport type ApiErrorCode = (typeof API_ERROR_CODES)[number];\n\nexport class VerificationHttpError extends Error {\n constructor(\n readonly status: number,\n readonly code: ApiErrorCode | string,\n message: string,\n readonly retryAfterSeconds: number | null = null,\n ) {\n super(message);\n this.name = 'VerificationHttpError';\n }\n}\n\nconst SECRET_PATTERN = /sk_|rk_|whsec_|client_secret|ephemeral|password|bearer\\s+[a-z0-9._-]+/i;\n\nexport function scrubUnsafeMessage(value: string): string {\n if (SECRET_PATTERN.test(value) || /provider\\s+body|raw\\s+webhook/i.test(value)) {\n return 'The verification request could not be completed.';\n }\n return value;\n}\n\nexport function toSafeErrorEnvelope(\n error: unknown,\n supportPath: string | null,\n): { status: number; body: Record<string, unknown>; retryAfterSeconds: number | null } {\n if (error instanceof VerificationHttpError) {\n return {\n status: error.status,\n retryAfterSeconds: error.retryAfterSeconds,\n body: envelope(error.code, scrubUnsafeMessage(error.message), error.retryAfterSeconds, supportPath),\n };\n }\n if (error instanceof ProviderError) {\n const status = error.retryable ? (error.code === 'RATE_LIMITED' ? 429 : 503) : 409;\n return {\n status,\n retryAfterSeconds: error.retryAfterSeconds ?? null,\n body: envelope(error.safeCode, scrubUnsafeMessage(error.message), error.retryAfterSeconds ?? null, supportPath),\n };\n }\n const safe = toSafeProviderFailure(error);\n return {\n status: 503,\n retryAfterSeconds: safe.retryAfterSeconds ?? null,\n body: envelope(safe.safeCode, 'The verification request could not be completed.', safe.retryAfterSeconds ?? null, supportPath),\n };\n}\n\nfunction envelope(\n code: string,\n message: string,\n retryAfterSeconds: number | null,\n supportPath: string | null,\n): Record<string, unknown> {\n return {\n contractVersion: '1.0.0',\n error: {\n code,\n message,\n retryable: retryAfterSeconds !== null || /retry|unavailable|rate/i.test(code),\n },\n safeErrorCode: code,\n retryAfter: retryAfterSeconds,\n supportPath,\n };\n}\n","import type {\n ActorContext,\n ProtectedActionDenial,\n ProviderAssociatedPersonInput,\n ProviderLaunchEnvelope,\n ProviderOrganizationInput,\n ProviderRelationshipInput,\n VerificationCanonicalStatus,\n VerificationLaunchPresentation,\n VerificationPackageCode,\n} from '@splitin/verification-adapter-sdk';\n\nexport const SESSION_CONTRACT_VERSION = '1.0.0' as const;\n\nexport interface SessionContinuationV1 {\n key: string;\n token: string;\n expiresAt: string;\n}\n\nexport interface SessionEnvelopeV1 {\n contractVersion: typeof SESSION_CONTRACT_VERSION;\n attemptId: string;\n packageCode: VerificationPackageCode;\n status: VerificationCanonicalStatus;\n presentation: VerificationLaunchPresentation;\n launch: ProviderLaunchEnvelope | null;\n launcherKey: string | null;\n providerDisclosure: string | null;\n safeErrorCode: string | null;\n retryAfter: string | null;\n supportPath: string | null;\n expiresAt: string | null;\n canResume: boolean;\n canRetry: boolean;\n continuation: SessionContinuationV1 | null;\n}\n\nexport interface SessionMutationResult {\n attemptId: string;\n status: VerificationCanonicalStatus;\n paused?: boolean;\n canceled?: boolean;\n canResume?: boolean;\n canRetry?: boolean;\n}\n\nexport interface StartSessionInput {\n packageCode: VerificationPackageCode;\n countryCode?: string;\n action?: string;\n resourceType?: string;\n resourceReference?: string;\n subjectReference?: string;\n continuationToken?: string;\n continuationKey?: string;\n legalFirstName?: string | null;\n legalLastName?: string | null;\n email?: string | null;\n organization?: ProviderOrganizationInput | null;\n relationship?: ProviderRelationshipInput | null;\n associatedPerson?: ProviderAssociatedPersonInput | null;\n evidenceReferences?: string[];\n metadata?: Record<string, string | number | boolean | null>;\n}\n\nexport interface SessionIdInput {\n attemptId: string;\n idempotencyKey: string;\n}\n\nexport interface AppealInput {\n attemptId?: string;\n reasonCode: string;\n nonBiometricPathRequested?: boolean;\n details?: string;\n}\n\nexport interface AppealResult {\n appealId: string;\n status: 'open' | 'in_review' | 'resolved' | 'rejected';\n}\n\nexport interface SupportEscalationInput {\n attemptId?: string;\n appealId?: string;\n reasonCode: string;\n message?: string;\n}\n\nexport interface SupportEscalationResult {\n escalationId: string;\n status: 'open';\n}\n\nexport interface ProtectedActionInput {\n action: string;\n resourceType?: string;\n resourceReference?: string;\n}\n\nexport type ProtectedActionDecision =\n | { allowed: true; enforcementActive: boolean; policyVersionId?: string | null }\n | ({ allowed: false } & ProtectedActionDenial);\n\nexport interface WebhookIngestResult {\n accepted: boolean;\n duplicate: boolean;\n providerEventKey?: string;\n}\n\nexport interface SafeAdminRecord {\n id?: string;\n [key: string]: string | number | boolean | null | undefined;\n}\n\nexport interface AdminHealthSnapshot {\n generatedAt: string;\n runtime: SafeAdminRecord[];\n health: SafeAdminRecord[];\n alerts: SafeAdminRecord[];\n}\n\nexport interface AdminRoutesSnapshot {\n generatedAt: string;\n routes: SafeAdminRecord[];\n routeChanges: SafeAdminRecord[];\n}\n\nexport interface RouteChangeInput {\n operation: 'propose' | 'approve' | 'apply';\n targetRoutePolicyId?: string;\n requestId?: string;\n action?: 'activate' | 'drain' | 'rollback';\n reasonCode?: string;\n}\n\nexport interface AdminCircuitsSnapshot {\n generatedAt: string;\n circuits: SafeAdminRecord[];\n}\n\nexport interface CircuitInput {\n provider: string;\n providerEnvironment: 'sandbox' | 'production';\n status: 'healthy' | 'degraded' | 'unavailable' | 'circuit_open';\n errorCode?: string;\n circuitOpenUntil?: string;\n}\n\nexport interface AdminAttemptsSnapshot {\n generatedAt: string;\n attempts: SafeAdminRecord[];\n}\n\nexport interface AdminReviewSnapshot {\n generatedAt: string;\n appeals: SafeAdminRecord[];\n manualExceptions: SafeAdminRecord[];\n policyVersions: SafeAdminRecord[];\n}\n\nexport interface ReviewInput {\n operation: 'begin_appeal_review' | 'propose_manual_exception' | 'approve_manual_exception' | 'apply_manual_exception';\n appealId?: string;\n requestId?: string;\n packageCode?: VerificationPackageCode;\n decision?: 'approve' | 'deny' | 'revoke' | 'request_more_information';\n reasonCode?: string;\n policyVersionId?: string;\n evidenceReferenceHash?: string;\n expiresAt?: string;\n}\n\nexport interface AdminAuditSnapshot {\n generatedAt: string;\n audit: SafeAdminRecord[];\n}\n\nexport interface AdminReconciliationSnapshot {\n generatedAt: string;\n jobs: SafeAdminRecord[];\n queues: Record<string, number>;\n}\n\nexport interface ReconciliationInput {\n attemptId: string;\n}\n\nexport interface AdminRedactionSnapshot {\n generatedAt: string;\n privacyRequests: SafeAdminRecord[];\n jobs: SafeAdminRecord[];\n}\n\nexport interface RedactionInput {\n privacyRequestId: string;\n}\n\nexport interface WorkerClaimInput {\n queue: 'webhook' | 'reconciliation' | 'redaction' | 'dead_letter';\n limit?: number;\n}\n\nexport interface WorkerClaimResult {\n leases: Array<{ leaseId: string; jobId: string; queue: string }>;\n}\n\nexport interface WorkerProcessInput {\n leaseId: string;\n jobId: string;\n}\n\nexport interface WorkerProcessResult {\n processed: boolean;\n disposition: 'completed' | 'retryable' | 'dead_letter' | 'duplicate';\n}\n\nexport interface VerificationServerPlatform {\n startSession(actor: ActorContext, input: StartSessionInput, idempotencyKey: string, request: Request): Promise<SessionEnvelopeV1>;\n resumeSession(actor: ActorContext, input: SessionIdInput, request: Request): Promise<SessionEnvelopeV1>;\n getSession(actor: ActorContext, attemptId: string): Promise<SessionEnvelopeV1>;\n retrySession(actor: ActorContext, input: SessionIdInput, request: Request): Promise<SessionEnvelopeV1>;\n pauseSession(actor: ActorContext, input: SessionIdInput): Promise<SessionMutationResult>;\n cancelSession(actor: ActorContext, input: SessionIdInput): Promise<SessionMutationResult>;\n createAppeal(actor: ActorContext, input: AppealInput, idempotencyKey: string): Promise<AppealResult>;\n createSupportEscalation(actor: ActorContext, input: SupportEscalationInput, idempotencyKey: string): Promise<SupportEscalationResult>;\n ingestWebhook(provider: string, request: Request): Promise<WebhookIngestResult>;\n evaluateProtectedAction(actor: ActorContext, input: ProtectedActionInput, idempotencyKey: string): Promise<ProtectedActionDecision>;\n admin: {\n health(actor: ActorContext): Promise<AdminHealthSnapshot>;\n routes(actor: ActorContext): Promise<AdminRoutesSnapshot>;\n mutateRoute(actor: ActorContext, input: RouteChangeInput, idempotencyKey: string): Promise<SafeAdminRecord>;\n circuits(actor: ActorContext): Promise<AdminCircuitsSnapshot>;\n setCircuit(actor: ActorContext, input: CircuitInput, idempotencyKey: string): Promise<SafeAdminRecord>;\n attempts(actor: ActorContext): Promise<AdminAttemptsSnapshot>;\n review(actor: ActorContext): Promise<AdminReviewSnapshot>;\n mutateReview(actor: ActorContext, input: ReviewInput, idempotencyKey: string): Promise<SafeAdminRecord>;\n audit(actor: ActorContext): Promise<AdminAuditSnapshot>;\n reconciliation(actor: ActorContext): Promise<AdminReconciliationSnapshot>;\n enqueueReconciliation(actor: ActorContext, input: ReconciliationInput, idempotencyKey: string): Promise<SafeAdminRecord>;\n redaction(actor: ActorContext): Promise<AdminRedactionSnapshot>;\n approveRedaction(actor: ActorContext, input: RedactionInput, idempotencyKey: string): Promise<SafeAdminRecord>;\n };\n workers: {\n claim(actor: ActorContext, input: WorkerClaimInput, idempotencyKey: string): Promise<WorkerClaimResult>;\n process(actor: ActorContext, input: WorkerProcessInput, idempotencyKey: string): Promise<WorkerProcessResult>;\n };\n}\n\nexport interface VerificationFetchHandlerOptions {\n resolveActor(request: Request): Promise<ActorContext>;\n allowedOrigins?: string[];\n isCookieAuthenticated?(request: Request): boolean;\n basePath?: string;\n maxBodyBytes?: number;\n supportPath?: string;\n rateLimit?(actor: ActorContext, routeId: string): Promise<{ allowed: boolean; retryAfterSeconds?: number }>;\n}\n\nexport const FORBIDDEN_CLIENT_FIELDS = [\n 'provider',\n 'launcherKey',\n 'templateId',\n 'workflowId',\n 'apiOrigin',\n 'environment',\n 'configurationRevision',\n 'adapter',\n 'adapterVersion',\n 'routePolicyId',\n] as const;\n","import type { ActorContext, ProtectedActionDenial } from '@splitin/verification-adapter-sdk';\nimport {\n AuthorizationError,\n ClientRouteInjectionError,\n EngineError,\n type SafeAttemptView,\n type VerificationPlatform,\n} from '@splitin/verification-engine';\n\nimport { VerificationHttpError } from './errors.ts';\nimport {\n SESSION_CONTRACT_VERSION,\n type AdminAttemptsSnapshot,\n type AdminAuditSnapshot,\n type AdminCircuitsSnapshot,\n type AdminHealthSnapshot,\n type AdminReconciliationSnapshot,\n type AdminRedactionSnapshot,\n type AdminReviewSnapshot,\n type AdminRoutesSnapshot,\n type ProtectedActionDecision,\n type SafeAdminRecord,\n type SessionEnvelopeV1,\n type VerificationServerPlatform,\n type WorkerProcessResult,\n} from './types.ts';\n\nexport function createEngineServerPlatform(platform: VerificationPlatform): VerificationServerPlatform {\n return {\n async startSession(actor, input, idempotencyKey, request) {\n const view = await mapEngine(() => platform.start(actor, {\n packageCode: input.packageCode,\n countryCode: input.countryCode ?? 'US',\n subjectReference: requireSubject(actor, input.subjectReference),\n idempotencyKey,\n action: input.action,\n resourceType: input.resourceType,\n resourceReference: input.resourceReference,\n organization: input.organization,\n relationship: input.relationship,\n associatedPerson: input.associatedPerson,\n legalFirstName: input.legalFirstName,\n legalLastName: input.legalLastName,\n email: input.email,\n requestOrigin: request.headers.get('origin'),\n metadata: input.metadata,\n evidenceReferences: input.evidenceReferences,\n }));\n return toSessionEnvelope(view);\n },\n async resumeSession(actor, input, request) {\n return toSessionEnvelope(await mapEngine(() => platform.resume(actor, {\n attemptId: input.attemptId,\n requestOrigin: request.headers.get('origin'),\n })));\n },\n async getSession(actor, attemptId) {\n return toSessionEnvelope(await mapEngine(() => platform.status(actor, attemptId)));\n },\n async retrySession(actor, input, request) {\n const current = await mapEngine(() => platform.status(actor, input.attemptId));\n return toSessionEnvelope(await mapEngine(() => platform.retry(actor, {\n parentAttemptId: input.attemptId,\n packageCode: current.packageCode,\n countryCode: 'US',\n subjectReference: requireSubject(actor, undefined),\n idempotencyKey: input.idempotencyKey,\n requestOrigin: request.headers.get('origin'),\n })));\n },\n async pauseSession(actor, input) {\n const view = await mapEngine(() => platform.pause(actor, input.attemptId));\n return { attemptId: view.attemptId, status: view.status, paused: true, canResume: view.canResume, canRetry: view.canRetry };\n },\n async cancelSession(actor, input) {\n const view = await mapEngine(() => platform.cancel(actor, input.attemptId));\n return { attemptId: view.attemptId, status: view.status, canceled: true, canResume: view.canResume, canRetry: view.canRetry };\n },\n async createAppeal(actor, input) {\n const attemptId = input.attemptId;\n if (!attemptId) throw new VerificationHttpError(400, 'INVALID_REQUEST', 'An attempt ID is required.');\n const result = await mapEngine(() => platform.appeal.submit(actor, {\n attemptId,\n reason: input.reasonCode,\n }));\n return { appealId: result.appealId, status: 'open' };\n },\n async createSupportEscalation(_actor, _input, idempotencyKey) {\n return { escalationId: `esc_${idempotencyKey.replace(/[^A-Za-z0-9]/g, '').slice(0, 24)}`, status: 'open' };\n },\n async ingestWebhook(provider, request) {\n const result = await mapEngine(() => platform.ingestWebhook({\n provider,\n request,\n tenantKey: 'default',\n }));\n return { accepted: result.accepted, duplicate: result.duplicate, providerEventKey: result.eventId };\n },\n async evaluateProtectedAction(actor, input): Promise<ProtectedActionDecision> {\n const result = await mapEngine(() => platform.evaluateProtectedAction(actor, {\n action: input.action,\n resourceType: input.resourceType ?? 'resource',\n resourceReference: input.resourceReference ?? requireSubject(actor, undefined),\n subjectReference: requireSubject(actor, undefined),\n }));\n if ('allowed' in result && result.allowed) {\n return { allowed: true, enforcementActive: true };\n }\n return { allowed: false, ...(result as ProtectedActionDenial) };\n },\n admin: {\n async health(actor): Promise<AdminHealthSnapshot> {\n const payload = await mapEngine(() => platform.admin.health(actor));\n return { generatedAt: nowIso(), runtime: asRecords(payload), health: [], alerts: [] };\n },\n async routes(actor): Promise<AdminRoutesSnapshot> {\n const payload = await mapEngine(() => platform.admin.routes(actor));\n return { generatedAt: nowIso(), routes: asRecords(payload), routeChanges: [] };\n },\n async mutateRoute(actor, input) {\n if (input.operation === 'approve') {\n const result = await mapEngine(() => platform.admin.approveRoute(actor, input.requestId ?? '', input.reasonCode ?? 'approved'));\n return flatten(result);\n }\n if (input.operation === 'propose') {\n throw new VerificationHttpError(400, 'INVALID_REQUEST', 'Route proposals require a complete route payload on the engine admin API.');\n }\n throw new VerificationHttpError(400, 'INVALID_REQUEST', 'Unsupported route operation.');\n },\n async circuits(actor): Promise<AdminCircuitsSnapshot> {\n const payload = await mapEngine(() => platform.admin.circuits(actor));\n return { generatedAt: nowIso(), circuits: asRecords(payload) };\n },\n async setCircuit(actor, input) {\n if (input.status === 'circuit_open') {\n const result = await mapEngine(() => platform.admin.emergencyDrain(actor, input.provider, input.providerEnvironment, input.errorCode ?? 'admin_circuit'));\n return flatten(result);\n }\n return { provider: input.provider, status: input.status };\n },\n async attempts(actor): Promise<AdminAttemptsSnapshot> {\n const payload = await mapEngine(() => platform.admin.attempts(actor));\n return { generatedAt: nowIso(), attempts: asRecords(payload) };\n },\n async review(_actor): Promise<AdminReviewSnapshot> {\n return { generatedAt: nowIso(), appeals: [], manualExceptions: [], policyVersions: [] };\n },\n async mutateReview(actor, input) {\n const requestId = input.requestId;\n if (input.operation === 'approve_manual_exception' && requestId) {\n const result = await mapEngine(() => platform.review.decide(actor, {\n proposalId: requestId,\n transition: input.decision === 'deny' ? 'deny' : 'approve',\n reason: input.reasonCode ?? 'approved',\n }));\n return flatten(result);\n }\n if (input.operation === 'propose_manual_exception' && requestId) {\n const result = await mapEngine(() => platform.review.propose(actor, {\n attemptId: requestId,\n proposedStatus: 'verified',\n reason: input.reasonCode ?? 'proposed',\n }));\n return flatten(result);\n }\n throw new VerificationHttpError(400, 'INVALID_REQUEST', 'Unsupported review operation.');\n },\n async audit(actor): Promise<AdminAuditSnapshot> {\n const payload = await mapEngine(() => platform.admin.audit(actor));\n return { generatedAt: nowIso(), audit: asRecords(payload) };\n },\n async reconciliation(_actor): Promise<AdminReconciliationSnapshot> {\n return { generatedAt: nowIso(), jobs: [], queues: {} };\n },\n async enqueueReconciliation(actor, input) {\n const result = await mapEngine(() => platform.reconcile(actor, input.attemptId));\n return flatten(result);\n },\n async redaction(_actor): Promise<AdminRedactionSnapshot> {\n return { generatedAt: nowIso(), privacyRequests: [], jobs: [] };\n },\n async approveRedaction(actor, input) {\n const result = await mapEngine(() => platform.redact(actor, {\n subjectReference: requireSubject(actor, undefined),\n requestReference: input.privacyRequestId,\n }));\n return flatten(result);\n },\n },\n workers: {\n async claim(actor, input) {\n const kinds = input.queue === 'reconciliation'\n ? ['reconcile' as const]\n : input.queue === 'dead_letter'\n ? ['webhook' as const, 'reconcile' as const, 'redact' as const]\n : [input.queue === 'redaction' ? 'redact' as const : 'webhook' as const];\n const jobs = await mapEngine(() => platform.workers.claim(actor, {\n workerId: actor.actorId,\n kinds,\n limit: input.limit ?? 8,\n }));\n return {\n leases: jobs.map((job) => ({\n leaseId: job.leaseId ?? job.id,\n jobId: job.id,\n queue: input.queue,\n })),\n };\n },\n async process(actor, input) {\n const result = await mapEngine(() => platform.workers.process(actor, { id: input.jobId }));\n return { processed: result.processed, disposition: result.disposition as WorkerProcessResult['disposition'] };\n },\n },\n };\n}\n\nfunction toSessionEnvelope(view: SafeAttemptView): SessionEnvelopeV1 {\n return {\n contractVersion: SESSION_CONTRACT_VERSION,\n attemptId: view.attemptId,\n packageCode: view.packageCode,\n status: view.status,\n presentation: view.launch?.presentation ?? 'none',\n launch: view.launch,\n launcherKey: view.launch?.launcherKey ?? null,\n providerDisclosure: view.launch?.providerDisclosure ?? null,\n safeErrorCode: view.safeErrorCode,\n retryAfter: view.retryAfter,\n supportPath: view.supportPath,\n expiresAt: view.expiresAt,\n canResume: view.canResume,\n canRetry: view.canRetry,\n continuation: null,\n };\n}\n\nfunction requireSubject(actor: ActorContext, explicit?: string): string {\n const subject = explicit ?? actor.authorizedSubjectScope[0];\n if (!subject) throw new VerificationHttpError(400, 'INVALID_REQUEST', 'A subject reference is required.');\n return subject;\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction asRecords(value: unknown): SafeAdminRecord[] {\n if (Array.isArray(value)) {\n return value.map((item) => flatten(item));\n }\n return [flatten(value)];\n}\n\nfunction flatten(value: unknown): SafeAdminRecord {\n if (!value || typeof value !== 'object') return { value: String(value) };\n const record: SafeAdminRecord = {};\n for (const [key, nested] of Object.entries(value as Record<string, unknown>)) {\n if (nested === null || ['string', 'number', 'boolean'].includes(typeof nested)) {\n record[key] = nested as string | number | boolean | null;\n }\n }\n return record;\n}\n\nasync function mapEngine<T>(operation: () => Promise<T>): Promise<T> {\n try {\n return await operation();\n } catch (error) {\n if (error instanceof VerificationHttpError) throw error;\n if (error instanceof AuthorizationError) {\n throw new VerificationHttpError(403, 'FORBIDDEN', error.message);\n }\n if (error instanceof ClientRouteInjectionError) {\n throw new VerificationHttpError(400, 'UNSUPPORTED_REQUEST_FIELD', error.message);\n }\n if (error instanceof EngineError) {\n const status = error.code === 'ATTEMPT_NOT_FOUND' ? 404\n : error.code === 'PRODUCTION_NOT_ACTIVATED' || error.code === 'NO_ELIGIBLE_ROUTE' ? 409\n : error.retryable ? 503 : 409;\n throw new VerificationHttpError(status, error.code, error.message, error.retryAfterSeconds ?? null);\n }\n throw error;\n }\n}\n","import type { ActorContext } from '@splitin/verification-adapter-sdk';\n\nimport type { RouteAuth, RouteDefinition } from './catalog.ts';\nimport { VerificationHttpError } from './errors.ts';\n\nconst IDEMPOTENCY_KEY = /^[A-Za-z0-9._:~-]{8,128}$/;\nconst OPERATOR_ROLES = new Set(['operator', 'admin', 'reviewer', 'approver']);\nconst SYSTEM_ROLES = new Set(['system', 'worker']);\n\nexport function isCookieAuthenticated(request: Request, override?: (request: Request) => boolean): boolean {\n if (override) return override(request);\n const authorization = request.headers.get('authorization') ?? '';\n if (/^bearer\\s+/i.test(authorization)) return false;\n return Boolean(request.headers.get('cookie'));\n}\n\nexport function requireCsrf(request: Request, route: RouteDefinition, allowedOrigins: string[]): void {\n if (!route.csrf) return;\n const origin = request.headers.get('origin') ?? originFromReferer(request.headers.get('referer'));\n if (!origin) {\n throw new VerificationHttpError(403, 'CSRF_REJECTED', 'Cookie-authenticated mutations require a trusted Origin.');\n }\n if (!allowedOrigins.includes(origin)) {\n throw new VerificationHttpError(403, 'ORIGIN_NOT_ALLOWED', 'Request origin is not allowed.');\n }\n}\n\nexport function requireOriginWhenPresent(request: Request, allowedOrigins: string[]): void {\n const origin = request.headers.get('origin');\n if (!origin) return;\n if (!allowedOrigins.includes(origin)) {\n throw new VerificationHttpError(403, 'ORIGIN_NOT_ALLOWED', 'Request origin is not allowed.');\n }\n}\n\nexport function requireIdempotencyKey(request: Request, route: RouteDefinition): string | undefined {\n if (!route.idempotency) return undefined;\n const key = request.headers.get('idempotency-key')?.trim();\n if (!key) {\n throw new VerificationHttpError(400, 'IDEMPOTENCY_KEY_REQUIRED', 'Mutations require an Idempotency-Key header.');\n }\n if (!IDEMPOTENCY_KEY.test(key)) {\n throw new VerificationHttpError(400, 'INVALID_IDEMPOTENCY_KEY', 'Idempotency-Key is invalid.');\n }\n return key;\n}\n\nexport function authorizeActor(actor: ActorContext, auth: RouteAuth): void {\n if (auth === 'none') return;\n if (!actor.actorId || !actor.tenantKey) {\n throw new VerificationHttpError(401, 'UNAUTHENTICATED', 'Authentication is required.');\n }\n if (auth === 'actor') {\n if (actor.actorType === 'system' && !hasRole(actor, SYSTEM_ROLES) && !hasRole(actor, OPERATOR_ROLES)) {\n throw new VerificationHttpError(403, 'FORBIDDEN', 'This actor cannot access subject verification sessions.');\n }\n return;\n }\n if (auth === 'operator') {\n if (actor.actorType !== 'operator' && !hasRole(actor, OPERATOR_ROLES)) {\n throw new VerificationHttpError(403, 'FORBIDDEN', 'Operator authorization is required.');\n }\n return;\n }\n if (auth === 'system') {\n if (actor.actorType !== 'system' && !hasRole(actor, SYSTEM_ROLES)) {\n throw new VerificationHttpError(403, 'FORBIDDEN', 'Worker authorization is required.');\n }\n }\n}\n\nexport function authorizeSubjectScope(actor: ActorContext, subjectReference: string | undefined): void {\n if (!subjectReference) return;\n if (actor.actorType === 'operator' || actor.actorType === 'system') return;\n if (subjectReference === actor.actorId) return;\n if (actor.authorizedSubjectScope.includes('*')) return;\n if (actor.authorizedSubjectScope.includes(subjectReference)) return;\n throw new VerificationHttpError(403, 'FORBIDDEN', 'The actor is not authorized for this subject.');\n}\n\nexport function assertSeparationOfDuties(actor: ActorContext, otherActorId: string | null | undefined, action: string): void {\n if (!otherActorId) return;\n if (otherActorId === actor.actorId) {\n throw new VerificationHttpError(\n 403,\n 'SEPARATION_OF_DUTIES',\n `A different authorized operator must ${action}.`,\n );\n }\n}\n\nfunction hasRole(actor: ActorContext, allowed: Set<string>): boolean {\n return actor.roles.some((role) => allowed.has(role));\n}\n\nfunction originFromReferer(referer: string | null): string | null {\n if (!referer) return null;\n try {\n return new URL(referer).origin;\n } catch {\n return null;\n }\n}\n\nexport function corsHeaders(request: Request, allowedOrigins: string[]): Record<string, string> {\n const origin = request.headers.get('origin');\n const allowOrigin = origin && allowedOrigins.includes(origin) ? origin : allowedOrigins[0] ?? '';\n return {\n Vary: 'Origin',\n 'Access-Control-Allow-Origin': allowOrigin,\n 'Access-Control-Allow-Headers': 'Authorization, Content-Type, Idempotency-Key, X-CSRF-Token',\n 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',\n 'Access-Control-Allow-Credentials': 'true',\n };\n}\n","import { VerificationHttpError } from './errors.ts';\nimport { FORBIDDEN_CLIENT_FIELDS } from './types.ts';\n\nexport type JsonRecord = Record<string, unknown>;\n\nexport function jsonResponse(\n body: unknown,\n status: number,\n extra: Record<string, string> = {},\n): Response {\n const headers = new Headers({\n 'Cache-Control': 'no-store',\n 'Content-Type': 'application/json; charset=utf-8',\n ...extra,\n });\n if (typeof extra['Retry-After'] === 'string') headers.set('Retry-After', extra['Retry-After']);\n return new Response(JSON.stringify(body), { status, headers });\n}\n\nexport async function readLimitedBody(request: Request, maxBodyBytes: number): Promise<Request> {\n if (request.method === 'GET' || request.method === 'HEAD' || request.method === 'OPTIONS') {\n return request;\n }\n const raw = new Uint8Array(await request.arrayBuffer());\n if (raw.byteLength > maxBodyBytes) {\n throw new VerificationHttpError(413, 'PAYLOAD_TOO_LARGE', 'Request body exceeds the allowed size.');\n }\n return new Request(request.url, {\n method: request.method,\n headers: request.headers,\n body: raw.byteLength > 0 ? raw : undefined,\n });\n}\n\nexport async function parseJsonObject(\n request: Request,\n allowedKeys: readonly string[],\n options: { rejectRoutingFields?: boolean } = {},\n): Promise<JsonRecord> {\n const contentType = request.headers.get('content-type') ?? '';\n if (contentType && !contentType.toLowerCase().includes('application/json')) {\n throw new VerificationHttpError(415, 'INVALID_REQUEST', 'Content-Type must be application/json.');\n }\n let body: unknown;\n try {\n const text = await request.text();\n body = text.trim() ? JSON.parse(text) : {};\n } catch {\n throw new VerificationHttpError(400, 'INVALID_JSON', 'Request body must be valid JSON.');\n }\n if (!isPlainRecord(body)) {\n throw new VerificationHttpError(400, 'INVALID_REQUEST', 'Request body must be an object.');\n }\n for (const key of Object.keys(body)) {\n if (options.rejectRoutingFields && (FORBIDDEN_CLIENT_FIELDS as readonly string[]).includes(key)) {\n throw new VerificationHttpError(400, 'UNSUPPORTED_REQUEST_FIELD', `Unsupported request field: ${key}.`);\n }\n if (!allowedKeys.includes(key)) {\n throw new VerificationHttpError(400, 'UNSUPPORTED_REQUEST_FIELD', `Unsupported request field: ${key}.`);\n }\n }\n return body;\n}\n\nexport function requiredString(body: JsonRecord, field: string, pattern: RegExp, maxLength: number): string {\n const value = body[field];\n if (typeof value !== 'string' || !pattern.test(value) || value.length > maxLength) {\n throw new VerificationHttpError(400, 'INVALID_REQUEST', `Invalid ${field}.`);\n }\n return value;\n}\n\nexport function optionalString(body: JsonRecord, field: string, pattern: RegExp, maxLength: number): string | undefined {\n const value = body[field];\n if (value === undefined || value === null) return undefined;\n if (typeof value !== 'string' || !pattern.test(value) || value.length > maxLength) {\n throw new VerificationHttpError(400, 'INVALID_REQUEST', `Invalid ${field}.`);\n }\n return value;\n}\n\nexport function optionalBoolean(body: JsonRecord, field: string): boolean | undefined {\n const value = body[field];\n if (value === undefined) return undefined;\n if (typeof value !== 'boolean') {\n throw new VerificationHttpError(400, 'INVALID_REQUEST', `Invalid ${field}.`);\n }\n return value;\n}\n\nexport function isPlainRecord(value: unknown): value is JsonRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { isPackageCode, isProviderCode } from '@splitin/verification-adapter-sdk';\n\nimport {\n assertSeparationOfDuties,\n authorizeActor,\n authorizeSubjectScope,\n corsHeaders,\n isCookieAuthenticated,\n requireCsrf,\n requireIdempotencyKey,\n requireOriginWhenPresent,\n} from './auth.ts';\nimport { matchV1Route } from './catalog.ts';\nimport { toSafeErrorEnvelope, VerificationHttpError } from './errors.ts';\nimport {\n jsonResponse,\n optionalBoolean,\n optionalString,\n parseJsonObject,\n readLimitedBody,\n requiredString,\n type JsonRecord,\n} from './json.ts';\nimport type {\n CircuitInput,\n ProtectedActionInput,\n ReviewInput,\n RouteChangeInput,\n StartSessionInput,\n VerificationFetchHandlerOptions,\n VerificationServerPlatform,\n} from './types.ts';\n\nconst PACKAGE = /^[a-z0-9][a-z0-9_.-]{1,80}$/;\nconst ACTION = /^[a-z][a-z0-9_]*(?:\\.[a-z][a-z0-9_]*)+$/;\nconst IDENTIFIER = /^[A-Za-z0-9._:~-]{4,128}$/;\nconst REASON = /^[a-z][a-z0-9_.-]{2,127}$/;\nconst COUNTRY = /^[A-Z]{2}$/;\nconst HASH = /^[a-f0-9]{64}$/;\nconst ATTEMPT_ID = /^[A-Za-z0-9._:~-]{8,128}$/;\n\nconst SESSION_KEYS = [\n 'packageCode', 'countryCode', 'action', 'resourceType', 'resourceReference', 'subjectReference',\n 'continuationToken', 'continuationKey', 'legalFirstName', 'legalLastName', 'email',\n 'organization', 'relationship', 'associatedPerson', 'evidenceReferences', 'metadata',\n] as const;\n\nconst APPEAL_KEYS = ['attemptId', 'reasonCode', 'nonBiometricPathRequested', 'details'] as const;\nconst SUPPORT_KEYS = ['attemptId', 'appealId', 'reasonCode', 'message'] as const;\nconst PROTECTED_KEYS = ['action', 'resourceType', 'resourceReference'] as const;\nconst ROUTE_KEYS = ['operation', 'targetRoutePolicyId', 'requestId', 'action', 'reasonCode'] as const;\nconst CIRCUIT_KEYS = ['provider', 'providerEnvironment', 'status', 'errorCode', 'circuitOpenUntil'] as const;\nconst REVIEW_KEYS = [\n 'operation', 'appealId', 'requestId', 'packageCode', 'decision', 'reasonCode',\n 'policyVersionId', 'evidenceReferenceHash', 'expiresAt',\n] as const;\nconst RECONCILE_KEYS = ['attemptId'] as const;\nconst REDACT_KEYS = ['privacyRequestId'] as const;\nconst WORKER_CLAIM_KEYS = ['queue', 'limit'] as const;\nconst WORKER_PROCESS_KEYS = ['leaseId', 'jobId'] as const;\n\nexport function createVerificationFetchHandler(\n platform: VerificationServerPlatform,\n options: VerificationFetchHandlerOptions,\n): (request: Request) => Promise<Response> {\n const allowedOrigins = options.allowedOrigins ?? [];\n const supportPath = options.supportPath ?? null;\n const maxBodyBytes = options.maxBodyBytes ?? 1024 * 1024;\n\n return async (incoming: Request): Promise<Response> => {\n const extra = corsHeaders(incoming, allowedOrigins);\n try {\n requireOriginWhenPresent(incoming, allowedOrigins.length > 0 ? allowedOrigins : [incoming.headers.get('origin') ?? '']);\n const request = await readLimitedBody(incoming, maxBodyBytes);\n const url = new URL(request.url);\n const matched = matchV1Route(request.method, url.pathname, options.basePath);\n if (!matched) {\n if (request.method === 'OPTIONS') {\n return new Response(null, { status: 204, headers: extra });\n }\n throw new VerificationHttpError(404, 'NOT_FOUND', 'The verification endpoint was not found.');\n }\n const { route, params } = matched;\n if (route.method === 'OPTIONS') {\n return new Response(null, { status: 204, headers: extra });\n }\n\n if (route.id === 'webhooks.ingest') {\n const provider = params.provider ?? '';\n if (!isProviderCode(provider)) {\n throw new VerificationHttpError(400, 'INVALID_REQUEST', 'Invalid provider.');\n }\n const result = await platform.ingestWebhook(provider, request);\n return jsonResponse(result, result.accepted ? 202 : 400, extra);\n }\n\n if (isCookieAuthenticated(request, options.isCookieAuthenticated) && route.csrf) {\n if (allowedOrigins.length === 0) {\n throw new VerificationHttpError(403, 'CSRF_REJECTED', 'Cookie-authenticated mutations require an origin allowlist.');\n }\n requireCsrf(request, route, allowedOrigins);\n }\n\n const actor = await options.resolveActor(request);\n authorizeActor(actor, route.auth);\n const idempotencyKey = requireIdempotencyKey(request, route) ?? '';\n\n if (options.rateLimit) {\n const budget = await options.rateLimit(actor, route.id);\n if (!budget.allowed) {\n throw new VerificationHttpError(429, 'RATE_LIMITED', 'Please wait before retrying.', budget.retryAfterSeconds ?? 30);\n }\n }\n\n const body = route.mutation && route.method === 'POST' && route.id !== 'sessions.get'\n ? await parseBodyForRoute(route.id, request)\n : {};\n\n const payload = await dispatch(platform, route.id, {\n actor,\n params,\n body,\n idempotencyKey,\n request,\n });\n return jsonResponse(payload, route.mutation && route.method === 'POST' ? 200 : 200, extra);\n } catch (error) {\n const mapped = toSafeErrorEnvelope(error, supportPath);\n const headers = { ...extra };\n if (mapped.retryAfterSeconds !== null) headers['Retry-After'] = String(Math.max(1, Math.ceil(mapped.retryAfterSeconds)));\n return jsonResponse(mapped.body, mapped.status, headers);\n }\n };\n}\n\nasync function parseBodyForRoute(routeId: string, request: Request): Promise<JsonRecord> {\n switch (routeId) {\n case 'sessions.create':\n return parseJsonObject(request, SESSION_KEYS, { rejectRoutingFields: true });\n case 'sessions.resume':\n case 'sessions.retry':\n case 'sessions.pause':\n case 'sessions.cancel':\n return parseJsonObject(request, []);\n case 'appeals.create':\n return parseJsonObject(request, APPEAL_KEYS);\n case 'support.escalations':\n return parseJsonObject(request, SUPPORT_KEYS);\n case 'protectedActions.evaluate':\n return parseJsonObject(request, PROTECTED_KEYS);\n case 'admin.routes.mutate':\n return parseJsonObject(request, ROUTE_KEYS, { rejectRoutingFields: false });\n case 'admin.circuits.mutate':\n return parseJsonObject(request, CIRCUIT_KEYS, { rejectRoutingFields: false });\n case 'admin.review.mutate':\n return parseJsonObject(request, REVIEW_KEYS, { rejectRoutingFields: false });\n case 'admin.reconciliation.mutate':\n return parseJsonObject(request, RECONCILE_KEYS, { rejectRoutingFields: false });\n case 'admin.redaction.mutate':\n return parseJsonObject(request, REDACT_KEYS, { rejectRoutingFields: false });\n case 'workers.claim':\n return parseJsonObject(request, WORKER_CLAIM_KEYS, { rejectRoutingFields: false });\n case 'workers.process':\n return parseJsonObject(request, WORKER_PROCESS_KEYS, { rejectRoutingFields: false });\n default:\n return {};\n }\n}\n\nasync function dispatch(\n platform: VerificationServerPlatform,\n routeId: string,\n ctx: {\n actor: import('@splitin/verification-adapter-sdk').ActorContext;\n params: Record<string, string>;\n body: JsonRecord;\n idempotencyKey: string;\n request: Request;\n },\n): Promise<unknown> {\n const attemptId = ctx.params.id;\n switch (routeId) {\n case 'sessions.create': {\n const input = parseStartInput(ctx.body);\n authorizeSubjectScope(ctx.actor, input.subjectReference);\n return platform.startSession(ctx.actor, input, ctx.idempotencyKey, ctx.request);\n }\n case 'sessions.resume':\n return platform.resumeSession(ctx.actor, { attemptId: requireAttemptId(attemptId), idempotencyKey: ctx.idempotencyKey }, ctx.request);\n case 'sessions.get':\n return platform.getSession(ctx.actor, requireAttemptId(attemptId));\n case 'sessions.retry':\n return platform.retrySession(ctx.actor, { attemptId: requireAttemptId(attemptId), idempotencyKey: ctx.idempotencyKey }, ctx.request);\n case 'sessions.pause':\n return platform.pauseSession(ctx.actor, { attemptId: requireAttemptId(attemptId), idempotencyKey: ctx.idempotencyKey });\n case 'sessions.cancel':\n return platform.cancelSession(ctx.actor, { attemptId: requireAttemptId(attemptId), idempotencyKey: ctx.idempotencyKey });\n case 'appeals.create':\n return platform.createAppeal(ctx.actor, {\n attemptId: optionalString(ctx.body, 'attemptId', ATTEMPT_ID, 128),\n reasonCode: requiredString(ctx.body, 'reasonCode', REASON, 128),\n nonBiometricPathRequested: optionalBoolean(ctx.body, 'nonBiometricPathRequested'),\n details: optionalString(ctx.body, 'details', /^[\\s\\S]{1,2000}$/, 2000),\n }, ctx.idempotencyKey);\n case 'support.escalations':\n return platform.createSupportEscalation(ctx.actor, {\n attemptId: optionalString(ctx.body, 'attemptId', ATTEMPT_ID, 128),\n appealId: optionalString(ctx.body, 'appealId', ATTEMPT_ID, 128),\n reasonCode: requiredString(ctx.body, 'reasonCode', REASON, 128),\n message: optionalString(ctx.body, 'message', /^[\\s\\S]{1,2000}$/, 2000),\n }, ctx.idempotencyKey);\n case 'protectedActions.evaluate':\n return platform.evaluateProtectedAction(ctx.actor, parseProtectedAction(ctx.body), ctx.idempotencyKey);\n case 'admin.health':\n return platform.admin.health(ctx.actor);\n case 'admin.routes.get':\n return platform.admin.routes(ctx.actor);\n case 'admin.routes.mutate':\n return mutateRoute(platform, ctx.actor, ctx.body, ctx.idempotencyKey);\n case 'admin.circuits.get':\n return platform.admin.circuits(ctx.actor);\n case 'admin.circuits.mutate':\n return platform.admin.setCircuit(ctx.actor, parseCircuit(ctx.body), ctx.idempotencyKey);\n case 'admin.attempts':\n return platform.admin.attempts(ctx.actor);\n case 'admin.review.get':\n return platform.admin.review(ctx.actor);\n case 'admin.review.mutate':\n return mutateReview(platform, ctx.actor, ctx.body, ctx.idempotencyKey);\n case 'admin.audit':\n return platform.admin.audit(ctx.actor);\n case 'admin.reconciliation.get':\n return platform.admin.reconciliation(ctx.actor);\n case 'admin.reconciliation.mutate':\n return platform.admin.enqueueReconciliation(ctx.actor, {\n attemptId: requiredString(ctx.body, 'attemptId', ATTEMPT_ID, 128),\n }, ctx.idempotencyKey);\n case 'admin.redaction.get':\n return platform.admin.redaction(ctx.actor);\n case 'admin.redaction.mutate':\n return platform.admin.approveRedaction(ctx.actor, {\n privacyRequestId: requiredString(ctx.body, 'privacyRequestId', IDENTIFIER, 128),\n }, ctx.idempotencyKey);\n case 'workers.claim':\n return platform.workers.claim(ctx.actor, {\n queue: parseWorkerQueue(ctx.body.queue),\n limit: typeof ctx.body.limit === 'number' ? ctx.body.limit : undefined,\n }, ctx.idempotencyKey);\n case 'workers.process':\n return platform.workers.process(ctx.actor, {\n leaseId: requiredString(ctx.body, 'leaseId', IDENTIFIER, 128),\n jobId: requiredString(ctx.body, 'jobId', IDENTIFIER, 128),\n }, ctx.idempotencyKey);\n default:\n throw new VerificationHttpError(404, 'NOT_FOUND', 'The verification endpoint was not found.');\n }\n}\n\nfunction parseStartInput(body: JsonRecord): StartSessionInput {\n const packageCode = requiredString(body, 'packageCode', PACKAGE, 80);\n if (!isPackageCode(packageCode)) {\n throw new VerificationHttpError(400, 'INVALID_REQUEST', 'Invalid packageCode.');\n }\n return {\n packageCode,\n countryCode: optionalString(body, 'countryCode', COUNTRY, 2),\n action: optionalString(body, 'action', ACTION, 160),\n resourceType: optionalString(body, 'resourceType', /^[a-z][a-z0-9_]{1,63}$/, 64),\n resourceReference: optionalString(body, 'resourceReference', IDENTIFIER, 128),\n subjectReference: optionalString(body, 'subjectReference', IDENTIFIER, 128),\n continuationToken: optionalString(body, 'continuationToken', HASH, 64),\n continuationKey: optionalString(body, 'continuationKey', /^[a-z][a-z0-9_.-]{2,127}$/, 128),\n legalFirstName: optionalString(body, 'legalFirstName', /^[\\p{L}\\p{M}\\s'.-]{1,80}$/u, 80) ?? null,\n legalLastName: optionalString(body, 'legalLastName', /^[\\p{L}\\p{M}\\s'.-]{1,80}$/u, 80) ?? null,\n email: optionalString(body, 'email', /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/, 254) ?? null,\n organization: isRecord(body.organization) ? body.organization as unknown as StartSessionInput['organization'] : undefined,\n relationship: isRecord(body.relationship) ? body.relationship as unknown as StartSessionInput['relationship'] : undefined,\n associatedPerson: isRecord(body.associatedPerson) ? body.associatedPerson as unknown as StartSessionInput['associatedPerson'] : undefined,\n evidenceReferences: Array.isArray(body.evidenceReferences)\n ? body.evidenceReferences.filter((value): value is string => typeof value === 'string')\n : undefined,\n metadata: isRecord(body.metadata) ? sanitizeMetadata(body.metadata) : undefined,\n };\n}\n\nfunction parseProtectedAction(body: JsonRecord): ProtectedActionInput {\n return {\n action: requiredString(body, 'action', ACTION, 160),\n resourceType: optionalString(body, 'resourceType', /^[a-z][a-z0-9_]{1,63}$/, 64),\n resourceReference: optionalString(body, 'resourceReference', IDENTIFIER, 128),\n };\n}\n\nfunction parseCircuit(body: JsonRecord): CircuitInput {\n const status = requiredString(body, 'status', /^(healthy|degraded|unavailable|circuit_open)$/, 32);\n const environment = requiredString(body, 'providerEnvironment', /^(sandbox|production)$/, 16);\n return {\n provider: requiredString(body, 'provider', /^[a-z][a-z0-9_]{1,63}$/, 64),\n providerEnvironment: environment as CircuitInput['providerEnvironment'],\n status: status as CircuitInput['status'],\n errorCode: optionalString(body, 'errorCode', /^[A-Z][A-Z0-9_]{2,127}$/, 128),\n circuitOpenUntil: optionalString(body, 'circuitOpenUntil', /^\\d{4}-\\d{2}-\\d{2}T/, 40),\n };\n}\n\nasync function mutateRoute(\n platform: VerificationServerPlatform,\n actor: import('@splitin/verification-adapter-sdk').ActorContext,\n body: JsonRecord,\n idempotencyKey: string,\n) {\n const operation = requiredString(body, 'operation', /^(propose|approve|apply)$/, 16) as RouteChangeInput['operation'];\n const input: RouteChangeInput = {\n operation,\n targetRoutePolicyId: optionalString(body, 'targetRoutePolicyId', IDENTIFIER, 128),\n requestId: optionalString(body, 'requestId', IDENTIFIER, 128),\n action: optionalString(body, 'action', /^(activate|drain|rollback)$/, 16) as RouteChangeInput['action'],\n reasonCode: optionalString(body, 'reasonCode', REASON, 128),\n };\n if (operation !== 'propose') {\n const snapshot = await platform.admin.routes(actor);\n const change = snapshot.routeChanges.find((row) => row.id === input.requestId);\n if (operation === 'approve') assertSeparationOfDuties(actor, stringField(change, 'proposedBy'), 'approve this route change');\n if (operation === 'apply') assertSeparationOfDuties(actor, stringField(change, 'approvedBy'), 'apply this route change');\n }\n return platform.admin.mutateRoute(actor, input, idempotencyKey);\n}\n\nasync function mutateReview(\n platform: VerificationServerPlatform,\n actor: import('@splitin/verification-adapter-sdk').ActorContext,\n body: JsonRecord,\n idempotencyKey: string,\n) {\n const operation = requiredString(\n body,\n 'operation',\n /^(begin_appeal_review|propose_manual_exception|approve_manual_exception|apply_manual_exception)$/,\n 40,\n ) as ReviewInput['operation'];\n const input: ReviewInput = {\n operation,\n appealId: optionalString(body, 'appealId', IDENTIFIER, 128),\n requestId: optionalString(body, 'requestId', IDENTIFIER, 128),\n packageCode: optionalString(body, 'packageCode', PACKAGE, 80),\n decision: optionalString(body, 'decision', /^(approve|deny|revoke|request_more_information)$/, 40) as ReviewInput['decision'],\n reasonCode: optionalString(body, 'reasonCode', REASON, 128),\n policyVersionId: optionalString(body, 'policyVersionId', IDENTIFIER, 128),\n evidenceReferenceHash: optionalString(body, 'evidenceReferenceHash', HASH, 64),\n expiresAt: optionalString(body, 'expiresAt', /^\\d{4}-\\d{2}-\\d{2}T/, 40),\n };\n if (operation === 'approve_manual_exception' || operation === 'apply_manual_exception') {\n const snapshot = await platform.admin.review(actor);\n const exception = snapshot.manualExceptions.find((row) => row.id === input.requestId);\n if (operation === 'approve_manual_exception') {\n assertSeparationOfDuties(actor, stringField(exception, 'proposedBy'), 'approve this manual exception');\n }\n if (operation === 'apply_manual_exception') {\n assertSeparationOfDuties(actor, stringField(exception, 'approvedBy'), 'apply this manual exception');\n }\n }\n return platform.admin.mutateReview(actor, input, idempotencyKey);\n}\n\nfunction parseWorkerQueue(value: unknown): 'webhook' | 'reconciliation' | 'redaction' | 'dead_letter' {\n if (value === 'webhook' || value === 'reconciliation' || value === 'redaction' || value === 'dead_letter') return value;\n throw new VerificationHttpError(400, 'INVALID_REQUEST', 'Invalid queue.');\n}\n\nfunction requireAttemptId(value: string | undefined): string {\n if (!value || !ATTEMPT_ID.test(value)) {\n throw new VerificationHttpError(400, 'INVALID_REQUEST', 'Invalid attempt id.');\n }\n return value;\n}\n\nfunction sanitizeMetadata(value: JsonRecord): Record<string, string | number | boolean | null> {\n const result: Record<string, string | number | boolean | null> = {};\n for (const [key, nested] of Object.entries(value)) {\n if (typeof nested === 'string' || typeof nested === 'number' || typeof nested === 'boolean' || nested === null) {\n result[key] = nested;\n }\n }\n return result;\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction stringField(record: { [key: string]: string | number | boolean | null | undefined } | undefined, key: string): string | null {\n const value = record?.[key];\n return typeof value === 'string' ? value : null;\n}\n","import { listV1Paths, V1_ROUTES } from './catalog.ts';\n\nexport function buildOpenApiDocument(): Record<string, unknown> {\n const paths: Record<string, Record<string, unknown>> = {};\n for (const route of V1_ROUTES) {\n const path = toOpenApiPath(route.path);\n const item = paths[path] ?? {};\n item[route.method.toLowerCase()] = {\n operationId: route.id,\n summary: route.id.replace(/[._]/g, ' '),\n security: route.auth === 'none' ? [] : [{ actor: [] }],\n parameters: [\n ...(route.idempotency\n ? [{\n name: 'Idempotency-Key',\n in: 'header',\n required: true,\n schema: { type: 'string', minLength: 8, maxLength: 128 },\n }]\n : []),\n ...pathParams(path),\n ],\n responses: {\n '200': { description: 'Success', content: { 'application/json': { schema: { type: 'object' } } } },\n '202': { description: 'Accepted' },\n '400': { description: 'Invalid request', content: { 'application/json': { schema: { $ref: '#/components/schemas/SafeErrorEnvelope' } } } },\n '401': { description: 'Unauthenticated' },\n '403': { description: 'Forbidden' },\n '404': { description: 'Not found' },\n },\n };\n paths[path] = item;\n }\n return {\n openapi: '3.1.0',\n info: {\n title: 'SplitIn Verification Server API',\n version: '1.0.0',\n license: { name: 'MIT' },\n description: 'Provider-neutral verification session, webhook, worker, and operations API.',\n },\n servers: [{ url: '/' }],\n paths,\n components: {\n securitySchemes: {\n actor: { type: 'http', scheme: 'bearer', description: 'Host-authenticated actor. Cookies require Origin/CSRF.' },\n },\n schemas: {\n SafeErrorEnvelope: {\n type: 'object',\n additionalProperties: false,\n required: ['contractVersion', 'error', 'safeErrorCode', 'retryAfter', 'supportPath'],\n properties: {\n contractVersion: { const: '1.0.0' },\n error: {\n type: 'object',\n required: ['code', 'message', 'retryable'],\n properties: {\n code: { type: 'string' },\n message: { type: 'string' },\n retryable: { type: 'boolean' },\n },\n },\n safeErrorCode: { type: 'string' },\n retryAfter: { type: ['integer', 'null'] },\n supportPath: { type: ['string', 'null'] },\n },\n },\n },\n },\n };\n}\n\nexport function openApiPathList(): string[] {\n return listV1Paths();\n}\n\nexport function toOpenApiPath(path: string): string {\n return path.replace(/:([A-Za-z0-9_]+)/g, '{$1}');\n}\n\nfunction pathParams(path: string): Array<Record<string, unknown>> {\n return [...path.matchAll(/\\{([A-Za-z0-9_]+)\\}/g)].map((match) => ({\n name: match[1],\n in: 'path',\n required: true,\n schema: { type: 'string' },\n }));\n}\n"]}