@splitin/verification-postgres 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.
- package/LICENSE +21 -0
- package/NOTICE +32 -0
- package/QUERY_PLANS.md +90 -0
- package/README.md +13 -0
- package/dist/index.cjs +1494 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +39 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1487 -0
- package/dist/index.js.map +1 -0
- package/migrations/001_init.down.sql +25 -0
- package/migrations/001_init.sql +419 -0
- package/migrations/002_seed.down.sql +4 -0
- package/migrations/002_seed.sql +40 -0
- package/migrations/003_retention.down.sql +8 -0
- package/migrations/003_retention.sql +28 -0
- package/migrations/supabaseHardening.sql +64 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/catalog.ts","../src/executor.ts","../src/store.ts","../src/queue.ts"],"names":["hmacSha256Hex","result","backoffSeconds"],"mappings":"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","file":"index.cjs","sourcesContent":["export const SCHEMA_NAME = 'verification' as const;\n\nexport const REQUIRED_TABLES = [\n 'tenants',\n 'configuration_revisions',\n 'provider_definitions',\n 'routes',\n 'route_change_requests',\n 'policy_versions',\n 'protected_action_requirements',\n 'attempts',\n 'provider_resource_lineage',\n 'decisions',\n 'idempotency_claims',\n 'webhook_events',\n 'webhook_leases',\n 'reconciliation_jobs',\n 'redaction_jobs',\n 'provider_health_observations',\n 'circuits',\n 'appeals',\n 'review_cases',\n 'manual_decision_proposals',\n 'audit_events',\n 'continuations',\n] as const;\n\nexport const REDACTION_STATUSES = [\n 'scheduled',\n 'processing',\n 'retryable',\n 'redacted',\n 'not_applicable',\n 'dead_letter',\n] as const;\n","export interface SqlQueryResult<T = Record<string, unknown>> {\n rows: T[];\n rowCount: number;\n}\n\n/**\n * Injected SQL executor compatible with `pg` Pool/Client and serverless clients.\n */\nexport interface SqlExecutor {\n query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<SqlQueryResult<T>>;\n}\n\nexport interface PostgresStoreOptions {\n hashSecret: string;\n now?: () => Date;\n}\n\nexport class RecordingExecutor implements SqlExecutor {\n readonly statements: Array<{ sql: string; params: unknown[] }> = [];\n responses: Array<{ match: string; rows: Record<string, unknown>[] }> = [];\n\n async query<T = Record<string, unknown>>(sql: string, params: unknown[] = []): Promise<SqlQueryResult<T>> {\n this.statements.push({ sql, params: [...params] });\n const hit = [...this.responses].reverse().find((item) => sql.includes(item.match));\n const rows = (hit?.rows ?? []) as T[];\n return { rows, rowCount: rows.length };\n }\n}\n","import { hmacSha256Hex } from '@splitin/verification-engine';\nimport type {\n AppealRecord,\n AttemptRecord,\n AuditEventRecord,\n CircuitRecord,\n ConfigurationRevisionRecord,\n ContinuationRecord,\n DecisionRecord,\n HealthObservationRecord,\n IdempotencyClaimRecord,\n JobRecord,\n ManualDecisionProposalRecord,\n PolicyVersionRecord,\n ProtectedActionRequirementRecord,\n ProviderDefinitionRecord,\n ProviderResourceLineageRecord,\n QueueJobKind,\n RedactionStatus,\n ReviewCaseRecord,\n RouteChangeRequestRecord,\n RouteRecord,\n TenantRecord,\n VerificationStore,\n WebhookEventRecord,\n} from '@splitin/verification-engine';\n\nimport type { PostgresStoreOptions, SqlExecutor } from './executor.ts';\n\nfunction iso(now: () => Date): string {\n return now().toISOString();\n}\n\nfunction first<T>(rows: T[]): T | null {\n return rows[0] ?? null;\n}\n\nexport function createPostgresStore(executor: SqlExecutor, options: PostgresStoreOptions): VerificationStore {\n if (!options.hashSecret) {\n throw new Error('createPostgresStore requires an injected HMAC hash secret.');\n }\n const now = options.now ?? (() => new Date());\n\n const store: VerificationStore = {\n now,\n async hashSubject(tenantKey, subjectReference) {\n return hmacSha256Hex(options.hashSecret, `subject:${tenantKey}:${subjectReference}`);\n },\n async hashResource(tenantKey, resourceType, resourceReference) {\n return hmacSha256Hex(options.hashSecret, `resource:${tenantKey}:${resourceType}:${resourceReference}`);\n },\n async transact(fn) {\n await executor.query('BEGIN');\n try {\n const result = await fn(store);\n await executor.query('COMMIT');\n return result;\n } catch (error) {\n await executor.query('ROLLBACK');\n throw error;\n }\n },\n async getTenant(tenantKey) {\n const result = await executor.query(\n 'SELECT tenant_key, display_name, continuation_destinations, created_at FROM verification.tenants WHERE tenant_key = $1',\n [tenantKey],\n );\n return mapTenant(first(result.rows));\n },\n async ensureTenant(tenantKey, displayName = tenantKey) {\n await executor.query(\n `INSERT INTO verification.tenants (tenant_key, display_name)\n VALUES ($1, $2) ON CONFLICT (tenant_key) DO NOTHING`,\n [tenantKey, displayName],\n );\n return (await store.getTenant(tenantKey)) ?? {\n tenantKey,\n displayName,\n continuationDestinations: ['verification.resume'],\n createdAt: iso(now),\n };\n },\n async getConfigurationRevision(tenantKey, id) {\n const result = await executor.query(\n 'SELECT * FROM verification.configuration_revisions WHERE tenant_key = $1 AND id = $2',\n [tenantKey, id],\n );\n return mapConfig(first(result.rows));\n },\n async listConfigurationRevisions(tenantKey) {\n const result = await executor.query(\n 'SELECT * FROM verification.configuration_revisions WHERE tenant_key = $1',\n [tenantKey],\n );\n return result.rows.map((row) => mapConfig(row)!);\n },\n async saveConfigurationRevision(revision) {\n await executor.query(\n `INSERT INTO verification.configuration_revisions (\n tenant_key, id, provider, environment, revision, configuration_digest, lifecycle,\n proposed_by_actor_id, approved_by_actor_id, approved_at, created_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11)\n ON CONFLICT (tenant_key, id) DO UPDATE SET\n lifecycle = EXCLUDED.lifecycle,\n approved_by_actor_id = EXCLUDED.approved_by_actor_id,\n approved_at = EXCLUDED.approved_at`,\n [\n revision.tenantKey, revision.id, revision.provider, revision.environment, revision.revision,\n revision.configurationDigest, revision.lifecycle, revision.proposedByActorId,\n revision.approvedByActorId, revision.approvedAt, revision.createdAt,\n ],\n );\n },\n async upsertProviderDefinition(definition) {\n await executor.query(\n `INSERT INTO verification.provider_definitions (\n tenant_key, provider, environment, adapter_version, manifest_digest,\n compiled_in_registry, production_eligible, created_at, updated_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)\n ON CONFLICT (tenant_key, provider, environment) DO UPDATE SET\n adapter_version = EXCLUDED.adapter_version,\n manifest_digest = EXCLUDED.manifest_digest,\n updated_at = EXCLUDED.updated_at`,\n [\n definition.tenantKey, definition.provider, definition.environment, definition.adapterVersion,\n definition.manifestDigest, definition.compiledInRegistry, definition.productionEligible,\n definition.createdAt, definition.updatedAt,\n ],\n );\n },\n async getProviderDefinition(tenantKey, provider, environment) {\n const result = await executor.query(\n 'SELECT * FROM verification.provider_definitions WHERE tenant_key = $1 AND provider = $2 AND environment = $3',\n [tenantKey, provider, environment],\n );\n return mapProviderDef(first(result.rows));\n },\n async listProviderDefinitions(tenantKey) {\n const result = await executor.query(\n 'SELECT * FROM verification.provider_definitions WHERE tenant_key = $1',\n [tenantKey],\n );\n return result.rows.map((row) => mapProviderDef(row)!);\n },\n async getRoute(tenantKey, routeId) {\n const result = await executor.query(\n 'SELECT * FROM verification.routes WHERE tenant_key = $1 AND id = $2',\n [tenantKey, routeId],\n );\n return mapRoute(first(result.rows));\n },\n async listRoutes(tenantKey) {\n const result = await executor.query('SELECT * FROM verification.routes WHERE tenant_key = $1', [tenantKey]);\n return result.rows.map((row) => mapRoute(row)!);\n },\n async listActiveRoutes(tenantKey, environment) {\n const result = await executor.query(\n `SELECT * FROM verification.routes\n WHERE tenant_key = $1 AND environment = $2 AND lifecycle = 'active'\n ORDER BY priority, id`,\n [tenantKey, environment],\n );\n return result.rows.map((row) => mapRoute(row)!);\n },\n async saveRoute(route) {\n await executor.query(\n `INSERT INTO verification.routes (\n tenant_key, id, provider, environment, package_code, country_code, required_capability,\n priority, cohort_min, cohort_max, window_start, window_end, allowlist_required,\n allowlisted_subject_hashes, configuration_revision_id, policy_version_id, lifecycle,\n proposed_by_actor_id, approved_by_actor_id, approved_at, activated_at, created_at, updated_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23)\n ON CONFLICT (tenant_key, id) DO UPDATE SET\n lifecycle = EXCLUDED.lifecycle, priority = EXCLUDED.priority,\n approved_by_actor_id = EXCLUDED.approved_by_actor_id, approved_at = EXCLUDED.approved_at,\n activated_at = EXCLUDED.activated_at, updated_at = EXCLUDED.updated_at`,\n [\n route.tenantKey, route.id, route.provider, route.environment, route.packageCode, route.countryCode,\n route.requiredCapability, route.priority, route.cohortMin, route.cohortMax, route.windowStart,\n route.windowEnd, route.allowlistRequired, route.allowlistedSubjectHashes, route.configurationRevisionId,\n route.policyVersionId, route.lifecycle, route.proposedByActorId, route.approvedByActorId,\n route.approvedAt, route.activatedAt, route.createdAt, route.updatedAt,\n ],\n );\n },\n async saveRouteChangeRequest(request) {\n await executor.query(\n `INSERT INTO verification.route_change_requests (\n tenant_key, id, route_id, proposed_payload, status, reason, policy_version,\n proposed_by_actor_id, approved_by_actor_id, approved_at, expires_at, created_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)\n ON CONFLICT (tenant_key, id) DO UPDATE SET\n status = EXCLUDED.status, approved_by_actor_id = EXCLUDED.approved_by_actor_id, approved_at = EXCLUDED.approved_at`,\n [\n request.tenantKey, request.id, request.routeId, request.proposedPayload, request.status, request.reason,\n request.policyVersion, request.proposedByActorId, request.approvedByActorId, request.approvedAt,\n request.expiresAt, request.createdAt,\n ],\n );\n },\n async getRouteChangeRequest(tenantKey, id) {\n const result = await executor.query(\n 'SELECT * FROM verification.route_change_requests WHERE tenant_key = $1 AND id = $2',\n [tenantKey, id],\n );\n return mapRouteChange(first(result.rows));\n },\n async listRouteChangeRequests(tenantKey) {\n const result = await executor.query(\n 'SELECT * FROM verification.route_change_requests WHERE tenant_key = $1',\n [tenantKey],\n );\n return result.rows.map((row) => mapRouteChange(row)!);\n },\n async getActivePolicy(tenantKey, environment) {\n const result = await executor.query(\n `SELECT * FROM verification.policy_versions\n WHERE tenant_key = $1 AND environment = $2 AND lifecycle = 'active'`,\n [tenantKey, environment],\n );\n return mapPolicy(first(result.rows));\n },\n async getPolicyVersion(tenantKey, id) {\n const result = await executor.query(\n 'SELECT * FROM verification.policy_versions WHERE tenant_key = $1 AND id = $2',\n [tenantKey, id],\n );\n return mapPolicy(first(result.rows));\n },\n async listPolicyVersions(tenantKey) {\n const result = await executor.query(\n 'SELECT * FROM verification.policy_versions WHERE tenant_key = $1',\n [tenantKey],\n );\n return result.rows.map((row) => mapPolicy(row)!);\n },\n async savePolicyVersion(policy) {\n await executor.query(\n `INSERT INTO verification.policy_versions (\n tenant_key, id, version, environment, lifecycle, reason, expires_at,\n proposed_by_actor_id, approved_by_actor_id, approved_at, activated_at, created_at,\n decision_retention_days, provider_redaction_delay_days, appeal_hold_days, legal_hold\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16)\n ON CONFLICT (tenant_key, id) DO UPDATE SET\n lifecycle = EXCLUDED.lifecycle, approved_by_actor_id = EXCLUDED.approved_by_actor_id,\n approved_at = EXCLUDED.approved_at, activated_at = EXCLUDED.activated_at, reason = EXCLUDED.reason,\n decision_retention_days = EXCLUDED.decision_retention_days,\n provider_redaction_delay_days = EXCLUDED.provider_redaction_delay_days,\n appeal_hold_days = EXCLUDED.appeal_hold_days,\n legal_hold = EXCLUDED.legal_hold`,\n [\n policy.tenantKey, policy.id, policy.version, policy.environment, policy.lifecycle, policy.reason,\n policy.expiresAt, policy.proposedByActorId, policy.approvedByActorId, policy.approvedAt,\n policy.activatedAt, policy.createdAt,\n policy.decisionRetentionDays, policy.providerRedactionDelayDays, policy.appealHoldDays, policy.legalHold,\n ],\n );\n },\n async listProtectedActionRequirements(tenantKey, action, policyVersionId) {\n const result = await executor.query(\n `SELECT * FROM verification.protected_action_requirements\n WHERE tenant_key = $1 AND action = $2 AND policy_version_id = $3`,\n [tenantKey, action, policyVersionId],\n );\n return result.rows.map((row) => mapRequirement(row)!);\n },\n async saveProtectedActionRequirement(requirement) {\n await executor.query(\n `INSERT INTO verification.protected_action_requirements (\n tenant_key, id, action, package_code, policy_version_id, created_at\n ) VALUES ($1,$2,$3,$4,$5,$6)\n ON CONFLICT (tenant_key, id) DO NOTHING`,\n [\n requirement.tenantKey, requirement.id, requirement.action, requirement.packageCode,\n requirement.policyVersionId, requirement.createdAt,\n ],\n );\n },\n async getContinuationDestinations(tenantKey) {\n const tenant = await store.getTenant(tenantKey);\n return tenant?.continuationDestinations ?? ['verification.resume'];\n },\n async getAttempt(tenantKey, attemptId) {\n const result = await executor.query(\n 'SELECT * FROM verification.attempts WHERE tenant_key = $1 AND id = $2',\n [tenantKey, attemptId],\n );\n return mapAttempt(first(result.rows));\n },\n async getAttemptByIdempotencyKey(tenantKey, key) {\n const result = await executor.query(\n 'SELECT * FROM verification.attempts WHERE tenant_key = $1 AND idempotency_key = $2',\n [tenantKey, key],\n );\n return mapAttempt(first(result.rows));\n },\n async findAttemptByProviderResource(tenantKey, provider, providerResourceId) {\n const result = await executor.query(\n `SELECT * FROM verification.attempts\n WHERE tenant_key = $1 AND provider = $2 AND provider_resource_id = $3`,\n [tenantKey, provider, providerResourceId],\n );\n return mapAttempt(first(result.rows));\n },\n async listAttempts(tenantKey) {\n const result = await executor.query('SELECT * FROM verification.attempts WHERE tenant_key = $1', [tenantKey]);\n return result.rows.map((row) => mapAttempt(row)!);\n },\n async listLiveAttempts(tenantKey, subjectHash, packageCode) {\n const result = await executor.query(\n `SELECT * FROM verification.attempts\n WHERE tenant_key = $1 AND subject_hash = $2 AND package_code = $3\n AND canonical_status IN ('created','pending_user_input','paused','processing','manual_review_required')`,\n [tenantKey, subjectHash, packageCode],\n );\n return result.rows.map((row) => mapAttempt(row)!);\n },\n async insertAttempt(attempt) {\n await executor.query(\n `INSERT INTO verification.attempts (\n tenant_key, id, subject_hash, package_code, country_code, provider, environment,\n adapter_version, manifest_digest, configuration_revision, policy_version,\n provider_resource_id, provider_status, canonical_status, status_version, idempotency_key,\n parent_attempt_id, purpose_action, purpose_resource_hash, route_id, selection_reason,\n normalized_reason_codes, expires_at, create_claim_id, create_claim_expires_at, created_at, updated_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27)`,\n [\n attempt.tenantKey, attempt.id, attempt.subjectHash, attempt.packageCode, attempt.countryCode,\n attempt.provider, attempt.environment, attempt.adapterVersion, attempt.manifestDigest,\n attempt.configurationRevision, attempt.policyVersion, attempt.providerResourceId, attempt.providerStatus,\n attempt.canonicalStatus, attempt.statusVersion, attempt.idempotencyKey, attempt.parentAttemptId,\n attempt.purposeAction, attempt.purposeResourceHash, attempt.routeId, attempt.selectionReason,\n attempt.normalizedReasonCodes, attempt.expiresAt, attempt.createClaimId, attempt.createClaimExpiresAt,\n attempt.createdAt, attempt.updatedAt,\n ],\n );\n return attempt;\n },\n async updateAttempt(attempt) {\n await executor.query(\n `UPDATE verification.attempts SET\n provider_resource_id = $3, provider_status = $4, canonical_status = $5, status_version = $6,\n normalized_reason_codes = $7, expires_at = $8, create_claim_id = $9, create_claim_expires_at = $10,\n parent_attempt_id = $11, selection_reason = $12, updated_at = $13\n WHERE tenant_key = $1 AND id = $2`,\n [\n attempt.tenantKey, attempt.id, attempt.providerResourceId, attempt.providerStatus, attempt.canonicalStatus,\n attempt.statusVersion, attempt.normalizedReasonCodes, attempt.expiresAt, attempt.createClaimId,\n attempt.createClaimExpiresAt, attempt.parentAttemptId, attempt.selectionReason, attempt.updatedAt,\n ],\n );\n },\n async insertLineage(row) {\n await executor.query(\n `INSERT INTO verification.provider_resource_lineage (\n tenant_key, id, attempt_id, resource_type, provider_resource_id, relationship_code, provider_status, occurred_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8)\n ON CONFLICT (tenant_key, provider_resource_id, resource_type) DO NOTHING`,\n [\n row.tenantKey, row.id, row.attemptId, row.resourceType, row.providerResourceId,\n row.relationshipCode, row.providerStatus, row.occurredAt,\n ],\n );\n },\n async listLineage(tenantKey, attemptId) {\n const result = await executor.query(\n 'SELECT * FROM verification.provider_resource_lineage WHERE tenant_key = $1 AND attempt_id = $2',\n [tenantKey, attemptId],\n );\n return result.rows.map((row) => mapLineage(row)!);\n },\n async getValidDecision(tenantKey, subjectHash, packageCode, at) {\n const result = await executor.query(\n `SELECT * FROM verification.decisions\n WHERE tenant_key = $1 AND subject_hash = $2 AND package_code = $3\n AND status = 'verified' AND revoked_at IS NULL\n AND (expires_at IS NULL OR expires_at > $4)\n ORDER BY effective_at DESC LIMIT 1`,\n [tenantKey, subjectHash, packageCode, at.toISOString()],\n );\n return mapDecision(first(result.rows));\n },\n async insertDecision(decision) {\n await executor.query(\n `INSERT INTO verification.decisions (\n tenant_key, id, subject_hash, package_code, attempt_id, status, source, policy_version,\n reason_codes, effective_at, expires_at, revoked_at, proposer_actor_id, approver_actor_id, created_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15)`,\n [\n decision.tenantKey, decision.id, decision.subjectHash, decision.packageCode, decision.attemptId,\n decision.status, decision.source, decision.policyVersion, decision.reasonCodes, decision.effectiveAt,\n decision.expiresAt, decision.revokedAt, decision.proposerActorId, decision.approverActorId, decision.createdAt,\n ],\n );\n },\n async listDecisions(tenantKey, subjectHash) {\n const result = await executor.query(\n subjectHash\n ? 'SELECT * FROM verification.decisions WHERE tenant_key = $1 AND subject_hash = $2'\n : 'SELECT * FROM verification.decisions WHERE tenant_key = $1',\n subjectHash ? [tenantKey, subjectHash] : [tenantKey],\n );\n return result.rows.map((row) => mapDecision(row)!);\n },\n async revokeDecision(tenantKey, decisionId, at) {\n await executor.query(\n `UPDATE verification.decisions SET status = 'revoked', revoked_at = $3\n WHERE tenant_key = $1 AND id = $2`,\n [tenantKey, decisionId, at],\n );\n },\n async claimIdempotency(claim) {\n const inserted = await executor.query(\n `INSERT INTO verification.idempotency_claims (\n tenant_key, claim_key, operation, attempt_id, state, result_ref, error_code, created_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8)\n ON CONFLICT (tenant_key, claim_key) DO NOTHING\n RETURNING *`,\n [\n claim.tenantKey, claim.claimKey, claim.operation, claim.attemptId, claim.state,\n claim.resultRef, claim.errorCode, claim.createdAt,\n ],\n );\n if (inserted.rows[0]) return { disposition: 'claimed' as const, claim: mapIdempotency(inserted.rows[0])! };\n const existing = await executor.query(\n 'SELECT * FROM verification.idempotency_claims WHERE tenant_key = $1 AND claim_key = $2',\n [claim.tenantKey, claim.claimKey],\n );\n return { disposition: 'existing' as const, claim: mapIdempotency(first(existing.rows)) ?? claim };\n },\n async completeIdempotency(tenantKey, key, resultRef) {\n await executor.query(\n `UPDATE verification.idempotency_claims\n SET state = 'completed', result_ref = $3, completed_at = $4\n WHERE tenant_key = $1 AND claim_key = $2`,\n [tenantKey, key, resultRef, iso(now)],\n );\n },\n async failIdempotency(tenantKey, key, errorCode) {\n await executor.query(\n `UPDATE verification.idempotency_claims\n SET state = 'failed', error_code = $3, completed_at = $4\n WHERE tenant_key = $1 AND claim_key = $2`,\n [tenantKey, key, errorCode, iso(now)],\n );\n },\n async getIdempotencyClaim(tenantKey, key) {\n const result = await executor.query(\n 'SELECT * FROM verification.idempotency_claims WHERE tenant_key = $1 AND claim_key = $2',\n [tenantKey, key],\n );\n return mapIdempotency(first(result.rows));\n },\n async claimWebhookEvent(input) {\n const inserted = await executor.query(\n `INSERT INTO verification.webhook_events (\n tenant_key, id, provider, provider_event_key, provider_resource_id, event_type,\n occurred_at, body_sha256, safe_metadata, state, received_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,'accepted',$10)\n ON CONFLICT (tenant_key, provider, provider_event_key) DO NOTHING\n RETURNING *`,\n [\n input.tenantKey, `wh_${input.providerEventKey}`.slice(0, 64), input.provider, input.providerEventKey,\n input.providerResourceId, input.eventType, input.occurredAt, input.bodySha256, input.safeMetadata, iso(now),\n ],\n );\n const row = inserted.rows[0] ?? first((await executor.query(\n `SELECT * FROM verification.webhook_events\n WHERE tenant_key = $1 AND provider = $2 AND provider_event_key = $3`,\n [input.tenantKey, input.provider, input.providerEventKey],\n )).rows);\n const event = mapWebhook(row);\n if (!event) {\n return { disposition: 'claimed', event: {\n tenantKey: input.tenantKey,\n id: `wh_${input.providerEventKey}`.slice(0, 64),\n provider: input.provider,\n providerEventKey: input.providerEventKey,\n providerResourceId: input.providerResourceId,\n eventType: input.eventType,\n occurredAt: input.occurredAt,\n bodySha256: input.bodySha256,\n safeMetadata: input.safeMetadata,\n state: 'accepted',\n receivedAt: iso(now),\n } satisfies WebhookEventRecord };\n }\n if (event.bodySha256 !== input.bodySha256) {\n await executor.query(\n `UPDATE verification.webhook_events SET state = 'dead_letter'\n WHERE tenant_key = $1 AND id = $2`,\n [input.tenantKey, event.id],\n );\n return { disposition: 'mismatch', event: { ...event, state: 'dead_letter' } };\n }\n if (!inserted.rows[0]) return { disposition: 'duplicate', event };\n return { disposition: 'claimed', event };\n },\n async getWebhookEvent(tenantKey, provider, eventKey) {\n const result = await executor.query(\n `SELECT * FROM verification.webhook_events\n WHERE tenant_key = $1 AND provider = $2 AND provider_event_key = $3`,\n [tenantKey, provider, eventKey],\n );\n return mapWebhook(first(result.rows));\n },\n async getWebhookEventById(tenantKey, eventId) {\n const result = await executor.query(\n 'SELECT * FROM verification.webhook_events WHERE tenant_key = $1 AND id = $2',\n [tenantKey, eventId],\n );\n return mapWebhook(first(result.rows));\n },\n async settleWebhookEvent(tenantKey, eventId, outcome, errorCode) {\n await executor.query(\n `UPDATE verification.webhook_events SET state = $3\n WHERE tenant_key = $1 AND id = $2`,\n [tenantKey, eventId, outcome],\n );\n if (errorCode) {\n await executor.query(\n `UPDATE verification.webhook_leases SET last_error_code = $3\n WHERE tenant_key = $1 AND event_id = $2`,\n [tenantKey, eventId, errorCode],\n );\n }\n },\n async recordHealth(observation) {\n await executor.query(\n `INSERT INTO verification.provider_health_observations (\n tenant_key, id, provider, environment, operation, outcome, safe_code, observed_at, latency_ms\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)`,\n [\n observation.tenantKey, observation.id, observation.provider, observation.environment,\n observation.operation, observation.outcome, observation.safeCode, observation.observedAt, observation.latencyMs,\n ],\n );\n },\n async listHealth(tenantKey, provider) {\n const result = await executor.query(\n provider\n ? 'SELECT * FROM verification.provider_health_observations WHERE tenant_key = $1 AND provider = $2'\n : 'SELECT * FROM verification.provider_health_observations WHERE tenant_key = $1',\n provider ? [tenantKey, provider] : [tenantKey],\n );\n return result.rows.map((row) => mapHealth(row)!);\n },\n async getCircuit(tenantKey, provider, environment) {\n const result = await executor.query(\n 'SELECT * FROM verification.circuits WHERE tenant_key = $1 AND provider = $2 AND environment = $3',\n [tenantKey, provider, environment],\n );\n return mapCircuit(first(result.rows)) ?? {\n tenantKey,\n provider,\n environment,\n state: 'closed',\n reasonCode: null,\n openUntil: null,\n consecutiveFailures: 0,\n drainedByActorId: null,\n updatedAt: iso(now),\n };\n },\n async saveCircuit(circuit) {\n await executor.query(\n `INSERT INTO verification.circuits (\n tenant_key, provider, environment, state, reason_code, open_until,\n consecutive_failures, drained_by_actor_id, updated_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)\n ON CONFLICT (tenant_key, provider, environment) DO UPDATE SET\n state = EXCLUDED.state, reason_code = EXCLUDED.reason_code, open_until = EXCLUDED.open_until,\n consecutive_failures = EXCLUDED.consecutive_failures, drained_by_actor_id = EXCLUDED.drained_by_actor_id,\n updated_at = EXCLUDED.updated_at`,\n [\n circuit.tenantKey, circuit.provider, circuit.environment, circuit.state, circuit.reasonCode,\n circuit.openUntil, circuit.consecutiveFailures, circuit.drainedByActorId, circuit.updatedAt,\n ],\n );\n },\n async listCircuits(tenantKey) {\n const result = await executor.query('SELECT * FROM verification.circuits WHERE tenant_key = $1', [tenantKey]);\n return result.rows.map((row) => mapCircuit(row)!);\n },\n async saveAppeal(appeal) {\n await executor.query(\n `INSERT INTO verification.appeals (\n tenant_key, id, attempt_id, subject_hash, status, reason, policy_version,\n proposed_by_actor_id, decided_by_actor_id, expires_at, created_at, updated_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)\n ON CONFLICT (tenant_key, id) DO UPDATE SET\n status = EXCLUDED.status, reason = EXCLUDED.reason, decided_by_actor_id = EXCLUDED.decided_by_actor_id,\n updated_at = EXCLUDED.updated_at`,\n [\n appeal.tenantKey, appeal.id, appeal.attemptId, appeal.subjectHash, appeal.status, appeal.reason,\n appeal.policyVersion, appeal.proposedByActorId, appeal.decidedByActorId, appeal.expiresAt,\n appeal.createdAt, appeal.updatedAt,\n ],\n );\n },\n async getAppeal(tenantKey, id) {\n const result = await executor.query(\n 'SELECT * FROM verification.appeals WHERE tenant_key = $1 AND id = $2',\n [tenantKey, id],\n );\n return mapAppeal(first(result.rows));\n },\n async listAppeals(tenantKey) {\n const result = await executor.query('SELECT * FROM verification.appeals WHERE tenant_key = $1', [tenantKey]);\n return result.rows.map((row) => mapAppeal(row)!);\n },\n async saveReviewCase(reviewCase) {\n await executor.query(\n `INSERT INTO verification.review_cases (\n tenant_key, id, attempt_id, subject_hash, status, reason, policy_version, assigned_actor_id, created_at, updated_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)\n ON CONFLICT (tenant_key, id) DO UPDATE SET status = EXCLUDED.status, reason = EXCLUDED.reason, updated_at = EXCLUDED.updated_at`,\n [\n reviewCase.tenantKey, reviewCase.id, reviewCase.attemptId, reviewCase.subjectHash, reviewCase.status,\n reviewCase.reason, reviewCase.policyVersion, reviewCase.assignedActorId, reviewCase.createdAt, reviewCase.updatedAt,\n ],\n );\n },\n async getReviewCase(tenantKey, id) {\n const result = await executor.query(\n 'SELECT * FROM verification.review_cases WHERE tenant_key = $1 AND id = $2',\n [tenantKey, id],\n );\n return mapReview(first(result.rows));\n },\n async listReviewCases(tenantKey) {\n const result = await executor.query('SELECT * FROM verification.review_cases WHERE tenant_key = $1', [tenantKey]);\n return result.rows.map((row) => mapReview(row)!);\n },\n async saveManualDecisionProposal(proposal) {\n await executor.query(\n `INSERT INTO verification.manual_decision_proposals (\n tenant_key, id, review_case_id, attempt_id, proposed_status, reason, policy_version,\n expires_at, proposed_by_actor_id, approved_by_actor_id, status, created_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)\n ON CONFLICT (tenant_key, id) DO UPDATE SET\n status = EXCLUDED.status, approved_by_actor_id = EXCLUDED.approved_by_actor_id`,\n [\n proposal.tenantKey, proposal.id, proposal.reviewCaseId, proposal.attemptId, proposal.proposedStatus,\n proposal.reason, proposal.policyVersion, proposal.expiresAt, proposal.proposedByActorId,\n proposal.approvedByActorId, proposal.status, proposal.createdAt,\n ],\n );\n },\n async getManualDecisionProposal(tenantKey, id) {\n const result = await executor.query(\n 'SELECT * FROM verification.manual_decision_proposals WHERE tenant_key = $1 AND id = $2',\n [tenantKey, id],\n );\n return mapProposal(first(result.rows));\n },\n async listManualDecisionProposals(tenantKey) {\n const result = await executor.query(\n 'SELECT * FROM verification.manual_decision_proposals WHERE tenant_key = $1',\n [tenantKey],\n );\n return result.rows.map((row) => mapProposal(row)!);\n },\n async saveContinuation(continuation: ContinuationRecord) {\n await executor.query(\n `INSERT INTO verification.continuations (\n tenant_key, key, token_hash, action, resource_hash, subject_hash, destination_key, expires_at, consumed_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)\n ON CONFLICT (tenant_key, key) DO UPDATE SET consumed_at = EXCLUDED.consumed_at`,\n [\n continuation.tenantKey, continuation.key, continuation.tokenHash, continuation.action,\n continuation.resourceHash, continuation.subjectHash, continuation.destinationKey,\n continuation.expiresAt, continuation.consumedAt,\n ],\n );\n },\n async getContinuation(tenantKey, key) {\n const result = await executor.query(\n 'SELECT * FROM verification.continuations WHERE tenant_key = $1 AND key = $2',\n [tenantKey, key],\n );\n const row = first(result.rows);\n if (!row) return null;\n return {\n tenantKey: String(row.tenant_key),\n key: String(row.key),\n tokenHash: String(row.token_hash),\n action: String(row.action),\n resourceHash: String(row.resource_hash),\n subjectHash: String(row.subject_hash),\n destinationKey: String(row.destination_key),\n expiresAt: String(row.expires_at),\n consumedAt: row.consumed_at ? String(row.consumed_at) : null,\n };\n },\n async appendAudit(event) {\n await executor.query(\n `INSERT INTO verification.audit_events (\n tenant_key, id, actor_id, actor_type, operation, resource_type, resource_id, reason_code, safe_metadata, occurred_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)`,\n [\n event.tenantKey, event.id, event.actorId, event.actorType, event.operation, event.resourceType,\n event.resourceId, event.reasonCode, event.safeMetadata, event.occurredAt,\n ],\n );\n },\n async listAudit(tenantKey) {\n const result = await executor.query(\n 'SELECT * FROM verification.audit_events WHERE tenant_key = $1 ORDER BY occurred_at DESC',\n [tenantKey],\n );\n return result.rows.map((row) => mapAudit(row)!);\n },\n async saveJob(job) {\n if (job.kind === 'webhook') {\n await executor.query(\n `INSERT INTO verification.webhook_leases (\n tenant_key, event_id, next_attempt_at, attempt_count\n ) VALUES ($1,$2,$3,$4)\n ON CONFLICT (tenant_key, event_id) DO NOTHING`,\n [job.tenantKey, job.eventId ?? job.id, job.nextAttemptAt, job.attemptCount],\n );\n return;\n }\n if (job.kind === 'redact') {\n await executor.query(\n `INSERT INTO verification.redaction_jobs (\n tenant_key, id, subject_hash, attempt_id, provider_resource_id, status,\n next_attempt_at, attempt_count, created_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)\n ON CONFLICT (tenant_key, id) DO UPDATE SET status = EXCLUDED.status`,\n [\n job.tenantKey, job.id, job.subjectHash, job.attemptId, job.providerResourceId, job.state,\n job.nextAttemptAt, job.attemptCount, job.createdAt,\n ],\n );\n return;\n }\n await executor.query(\n `INSERT INTO verification.reconciliation_jobs (\n tenant_key, id, attempt_id, state, next_attempt_at, attempt_count, created_at\n ) VALUES ($1,$2,$3,$4,$5,$6,$7)\n ON CONFLICT (tenant_key, id) DO UPDATE SET state = EXCLUDED.state`,\n [job.tenantKey, job.id, job.attemptId, job.state, job.nextAttemptAt, job.attemptCount, job.createdAt],\n );\n },\n async getJob(tenantKey, id) {\n const redaction = await executor.query(\n 'SELECT * FROM verification.redaction_jobs WHERE tenant_key = $1 AND id = $2',\n [tenantKey, id],\n );\n if (redaction.rows[0]) return mapRedactionJob(redaction.rows[0]);\n const recon = await executor.query(\n 'SELECT * FROM verification.reconciliation_jobs WHERE tenant_key = $1 AND id = $2',\n [tenantKey, id],\n );\n if (recon.rows[0]) return mapReconJob(recon.rows[0]);\n const lease = await executor.query(\n 'SELECT * FROM verification.webhook_leases WHERE tenant_key = $1 AND event_id = $2',\n [tenantKey, id],\n );\n return lease.rows[0] ? mapWebhookJob(lease.rows[0]) : null;\n },\n async listJobs(tenantKey, kind?: QueueJobKind) {\n if (kind === 'redact') {\n const result = await executor.query(\n 'SELECT * FROM verification.redaction_jobs WHERE tenant_key = $1',\n [tenantKey],\n );\n return result.rows.map((row) => mapRedactionJob(row)!);\n }\n if (kind === 'webhook') {\n const result = await executor.query(\n 'SELECT * FROM verification.webhook_leases WHERE tenant_key = $1',\n [tenantKey],\n );\n return result.rows.map((row) => mapWebhookJob(row)!);\n }\n const result = await executor.query(\n 'SELECT * FROM verification.reconciliation_jobs WHERE tenant_key = $1',\n [tenantKey],\n );\n return result.rows.map((row) => mapReconJob(row)!);\n },\n async claimJobs(input) {\n const claimed: JobRecord[] = [];\n if (input.kinds.includes('webhook')) {\n const result = await executor.query(\n `UPDATE verification.webhook_leases AS target\n SET lease_id = $3, worker_id = $4, expires_at = $5, attempt_count = target.attempt_count + 1\n WHERE (target.tenant_key, target.event_id) IN (\n SELECT tenant_key, event_id FROM verification.webhook_leases\n WHERE tenant_key = $1\n AND next_attempt_at <= $2\n AND (lease_id IS NULL OR expires_at < $2)\n ORDER BY next_attempt_at, event_id\n FOR UPDATE SKIP LOCKED\n LIMIT $6\n )\n RETURNING *`,\n [\n input.tenantKey, input.now.toISOString(), `lease_${input.workerId}`, input.workerId,\n new Date(input.now.getTime() + input.leaseSeconds * 1000).toISOString(), input.limit,\n ],\n );\n claimed.push(...result.rows.map((row) => mapWebhookJob(row)!));\n }\n if (input.kinds.includes('reconcile')) {\n const result = await executor.query(\n `UPDATE verification.reconciliation_jobs AS target\n SET state = 'processing', lease_id = $3, lease_expires_at = $4, attempt_count = target.attempt_count + 1\n WHERE (target.tenant_key, target.id) IN (\n SELECT tenant_key, id FROM verification.reconciliation_jobs\n WHERE tenant_key = $1\n AND state IN ('scheduled', 'retryable')\n AND next_attempt_at <= $2\n ORDER BY next_attempt_at, id\n FOR UPDATE SKIP LOCKED\n LIMIT $5\n )\n RETURNING *`,\n [\n input.tenantKey, input.now.toISOString(), `lease_${input.workerId}`,\n new Date(input.now.getTime() + input.leaseSeconds * 1000).toISOString(), input.limit,\n ],\n );\n claimed.push(...result.rows.map((row) => mapReconJob(row)!));\n }\n if (input.kinds.includes('redact')) {\n const result = await executor.query(\n `UPDATE verification.redaction_jobs AS target\n SET status = 'processing', lease_id = $3, lease_expires_at = $4, attempt_count = target.attempt_count + 1\n WHERE (target.tenant_key, target.id) IN (\n SELECT tenant_key, id FROM verification.redaction_jobs\n WHERE tenant_key = $1\n AND status IN ('scheduled', 'retryable')\n AND next_attempt_at <= $2\n ORDER BY next_attempt_at, id\n FOR UPDATE SKIP LOCKED\n LIMIT $5\n )\n RETURNING *`,\n [\n input.tenantKey, input.now.toISOString(), `lease_${input.workerId}`,\n new Date(input.now.getTime() + input.leaseSeconds * 1000).toISOString(), input.limit,\n ],\n );\n claimed.push(...result.rows.map((row) => mapRedactionJob(row)!));\n }\n return claimed.slice(0, input.limit);\n },\n async updateJob(job) {\n await store.saveJob(job);\n if (job.kind === 'webhook') {\n await executor.query(\n `UPDATE verification.webhook_leases\n SET lease_id = $3, expires_at = $4, next_attempt_at = $5, last_error_code = $6, attempt_count = $7\n WHERE tenant_key = $1 AND event_id = $2`,\n [job.tenantKey, job.eventId ?? job.id, job.leaseId, job.leaseExpiresAt, job.nextAttemptAt, job.lastErrorCode, job.attemptCount],\n );\n }\n },\n async updateRedactionStatus(tenantKey, jobId, status: RedactionStatus) {\n await executor.query(\n 'UPDATE verification.redaction_jobs SET status = $3 WHERE tenant_key = $1 AND id = $2',\n [tenantKey, jobId, status],\n );\n },\n };\n\n return store;\n}\n\ntype Row = Record<string, unknown>;\n\nfunction str(row: Row | null, key: string): string {\n return String(row?.[key] ?? '');\n}\nfunction strNull(row: Row | null, key: string): string | null {\n const value = row?.[key];\n return value == null ? null : String(value);\n}\nfunction num(row: Row | null, key: string): number {\n return Number(row?.[key] ?? 0);\n}\nfunction bool(row: Row | null, key: string): boolean {\n return Boolean(row?.[key]);\n}\nfunction arr(row: Row | null, key: string): string[] {\n const value = row?.[key];\n return Array.isArray(value) ? value.map(String) : [];\n}\n\nfunction mapTenant(row: Row | null): TenantRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n displayName: str(row, 'display_name'),\n continuationDestinations: arr(row, 'continuation_destinations'),\n createdAt: str(row, 'created_at'),\n };\n}\nfunction mapConfig(row: Row | null): ConfigurationRevisionRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n provider: str(row, 'provider'),\n environment: str(row, 'environment') as ConfigurationRevisionRecord['environment'],\n revision: num(row, 'revision'),\n configurationDigest: str(row, 'configuration_digest'),\n lifecycle: str(row, 'lifecycle') as ConfigurationRevisionRecord['lifecycle'],\n proposedByActorId: strNull(row, 'proposed_by_actor_id'),\n approvedByActorId: strNull(row, 'approved_by_actor_id'),\n approvedAt: strNull(row, 'approved_at'),\n createdAt: str(row, 'created_at'),\n };\n}\nfunction mapProviderDef(row: Row | null): ProviderDefinitionRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n provider: str(row, 'provider'),\n environment: str(row, 'environment') as ProviderDefinitionRecord['environment'],\n adapterVersion: str(row, 'adapter_version'),\n manifestDigest: str(row, 'manifest_digest'),\n compiledInRegistry: bool(row, 'compiled_in_registry'),\n productionEligible: bool(row, 'production_eligible'),\n createdAt: str(row, 'created_at'),\n updatedAt: str(row, 'updated_at'),\n };\n}\nfunction mapRoute(row: Row | null): RouteRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n provider: str(row, 'provider'),\n environment: str(row, 'environment') as RouteRecord['environment'],\n packageCode: str(row, 'package_code'),\n countryCode: strNull(row, 'country_code'),\n requiredCapability: strNull(row, 'required_capability'),\n priority: num(row, 'priority'),\n cohortMin: num(row, 'cohort_min'),\n cohortMax: num(row, 'cohort_max'),\n windowStart: strNull(row, 'window_start'),\n windowEnd: strNull(row, 'window_end'),\n allowlistRequired: bool(row, 'allowlist_required'),\n allowlistedSubjectHashes: arr(row, 'allowlisted_subject_hashes'),\n configurationRevisionId: str(row, 'configuration_revision_id'),\n policyVersionId: str(row, 'policy_version_id'),\n lifecycle: str(row, 'lifecycle') as RouteRecord['lifecycle'],\n proposedByActorId: strNull(row, 'proposed_by_actor_id'),\n approvedByActorId: strNull(row, 'approved_by_actor_id'),\n approvedAt: strNull(row, 'approved_at'),\n activatedAt: strNull(row, 'activated_at'),\n createdAt: str(row, 'created_at'),\n updatedAt: str(row, 'updated_at'),\n };\n}\nfunction mapRouteChange(row: Row | null): RouteChangeRequestRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n routeId: strNull(row, 'route_id'),\n proposedPayload: (row.proposed_payload as RouteChangeRequestRecord['proposedPayload']) ?? {},\n status: str(row, 'status') as RouteChangeRequestRecord['status'],\n reason: str(row, 'reason'),\n policyVersion: str(row, 'policy_version'),\n proposedByActorId: str(row, 'proposed_by_actor_id'),\n approvedByActorId: strNull(row, 'approved_by_actor_id'),\n approvedAt: strNull(row, 'approved_at'),\n expiresAt: strNull(row, 'expires_at'),\n createdAt: str(row, 'created_at'),\n };\n}\nfunction mapPolicy(row: Row | null): PolicyVersionRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n version: str(row, 'version'),\n environment: str(row, 'environment') as PolicyVersionRecord['environment'],\n lifecycle: str(row, 'lifecycle') as PolicyVersionRecord['lifecycle'],\n reason: str(row, 'reason'),\n expiresAt: strNull(row, 'expires_at'),\n proposedByActorId: strNull(row, 'proposed_by_actor_id'),\n approvedByActorId: strNull(row, 'approved_by_actor_id'),\n approvedAt: strNull(row, 'approved_at'),\n activatedAt: strNull(row, 'activated_at'),\n createdAt: str(row, 'created_at'),\n decisionRetentionDays: row.decision_retention_days == null ? null : num(row, 'decision_retention_days'),\n providerRedactionDelayDays: row.provider_redaction_delay_days == null ? null : num(row, 'provider_redaction_delay_days'),\n appealHoldDays: row.appeal_hold_days == null ? null : num(row, 'appeal_hold_days'),\n legalHold: Boolean(row.legal_hold),\n };\n}\nfunction mapRequirement(row: Row | null): ProtectedActionRequirementRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n action: str(row, 'action'),\n packageCode: str(row, 'package_code'),\n policyVersionId: str(row, 'policy_version_id'),\n createdAt: str(row, 'created_at'),\n };\n}\nfunction mapAttempt(row: Row | null): AttemptRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n subjectHash: str(row, 'subject_hash'),\n packageCode: str(row, 'package_code'),\n countryCode: str(row, 'country_code'),\n provider: str(row, 'provider'),\n environment: str(row, 'environment') as AttemptRecord['environment'],\n adapterVersion: str(row, 'adapter_version'),\n manifestDigest: str(row, 'manifest_digest'),\n configurationRevision: str(row, 'configuration_revision'),\n policyVersion: str(row, 'policy_version'),\n providerResourceId: strNull(row, 'provider_resource_id'),\n providerStatus: strNull(row, 'provider_status'),\n canonicalStatus: str(row, 'canonical_status') as AttemptRecord['canonicalStatus'],\n statusVersion: num(row, 'status_version'),\n idempotencyKey: str(row, 'idempotency_key'),\n parentAttemptId: strNull(row, 'parent_attempt_id'),\n purposeAction: strNull(row, 'purpose_action'),\n purposeResourceHash: strNull(row, 'purpose_resource_hash'),\n routeId: str(row, 'route_id'),\n selectionReason: str(row, 'selection_reason'),\n normalizedReasonCodes: arr(row, 'normalized_reason_codes'),\n expiresAt: strNull(row, 'expires_at'),\n createClaimId: strNull(row, 'create_claim_id'),\n createClaimExpiresAt: strNull(row, 'create_claim_expires_at'),\n createdAt: str(row, 'created_at'),\n updatedAt: str(row, 'updated_at'),\n };\n}\nfunction mapLineage(row: Row | null): ProviderResourceLineageRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n attemptId: str(row, 'attempt_id'),\n resourceType: str(row, 'resource_type'),\n providerResourceId: str(row, 'provider_resource_id'),\n relationshipCode: str(row, 'relationship_code'),\n providerStatus: str(row, 'provider_status'),\n occurredAt: str(row, 'occurred_at'),\n };\n}\nfunction mapDecision(row: Row | null): DecisionRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n subjectHash: str(row, 'subject_hash'),\n packageCode: str(row, 'package_code'),\n attemptId: strNull(row, 'attempt_id'),\n status: str(row, 'status') as DecisionRecord['status'],\n source: str(row, 'source') as DecisionRecord['source'],\n policyVersion: str(row, 'policy_version'),\n reasonCodes: arr(row, 'reason_codes'),\n effectiveAt: str(row, 'effective_at'),\n expiresAt: strNull(row, 'expires_at'),\n revokedAt: strNull(row, 'revoked_at'),\n proposerActorId: strNull(row, 'proposer_actor_id'),\n approverActorId: strNull(row, 'approver_actor_id'),\n createdAt: str(row, 'created_at'),\n };\n}\nfunction mapIdempotency(row: Row | null): IdempotencyClaimRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n claimKey: str(row, 'claim_key'),\n operation: str(row, 'operation'),\n attemptId: strNull(row, 'attempt_id'),\n state: str(row, 'state') as IdempotencyClaimRecord['state'],\n resultRef: strNull(row, 'result_ref'),\n errorCode: strNull(row, 'error_code'),\n createdAt: str(row, 'created_at'),\n completedAt: strNull(row, 'completed_at'),\n };\n}\nfunction mapWebhook(row: Row | null): WebhookEventRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n provider: str(row, 'provider'),\n providerEventKey: str(row, 'provider_event_key'),\n providerResourceId: str(row, 'provider_resource_id'),\n eventType: str(row, 'event_type'),\n occurredAt: str(row, 'occurred_at'),\n bodySha256: str(row, 'body_sha256'),\n safeMetadata: (row.safe_metadata as WebhookEventRecord['safeMetadata']) ?? {},\n state: str(row, 'state') as WebhookEventRecord['state'],\n receivedAt: str(row, 'received_at'),\n };\n}\nfunction mapHealth(row: Row | null): HealthObservationRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n provider: str(row, 'provider'),\n environment: str(row, 'environment') as HealthObservationRecord['environment'],\n operation: str(row, 'operation'),\n outcome: str(row, 'outcome') as HealthObservationRecord['outcome'],\n safeCode: str(row, 'safe_code'),\n observedAt: str(row, 'observed_at'),\n latencyMs: row.latency_ms == null ? null : Number(row.latency_ms),\n };\n}\nfunction mapCircuit(row: Row | null): CircuitRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n provider: str(row, 'provider'),\n environment: str(row, 'environment') as CircuitRecord['environment'],\n state: str(row, 'state') as CircuitRecord['state'],\n reasonCode: strNull(row, 'reason_code'),\n openUntil: strNull(row, 'open_until'),\n consecutiveFailures: num(row, 'consecutive_failures'),\n drainedByActorId: strNull(row, 'drained_by_actor_id'),\n updatedAt: str(row, 'updated_at'),\n };\n}\nfunction mapAppeal(row: Row | null): AppealRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n attemptId: str(row, 'attempt_id'),\n subjectHash: str(row, 'subject_hash'),\n status: str(row, 'status') as AppealRecord['status'],\n reason: str(row, 'reason'),\n policyVersion: str(row, 'policy_version'),\n proposedByActorId: str(row, 'proposed_by_actor_id'),\n decidedByActorId: strNull(row, 'decided_by_actor_id'),\n expiresAt: strNull(row, 'expires_at'),\n createdAt: str(row, 'created_at'),\n updatedAt: str(row, 'updated_at'),\n };\n}\nfunction mapReview(row: Row | null): ReviewCaseRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n attemptId: str(row, 'attempt_id'),\n subjectHash: str(row, 'subject_hash'),\n status: str(row, 'status') as ReviewCaseRecord['status'],\n reason: str(row, 'reason'),\n policyVersion: str(row, 'policy_version'),\n assignedActorId: strNull(row, 'assigned_actor_id'),\n createdAt: str(row, 'created_at'),\n updatedAt: str(row, 'updated_at'),\n };\n}\nfunction mapProposal(row: Row | null): ManualDecisionProposalRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n reviewCaseId: strNull(row, 'review_case_id'),\n attemptId: str(row, 'attempt_id'),\n proposedStatus: str(row, 'proposed_status') as ManualDecisionProposalRecord['proposedStatus'],\n reason: str(row, 'reason'),\n policyVersion: str(row, 'policy_version'),\n expiresAt: strNull(row, 'expires_at'),\n proposedByActorId: str(row, 'proposed_by_actor_id'),\n approvedByActorId: strNull(row, 'approved_by_actor_id'),\n status: str(row, 'status') as ManualDecisionProposalRecord['status'],\n createdAt: str(row, 'created_at'),\n };\n}\nfunction mapAudit(row: Row | null): AuditEventRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n actorId: str(row, 'actor_id'),\n actorType: str(row, 'actor_type') as AuditEventRecord['actorType'],\n operation: str(row, 'operation'),\n resourceType: str(row, 'resource_type'),\n resourceId: strNull(row, 'resource_id'),\n reasonCode: strNull(row, 'reason_code'),\n safeMetadata: (row.safe_metadata as AuditEventRecord['safeMetadata']) ?? {},\n occurredAt: str(row, 'occurred_at'),\n };\n}\nfunction mapRedactionJob(row: Row | null): JobRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n kind: 'redact',\n attemptId: strNull(row, 'attempt_id'),\n eventId: null,\n subjectHash: strNull(row, 'subject_hash'),\n providerResourceId: strNull(row, 'provider_resource_id'),\n state: str(row, 'status') as JobRecord['state'],\n leaseId: strNull(row, 'lease_id'),\n leaseExpiresAt: strNull(row, 'lease_expires_at'),\n attemptCount: num(row, 'attempt_count'),\n nextAttemptAt: str(row, 'next_attempt_at'),\n lastErrorCode: strNull(row, 'last_error_code'),\n createdAt: str(row, 'created_at'),\n };\n}\nfunction mapReconJob(row: Row | null): JobRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'id'),\n kind: 'reconcile',\n attemptId: strNull(row, 'attempt_id'),\n eventId: null,\n subjectHash: null,\n providerResourceId: null,\n state: str(row, 'state') as JobRecord['state'],\n leaseId: strNull(row, 'lease_id'),\n leaseExpiresAt: strNull(row, 'lease_expires_at'),\n attemptCount: num(row, 'attempt_count'),\n nextAttemptAt: str(row, 'next_attempt_at'),\n lastErrorCode: strNull(row, 'last_error_code'),\n createdAt: str(row, 'created_at'),\n };\n}\nfunction mapWebhookJob(row: Row | null): JobRecord | null {\n if (!row) return null;\n return {\n tenantKey: str(row, 'tenant_key'),\n id: str(row, 'event_id'),\n kind: 'webhook',\n attemptId: null,\n eventId: str(row, 'event_id'),\n subjectHash: null,\n providerResourceId: null,\n state: 'processing',\n leaseId: strNull(row, 'lease_id'),\n leaseExpiresAt: strNull(row, 'expires_at'),\n attemptCount: num(row, 'attempt_count'),\n nextAttemptAt: str(row, 'next_attempt_at'),\n lastErrorCode: strNull(row, 'last_error_code'),\n createdAt: str(row, 'next_attempt_at'),\n };\n}\n","import { backoffSeconds, type VerificationQueue, type VerificationStore } from '@splitin/verification-engine';\n\nimport type { PostgresStoreOptions, SqlExecutor } from './executor.ts';\nimport { createPostgresStore } from './store.ts';\n\nfunction isStore(value: SqlExecutor | VerificationStore): value is VerificationStore {\n return typeof (value as VerificationStore).claimJobs === 'function';\n}\n\nexport function createPostgresQueue(\n executorOrStore: SqlExecutor | VerificationStore,\n options: Partial<PostgresStoreOptions> & { random?: () => number } = {},\n): VerificationQueue {\n const store = isStore(executorOrStore)\n ? executorOrStore\n : createPostgresStore(executorOrStore, { hashSecret: options.hashSecret ?? '', now: options.now });\n const random = options.random ?? Math.random;\n return {\n enqueue: (job) => store.saveJob(job),\n claim: (input) => store.claimJobs(input),\n async complete(tenantKey, jobId, leaseId) {\n const job = await store.getJob(tenantKey, jobId);\n if (!job) return;\n await store.updateJob({\n ...job,\n state: job.kind === 'redact' ? 'redacted' : 'completed',\n leaseId,\n leaseExpiresAt: null,\n });\n },\n async retry(tenantKey, jobId, leaseId, retry) {\n const job = await store.getJob(tenantKey, jobId);\n if (!job) return;\n const delay = backoffSeconds(job.attemptCount, retry.retryAfterSeconds, random);\n await store.updateJob({\n ...job,\n state: retry.deadLetter ? 'dead_letter' : 'retryable',\n leaseId,\n lastErrorCode: retry.errorCode,\n nextAttemptAt: new Date(store.now().getTime() + delay * 1000).toISOString(),\n });\n },\n };\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { VerificationStore, VerificationQueue } from '@splitin/verification-engine';
|
|
2
|
+
|
|
3
|
+
declare const SCHEMA_NAME: "verification";
|
|
4
|
+
declare const REQUIRED_TABLES: readonly ["tenants", "configuration_revisions", "provider_definitions", "routes", "route_change_requests", "policy_versions", "protected_action_requirements", "attempts", "provider_resource_lineage", "decisions", "idempotency_claims", "webhook_events", "webhook_leases", "reconciliation_jobs", "redaction_jobs", "provider_health_observations", "circuits", "appeals", "review_cases", "manual_decision_proposals", "audit_events", "continuations"];
|
|
5
|
+
declare const REDACTION_STATUSES: readonly ["scheduled", "processing", "retryable", "redacted", "not_applicable", "dead_letter"];
|
|
6
|
+
|
|
7
|
+
interface SqlQueryResult<T = Record<string, unknown>> {
|
|
8
|
+
rows: T[];
|
|
9
|
+
rowCount: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Injected SQL executor compatible with `pg` Pool/Client and serverless clients.
|
|
13
|
+
*/
|
|
14
|
+
interface SqlExecutor {
|
|
15
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<SqlQueryResult<T>>;
|
|
16
|
+
}
|
|
17
|
+
interface PostgresStoreOptions {
|
|
18
|
+
hashSecret: string;
|
|
19
|
+
now?: () => Date;
|
|
20
|
+
}
|
|
21
|
+
declare class RecordingExecutor implements SqlExecutor {
|
|
22
|
+
readonly statements: Array<{
|
|
23
|
+
sql: string;
|
|
24
|
+
params: unknown[];
|
|
25
|
+
}>;
|
|
26
|
+
responses: Array<{
|
|
27
|
+
match: string;
|
|
28
|
+
rows: Record<string, unknown>[];
|
|
29
|
+
}>;
|
|
30
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<SqlQueryResult<T>>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
declare function createPostgresStore(executor: SqlExecutor, options: PostgresStoreOptions): VerificationStore;
|
|
34
|
+
|
|
35
|
+
declare function createPostgresQueue(executorOrStore: SqlExecutor | VerificationStore, options?: Partial<PostgresStoreOptions> & {
|
|
36
|
+
random?: () => number;
|
|
37
|
+
}): VerificationQueue;
|
|
38
|
+
|
|
39
|
+
export { type PostgresStoreOptions, REDACTION_STATUSES, REQUIRED_TABLES, RecordingExecutor, SCHEMA_NAME, type SqlExecutor, type SqlQueryResult, createPostgresQueue, createPostgresStore };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { VerificationStore, VerificationQueue } from '@splitin/verification-engine';
|
|
2
|
+
|
|
3
|
+
declare const SCHEMA_NAME: "verification";
|
|
4
|
+
declare const REQUIRED_TABLES: readonly ["tenants", "configuration_revisions", "provider_definitions", "routes", "route_change_requests", "policy_versions", "protected_action_requirements", "attempts", "provider_resource_lineage", "decisions", "idempotency_claims", "webhook_events", "webhook_leases", "reconciliation_jobs", "redaction_jobs", "provider_health_observations", "circuits", "appeals", "review_cases", "manual_decision_proposals", "audit_events", "continuations"];
|
|
5
|
+
declare const REDACTION_STATUSES: readonly ["scheduled", "processing", "retryable", "redacted", "not_applicable", "dead_letter"];
|
|
6
|
+
|
|
7
|
+
interface SqlQueryResult<T = Record<string, unknown>> {
|
|
8
|
+
rows: T[];
|
|
9
|
+
rowCount: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Injected SQL executor compatible with `pg` Pool/Client and serverless clients.
|
|
13
|
+
*/
|
|
14
|
+
interface SqlExecutor {
|
|
15
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<SqlQueryResult<T>>;
|
|
16
|
+
}
|
|
17
|
+
interface PostgresStoreOptions {
|
|
18
|
+
hashSecret: string;
|
|
19
|
+
now?: () => Date;
|
|
20
|
+
}
|
|
21
|
+
declare class RecordingExecutor implements SqlExecutor {
|
|
22
|
+
readonly statements: Array<{
|
|
23
|
+
sql: string;
|
|
24
|
+
params: unknown[];
|
|
25
|
+
}>;
|
|
26
|
+
responses: Array<{
|
|
27
|
+
match: string;
|
|
28
|
+
rows: Record<string, unknown>[];
|
|
29
|
+
}>;
|
|
30
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<SqlQueryResult<T>>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
declare function createPostgresStore(executor: SqlExecutor, options: PostgresStoreOptions): VerificationStore;
|
|
34
|
+
|
|
35
|
+
declare function createPostgresQueue(executorOrStore: SqlExecutor | VerificationStore, options?: Partial<PostgresStoreOptions> & {
|
|
36
|
+
random?: () => number;
|
|
37
|
+
}): VerificationQueue;
|
|
38
|
+
|
|
39
|
+
export { type PostgresStoreOptions, REDACTION_STATUSES, REQUIRED_TABLES, RecordingExecutor, SCHEMA_NAME, type SqlExecutor, type SqlQueryResult, createPostgresQueue, createPostgresStore };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["index.d.ts"],"names":[],"mappings":"AAAA"}
|