@aletheia-dev/core 0.1.0 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/base.ts","../src/tenant.ts","../src/condition.ts","../src/subject.ts","../src/rule.ts","../src/decision.ts","../src/case.ts","../src/workflow.ts","../src/plugin.ts","../src/collection.ts","../src/audit.ts","../src/list.ts","../src/event.ts","../src/rule-set.ts","../src/evaluation.ts","../src/backtest.ts","../src/plugin-callback.ts","../src/document.ts","../src/timeline.ts","../src/builder.ts","../src/governance.ts","../src/errors.ts","../src/ids.ts","../src/logger.ts"],"sourcesContent":["// Pure, environment-agnostic exports. Safe to import from Temporal workflow code and browsers.\nexport * from './base.js';\nexport * from './tenant.js';\nexport * from './condition.js';\nexport * from './subject.js';\nexport * from './rule.js';\nexport * from './decision.js';\nexport * from './case.js';\nexport * from './workflow.js';\nexport * from './plugin.js';\nexport * from './collection.js';\nexport * from './audit.js';\nexport * from './list.js';\nexport * from './event.js';\nexport * from './rule-set.js';\nexport * from './evaluation.js';\nexport * from './backtest.js';\nexport * from './plugin-callback.js';\nexport * from './document.js';\nexport * from './timeline.js';\nexport * from './builder.js';\nexport * from './governance.js';\nexport * from './errors.js';\nexport * from './ids.js';\nexport * from './logger.js';\n","import { z } from 'zod';\n\n/** UUID-shaped identifier (8-4-4-4-12 hex) used for every entity. `guid` rather than `uuid` so\n * well-known fixed ids such as the dev tenant are accepted. */\nexport const Id = z.guid();\nexport type Id = z.infer<typeof Id>;\n\n/** Arbitrary JSON object payload (stored as jsonb). Validated by domain code, not the DB. */\nexport const JsonObject = z.record(z.string(), z.unknown());\nexport type JsonObject = z.infer<typeof JsonObject>;\n\nexport const Timestamps = z.object({\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\n/** Every persisted, tenant-scoped entity. */\nexport const BaseEntity = z.object({ id: Id, tenantId: Id, ...Timestamps.shape });\nexport type BaseEntity = z.infer<typeof BaseEntity>;\n\n/** Lifecycle of versioned definitions (workflows, rules, collection flows). */\nexport const DefinitionStatus = z.enum(['draft', 'pending_approval', 'published', 'archived']);\nexport type DefinitionStatus = z.infer<typeof DefinitionStatus>;\n\n/** Stable slug used to address definitions across versions. */\nexport const DefinitionKey = z\n .string()\n .min(1)\n .max(100)\n .regex(/^[a-z0-9][a-z0-9_-]*$/, 'keys are lowercase letters, digits, \"_\" or \"-\"');\nexport type DefinitionKey = z.infer<typeof DefinitionKey>;\n","import { z } from 'zod';\nimport { Id } from './base.js';\n\n/**\n * Who performed an action: a human `user`, a machine `service` account, an end customer\n * (`applicant`) acting through a submission token, the `system` itself, a `plugin` or a `workflow`.\n */\nexport const ActorType = z.enum(['user', 'service', 'applicant', 'system', 'plugin', 'workflow']);\nexport type ActorType = z.infer<typeof ActorType>;\n\nexport const Actor = z.object({ type: ActorType, id: z.string().min(1) });\nexport type Actor = z.infer<typeof Actor>;\n\n/** Passed as the first argument to every repository and service method. */\nexport const TenantContext = z.object({ tenantId: Id, actor: Actor });\nexport type TenantContext = z.infer<typeof TenantContext>;\n\nexport const SYSTEM_ACTOR: Actor = { type: 'system', id: 'system' };\n\n/** Tenant created by `pnpm db:seed` and used by the UIs in development. */\nexport const DEV_TENANT_ID = '00000000-0000-0000-0000-000000000001';\n\n/** A browser origin (`scheme://host[:port]`), with no path, query or trailing slash. */\nexport const WebOrigin = z\n .string()\n .regex(/^https?:\\/\\/[a-z0-9.-]+(:\\d{1,5})?$/i, 'must be an origin like https://merchant.example');\nexport type WebOrigin = z.infer<typeof WebOrigin>;\n\n/** Tenant-level settings an admin manages through the API (`tenants.settings`). */\nexport const CaseSettings = z.object({\n /** SLA applied to cases whose `create_case` step sets no `slaHours`. */\n defaultSlaHours: z\n .number()\n .positive()\n .max(24 * 90)\n .optional(),\n});\nexport type CaseSettings = z.infer<typeof CaseSettings>;\n\nexport const ApprovalSettings = z.object({\n /** When true, drafts are published only through an approval. */\n required: z.boolean().default(false),\n /** When approvals are required, the requester may not approve their own change. */\n fourEyes: z.boolean().default(true),\n});\nexport type ApprovalSettings = z.infer<typeof ApprovalSettings>;\n\nexport const TenantSettings = z.object({\n /** Merchant origins allowed to embed this tenant's collection flows in an iframe. */\n embedOrigins: z.array(WebOrigin).max(20).default([]),\n cases: CaseSettings.default({}),\n approvals: ApprovalSettings.default({ required: false, fourEyes: true }),\n});\nexport type TenantSettings = z.infer<typeof TenantSettings>;\n\nexport const Tenant = z.object({\n id: Id,\n name: z.string().min(1),\n settings: TenantSettings.default({\n embedOrigins: [],\n cases: {},\n approvals: { required: false, fourEyes: true },\n }),\n createdAt: z.coerce.date(),\n});\nexport type Tenant = z.infer<typeof Tenant>;\n\nexport function systemContext(tenantId: Id): TenantContext {\n return { tenantId, actor: SYSTEM_ACTOR };\n}\n\n/** A reviewer as the user directory reports it (a human in the tenant's identity-provider org). */\nexport const DirectoryUser = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n email: z.string().optional(),\n /** Project roles the user holds, e.g. `analyst`. */\n roles: z.array(z.string()),\n});\nexport type DirectoryUser = z.infer<typeof DirectoryUser>;\n","import { z } from 'zod';\n\n/**\n * A single predicate over a dot-path into a data object. Shared by the comparison rule,\n * workflow branch steps and collection-flow field visibility. Pure: safe inside Temporal\n * workflow code.\n */\nexport const ConditionOp = z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'exists']);\nexport type ConditionOp = z.infer<typeof ConditionOp>;\n\nexport const Condition = z.object({\n path: z.string().min(1),\n op: ConditionOp,\n value: z.unknown().optional(),\n});\nexport type Condition = z.infer<typeof Condition>;\n\n/** Reads `a.b.c` from a nested object; returns undefined when any segment is missing. */\nexport function getPath(source: unknown, path: string): unknown {\n let current: unknown = source;\n for (const segment of path.split('.')) {\n if (current === null || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[segment];\n }\n return current;\n}\n\nfunction compareNumbers(actual: unknown, expected: unknown, op: ConditionOp): boolean {\n const a = typeof actual === 'number' ? actual : Number(actual);\n const b = typeof expected === 'number' ? expected : Number(expected);\n if (Number.isNaN(a) || Number.isNaN(b)) return false;\n switch (op) {\n case 'gt':\n return a > b;\n case 'gte':\n return a >= b;\n case 'lt':\n return a < b;\n case 'lte':\n return a <= b;\n default:\n return false;\n }\n}\n\nexport function evaluateCondition(condition: Condition, data: unknown): boolean {\n const actual = getPath(data, condition.path);\n switch (condition.op) {\n case 'exists':\n return actual !== undefined && actual !== null;\n case 'eq':\n return actual === condition.value;\n case 'neq':\n return actual !== condition.value;\n case 'in':\n return Array.isArray(condition.value) && condition.value.includes(actual);\n case 'gt':\n case 'gte':\n case 'lt':\n case 'lte':\n return compareNumbers(actual, condition.value, condition.op);\n }\n}\n","import { z } from 'zod';\nimport { BaseEntity, JsonObject } from './base.js';\n\nexport const SubjectKind = z.enum(['merchant', 'seller', 'user']);\nexport type SubjectKind = z.infer<typeof SubjectKind>;\n\nexport const SubjectStatus = z.enum(['active', 'blocked', 'closed']);\nexport type SubjectStatus = z.infer<typeof SubjectStatus>;\n\n/** The thing being risk-assessed: a merchant, seller or end user. */\nexport const Subject = BaseEntity.extend({\n kind: SubjectKind,\n externalId: z.string().nullish(),\n status: SubjectStatus,\n data: JsonObject,\n riskScore: z.number().nullish(),\n tags: z.array(z.string()),\n});\nexport type Subject = z.infer<typeof Subject>;\n\nexport const CreateSubjectInput = z.object({\n kind: SubjectKind,\n externalId: z.string().min(1).optional(),\n data: JsonObject.default({}),\n tags: z.array(z.string()).default([]),\n});\nexport type CreateSubjectInput = z.infer<typeof CreateSubjectInput>;\n\n/** Filters for `GET /subjects`; `search` matches `externalId`, `data.name` and `data.legalName`. */\nexport const SubjectListQuery = z.object({\n search: z.string().min(1).max(200).optional(),\n kind: SubjectKind.optional(),\n status: SubjectStatus.optional(),\n riskScoreMin: z.coerce.number().min(0).max(100).optional(),\n riskScoreMax: z.coerce.number().min(0).max(100).optional(),\n limit: z.coerce.number().int().positive().optional(),\n offset: z.coerce.number().int().nonnegative().optional(),\n});\nexport type SubjectListQuery = z.infer<typeof SubjectListQuery>;\n","import { z } from 'zod';\nimport { BaseEntity, DefinitionKey, DefinitionStatus } from './base.js';\n\nexport const RuleType = z.enum([\n 'comparison',\n 'list_lookup',\n 'score_threshold',\n 'expression',\n 'plugin',\n 'velocity',\n]);\nexport type RuleType = z.infer<typeof RuleType>;\n\nexport const RuleSeverity = z.enum(['info', 'warn', 'block']);\nexport type RuleSeverity = z.infer<typeof RuleSeverity>;\n\n/** A versioned rule. `config` is validated per `type` by the rule-engine registry. */\nexport const RuleDefinition = BaseEntity.extend({\n /** Actor id that created this version; null for rows older than PR 19. */\n createdBy: z.string().nullish(),\n key: DefinitionKey,\n version: z.number().int().positive(),\n name: z.string().min(1),\n description: z.string().nullish(),\n type: RuleType,\n config: z.unknown(),\n severity: RuleSeverity,\n weight: z.number().nullish(),\n enabled: z.boolean(),\n tags: z.array(z.string()),\n status: DefinitionStatus,\n});\nexport type RuleDefinition = z.infer<typeof RuleDefinition>;\n\nexport const UpsertRuleDefinitionInput = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n type: RuleType,\n config: z.unknown(),\n severity: RuleSeverity.default('block'),\n weight: z.number().optional(),\n enabled: z.boolean().default(true),\n tags: z.array(z.string()).default([]),\n});\nexport type UpsertRuleDefinitionInput = z.infer<typeof UpsertRuleDefinitionInput>;\n\nexport const RuleOutcome = z.enum(['pass', 'fail', 'error', 'skipped']);\nexport type RuleOutcome = z.infer<typeof RuleOutcome>;\n\n/** Result of evaluating one rule. Carries severity/weight so aggregation is self-contained. */\nexport const RuleEvaluationResult = z.object({\n ruleId: z.string(),\n ruleKey: z.string(),\n ruleVersion: z.number().int(),\n severity: RuleSeverity,\n weight: z.number().nullish(),\n outcome: RuleOutcome,\n score: z.number().nullish(),\n reasons: z.array(z.string()),\n details: z.unknown().optional(),\n durationMs: z.number().nonnegative(),\n /** Evaluated as a shadow rule of a rule set: recorded, but excluded from aggregation. */\n shadow: z.boolean().optional(),\n});\nexport type RuleEvaluationResult = z.infer<typeof RuleEvaluationResult>;\n","import { z } from 'zod';\nimport { Id } from './base.js';\nimport { RuleEvaluationResult } from './rule.js';\n\nexport const DecisionOutcome = z.enum(['approve', 'reject', 'manual_review']);\nexport type DecisionOutcome = z.infer<typeof DecisionOutcome>;\n\nexport const DecisionReason = z.object({\n code: z.string().min(1),\n message: z.string(),\n ruleKey: z.string().optional(),\n});\nexport type DecisionReason = z.infer<typeof DecisionReason>;\n\nexport const DecisionSource = z.enum(['automated', 'manual']);\nexport type DecisionSource = z.infer<typeof DecisionSource>;\n\n/** Immutable record of a decision about a subject. */\nexport const Decision = z.object({\n id: Id,\n tenantId: Id,\n subjectId: Id,\n workflowRunId: Id.nullish(),\n caseId: Id.nullish(),\n outcome: DecisionOutcome,\n riskScore: z.number().nullish(),\n reasons: z.array(DecisionReason),\n source: DecisionSource,\n decidedBy: z.string().nullish(),\n ruleResults: z.array(RuleEvaluationResult),\n /** The rule set that produced an automated decision, when one was used. */\n ruleSetKey: z.string().nullish(),\n ruleSetVersion: z.number().int().nullish(),\n createdAt: z.coerce.date(),\n});\nexport type Decision = z.infer<typeof Decision>;\n","import { z } from 'zod';\nimport { BaseEntity, Id, JsonObject } from './base.js';\nimport { DecisionOutcome, DecisionReason } from './decision.js';\n\nexport const CaseStatus = z.enum(['open', 'in_review', 'decided', 'closed']);\nexport type CaseStatus = z.infer<typeof CaseStatus>;\n\nexport const CasePriority = z.enum(['low', 'medium', 'high', 'critical']);\nexport type CasePriority = z.infer<typeof CasePriority>;\n\n/** Derived from `dueAt` and `slaBreachedAt` at read time; never stored. */\nexport const CaseSlaState = z.enum(['none', 'ok', 'due_soon', 'breached']);\nexport type CaseSlaState = z.infer<typeof CaseSlaState>;\n\n/** A manual-review item surfaced in the back office. */\nexport const Case = BaseEntity.extend({\n subjectId: Id,\n workflowRunId: Id.nullish(),\n type: z.string().min(1),\n status: CaseStatus,\n priority: CasePriority,\n assigneeId: z.string().nullish(),\n decisionId: Id.nullish(),\n context: JsonObject,\n /** SLA deadline, set from the step's `slaHours` or the tenant default. */\n dueAt: z.coerce.date().nullish(),\n /** Set once by the workflow when the SLA timer fires before a decision. */\n slaBreachedAt: z.coerce.date().nullish(),\n /** First assignment or note: the moment someone picked the case up. */\n firstResponseAt: z.coerce.date().nullish(),\n decidedAt: z.coerce.date().nullish(),\n closedAt: z.coerce.date().nullish(),\n closedReason: z.string().nullish(),\n});\nexport type Case = z.infer<typeof Case>;\n\n/** A case as the API returns it: the row plus its derived SLA state. */\nexport const CaseView = Case.extend({ slaState: CaseSlaState });\nexport type CaseView = z.infer<typeof CaseView>;\n\n/**\n * `due_soon` starts at the larger of 20 % of the SLA window and two hours before `dueAt`, capped\n * at half the window so short SLAs are not \"due soon\" from the start.\n */\nexport function caseSlaState(\n c: Pick<Case, 'dueAt' | 'slaBreachedAt' | 'status' | 'createdAt'>,\n now: Date = new Date(),\n): CaseSlaState {\n if (!c.dueAt) return 'none';\n if (c.slaBreachedAt) return 'breached';\n if (c.status === 'decided' || c.status === 'closed') return 'ok';\n const remaining = c.dueAt.getTime() - now.getTime();\n if (remaining <= 0) return 'breached';\n const window = c.dueAt.getTime() - c.createdAt.getTime();\n const soon = Math.min(window * 0.5, Math.max(window * 0.2, 2 * 3600 * 1000));\n return remaining <= soon ? 'due_soon' : 'ok';\n}\n\nexport const AssignCaseInput = z.object({\n /** Reviewer id from the user directory; `null` unassigns. */\n assigneeId: z.string().min(1).nullable(),\n});\nexport type AssignCaseInput = z.infer<typeof AssignCaseInput>;\n\nexport const CloseCaseInput = z.object({ reason: z.string().max(500).optional() });\nexport type CloseCaseInput = z.infer<typeof CloseCaseInput>;\n\nexport const CaseNote = BaseEntity.extend({\n caseId: Id,\n authorId: z.string().min(1),\n body: z.string().min(1).max(10_000),\n editedAt: z.coerce.date().nullish(),\n});\nexport type CaseNote = z.infer<typeof CaseNote>;\n\nexport const CaseNoteInput = z.object({ body: z.string().min(1).max(10_000) });\nexport type CaseNoteInput = z.infer<typeof CaseNoteInput>;\n\nexport const CaseSort = z.enum(['createdAt', 'dueAt', 'priority']);\nexport type CaseSort = z.infer<typeof CaseSort>;\nexport const SortOrder = z.enum(['asc', 'desc']);\nexport type SortOrder = z.infer<typeof SortOrder>;\n\n/** What a case queue (saved filter) and `GET /cases` accept. */\nexport const CaseFilter = z.object({\n status: z.array(CaseStatus).optional(),\n priority: z.array(CasePriority).optional(),\n /** A reviewer id, `me` (resolved to the caller) or `unassigned`. */\n assignee: z.string().min(1).optional(),\n type: z.string().min(1).optional(),\n subjectId: Id.optional(),\n slaState: z.array(CaseSlaState).optional(),\n dueBefore: z.coerce.date().optional(),\n /** Case-insensitive match on `context.subjectName` and the case type. */\n search: z.string().min(1).max(200).optional(),\n});\nexport type CaseFilter = z.infer<typeof CaseFilter>;\n\nexport const CaseQueue = BaseEntity.extend({\n name: z.string().min(1).max(80),\n filter: CaseFilter,\n sort: CaseSort,\n order: SortOrder,\n position: z.number().int().nonnegative(),\n createdBy: z.string().min(1),\n});\nexport type CaseQueue = z.infer<typeof CaseQueue>;\n\nexport const UpsertCaseQueueInput = z.object({\n name: z.string().min(1).max(80),\n filter: CaseFilter.default({}),\n sort: CaseSort.default('createdAt'),\n order: SortOrder.default('desc'),\n position: z.number().int().nonnegative().default(0),\n});\nexport type UpsertCaseQueueInput = z.infer<typeof UpsertCaseQueueInput>;\n\nexport const DecideCaseInput = z.object({\n outcome: DecisionOutcome,\n reasons: z.array(DecisionReason).default([]),\n note: z.string().optional(),\n});\nexport type DecideCaseInput = z.infer<typeof DecideCaseInput>;\n\n/** Payload of the `manualDecision` workflow signal. */\nexport const ManualDecision = z.object({\n caseId: Id,\n decisionId: Id,\n outcome: DecisionOutcome,\n reasons: z.array(DecisionReason),\n decidedBy: z.string(),\n});\nexport type ManualDecision = z.infer<typeof ManualDecision>;\n","import { z } from 'zod';\nimport { BaseEntity, DefinitionKey, DefinitionStatus, Id, JsonObject } from './base.js';\nimport { CasePriority } from './case.js';\nimport { Condition } from './condition.js';\nimport { DecisionOutcome } from './decision.js';\n\nconst StepBase = z.object({\n id: z.string().min(1),\n name: z.string().optional(),\n /** Next step id. Omitted on terminal steps. */\n next: z.string().optional(),\n});\n\nexport const EvaluateRulesStep = StepBase.extend({\n type: z.literal('evaluate_rules'),\n /** Ad-hoc list evaluated with the default policy; mutually exclusive with `ruleSetKey`. */\n ruleKeys: z.array(DefinitionKey).min(1).optional(),\n /** A published rule set: its rules, order, overrides and aggregation policy. */\n ruleSetKey: DefinitionKey.optional(),\n outputKey: z.string().default('rules'),\n}).refine((step) => (step.ruleKeys === undefined) !== (step.ruleSetKey === undefined), {\n message: 'evaluate_rules needs exactly one of ruleKeys or ruleSetKey',\n path: ['ruleKeys'],\n});\n\nexport const CallPluginStep = StepBase.extend({\n type: z.literal('call_plugin'),\n plugin: z.string().min(1),\n action: z.string().min(1),\n /** Literal input values (e.g. `{ type: \"Person\", topics: [\"role.pep\"] }`); `inputMapping` entries override them. */\n input: z.record(z.string(), z.unknown()).default({}),\n /** input field -> dot path into the run context (e.g. `{ name: \"submission.data.legalName\" }`). */\n inputMapping: z.record(z.string(), z.string()).default({}),\n outputKey: z.string().min(1),\n /** Overrides the worker's default retry policy for this plugin call. */\n retry: z\n .object({\n maximumAttempts: z.number().int().min(1).max(10).optional(),\n initialIntervalSeconds: z.number().positive().optional(),\n })\n .optional(),\n});\n\nexport const WaitForCollectionStep = StepBase.extend({\n type: z.literal('wait_for_collection'),\n flowKey: DefinitionKey,\n timeoutSeconds: z.number().int().positive().optional(),\n outputKey: z.string().default('submission'),\n});\n\nexport const CreateCaseStep = StepBase.extend({\n type: z.literal('create_case'),\n caseType: z.string().min(1),\n priority: CasePriority.default('medium'),\n /** Hours until the case's SLA deadline; the tenant default applies when omitted. */\n slaHours: z\n .number()\n .positive()\n .max(24 * 90)\n .optional(),\n outputKey: z.string().default('manualDecision'),\n});\n\nexport const EmitDecisionStep = StepBase.extend({\n type: z.literal('emit_decision'),\n mode: z.enum(['from_rules', 'fixed']).default('from_rules'),\n /** Context key holding rule results when mode is `from_rules`. */\n rulesKey: z.string().default('rules'),\n /** Context key holding a manual decision; takes precedence when present. */\n manualDecisionKey: z.string().default('manualDecision'),\n outcome: DecisionOutcome.optional(),\n});\n\nexport const BranchStep = StepBase.extend({\n type: z.literal('branch'),\n conditions: z.array(z.object({ when: Condition, next: z.string().min(1) })).min(1),\n default: z.string().min(1),\n});\n\nexport const WorkflowStep = z.discriminatedUnion('type', [\n EvaluateRulesStep,\n CallPluginStep,\n WaitForCollectionStep,\n CreateCaseStep,\n EmitDecisionStep,\n BranchStep,\n]);\nexport type WorkflowStep = z.infer<typeof WorkflowStep>;\nexport type WorkflowStepType = WorkflowStep['type'];\n\n/** Collects every step id a step can transition to. */\nexport function stepTargets(step: WorkflowStep): string[] {\n const targets = step.next ? [step.next] : [];\n if (step.type === 'branch') {\n targets.push(...step.conditions.map((c) => c.next), step.default);\n }\n return targets;\n}\n\n/** Editor-only layout stored with a definition; the engine never reads it. */\nexport const WorkflowUi = z.object({\n positions: z.record(z.string(), z.object({ x: z.number(), y: z.number() })).default({}),\n});\nexport type WorkflowUi = z.infer<typeof WorkflowUi>;\n\nexport const WorkflowDefinitionBody = z\n .object({\n entryStepId: z.string().min(1),\n steps: z.array(WorkflowStep).min(1),\n ui: WorkflowUi.optional(),\n })\n .superRefine((body, ctx) => {\n const ids = new Set<string>();\n body.steps.forEach((step, index) => {\n if (ids.has(step.id)) {\n ctx.addIssue({\n code: 'custom',\n path: ['steps', index, 'id'],\n message: `duplicate step id \"${step.id}\"`,\n });\n }\n ids.add(step.id);\n });\n if (!ids.has(body.entryStepId)) {\n ctx.addIssue({\n code: 'custom',\n path: ['entryStepId'],\n message: `unknown entry step \"${body.entryStepId}\"`,\n });\n }\n body.steps.forEach((step, index) => {\n for (const target of stepTargets(step)) {\n if (!ids.has(target)) {\n ctx.addIssue({\n code: 'custom',\n path: ['steps', index],\n message: `step \"${step.id}\" points to unknown step \"${target}\"`,\n });\n }\n }\n });\n });\nexport type WorkflowDefinitionBody = z.infer<typeof WorkflowDefinitionBody>;\n\nexport const WorkflowTrigger = z.enum(['manual', 'subject.created', 'event']);\nexport type WorkflowTrigger = z.infer<typeof WorkflowTrigger>;\n\nexport const WorkflowDefinition = BaseEntity.extend({\n /** Actor id that created this version; null for rows older than PR 19. */\n createdBy: z.string().nullish(),\n key: DefinitionKey,\n version: z.number().int().positive(),\n name: z.string().min(1),\n description: z.string().nullish(),\n trigger: WorkflowTrigger,\n status: DefinitionStatus,\n definition: WorkflowDefinitionBody,\n});\nexport type WorkflowDefinition = z.infer<typeof WorkflowDefinition>;\n\nexport const UpsertWorkflowDefinitionInput = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n trigger: WorkflowTrigger.default('manual'),\n definition: WorkflowDefinitionBody,\n});\nexport type UpsertWorkflowDefinitionInput = z.infer<typeof UpsertWorkflowDefinitionInput>;\n\nexport const WorkflowRunStatus = z.enum([\n 'running',\n 'waiting_collection',\n 'waiting_manual',\n 'waiting_callback',\n 'completed',\n 'failed',\n 'cancelled',\n]);\nexport type WorkflowRunStatus = z.infer<typeof WorkflowRunStatus>;\n\n/** One execution of a workflow definition for one subject. Mirrors a Temporal workflow execution. */\nexport const WorkflowRun = BaseEntity.extend({\n definitionId: Id,\n definitionKey: DefinitionKey,\n definitionVersion: z.number().int().positive(),\n subjectId: Id,\n temporalWorkflowId: z.string(),\n temporalRunId: z.string().nullish(),\n status: WorkflowRunStatus,\n currentStepId: z.string().nullish(),\n /** Accumulated step outputs keyed by each step's `outputKey`. */\n context: JsonObject,\n decisionId: Id.nullish(),\n error: z.string().nullish(),\n startedAt: z.coerce.date(),\n finishedAt: z.coerce.date().nullish(),\n});\nexport type WorkflowRun = z.infer<typeof WorkflowRun>;\n\nexport const StartWorkflowRunInput = z.object({\n definitionKey: DefinitionKey,\n subjectId: Id,\n});\nexport type StartWorkflowRunInput = z.infer<typeof StartWorkflowRunInput>;\n\n/** Argument of the generic Temporal interpreter workflow. */\nexport const RunDefinitionInput = z.object({\n tenantId: Id,\n runId: Id,\n definitionId: Id,\n definitionVersion: z.number().int().positive(),\n subjectId: Id,\n});\nexport type RunDefinitionInput = z.infer<typeof RunDefinitionInput>;\n\nexport function temporalWorkflowId(tenantId: string, runId: string): string {\n return `wf:${tenantId}:${runId}`;\n}\n","import { z } from 'zod';\nimport { BaseEntity, Id, JsonObject } from './base.js';\n\n/** Tenant-level installation of a plugin package. Non-secret config only; secrets are referenced. */\nexport const PluginDefinition = BaseEntity.extend({\n name: z.string().min(1),\n version: z.string().min(1),\n capabilities: z.array(z.string()),\n enabled: z.boolean(),\n config: JsonObject,\n /** secret name -> reference understood by the SecretProvider (e.g. env var name). */\n secretRefs: z.record(z.string(), z.string()),\n});\nexport type PluginDefinition = z.infer<typeof PluginDefinition>;\n\nexport const PluginInvocationStatus = z.enum(['success', 'error', 'timeout', 'pending']);\nexport type PluginInvocationStatus = z.infer<typeof PluginInvocationStatus>;\n\n/** Audit record of one call into a plugin action. */\nexport const PluginInvocation = z.object({\n id: Id,\n tenantId: Id,\n pluginName: z.string(),\n action: z.string(),\n subjectId: Id.nullish(),\n workflowRunId: Id.nullish(),\n input: z.unknown(),\n output: z.unknown().nullish(),\n status: PluginInvocationStatus,\n error: z.string().nullish(),\n durationMs: z.number().nonnegative(),\n invokedAt: z.coerce.date(),\n /** Caller-provided key identifying the logical call across retries. */\n idempotencyKey: z.string().nullish(),\n /** 1 for the first attempt of a logical call, incremented by runtime retries. */\n attempt: z.number().int().positive().default(1),\n});\nexport type PluginInvocation = z.infer<typeof PluginInvocation>;\n\n/** Tenant-level enablement and configuration of an installed plugin (`PUT /plugins/:name`). */\nexport const ConfigurePluginInput = z.object({\n enabled: z.boolean().default(true),\n config: JsonObject.default({}),\n secretRefs: z.record(z.string(), z.string()).default({}),\n});\nexport type ConfigurePluginInput = z.infer<typeof ConfigurePluginInput>;\n","import { z } from 'zod';\nimport { BaseEntity, DefinitionKey, DefinitionStatus, Id, JsonObject } from './base.js';\nimport { Condition } from './condition.js';\n\nexport const FieldType = z.enum(['text', 'email', 'number', 'select', 'date', 'boolean', 'file']);\nexport type FieldType = z.infer<typeof FieldType>;\n\nexport const FieldOption = z.object({ value: z.string(), label: z.string() });\nexport type FieldOption = z.infer<typeof FieldOption>;\n\nexport const FieldValidation = z.object({\n min: z.number().optional(),\n max: z.number().optional(),\n pattern: z.string().optional(),\n});\nexport type FieldValidation = z.infer<typeof FieldValidation>;\n\nexport const Field = z.object({\n key: z.string().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/, 'field keys are identifiers'),\n label: z.string().min(1),\n type: FieldType,\n required: z.boolean().default(false),\n placeholder: z.string().optional(),\n help: z.string().optional(),\n options: z.array(FieldOption).optional(),\n validation: FieldValidation.optional(),\n /** Field is rendered and validated only when the condition holds against the submission data. */\n visibleWhen: Condition.optional(),\n});\nexport type Field = z.infer<typeof Field>;\n\nexport const FlowStep = z.object({\n id: z.string().min(1),\n title: z.string().min(1),\n description: z.string().optional(),\n fields: z.array(Field),\n next: z.string().optional(),\n branches: z.array(z.object({ when: Condition, next: z.string().min(1) })).optional(),\n});\nexport type FlowStep = z.infer<typeof FlowStep>;\n\n/** Default and ceiling for how long an applicant's submission link stays valid. */\nexport const DEFAULT_LINK_TTL_SECONDS = 7 * 24 * 3600;\nexport const MAX_LINK_TTL_SECONDS = 30 * 24 * 3600;\n\nexport const CollectionFlowBody = z\n .object({\n entryStepId: z.string().min(1),\n steps: z.array(FlowStep).min(1),\n /** Lifetime of the signed submission link issued for this flow (60 s to 30 days). */\n linkTtlSeconds: z\n .number()\n .int()\n .min(60)\n .max(MAX_LINK_TTL_SECONDS)\n .default(DEFAULT_LINK_TTL_SECONDS),\n })\n .superRefine((body, ctx) => {\n const ids = new Set(body.steps.map((s) => s.id));\n if (ids.size !== body.steps.length) {\n ctx.addIssue({ code: 'custom', path: ['steps'], message: 'duplicate step ids' });\n }\n if (!ids.has(body.entryStepId)) {\n ctx.addIssue({\n code: 'custom',\n path: ['entryStepId'],\n message: `unknown entry step \"${body.entryStepId}\"`,\n });\n }\n body.steps.forEach((step, index) => {\n const targets = [\n ...(step.next ? [step.next] : []),\n ...(step.branches ?? []).map((b) => b.next),\n ];\n for (const target of targets) {\n if (!ids.has(target)) {\n ctx.addIssue({\n code: 'custom',\n path: ['steps', index],\n message: `step \"${step.id}\" points to unknown step \"${target}\"`,\n });\n }\n }\n });\n });\nexport type CollectionFlowBody = z.infer<typeof CollectionFlowBody>;\n\nexport const CollectionFlowDefinition = BaseEntity.extend({\n /** Actor id that created this version; null for rows older than PR 19. */\n createdBy: z.string().nullish(),\n key: DefinitionKey,\n version: z.number().int().positive(),\n name: z.string().min(1),\n description: z.string().nullish(),\n status: DefinitionStatus,\n definition: CollectionFlowBody,\n});\nexport type CollectionFlowDefinition = z.infer<typeof CollectionFlowDefinition>;\n\nexport const UpsertCollectionFlowInput = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n definition: CollectionFlowBody,\n});\nexport type UpsertCollectionFlowInput = z.infer<typeof UpsertCollectionFlowInput>;\n\nexport const SubmissionStatus = z.enum(['in_progress', 'submitted']);\nexport type SubmissionStatus = z.infer<typeof SubmissionStatus>;\n\n/** A user's progress through a collection flow. Submitting signals the waiting workflow run. */\nexport const CollectionSubmission = BaseEntity.extend({\n flowDefinitionId: Id,\n flowKey: DefinitionKey,\n flowVersion: z.number().int().positive(),\n subjectId: Id,\n workflowRunId: Id.nullish(),\n status: SubmissionStatus,\n data: JsonObject,\n currentStepId: z.string().nullish(),\n submittedAt: z.coerce.date().nullish(),\n});\nexport type CollectionSubmission = z.infer<typeof CollectionSubmission>;\n\nexport const CreateSubmissionInput = z.object({\n flowKey: DefinitionKey,\n subjectId: Id,\n workflowRunId: Id.optional(),\n});\nexport type CreateSubmissionInput = z.infer<typeof CreateSubmissionInput>;\n\nexport const SaveSubmissionInput = z.object({\n data: JsonObject,\n currentStepId: z.string().optional(),\n});\nexport type SaveSubmissionInput = z.infer<typeof SaveSubmissionInput>;\n\n/** Payload of the `collectionSubmitted` workflow signal. */\nexport const CollectionSubmitted = z.object({\n submissionId: Id,\n flowKey: DefinitionKey,\n data: JsonObject,\n submittedAt: z.coerce.date(),\n});\nexport type CollectionSubmitted = z.infer<typeof CollectionSubmitted>;\n","import { z } from 'zod';\nimport { Id } from './base.js';\nimport { ActorType } from './tenant.js';\n\n/** Append-only record of who did what to which resource. */\nexport const AuditEvent = z.object({\n id: Id,\n tenantId: Id,\n actorType: ActorType,\n actorId: z.string(),\n /** Dotted verb, e.g. `case.decided`, `workflow.step.completed`. */\n action: z.string().regex(/^[a-z_]+(\\.[a-z_]+)+$/),\n resourceType: z.string().min(1),\n resourceId: z.string().min(1),\n payload: z.unknown(),\n occurredAt: z.coerce.date(),\n});\nexport type AuditEvent = z.infer<typeof AuditEvent>;\n","import { z } from 'zod';\nimport { BaseEntity, DefinitionKey, Id } from './base.js';\n\n/** What a list's entries are; drives validation and matching. */\nexport const ListKind = z.enum(['string', 'email', 'country', 'ip_cidr', 'number']);\nexport type ListKind = z.infer<typeof ListKind>;\n\n/** A tenant-managed blocklist or allowlist. Lists are live data, not versioned. */\nexport const List = BaseEntity.extend({\n key: DefinitionKey,\n name: z.string().min(1),\n description: z.string().nullish(),\n kind: ListKind,\n /** String matching ignores case (default). Ignored for `ip_cidr` and `number`. */\n caseInsensitive: z.boolean(),\n entryCount: z.number().int().nonnegative(),\n});\nexport type List = z.infer<typeof List>;\n\nexport const UpsertListInput = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n kind: ListKind,\n caseInsensitive: z.boolean().default(true),\n});\nexport type UpsertListInput = z.infer<typeof UpsertListInput>;\n\nexport const ListEntry = z.object({\n id: Id,\n tenantId: Id,\n listId: Id,\n /** The value as entered (trimmed). Matching uses a normalised form. */\n value: z.string().min(1),\n reason: z.string().nullish(),\n expiresAt: z.coerce.date().nullish(),\n addedBy: z.string(),\n createdAt: z.coerce.date(),\n});\nexport type ListEntry = z.infer<typeof ListEntry>;\n\nexport const NewListEntry = z.object({\n value: z.string().trim().min(1).max(512),\n reason: z.string().max(1000).optional(),\n expiresAt: z.coerce.date().optional(),\n});\nexport type NewListEntry = z.infer<typeof NewListEntry>;\n\nexport const AddListEntriesInput = z.object({\n entries: z.array(NewListEntry).min(1).max(10_000),\n});\nexport type AddListEntriesInput = z.infer<typeof AddListEntriesInput>;\n\nexport const RemoveListEntriesInput = z.object({\n ids: z.array(Id).min(1).max(10_000),\n});\nexport type RemoveListEntriesInput = z.infer<typeof RemoveListEntriesInput>;\n\n/** Outcome of a CSV import; `invalid` holds at most the first 100 rejected rows. */\nexport const ListImportResult = z.object({\n added: z.number().int().nonnegative(),\n skipped: z.number().int().nonnegative(),\n invalid: z.array(\n z.object({ line: z.number().int().positive(), value: z.string(), reason: z.string() }),\n ),\n});\nexport type ListImportResult = z.infer<typeof ListImportResult>;\n\nconst IPV4 = /^(\\d{1,3})(\\.\\d{1,3}){3}(\\/\\d{1,2})?$/;\nconst IPV6 = /^[0-9a-f:]+(\\/\\d{1,3})?$/i;\nconst COUNTRY = /^[A-Z]{2}$/;\n\n/**\n * Canonical form of an entry for a list kind, or an error message. Used by the API on write and\n * by the lookup service on read so both sides agree on matching.\n */\nexport function normalizeListValue(\n kind: ListKind,\n raw: string,\n caseInsensitive = true,\n): { ok: true; value: string } | { ok: false; reason: string } {\n const value = raw.trim();\n if (!value) return { ok: false, reason: 'empty value' };\n switch (kind) {\n case 'string':\n return { ok: true, value: caseInsensitive ? value.toLowerCase() : value };\n case 'email': {\n const lower = value.toLowerCase();\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(lower))\n return { ok: false, reason: 'not an email address' };\n return { ok: true, value: lower };\n }\n case 'country': {\n const upper = value.toUpperCase();\n if (!COUNTRY.test(upper)) return { ok: false, reason: 'not an ISO 3166-1 alpha-2 code' };\n return { ok: true, value: upper };\n }\n case 'number': {\n const n = Number(value);\n if (!Number.isFinite(n)) return { ok: false, reason: 'not a number' };\n return { ok: true, value: String(n) };\n }\n case 'ip_cidr': {\n if (IPV4.test(value)) {\n const [addr, prefix] = value.split('/');\n const octets = addr!.split('.').map(Number);\n if (octets.some((o) => o > 255)) return { ok: false, reason: 'invalid IPv4 address' };\n if (prefix !== undefined && Number(prefix) > 32)\n return { ok: false, reason: 'invalid prefix' };\n return { ok: true, value: prefix === undefined ? `${addr}/32` : value };\n }\n if (IPV6.test(value) && value.includes(':')) {\n const [addr, prefix] = value.split('/');\n if (prefix !== undefined && Number(prefix) > 128)\n return { ok: false, reason: 'invalid prefix' };\n return {\n ok: true,\n value: prefix === undefined ? `${addr!.toLowerCase()}/128` : value.toLowerCase(),\n };\n }\n return { ok: false, reason: 'not an IP address or CIDR range' };\n }\n }\n}\n","import { z } from 'zod';\nimport { Id, JsonObject } from './base.js';\n\n/** Group-by keys velocity rules can count over, besides the subject itself. */\nexport const EventKey = z.enum(['ip', 'device_id', 'card_fingerprint', 'email']);\nexport type EventKey = z.infer<typeof EventKey>;\n\n/**\n * An append-only fact about a subject (a transaction, a login, a signup). Promoted keys are\n * indexed for velocity rules; everything else lives in `attributes`.\n */\nexport const Event = z.object({\n id: z.string(),\n tenantId: Id,\n subjectId: Id,\n type: z.string().min(1),\n amount: z.number().nullish(),\n currency: z.string().length(3).nullish(),\n occurredAt: z.coerce.date(),\n ingestedAt: z.coerce.date(),\n attributes: JsonObject,\n idempotencyKey: z.string(),\n ip: z.string().nullish(),\n deviceId: z.string().nullish(),\n cardFingerprint: z.string().nullish(),\n email: z.string().nullish(),\n});\nexport type Event = z.infer<typeof Event>;\n\nexport const NewEvent = z.object({\n subjectId: Id,\n type: z\n .string()\n .min(1)\n .max(100)\n .regex(/^[a-z0-9][a-z0-9_.-]*$/, 'event types are lowercase identifiers'),\n amount: z.number().finite().optional(),\n currency: z.string().length(3).toUpperCase().optional(),\n occurredAt: z.coerce.date(),\n attributes: JsonObject.default({}),\n /** Caller-chosen key; re-sending the same key is a no-op. */\n idempotencyKey: z.string().min(1).max(255),\n ip: z.string().max(45).optional(),\n deviceId: z.string().max(255).optional(),\n cardFingerprint: z.string().max(255).optional(),\n email: z.string().max(320).toLowerCase().optional(),\n});\nexport type NewEvent = z.infer<typeof NewEvent>;\n\nexport const IngestEventsInput = z.object({\n events: z.array(NewEvent).min(1).max(1_000),\n});\nexport type IngestEventsInput = z.infer<typeof IngestEventsInput>;\n\nexport const IngestEventsResult = z.object({\n accepted: z.number().int().nonnegative(),\n duplicates: z.number().int().nonnegative(),\n});\nexport type IngestEventsResult = z.infer<typeof IngestEventsResult>;\n","import { z } from 'zod';\nimport { BaseEntity, DefinitionKey, DefinitionStatus } from './base.js';\nimport { DecisionOutcome } from './decision.js';\n\nexport const RuleSetUseCase = z.enum(['onboarding', 'underwriting', 'monitoring', 'custom']);\nexport type RuleSetUseCase = z.infer<typeof RuleSetUseCase>;\n\n/** `[min, max)` maps to `outcome`; the last band includes its `max`. */\nexport const ScoreBand = z.object({\n min: z.number(),\n max: z.number(),\n outcome: DecisionOutcome,\n});\nexport type ScoreBand = z.infer<typeof ScoreBand>;\n\nexport const ScoreClamp = z.object({ min: z.number().default(0), max: z.number().default(100) });\n\n/**\n * How a rule set turns rule results into a decision. Rules in `error` force manual review in\n * every mode: a rule the engine could not run must never silently approve.\n */\nexport const AggregationPolicy = z.discriminatedUnion('mode', [\n /** Failed block -> reject; failed warn -> manual review; else approve (the original policy). */\n z.object({ mode: z.literal('max_severity') }),\n /** Score = sum of weights on failed rules plus reported scores, clamped, mapped through bands. */\n z.object({\n mode: z.literal('sum_weights'),\n clamp: ScoreClamp.default({ min: 0, max: 100 }),\n bands: z.array(ScoreBand).min(1),\n }),\n /** Rules in set order; the first failed rule's severity decides, `info` continues. */\n z.object({ mode: z.literal('first_match'), default: DecisionOutcome.default('approve') }),\n]);\nexport type AggregationPolicy = z.infer<typeof AggregationPolicy>;\n\nexport const RuleSetRule = z.object({\n ruleKey: DefinitionKey,\n enabled: z.boolean().default(true),\n /** Replaces the rule's own weight inside this set. */\n weightOverride: z.number().optional(),\n /** Evaluated and recorded but excluded from aggregation. */\n shadow: z.boolean().default(false),\n});\nexport type RuleSetRule = z.infer<typeof RuleSetRule>;\n\nexport const RuleSetBody = z\n .object({\n rules: z.array(RuleSetRule).min(1),\n policy: AggregationPolicy,\n })\n .superRefine((body, ctx) => {\n const seen = new Set<string>();\n body.rules.forEach((rule, index) => {\n if (seen.has(rule.ruleKey)) {\n ctx.addIssue({\n code: 'custom',\n path: ['rules', index, 'ruleKey'],\n message: `duplicate rule \"${rule.ruleKey}\"`,\n });\n }\n seen.add(rule.ruleKey);\n });\n if (body.policy.mode !== 'sum_weights') return;\n const { clamp, bands } = body.policy;\n if (clamp.min >= clamp.max) {\n ctx.addIssue({\n code: 'custom',\n path: ['policy', 'clamp'],\n message: 'clamp.min must be below clamp.max',\n });\n return;\n }\n const sorted = [...bands].sort((a, b) => a.min - b.min);\n let expected = clamp.min;\n sorted.forEach((band, index) => {\n if (band.min >= band.max) {\n ctx.addIssue({\n code: 'custom',\n path: ['policy', 'bands', index],\n message: 'band.min must be below band.max',\n });\n }\n if (band.min !== expected) {\n ctx.addIssue({\n code: 'custom',\n path: ['policy', 'bands', index],\n message: `bands must be contiguous and start at ${clamp.min}; expected min ${expected}, got ${band.min}`,\n });\n }\n expected = band.max;\n });\n if (expected !== clamp.max) {\n ctx.addIssue({\n code: 'custom',\n path: ['policy', 'bands'],\n message: `bands must end at clamp.max (${clamp.max}), got ${expected}`,\n });\n }\n });\nexport type RuleSetBody = z.infer<typeof RuleSetBody>;\n\n/** A versioned, ordered group of rules with one aggregation policy. */\nexport const RuleSetDefinition = BaseEntity.extend({\n /** Actor id that created this version; null for rows older than PR 19. */\n createdBy: z.string().nullish(),\n key: DefinitionKey,\n version: z.number().int().positive(),\n name: z.string().min(1),\n description: z.string().nullish(),\n useCase: RuleSetUseCase,\n status: DefinitionStatus,\n definition: RuleSetBody,\n});\nexport type RuleSetDefinition = z.infer<typeof RuleSetDefinition>;\n\nexport const UpsertRuleSetInput = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n useCase: RuleSetUseCase.default('custom'),\n definition: RuleSetBody,\n});\nexport type UpsertRuleSetInput = z.infer<typeof UpsertRuleSetInput>;\n\n/** The band a score falls into: `[min, max)`, with the last band including its `max`. */\nexport function bandFor(bands: ScoreBand[], score: number): ScoreBand | undefined {\n const sorted = [...bands].sort((a, b) => a.min - b.min);\n const last = sorted[sorted.length - 1];\n for (const band of sorted) {\n if (score >= band.min && (score < band.max || (band === last && score <= band.max)))\n return band;\n }\n return undefined;\n}\n","import { z } from 'zod';\nimport { Id, JsonObject } from './base.js';\nimport { DecisionOutcome } from './decision.js';\nimport { RuleEvaluationResult } from './rule.js';\n\n/**\n * Snapshot of one `evaluate_rules` step execution: the exact inputs the rules saw and what they\n * returned. Append-only; backtests replay these rows.\n */\nexport const RuleEvaluation = z.object({\n id: Id,\n tenantId: Id,\n workflowRunId: Id,\n stepId: z.string(),\n subjectId: Id,\n ruleSetKey: z.string().nullish(),\n ruleSetVersion: z.number().int().nullish(),\n ruleKeys: z.array(z.string()),\n /** The full `RuleContext.data` at evaluation time. */\n data: JsonObject,\n results: z.array(RuleEvaluationResult),\n outcome: DecisionOutcome,\n riskScore: z.number(),\n evaluatedAt: z.coerce.date(),\n});\nexport type RuleEvaluation = z.infer<typeof RuleEvaluation>;\n","import { z } from 'zod';\nimport { DefinitionKey, Id } from './base.js';\nimport { DecisionOutcome } from './decision.js';\nimport { RuleOutcome } from './rule.js';\n\nexport const BacktestStatus = z.enum(['queued', 'running', 'completed', 'failed']);\nexport type BacktestStatus = z.infer<typeof BacktestStatus>;\n\nexport const BacktestSample = z.object({\n /** Replay evaluations recorded in the last N days (at most 180). */\n lastDays: z.number().int().min(1).max(180).default(30),\n /** Newest evaluation per subject, up to this many subjects. */\n limit: z.number().int().min(1).max(5_000).default(1_000),\n});\nexport type BacktestSample = z.infer<typeof BacktestSample>;\n\nexport const StartBacktestInput = z.object({\n ruleKey: DefinitionKey,\n /** Defaults to the latest version (drafts included). */\n version: z.number().int().positive().optional(),\n sample: BacktestSample.default({ lastDays: 30, limit: 1_000 }),\n /**\n * Re-aggregate each stored evaluation with the draft rule's result substituted (or added) under\n * this rule set's policy, to report how outcomes would change.\n */\n compareWithRuleSetKey: DefinitionKey.optional(),\n});\nexport type StartBacktestInput = z.infer<typeof StartBacktestInput>;\n\nexport const BacktestProgress = z.object({\n done: z.number().int().nonnegative(),\n total: z.number().int().nonnegative(),\n});\nexport type BacktestProgress = z.infer<typeof BacktestProgress>;\n\nexport const BacktestSampleFailure = z.object({\n evaluationId: Id,\n subjectId: Id,\n evaluatedAt: z.coerce.date(),\n reasons: z.array(z.string()),\n});\nexport type BacktestSampleFailure = z.infer<typeof BacktestSampleFailure>;\n\nexport const BacktestSummary = z.object({\n evaluated: z.number().int().nonnegative(),\n outcomes: z.record(RuleOutcome, z.number().int().nonnegative()),\n /** Counts keyed `\"<before>-><after>\"` for evaluations whose aggregate outcome would change. */\n wouldChange: z.record(z.string(), z.number().int().nonnegative()),\n /** Per existing rule key: evaluations where both that rule and the draft failed. */\n overlap: z.record(z.string(), z.number().int().nonnegative()),\n /** First 50 evaluations the draft failed on. */\n sampleFailures: z.array(BacktestSampleFailure),\n durationMs: z.number().nonnegative(),\n});\nexport type BacktestSummary = z.infer<typeof BacktestSummary>;\n\nexport const Backtest = z.object({\n id: Id,\n tenantId: Id,\n ruleKey: DefinitionKey,\n ruleVersion: z.number().int().positive(),\n ruleSetKey: z.string().nullish(),\n sample: BacktestSample,\n status: BacktestStatus,\n progress: BacktestProgress,\n summary: BacktestSummary.nullish(),\n error: z.string().nullish(),\n temporalWorkflowId: z.string().nullish(),\n requestedBy: z.string(),\n createdAt: z.coerce.date(),\n finishedAt: z.coerce.date().nullish(),\n});\nexport type Backtest = z.infer<typeof Backtest>;\n\n/** The decision outcome before and after substituting the draft rule, per evaluation. */\nexport const OutcomeChange = z.object({ before: DecisionOutcome, after: DecisionOutcome });\nexport type OutcomeChange = z.infer<typeof OutcomeChange>;\n","import { z } from 'zod';\nimport { Id } from './base.js';\n\nexport const PluginCallbackStatus = z.enum(['pending', 'completed', 'failed', 'timed_out']);\nexport type PluginCallbackStatus = z.infer<typeof PluginCallbackStatus>;\n\n/**\n * A vendor session started by an asynchronous plugin action, waiting for the vendor's webhook.\n * Maps the vendor's external id back to the tenant, run and step.\n */\nexport const PluginCallback = z.object({\n id: Id,\n tenantId: Id,\n pluginName: z.string(),\n action: z.string(),\n externalId: z.string(),\n workflowRunId: Id.nullish(),\n stepId: z.string().nullish(),\n status: PluginCallbackStatus,\n output: z.unknown().nullish(),\n error: z.string().nullish(),\n createdAt: z.coerce.date(),\n completedAt: z.coerce.date().nullish(),\n});\nexport type PluginCallback = z.infer<typeof PluginCallback>;\n\n/** Payload of the `pluginCallback` workflow signal. */\nexport const PluginCallbackSignal = z.object({\n externalId: z.string(),\n status: z.enum(['completed', 'failed']),\n output: z.unknown().optional(),\n error: z.string().optional(),\n});\nexport type PluginCallbackSignal = z.infer<typeof PluginCallbackSignal>;\n\n/** A received vendor webhook, kept for de-duplication. */\nexport const WebhookEventRecord = z.object({\n id: Id,\n tenantId: Id,\n pluginName: z.string(),\n eventId: z.string(),\n externalId: z.string(),\n receivedAt: z.coerce.date(),\n});\nexport type WebhookEventRecord = z.infer<typeof WebhookEventRecord>;\n","import { z } from 'zod';\nimport { BaseEntity, Id } from './base.js';\n\n/** Upper bound on one uploaded file; enforced by the presigned policy and again on finalize. */\nexport const DOCUMENT_MAX_BYTES = 20 * 1024 * 1024;\n\n/**\n * Content types a client may declare. The stored type is always the sniffed one. HEIC is not\n * accepted: images are re-encoded on ingest and the bundled libvips cannot decode HEVC.\n */\nexport const DOCUMENT_CONTENT_TYPES = [\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'application/pdf',\n] as const;\nexport const DocumentContentType = z.enum(DOCUMENT_CONTENT_TYPES);\nexport type DocumentContentType = z.infer<typeof DocumentContentType>;\n\n/**\n * `pending`: row exists, nothing uploaded yet. `uploaded`: finalize verified the object.\n * `scanning`: the scan workflow owns it. `clean` / `infected`: the scanner's verdict.\n * `rejected`: finalize or processing refused the file (type mismatch, size, dangerous PDF).\n */\nexport const DocumentStatus = z.enum([\n 'pending',\n 'uploaded',\n 'scanning',\n 'clean',\n 'infected',\n 'rejected',\n]);\nexport type DocumentStatus = z.infer<typeof DocumentStatus>;\n\n/** Statuses from which a document can still change. */\nexport const DOCUMENT_OPEN_STATUSES: readonly DocumentStatus[] = [\n 'pending',\n 'uploaded',\n 'scanning',\n];\n\nexport const DocumentScan = z.object({\n /** Scanner that produced the verdict, e.g. `none`, `clamav`. */\n engine: z.string().min(1),\n /** Malware signature name when infected. */\n signature: z.string().optional(),\n scannedAt: z.coerce.date(),\n});\nexport type DocumentScan = z.infer<typeof DocumentScan>;\n\nexport const Document = BaseEntity.extend({\n subjectId: Id,\n submissionId: Id.nullish(),\n caseId: Id.nullish(),\n /** Collection-flow field the file was uploaded for. */\n fieldKey: z.string().nullish(),\n fileName: z.string().min(1).max(255),\n /** Declared on creation; replaced by the sniffed type on finalize. */\n contentType: z.string().min(1),\n sizeBytes: z.number().int().nonnegative(),\n /** Hex digest, set on finalize. */\n sha256: z.string().nullish(),\n /** Server-chosen object key: `${tenantId}/${subjectId}/${documentId}`. */\n storageKey: z.string().min(1),\n status: DocumentStatus,\n scan: DocumentScan.nullish(),\n /** Why the document was `rejected`, for operators and applicants. */\n rejectionReason: z.string().nullish(),\n /** Actor id of the uploader (user id, machine id or submission id). */\n uploadedBy: z.string().min(1),\n});\nexport type Document = z.infer<typeof Document>;\n\nexport const CreateDocumentInput = z.object({\n fileName: z.string().min(1).max(255),\n contentType: DocumentContentType,\n sizeBytes: z.number().int().positive().max(DOCUMENT_MAX_BYTES),\n /** Operators and integrations name the subject; applicants' subject comes from the submission. */\n subjectId: Id.optional(),\n submissionId: Id.optional(),\n caseId: Id.optional(),\n fieldKey: z.string().optional(),\n});\nexport type CreateDocumentInput = z.infer<typeof CreateDocumentInput>;\n\n/** What a client needs to POST the file straight to object storage. */\nexport const DocumentUploadTicket = z.object({\n documentId: Id,\n upload: z.object({\n url: z.url(),\n /** Form fields to send with the file (policy, signature, key); the file field goes last. */\n fields: z.record(z.string(), z.string()),\n expiresAt: z.coerce.date(),\n maxBytes: z.number().int().positive(),\n }),\n});\nexport type DocumentUploadTicket = z.infer<typeof DocumentUploadTicket>;\n\nexport const DocumentDownload = z.object({\n url: z.url(),\n expiresAt: z.coerce.date(),\n fileName: z.string(),\n contentType: z.string(),\n});\nexport type DocumentDownload = z.infer<typeof DocumentDownload>;\n\n/** Value stored in a collection-flow `file` field. */\nexport const FileFieldValue = z.object({ fileId: Id, name: z.string().optional() });\nexport type FileFieldValue = z.infer<typeof FileFieldValue>;\n","import { z } from 'zod';\nimport { Actor } from './tenant.js';\n\n/** What a subject's history is made of. Each kind maps to a read permission on the API. */\nexport const TimelineKind = z.enum([\n 'decision',\n 'case',\n 'run',\n 'submission',\n 'document',\n 'event',\n 'note',\n 'audit',\n]);\nexport type TimelineKind = z.infer<typeof TimelineKind>;\n\n/**\n * One entry of a subject's chronological history, projected server-side from the entity tables\n * and the audit log. `data` carries the kind-specific record (a `Decision`, a `Case`, ...).\n */\nexport const TimelineEntry = z.object({\n /** Stable per entry: `<kind>:<resourceId>[:<suffix>]`. */\n id: z.string().min(1),\n kind: TimelineKind,\n at: z.coerce.date(),\n title: z.string().min(1),\n summary: z.string().optional(),\n resourceType: z.string().min(1),\n resourceId: z.string().min(1),\n actor: Actor.optional(),\n data: z.unknown().optional(),\n});\nexport type TimelineEntry = z.infer<typeof TimelineEntry>;\n\nexport const TimelineQuery = z.object({\n from: z.coerce.date().optional(),\n to: z.coerce.date().optional(),\n kinds: z.array(TimelineKind).optional(),\n limit: z.coerce.number().int().positive().max(500).optional(),\n offset: z.coerce.number().int().nonnegative().optional(),\n});\nexport type TimelineQuery = z.infer<typeof TimelineQuery>;\n","import { z } from 'zod';\n\n/** Display hints the builder applies to a schema-driven form (`uiSchema` inputs for rjsf). */\nexport const FormUiHints = z.object({\n /** Fields in display order; unlisted fields follow in schema order. */\n fieldOrder: z.array(z.string()).optional(),\n labels: z.record(z.string(), z.string()).optional(),\n help: z.record(z.string(), z.string()).optional(),\n /**\n * Fields rendered with a picker instead of a free input. Values: `list`, `rule`, `ruleSet`,\n * `flow`, `plugin`, `pluginAction`, `step`, `path`, `condition`, `cel`.\n */\n pickers: z.record(z.string(), z.string()).optional(),\n});\nexport type FormUiHints = z.infer<typeof FormUiHints>;\n\n/** One workflow step type as `GET /workflow-step-types` describes it. */\nexport const StepTypeDescription = z.object({\n type: z.string().min(1),\n title: z.string().min(1),\n description: z.string(),\n /** JSON Schema of the step's own fields (`id`, `name`, `next` excluded). */\n configSchema: z.unknown(),\n /** Dot-path namespaces the step may read from the run context, e.g. `submission.<field>`. */\n dataPaths: z.array(z.string()).default([]),\n /** Context keys the step writes (`outputKey` conventions), for downstream path pickers. */\n outputs: z.array(z.string()).default([]),\n /** Whether the step ends the run (no `next`). */\n terminal: z.boolean().default(false),\n uiHints: FormUiHints.optional(),\n});\nexport type StepTypeDescription = z.infer<typeof StepTypeDescription>;\n\n/** One collection-flow field type as `GET /collection-field-types` describes it. */\nexport const FieldTypeDescription = z.object({\n type: z.string().min(1),\n title: z.string().min(1),\n description: z.string(),\n /** JSON Schema of the field-type-specific options (select options, validation, file limits). */\n optionsSchema: z.unknown(),\n /** Shape of the stored value, as JSON Schema, for previews and docs. */\n valueSchema: z.unknown(),\n});\nexport type FieldTypeDescription = z.infer<typeof FieldTypeDescription>;\n\nexport const IssueSeverity = z.enum(['error', 'warning']);\nexport type IssueSeverity = z.infer<typeof IssueSeverity>;\n\n/** A problem found while validating a definition body without saving it. */\nexport const DefinitionIssue = z.object({\n severity: IssueSeverity,\n /** JSON pointer-ish path into the body, e.g. `steps.2.next`. */\n path: z.string(),\n /** Step or field the issue belongs to, when it has one, so editors can mark it. */\n stepId: z.string().optional(),\n fieldKey: z.string().optional(),\n code: z.string().min(1),\n message: z.string().min(1),\n});\nexport type DefinitionIssue = z.infer<typeof DefinitionIssue>;\n\nexport const ValidationReport = z.object({\n ok: z.boolean(),\n issues: z.array(DefinitionIssue),\n});\nexport type ValidationReport = z.infer<typeof ValidationReport>;\n","import { z } from 'zod';\nimport { DefinitionKey, DefinitionStatus, Id } from './base.js';\nimport { ActorType } from './tenant.js';\n\n/** The four versioned definition kinds and the URL prefix each is served under. */\nexport const DefinitionKind = z.enum(['workflow', 'rule', 'rule_set', 'collection_flow']);\nexport type DefinitionKind = z.infer<typeof DefinitionKind>;\n\nexport const DEFINITION_PATHS: Record<DefinitionKind, string> = {\n workflow: '/workflow-definitions',\n rule: '/rule-definitions',\n rule_set: '/rule-sets',\n collection_flow: '/collection-flows',\n};\n\nexport const ApprovalDecision = z.enum(['approved', 'rejected']);\nexport type ApprovalDecision = z.infer<typeof ApprovalDecision>;\n\n/** One request to publish a version, and its outcome once an approver acts. */\nexport const DefinitionApproval = z.object({\n id: Id,\n tenantId: Id,\n kind: DefinitionKind,\n key: DefinitionKey,\n version: z.number().int().positive(),\n requestedBy: z.string().min(1),\n requestedAt: z.coerce.date(),\n comment: z.string().nullish(),\n decidedBy: z.string().nullish(),\n decidedAt: z.coerce.date().nullish(),\n decision: ApprovalDecision.nullish(),\n decisionComment: z.string().nullish(),\n});\nexport type DefinitionApproval = z.infer<typeof DefinitionApproval>;\n\nexport const ApprovalCommentInput = z.object({ comment: z.string().max(2000).optional() });\nexport type ApprovalCommentInput = z.infer<typeof ApprovalCommentInput>;\n\n/** A row of a definition's version history. */\nexport const DefinitionVersionSummary = z.object({\n kind: DefinitionKind,\n key: DefinitionKey,\n version: z.number().int().positive(),\n status: DefinitionStatus,\n name: z.string(),\n createdBy: z.string().nullish(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n /** The open or latest approval for this version, when any. */\n approval: DefinitionApproval.nullish(),\n});\nexport type DefinitionVersionSummary = z.infer<typeof DefinitionVersionSummary>;\n\nexport const DiffOp = z.enum(['added', 'removed', 'changed', 'moved']);\nexport type DiffOp = z.infer<typeof DiffOp>;\n\n/** One readable change between two versions, e.g. `step \"idv\" added`. */\nexport const DiffChange = z.object({\n op: DiffOp,\n /** Dotted path into the compared document, e.g. `definition.steps.idv.next`. */\n path: z.string(),\n summary: z.string().min(1),\n before: z.unknown().optional(),\n after: z.unknown().optional(),\n});\nexport type DiffChange = z.infer<typeof DiffChange>;\n\nexport const DefinitionDiff = z.object({\n kind: DefinitionKind,\n key: DefinitionKey,\n from: z.number().int().positive(),\n to: z.number().int().positive(),\n changes: z.array(DiffChange),\n /** Raw jsondiffpatch delta, for renderers that show the full tree. */\n delta: z.unknown(),\n});\nexport type DefinitionDiff = z.infer<typeof DefinitionDiff>;\n\nexport const AuditExportFormat = z.enum(['csv', 'jsonl']);\nexport type AuditExportFormat = z.infer<typeof AuditExportFormat>;\n\n/** Filters shared by `GET /audit-events` and its export. */\nexport const AuditFilter = z.object({\n /** Prefix match on the dotted action, e.g. `case.` or `case.note.added`. */\n action: z.string().min(1).max(200).optional(),\n actorId: z.string().min(1).optional(),\n actorType: ActorType.optional(),\n resourceType: z.string().min(1).optional(),\n resourceId: z.string().min(1).optional(),\n from: z.coerce.date().optional(),\n to: z.coerce.date().optional(),\n});\nexport type AuditFilter = z.infer<typeof AuditFilter>;\n","export class AletheiaError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly status: number = 500,\n public readonly details?: unknown,\n ) {\n super(message);\n this.name = new.target.name;\n }\n}\n\nexport class NotFoundError extends AletheiaError {\n constructor(resource: string, id: string) {\n super(`${resource} ${id} not found`, 'not_found', 404);\n }\n}\n\nexport class ValidationError extends AletheiaError {\n constructor(message: string, details?: unknown) {\n super(message, 'validation_error', 400, details);\n }\n}\n\nexport class ConflictError extends AletheiaError {\n constructor(message: string) {\n super(message, 'conflict', 409);\n }\n}\n\nexport class NotImplementedError extends AletheiaError {\n constructor(feature: string) {\n super(`${feature} is not implemented yet`, 'not_implemented', 501);\n }\n}\n\nexport class TimeoutError extends AletheiaError {\n constructor(operation: string, timeoutMs: number) {\n super(`${operation} timed out after ${timeoutMs}ms`, 'timeout', 504);\n }\n}\n","/** UUID v4. Uses the platform crypto so it works in Node, browsers and tests alike. */\nexport function createId(): string {\n return globalThis.crypto.randomUUID();\n}\n","/**\n * Minimal structural logger contract shared across packages (pino satisfies it).\n * Kept dependency-free so plugins and UIs can type against it without pulling pino.\n */\nexport type LogFn = (objOrMsg: object | string, msg?: string, ...args: unknown[]) => void;\n\nexport interface Logger {\n debug: LogFn;\n info: LogFn;\n warn: LogFn;\n error: LogFn;\n child(bindings: Record<string, unknown>): Logger;\n}\n\nexport const noopLogger: Logger = {\n debug: () => undefined,\n info: () => undefined,\n warn: () => undefined,\n error: () => undefined,\n child: () => noopLogger,\n};\n"],"mappings":"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","names":["import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/base.ts","../src/tenant.ts","../src/condition.ts","../src/subject.ts","../src/rule.ts","../src/decision.ts","../src/case.ts","../src/workflow.ts","../src/plugin.ts","../src/collection.ts","../src/audit.ts","../src/list.ts","../src/event.ts","../src/rule-set.ts","../src/evaluation.ts","../src/backtest.ts","../src/plugin-callback.ts","../src/document.ts","../src/timeline.ts","../src/builder.ts","../src/governance.ts","../src/policy-pack.ts","../src/errors.ts","../src/ids.ts","../src/logger.ts"],"sourcesContent":["// Pure, environment-agnostic exports. Safe to import from Temporal workflow code and browsers.\nexport * from './base.js';\nexport * from './tenant.js';\nexport * from './condition.js';\nexport * from './subject.js';\nexport * from './rule.js';\nexport * from './decision.js';\nexport * from './case.js';\nexport * from './workflow.js';\nexport * from './plugin.js';\nexport * from './collection.js';\nexport * from './audit.js';\nexport * from './list.js';\nexport * from './event.js';\nexport * from './rule-set.js';\nexport * from './evaluation.js';\nexport * from './backtest.js';\nexport * from './plugin-callback.js';\nexport * from './document.js';\nexport * from './timeline.js';\nexport * from './builder.js';\nexport * from './governance.js';\nexport * from './policy-pack.js';\nexport * from './errors.js';\nexport * from './ids.js';\nexport * from './logger.js';\n","import { z } from 'zod';\n\n/** UUID-shaped identifier (8-4-4-4-12 hex) used for every entity. `guid` rather than `uuid` so\n * well-known fixed ids such as the dev tenant are accepted. */\nexport const Id = z.guid();\nexport type Id = z.infer<typeof Id>;\n\n/** Arbitrary JSON object payload (stored as jsonb). Validated by domain code, not the DB. */\nexport const JsonObject = z.record(z.string(), z.unknown());\nexport type JsonObject = z.infer<typeof JsonObject>;\n\nexport const Timestamps = z.object({\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\n/** Every persisted, tenant-scoped entity. */\nexport const BaseEntity = z.object({ id: Id, tenantId: Id, ...Timestamps.shape });\nexport type BaseEntity = z.infer<typeof BaseEntity>;\n\n/** Lifecycle of versioned definitions (workflows, rules, collection flows). */\nexport const DefinitionStatus = z.enum(['draft', 'pending_approval', 'published', 'archived']);\nexport type DefinitionStatus = z.infer<typeof DefinitionStatus>;\n\n/** Stable slug used to address definitions across versions. */\nexport const DefinitionKey = z\n .string()\n .min(1)\n .max(100)\n .regex(/^[a-z0-9][a-z0-9_-]*$/, 'keys are lowercase letters, digits, \"_\" or \"-\"');\nexport type DefinitionKey = z.infer<typeof DefinitionKey>;\n","import { z } from 'zod';\nimport { Id } from './base.js';\n\n/**\n * Who performed an action: a human `user`, a machine `service` account, an end customer\n * (`applicant`) acting through a submission token, the `system` itself, a `plugin` or a `workflow`.\n */\nexport const ActorType = z.enum(['user', 'service', 'applicant', 'system', 'plugin', 'workflow']);\nexport type ActorType = z.infer<typeof ActorType>;\n\nexport const Actor = z.object({ type: ActorType, id: z.string().min(1) });\nexport type Actor = z.infer<typeof Actor>;\n\n/** Passed as the first argument to every repository and service method. */\nexport const TenantContext = z.object({ tenantId: Id, actor: Actor });\nexport type TenantContext = z.infer<typeof TenantContext>;\n\nexport const SYSTEM_ACTOR: Actor = { type: 'system', id: 'system' };\n\n/** Tenant created by `pnpm db:seed` and used by the UIs in development. */\nexport const DEV_TENANT_ID = '00000000-0000-0000-0000-000000000001';\n\n/** A browser origin (`scheme://host[:port]`), with no path, query or trailing slash. */\nexport const WebOrigin = z\n .string()\n .regex(/^https?:\\/\\/[a-z0-9.-]+(:\\d{1,5})?$/i, 'must be an origin like https://merchant.example');\nexport type WebOrigin = z.infer<typeof WebOrigin>;\n\n/** Tenant-level settings an admin manages through the API (`tenants.settings`). */\nexport const CaseSettings = z.object({\n /** SLA applied to cases whose `create_case` step sets no `slaHours`. */\n defaultSlaHours: z\n .number()\n .positive()\n .max(24 * 90)\n .optional(),\n});\nexport type CaseSettings = z.infer<typeof CaseSettings>;\n\nexport const ApprovalSettings = z.object({\n /** When true, drafts are published only through an approval. */\n required: z.boolean().default(false),\n /** When approvals are required, the requester may not approve their own change. */\n fourEyes: z.boolean().default(true),\n});\nexport type ApprovalSettings = z.infer<typeof ApprovalSettings>;\n\nexport const TenantSettings = z.object({\n /** Merchant origins allowed to embed this tenant's collection flows in an iframe. */\n embedOrigins: z.array(WebOrigin).max(20).default([]),\n cases: CaseSettings.default({}),\n approvals: ApprovalSettings.default({ required: false, fourEyes: true }),\n});\nexport type TenantSettings = z.infer<typeof TenantSettings>;\n\nexport const Tenant = z.object({\n id: Id,\n name: z.string().min(1),\n settings: TenantSettings.default({\n embedOrigins: [],\n cases: {},\n approvals: { required: false, fourEyes: true },\n }),\n createdAt: z.coerce.date(),\n});\nexport type Tenant = z.infer<typeof Tenant>;\n\nexport function systemContext(tenantId: Id): TenantContext {\n return { tenantId, actor: SYSTEM_ACTOR };\n}\n\n/** A reviewer as the user directory reports it (a human in the tenant's identity-provider org). */\nexport const DirectoryUser = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n email: z.string().optional(),\n /** Project roles the user holds, e.g. `analyst`. */\n roles: z.array(z.string()),\n});\nexport type DirectoryUser = z.infer<typeof DirectoryUser>;\n","import { z } from 'zod';\n\n/**\n * A single predicate over a dot-path into a data object. Shared by the comparison rule,\n * workflow branch steps and collection-flow field visibility. Pure: safe inside Temporal\n * workflow code.\n */\nexport const ConditionOp = z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'exists']);\nexport type ConditionOp = z.infer<typeof ConditionOp>;\n\nexport const Condition = z.object({\n path: z.string().min(1),\n op: ConditionOp,\n value: z.unknown().optional(),\n});\nexport type Condition = z.infer<typeof Condition>;\n\n/** Reads `a.b.c` from a nested object; returns undefined when any segment is missing. */\nexport function getPath(source: unknown, path: string): unknown {\n let current: unknown = source;\n for (const segment of path.split('.')) {\n if (current === null || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[segment];\n }\n return current;\n}\n\nfunction compareNumbers(actual: unknown, expected: unknown, op: ConditionOp): boolean {\n const a = typeof actual === 'number' ? actual : Number(actual);\n const b = typeof expected === 'number' ? expected : Number(expected);\n if (Number.isNaN(a) || Number.isNaN(b)) return false;\n switch (op) {\n case 'gt':\n return a > b;\n case 'gte':\n return a >= b;\n case 'lt':\n return a < b;\n case 'lte':\n return a <= b;\n default:\n return false;\n }\n}\n\nexport function evaluateCondition(condition: Condition, data: unknown): boolean {\n const actual = getPath(data, condition.path);\n switch (condition.op) {\n case 'exists':\n return actual !== undefined && actual !== null;\n case 'eq':\n return actual === condition.value;\n case 'neq':\n return actual !== condition.value;\n case 'in':\n return Array.isArray(condition.value) && condition.value.includes(actual);\n case 'gt':\n case 'gte':\n case 'lt':\n case 'lte':\n return compareNumbers(actual, condition.value, condition.op);\n }\n}\n","import { z } from 'zod';\nimport { BaseEntity, JsonObject } from './base.js';\n\nexport const SubjectKind = z.enum(['merchant', 'seller', 'user']);\nexport type SubjectKind = z.infer<typeof SubjectKind>;\n\nexport const SubjectStatus = z.enum(['active', 'blocked', 'closed']);\nexport type SubjectStatus = z.infer<typeof SubjectStatus>;\n\n/** The thing being risk-assessed: a merchant, seller or end user. */\nexport const Subject = BaseEntity.extend({\n kind: SubjectKind,\n externalId: z.string().nullish(),\n status: SubjectStatus,\n data: JsonObject,\n riskScore: z.number().nullish(),\n tags: z.array(z.string()),\n});\nexport type Subject = z.infer<typeof Subject>;\n\nexport const CreateSubjectInput = z.object({\n kind: SubjectKind,\n externalId: z.string().min(1).optional(),\n data: JsonObject.default({}),\n tags: z.array(z.string()).default([]),\n});\nexport type CreateSubjectInput = z.infer<typeof CreateSubjectInput>;\n\n/** Filters for `GET /subjects`; `search` matches `externalId`, `data.name` and `data.legalName`. */\nexport const SubjectListQuery = z.object({\n search: z.string().min(1).max(200).optional(),\n kind: SubjectKind.optional(),\n status: SubjectStatus.optional(),\n riskScoreMin: z.coerce.number().min(0).max(100).optional(),\n riskScoreMax: z.coerce.number().min(0).max(100).optional(),\n limit: z.coerce.number().int().positive().optional(),\n offset: z.coerce.number().int().nonnegative().optional(),\n});\nexport type SubjectListQuery = z.infer<typeof SubjectListQuery>;\n","import { z } from 'zod';\nimport { BaseEntity, DefinitionKey, DefinitionStatus } from './base.js';\n\nexport const RuleType = z.enum([\n 'comparison',\n 'list_lookup',\n 'score_threshold',\n 'expression',\n 'plugin',\n 'velocity',\n]);\nexport type RuleType = z.infer<typeof RuleType>;\n\nexport const RuleSeverity = z.enum(['info', 'warn', 'block']);\nexport type RuleSeverity = z.infer<typeof RuleSeverity>;\n\n/** A versioned rule. `config` is validated per `type` by the rule-engine registry. */\nexport const RuleDefinition = BaseEntity.extend({\n /** Actor id that created this version; null for rows older than PR 19. */\n createdBy: z.string().nullish(),\n key: DefinitionKey,\n version: z.number().int().positive(),\n name: z.string().min(1),\n description: z.string().nullish(),\n type: RuleType,\n config: z.unknown(),\n severity: RuleSeverity,\n weight: z.number().nullish(),\n enabled: z.boolean(),\n tags: z.array(z.string()),\n status: DefinitionStatus,\n});\nexport type RuleDefinition = z.infer<typeof RuleDefinition>;\n\nexport const UpsertRuleDefinitionInput = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n type: RuleType,\n config: z.unknown(),\n severity: RuleSeverity.default('block'),\n weight: z.number().optional(),\n enabled: z.boolean().default(true),\n tags: z.array(z.string()).default([]),\n});\nexport type UpsertRuleDefinitionInput = z.infer<typeof UpsertRuleDefinitionInput>;\n\nexport const RuleOutcome = z.enum(['pass', 'fail', 'error', 'skipped']);\nexport type RuleOutcome = z.infer<typeof RuleOutcome>;\n\n/** Result of evaluating one rule. Carries severity/weight so aggregation is self-contained. */\nexport const RuleEvaluationResult = z.object({\n ruleId: z.string(),\n ruleKey: z.string(),\n ruleVersion: z.number().int(),\n severity: RuleSeverity,\n weight: z.number().nullish(),\n outcome: RuleOutcome,\n score: z.number().nullish(),\n reasons: z.array(z.string()),\n details: z.unknown().optional(),\n durationMs: z.number().nonnegative(),\n /** Evaluated as a shadow rule of a rule set: recorded, but excluded from aggregation. */\n shadow: z.boolean().optional(),\n});\nexport type RuleEvaluationResult = z.infer<typeof RuleEvaluationResult>;\n","import { z } from 'zod';\nimport { Id } from './base.js';\nimport { RuleEvaluationResult } from './rule.js';\n\nexport const DecisionOutcome = z.enum(['approve', 'reject', 'manual_review']);\nexport type DecisionOutcome = z.infer<typeof DecisionOutcome>;\n\nexport const DecisionReason = z.object({\n code: z.string().min(1),\n message: z.string(),\n ruleKey: z.string().optional(),\n});\nexport type DecisionReason = z.infer<typeof DecisionReason>;\n\nexport const DecisionSource = z.enum(['automated', 'manual']);\nexport type DecisionSource = z.infer<typeof DecisionSource>;\n\n/** Immutable record of a decision about a subject. */\nexport const Decision = z.object({\n id: Id,\n tenantId: Id,\n subjectId: Id,\n workflowRunId: Id.nullish(),\n caseId: Id.nullish(),\n outcome: DecisionOutcome,\n riskScore: z.number().nullish(),\n reasons: z.array(DecisionReason),\n source: DecisionSource,\n decidedBy: z.string().nullish(),\n ruleResults: z.array(RuleEvaluationResult),\n /** The rule set that produced an automated decision, when one was used. */\n ruleSetKey: z.string().nullish(),\n ruleSetVersion: z.number().int().nullish(),\n createdAt: z.coerce.date(),\n});\nexport type Decision = z.infer<typeof Decision>;\n","import { z } from 'zod';\nimport { BaseEntity, Id, JsonObject } from './base.js';\nimport { DecisionOutcome, DecisionReason } from './decision.js';\n\nexport const CaseStatus = z.enum(['open', 'in_review', 'decided', 'closed']);\nexport type CaseStatus = z.infer<typeof CaseStatus>;\n\nexport const CasePriority = z.enum(['low', 'medium', 'high', 'critical']);\nexport type CasePriority = z.infer<typeof CasePriority>;\n\n/** Derived from `dueAt` and `slaBreachedAt` at read time; never stored. */\nexport const CaseSlaState = z.enum(['none', 'ok', 'due_soon', 'breached']);\nexport type CaseSlaState = z.infer<typeof CaseSlaState>;\n\n/** A manual-review item surfaced in the back office. */\nexport const Case = BaseEntity.extend({\n subjectId: Id,\n workflowRunId: Id.nullish(),\n type: z.string().min(1),\n status: CaseStatus,\n priority: CasePriority,\n assigneeId: z.string().nullish(),\n decisionId: Id.nullish(),\n context: JsonObject,\n /** SLA deadline, set from the step's `slaHours` or the tenant default. */\n dueAt: z.coerce.date().nullish(),\n /** Set once by the workflow when the SLA timer fires before a decision. */\n slaBreachedAt: z.coerce.date().nullish(),\n /** First assignment or note: the moment someone picked the case up. */\n firstResponseAt: z.coerce.date().nullish(),\n decidedAt: z.coerce.date().nullish(),\n closedAt: z.coerce.date().nullish(),\n closedReason: z.string().nullish(),\n});\nexport type Case = z.infer<typeof Case>;\n\n/** A case as the API returns it: the row plus its derived SLA state. */\nexport const CaseView = Case.extend({ slaState: CaseSlaState });\nexport type CaseView = z.infer<typeof CaseView>;\n\n/**\n * `due_soon` starts at the larger of 20 % of the SLA window and two hours before `dueAt`, capped\n * at half the window so short SLAs are not \"due soon\" from the start.\n */\nexport function caseSlaState(\n c: Pick<Case, 'dueAt' | 'slaBreachedAt' | 'status' | 'createdAt'>,\n now: Date = new Date(),\n): CaseSlaState {\n if (!c.dueAt) return 'none';\n if (c.slaBreachedAt) return 'breached';\n if (c.status === 'decided' || c.status === 'closed') return 'ok';\n const remaining = c.dueAt.getTime() - now.getTime();\n if (remaining <= 0) return 'breached';\n const window = c.dueAt.getTime() - c.createdAt.getTime();\n const soon = Math.min(window * 0.5, Math.max(window * 0.2, 2 * 3600 * 1000));\n return remaining <= soon ? 'due_soon' : 'ok';\n}\n\nexport const AssignCaseInput = z.object({\n /** Reviewer id from the user directory; `null` unassigns. */\n assigneeId: z.string().min(1).nullable(),\n});\nexport type AssignCaseInput = z.infer<typeof AssignCaseInput>;\n\nexport const CloseCaseInput = z.object({ reason: z.string().max(500).optional() });\nexport type CloseCaseInput = z.infer<typeof CloseCaseInput>;\n\nexport const CaseNote = BaseEntity.extend({\n caseId: Id,\n authorId: z.string().min(1),\n body: z.string().min(1).max(10_000),\n editedAt: z.coerce.date().nullish(),\n});\nexport type CaseNote = z.infer<typeof CaseNote>;\n\nexport const CaseNoteInput = z.object({ body: z.string().min(1).max(10_000) });\nexport type CaseNoteInput = z.infer<typeof CaseNoteInput>;\n\nexport const CaseSort = z.enum(['createdAt', 'dueAt', 'priority']);\nexport type CaseSort = z.infer<typeof CaseSort>;\nexport const SortOrder = z.enum(['asc', 'desc']);\nexport type SortOrder = z.infer<typeof SortOrder>;\n\n/** What a case queue (saved filter) and `GET /cases` accept. */\nexport const CaseFilter = z.object({\n status: z.array(CaseStatus).optional(),\n priority: z.array(CasePriority).optional(),\n /** A reviewer id, `me` (resolved to the caller) or `unassigned`. */\n assignee: z.string().min(1).optional(),\n type: z.string().min(1).optional(),\n subjectId: Id.optional(),\n slaState: z.array(CaseSlaState).optional(),\n dueBefore: z.coerce.date().optional(),\n /** Case-insensitive match on `context.subjectName` and the case type. */\n search: z.string().min(1).max(200).optional(),\n});\nexport type CaseFilter = z.infer<typeof CaseFilter>;\n\nexport const CaseQueue = BaseEntity.extend({\n name: z.string().min(1).max(80),\n filter: CaseFilter,\n sort: CaseSort,\n order: SortOrder,\n position: z.number().int().nonnegative(),\n createdBy: z.string().min(1),\n});\nexport type CaseQueue = z.infer<typeof CaseQueue>;\n\nexport const UpsertCaseQueueInput = z.object({\n name: z.string().min(1).max(80),\n filter: CaseFilter.default({}),\n sort: CaseSort.default('createdAt'),\n order: SortOrder.default('desc'),\n position: z.number().int().nonnegative().default(0),\n});\nexport type UpsertCaseQueueInput = z.infer<typeof UpsertCaseQueueInput>;\n\nexport const DecideCaseInput = z.object({\n outcome: DecisionOutcome,\n reasons: z.array(DecisionReason).default([]),\n note: z.string().optional(),\n});\nexport type DecideCaseInput = z.infer<typeof DecideCaseInput>;\n\n/** Payload of the `manualDecision` workflow signal. */\nexport const ManualDecision = z.object({\n caseId: Id,\n decisionId: Id,\n outcome: DecisionOutcome,\n reasons: z.array(DecisionReason),\n decidedBy: z.string(),\n});\nexport type ManualDecision = z.infer<typeof ManualDecision>;\n","import { z } from 'zod';\nimport { BaseEntity, DefinitionKey, DefinitionStatus, Id, JsonObject } from './base.js';\nimport { CasePriority } from './case.js';\nimport { Condition } from './condition.js';\nimport { DecisionOutcome } from './decision.js';\n\nconst StepBase = z.object({\n id: z.string().min(1),\n name: z.string().optional(),\n /** Next step id. Omitted on terminal steps. */\n next: z.string().optional(),\n});\n\nexport const EvaluateRulesStep = StepBase.extend({\n type: z.literal('evaluate_rules'),\n /** Ad-hoc list evaluated with the default policy; mutually exclusive with `ruleSetKey`. */\n ruleKeys: z.array(DefinitionKey).min(1).optional(),\n /** A published rule set: its rules, order, overrides and aggregation policy. */\n ruleSetKey: DefinitionKey.optional(),\n outputKey: z.string().default('rules'),\n}).refine((step) => (step.ruleKeys === undefined) !== (step.ruleSetKey === undefined), {\n message: 'evaluate_rules needs exactly one of ruleKeys or ruleSetKey',\n path: ['ruleKeys'],\n});\n\nexport const CallPluginStep = StepBase.extend({\n type: z.literal('call_plugin'),\n plugin: z.string().min(1),\n action: z.string().min(1),\n /** Literal input values (e.g. `{ type: \"Person\", topics: [\"role.pep\"] }`); `inputMapping` entries override them. */\n input: z.record(z.string(), z.unknown()).default({}),\n /** input field -> dot path into the run context (e.g. `{ name: \"submission.data.legalName\" }`). */\n inputMapping: z.record(z.string(), z.string()).default({}),\n outputKey: z.string().min(1),\n /** Overrides the worker's default retry policy for this plugin call. */\n retry: z\n .object({\n maximumAttempts: z.number().int().min(1).max(10).optional(),\n initialIntervalSeconds: z.number().positive().optional(),\n })\n .optional(),\n});\n\nexport const WaitForCollectionStep = StepBase.extend({\n type: z.literal('wait_for_collection'),\n flowKey: DefinitionKey,\n timeoutSeconds: z.number().int().positive().optional(),\n outputKey: z.string().default('submission'),\n});\n\nexport const CreateCaseStep = StepBase.extend({\n type: z.literal('create_case'),\n caseType: z.string().min(1),\n priority: CasePriority.default('medium'),\n /** Hours until the case's SLA deadline; the tenant default applies when omitted. */\n slaHours: z\n .number()\n .positive()\n .max(24 * 90)\n .optional(),\n outputKey: z.string().default('manualDecision'),\n});\n\nexport const EmitDecisionStep = StepBase.extend({\n type: z.literal('emit_decision'),\n mode: z.enum(['from_rules', 'fixed']).default('from_rules'),\n /** Context key holding rule results when mode is `from_rules`. */\n rulesKey: z.string().default('rules'),\n /** Context key holding a manual decision; takes precedence when present. */\n manualDecisionKey: z.string().default('manualDecision'),\n outcome: DecisionOutcome.optional(),\n});\n\nexport const BranchStep = StepBase.extend({\n type: z.literal('branch'),\n conditions: z.array(z.object({ when: Condition, next: z.string().min(1) })).min(1),\n default: z.string().min(1),\n});\n\nexport const WorkflowStep = z.discriminatedUnion('type', [\n EvaluateRulesStep,\n CallPluginStep,\n WaitForCollectionStep,\n CreateCaseStep,\n EmitDecisionStep,\n BranchStep,\n]);\nexport type WorkflowStep = z.infer<typeof WorkflowStep>;\nexport type WorkflowStepType = WorkflowStep['type'];\n\n/** Collects every step id a step can transition to. */\nexport function stepTargets(step: WorkflowStep): string[] {\n const targets = step.next ? [step.next] : [];\n if (step.type === 'branch') {\n targets.push(...step.conditions.map((c) => c.next), step.default);\n }\n return targets;\n}\n\n/** Editor-only layout stored with a definition; the engine never reads it. */\nexport const WorkflowUi = z.object({\n positions: z.record(z.string(), z.object({ x: z.number(), y: z.number() })).default({}),\n});\nexport type WorkflowUi = z.infer<typeof WorkflowUi>;\n\nexport const WorkflowDefinitionBody = z\n .object({\n entryStepId: z.string().min(1),\n steps: z.array(WorkflowStep).min(1),\n ui: WorkflowUi.optional(),\n })\n .superRefine((body, ctx) => {\n const ids = new Set<string>();\n body.steps.forEach((step, index) => {\n if (ids.has(step.id)) {\n ctx.addIssue({\n code: 'custom',\n path: ['steps', index, 'id'],\n message: `duplicate step id \"${step.id}\"`,\n });\n }\n ids.add(step.id);\n });\n if (!ids.has(body.entryStepId)) {\n ctx.addIssue({\n code: 'custom',\n path: ['entryStepId'],\n message: `unknown entry step \"${body.entryStepId}\"`,\n });\n }\n body.steps.forEach((step, index) => {\n for (const target of stepTargets(step)) {\n if (!ids.has(target)) {\n ctx.addIssue({\n code: 'custom',\n path: ['steps', index],\n message: `step \"${step.id}\" points to unknown step \"${target}\"`,\n });\n }\n }\n });\n });\nexport type WorkflowDefinitionBody = z.infer<typeof WorkflowDefinitionBody>;\n\nexport const WorkflowTrigger = z.enum(['manual', 'subject.created', 'event']);\nexport type WorkflowTrigger = z.infer<typeof WorkflowTrigger>;\n\nexport const WorkflowDefinition = BaseEntity.extend({\n /** Actor id that created this version; null for rows older than PR 19. */\n createdBy: z.string().nullish(),\n key: DefinitionKey,\n version: z.number().int().positive(),\n name: z.string().min(1),\n description: z.string().nullish(),\n trigger: WorkflowTrigger,\n status: DefinitionStatus,\n definition: WorkflowDefinitionBody,\n});\nexport type WorkflowDefinition = z.infer<typeof WorkflowDefinition>;\n\nexport const UpsertWorkflowDefinitionInput = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n trigger: WorkflowTrigger.default('manual'),\n definition: WorkflowDefinitionBody,\n});\nexport type UpsertWorkflowDefinitionInput = z.infer<typeof UpsertWorkflowDefinitionInput>;\n\nexport const WorkflowRunStatus = z.enum([\n 'running',\n 'waiting_collection',\n 'waiting_manual',\n 'waiting_callback',\n 'completed',\n 'failed',\n 'cancelled',\n]);\nexport type WorkflowRunStatus = z.infer<typeof WorkflowRunStatus>;\n\n/** One execution of a workflow definition for one subject. Mirrors a Temporal workflow execution. */\nexport const WorkflowRun = BaseEntity.extend({\n definitionId: Id,\n definitionKey: DefinitionKey,\n definitionVersion: z.number().int().positive(),\n subjectId: Id,\n temporalWorkflowId: z.string(),\n temporalRunId: z.string().nullish(),\n status: WorkflowRunStatus,\n currentStepId: z.string().nullish(),\n /** Accumulated step outputs keyed by each step's `outputKey`. */\n context: JsonObject,\n decisionId: Id.nullish(),\n error: z.string().nullish(),\n startedAt: z.coerce.date(),\n finishedAt: z.coerce.date().nullish(),\n});\nexport type WorkflowRun = z.infer<typeof WorkflowRun>;\n\nexport const StartWorkflowRunInput = z.object({\n definitionKey: DefinitionKey,\n subjectId: Id,\n});\nexport type StartWorkflowRunInput = z.infer<typeof StartWorkflowRunInput>;\n\n/** Argument of the generic Temporal interpreter workflow. */\nexport const RunDefinitionInput = z.object({\n tenantId: Id,\n runId: Id,\n definitionId: Id,\n definitionVersion: z.number().int().positive(),\n subjectId: Id,\n});\nexport type RunDefinitionInput = z.infer<typeof RunDefinitionInput>;\n\nexport function temporalWorkflowId(tenantId: string, runId: string): string {\n return `wf:${tenantId}:${runId}`;\n}\n","import { z } from 'zod';\nimport { BaseEntity, Id, JsonObject } from './base.js';\n\n/** Tenant-level installation of a plugin package. Non-secret config only; secrets are referenced. */\nexport const PluginDefinition = BaseEntity.extend({\n name: z.string().min(1),\n version: z.string().min(1),\n capabilities: z.array(z.string()),\n enabled: z.boolean(),\n config: JsonObject,\n /** secret name -> reference understood by the SecretProvider (e.g. env var name). */\n secretRefs: z.record(z.string(), z.string()),\n});\nexport type PluginDefinition = z.infer<typeof PluginDefinition>;\n\nexport const PluginInvocationStatus = z.enum(['success', 'error', 'timeout', 'pending']);\nexport type PluginInvocationStatus = z.infer<typeof PluginInvocationStatus>;\n\n/** Audit record of one call into a plugin action. */\nexport const PluginInvocation = z.object({\n id: Id,\n tenantId: Id,\n pluginName: z.string(),\n action: z.string(),\n subjectId: Id.nullish(),\n workflowRunId: Id.nullish(),\n input: z.unknown(),\n output: z.unknown().nullish(),\n status: PluginInvocationStatus,\n error: z.string().nullish(),\n durationMs: z.number().nonnegative(),\n invokedAt: z.coerce.date(),\n /** Caller-provided key identifying the logical call across retries. */\n idempotencyKey: z.string().nullish(),\n /** 1 for the first attempt of a logical call, incremented by runtime retries. */\n attempt: z.number().int().positive().default(1),\n});\nexport type PluginInvocation = z.infer<typeof PluginInvocation>;\n\n/** Tenant-level enablement and configuration of an installed plugin (`PUT /plugins/:name`). */\nexport const ConfigurePluginInput = z.object({\n enabled: z.boolean().default(true),\n config: JsonObject.default({}),\n secretRefs: z.record(z.string(), z.string()).default({}),\n});\nexport type ConfigurePluginInput = z.infer<typeof ConfigurePluginInput>;\n","import { z } from 'zod';\nimport { BaseEntity, DefinitionKey, DefinitionStatus, Id, JsonObject } from './base.js';\nimport { Condition } from './condition.js';\n\nexport const FieldType = z.enum(['text', 'email', 'number', 'select', 'date', 'boolean', 'file']);\nexport type FieldType = z.infer<typeof FieldType>;\n\nexport const FieldOption = z.object({ value: z.string(), label: z.string() });\nexport type FieldOption = z.infer<typeof FieldOption>;\n\nexport const FieldValidation = z.object({\n min: z.number().optional(),\n max: z.number().optional(),\n pattern: z.string().optional(),\n});\nexport type FieldValidation = z.infer<typeof FieldValidation>;\n\nexport const Field = z.object({\n key: z.string().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/, 'field keys are identifiers'),\n label: z.string().min(1),\n type: FieldType,\n required: z.boolean().default(false),\n placeholder: z.string().optional(),\n help: z.string().optional(),\n options: z.array(FieldOption).optional(),\n validation: FieldValidation.optional(),\n /** Field is rendered and validated only when the condition holds against the submission data. */\n visibleWhen: Condition.optional(),\n});\nexport type Field = z.infer<typeof Field>;\n\nexport const FlowStep = z.object({\n id: z.string().min(1),\n title: z.string().min(1),\n description: z.string().optional(),\n fields: z.array(Field),\n next: z.string().optional(),\n branches: z.array(z.object({ when: Condition, next: z.string().min(1) })).optional(),\n});\nexport type FlowStep = z.infer<typeof FlowStep>;\n\n/** Default and ceiling for how long an applicant's submission link stays valid. */\nexport const DEFAULT_LINK_TTL_SECONDS = 7 * 24 * 3600;\nexport const MAX_LINK_TTL_SECONDS = 30 * 24 * 3600;\n\nexport const CollectionFlowBody = z\n .object({\n entryStepId: z.string().min(1),\n steps: z.array(FlowStep).min(1),\n /** Lifetime of the signed submission link issued for this flow (60 s to 30 days). */\n linkTtlSeconds: z\n .number()\n .int()\n .min(60)\n .max(MAX_LINK_TTL_SECONDS)\n .default(DEFAULT_LINK_TTL_SECONDS),\n })\n .superRefine((body, ctx) => {\n const ids = new Set(body.steps.map((s) => s.id));\n if (ids.size !== body.steps.length) {\n ctx.addIssue({ code: 'custom', path: ['steps'], message: 'duplicate step ids' });\n }\n if (!ids.has(body.entryStepId)) {\n ctx.addIssue({\n code: 'custom',\n path: ['entryStepId'],\n message: `unknown entry step \"${body.entryStepId}\"`,\n });\n }\n body.steps.forEach((step, index) => {\n const targets = [\n ...(step.next ? [step.next] : []),\n ...(step.branches ?? []).map((b) => b.next),\n ];\n for (const target of targets) {\n if (!ids.has(target)) {\n ctx.addIssue({\n code: 'custom',\n path: ['steps', index],\n message: `step \"${step.id}\" points to unknown step \"${target}\"`,\n });\n }\n }\n });\n });\nexport type CollectionFlowBody = z.infer<typeof CollectionFlowBody>;\n\nexport const CollectionFlowDefinition = BaseEntity.extend({\n /** Actor id that created this version; null for rows older than PR 19. */\n createdBy: z.string().nullish(),\n key: DefinitionKey,\n version: z.number().int().positive(),\n name: z.string().min(1),\n description: z.string().nullish(),\n status: DefinitionStatus,\n definition: CollectionFlowBody,\n});\nexport type CollectionFlowDefinition = z.infer<typeof CollectionFlowDefinition>;\n\nexport const UpsertCollectionFlowInput = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n definition: CollectionFlowBody,\n});\nexport type UpsertCollectionFlowInput = z.infer<typeof UpsertCollectionFlowInput>;\n\nexport const SubmissionStatus = z.enum(['in_progress', 'submitted']);\nexport type SubmissionStatus = z.infer<typeof SubmissionStatus>;\n\n/** A user's progress through a collection flow. Submitting signals the waiting workflow run. */\nexport const CollectionSubmission = BaseEntity.extend({\n flowDefinitionId: Id,\n flowKey: DefinitionKey,\n flowVersion: z.number().int().positive(),\n subjectId: Id,\n workflowRunId: Id.nullish(),\n status: SubmissionStatus,\n data: JsonObject,\n currentStepId: z.string().nullish(),\n submittedAt: z.coerce.date().nullish(),\n});\nexport type CollectionSubmission = z.infer<typeof CollectionSubmission>;\n\nexport const CreateSubmissionInput = z.object({\n flowKey: DefinitionKey,\n subjectId: Id,\n workflowRunId: Id.optional(),\n});\nexport type CreateSubmissionInput = z.infer<typeof CreateSubmissionInput>;\n\nexport const SaveSubmissionInput = z.object({\n data: JsonObject,\n currentStepId: z.string().optional(),\n});\nexport type SaveSubmissionInput = z.infer<typeof SaveSubmissionInput>;\n\n/** Payload of the `collectionSubmitted` workflow signal. */\nexport const CollectionSubmitted = z.object({\n submissionId: Id,\n flowKey: DefinitionKey,\n data: JsonObject,\n submittedAt: z.coerce.date(),\n});\nexport type CollectionSubmitted = z.infer<typeof CollectionSubmitted>;\n","import { z } from 'zod';\nimport { Id } from './base.js';\nimport { ActorType } from './tenant.js';\n\n/** Append-only record of who did what to which resource. */\nexport const AuditEvent = z.object({\n id: Id,\n tenantId: Id,\n actorType: ActorType,\n actorId: z.string(),\n /** Dotted verb, e.g. `case.decided`, `workflow.step.completed`. */\n action: z.string().regex(/^[a-z_]+(\\.[a-z_]+)+$/),\n resourceType: z.string().min(1),\n resourceId: z.string().min(1),\n payload: z.unknown(),\n occurredAt: z.coerce.date(),\n});\nexport type AuditEvent = z.infer<typeof AuditEvent>;\n","import { z } from 'zod';\nimport { BaseEntity, DefinitionKey, Id } from './base.js';\n\n/** What a list's entries are; drives validation and matching. */\nexport const ListKind = z.enum(['string', 'email', 'country', 'ip_cidr', 'number']);\nexport type ListKind = z.infer<typeof ListKind>;\n\n/** A tenant-managed blocklist or allowlist. Lists are live data, not versioned. */\nexport const List = BaseEntity.extend({\n key: DefinitionKey,\n name: z.string().min(1),\n description: z.string().nullish(),\n kind: ListKind,\n /** String matching ignores case (default). Ignored for `ip_cidr` and `number`. */\n caseInsensitive: z.boolean(),\n entryCount: z.number().int().nonnegative(),\n});\nexport type List = z.infer<typeof List>;\n\nexport const UpsertListInput = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n kind: ListKind,\n caseInsensitive: z.boolean().default(true),\n});\nexport type UpsertListInput = z.infer<typeof UpsertListInput>;\n\nexport const ListEntry = z.object({\n id: Id,\n tenantId: Id,\n listId: Id,\n /** The value as entered (trimmed). Matching uses a normalised form. */\n value: z.string().min(1),\n reason: z.string().nullish(),\n expiresAt: z.coerce.date().nullish(),\n addedBy: z.string(),\n createdAt: z.coerce.date(),\n});\nexport type ListEntry = z.infer<typeof ListEntry>;\n\nexport const NewListEntry = z.object({\n value: z.string().trim().min(1).max(512),\n reason: z.string().max(1000).optional(),\n expiresAt: z.coerce.date().optional(),\n});\nexport type NewListEntry = z.infer<typeof NewListEntry>;\n\nexport const AddListEntriesInput = z.object({\n entries: z.array(NewListEntry).min(1).max(10_000),\n});\nexport type AddListEntriesInput = z.infer<typeof AddListEntriesInput>;\n\nexport const RemoveListEntriesInput = z.object({\n ids: z.array(Id).min(1).max(10_000),\n});\nexport type RemoveListEntriesInput = z.infer<typeof RemoveListEntriesInput>;\n\n/** Outcome of a CSV import; `invalid` holds at most the first 100 rejected rows. */\nexport const ListImportResult = z.object({\n added: z.number().int().nonnegative(),\n skipped: z.number().int().nonnegative(),\n invalid: z.array(\n z.object({ line: z.number().int().positive(), value: z.string(), reason: z.string() }),\n ),\n});\nexport type ListImportResult = z.infer<typeof ListImportResult>;\n\nconst IPV4 = /^(\\d{1,3})(\\.\\d{1,3}){3}(\\/\\d{1,2})?$/;\nconst IPV6 = /^[0-9a-f:]+(\\/\\d{1,3})?$/i;\nconst COUNTRY = /^[A-Z]{2}$/;\n\n/**\n * Canonical form of an entry for a list kind, or an error message. Used by the API on write and\n * by the lookup service on read so both sides agree on matching.\n */\nexport function normalizeListValue(\n kind: ListKind,\n raw: string,\n caseInsensitive = true,\n): { ok: true; value: string } | { ok: false; reason: string } {\n const value = raw.trim();\n if (!value) return { ok: false, reason: 'empty value' };\n switch (kind) {\n case 'string':\n return { ok: true, value: caseInsensitive ? value.toLowerCase() : value };\n case 'email': {\n const lower = value.toLowerCase();\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(lower))\n return { ok: false, reason: 'not an email address' };\n return { ok: true, value: lower };\n }\n case 'country': {\n const upper = value.toUpperCase();\n if (!COUNTRY.test(upper)) return { ok: false, reason: 'not an ISO 3166-1 alpha-2 code' };\n return { ok: true, value: upper };\n }\n case 'number': {\n const n = Number(value);\n if (!Number.isFinite(n)) return { ok: false, reason: 'not a number' };\n return { ok: true, value: String(n) };\n }\n case 'ip_cidr': {\n if (IPV4.test(value)) {\n const [addr, prefix] = value.split('/');\n const octets = addr!.split('.').map(Number);\n if (octets.some((o) => o > 255)) return { ok: false, reason: 'invalid IPv4 address' };\n if (prefix !== undefined && Number(prefix) > 32)\n return { ok: false, reason: 'invalid prefix' };\n return { ok: true, value: prefix === undefined ? `${addr}/32` : value };\n }\n if (IPV6.test(value) && value.includes(':')) {\n const [addr, prefix] = value.split('/');\n if (prefix !== undefined && Number(prefix) > 128)\n return { ok: false, reason: 'invalid prefix' };\n return {\n ok: true,\n value: prefix === undefined ? `${addr!.toLowerCase()}/128` : value.toLowerCase(),\n };\n }\n return { ok: false, reason: 'not an IP address or CIDR range' };\n }\n }\n}\n","import { z } from 'zod';\nimport { Id, JsonObject } from './base.js';\n\n/** Group-by keys velocity rules can count over, besides the subject itself. */\nexport const EventKey = z.enum(['ip', 'device_id', 'card_fingerprint', 'email']);\nexport type EventKey = z.infer<typeof EventKey>;\n\n/**\n * An append-only fact about a subject (a transaction, a login, a signup). Promoted keys are\n * indexed for velocity rules; everything else lives in `attributes`.\n */\nexport const Event = z.object({\n id: z.string(),\n tenantId: Id,\n subjectId: Id,\n type: z.string().min(1),\n amount: z.number().nullish(),\n currency: z.string().length(3).nullish(),\n occurredAt: z.coerce.date(),\n ingestedAt: z.coerce.date(),\n attributes: JsonObject,\n idempotencyKey: z.string(),\n ip: z.string().nullish(),\n deviceId: z.string().nullish(),\n cardFingerprint: z.string().nullish(),\n email: z.string().nullish(),\n});\nexport type Event = z.infer<typeof Event>;\n\nexport const NewEvent = z.object({\n subjectId: Id,\n type: z\n .string()\n .min(1)\n .max(100)\n .regex(/^[a-z0-9][a-z0-9_.-]*$/, 'event types are lowercase identifiers'),\n amount: z.number().finite().optional(),\n currency: z.string().length(3).toUpperCase().optional(),\n occurredAt: z.coerce.date(),\n attributes: JsonObject.default({}),\n /** Caller-chosen key; re-sending the same key is a no-op. */\n idempotencyKey: z.string().min(1).max(255),\n ip: z.string().max(45).optional(),\n deviceId: z.string().max(255).optional(),\n cardFingerprint: z.string().max(255).optional(),\n email: z.string().max(320).toLowerCase().optional(),\n});\nexport type NewEvent = z.infer<typeof NewEvent>;\n\nexport const IngestEventsInput = z.object({\n events: z.array(NewEvent).min(1).max(1_000),\n});\nexport type IngestEventsInput = z.infer<typeof IngestEventsInput>;\n\nexport const IngestEventsResult = z.object({\n accepted: z.number().int().nonnegative(),\n duplicates: z.number().int().nonnegative(),\n});\nexport type IngestEventsResult = z.infer<typeof IngestEventsResult>;\n","import { z } from 'zod';\nimport { BaseEntity, DefinitionKey, DefinitionStatus } from './base.js';\nimport { DecisionOutcome } from './decision.js';\n\nexport const RuleSetUseCase = z.enum(['onboarding', 'underwriting', 'monitoring', 'custom']);\nexport type RuleSetUseCase = z.infer<typeof RuleSetUseCase>;\n\n/** `[min, max)` maps to `outcome`; the last band includes its `max`. */\nexport const ScoreBand = z.object({\n min: z.number(),\n max: z.number(),\n outcome: DecisionOutcome,\n});\nexport type ScoreBand = z.infer<typeof ScoreBand>;\n\nexport const ScoreClamp = z.object({ min: z.number().default(0), max: z.number().default(100) });\n\n/**\n * How a rule set turns rule results into a decision. Rules in `error` force manual review in\n * every mode: a rule the engine could not run must never silently approve.\n */\nexport const AggregationPolicy = z.discriminatedUnion('mode', [\n /** Failed block -> reject; failed warn -> manual review; else approve (the original policy). */\n z.object({ mode: z.literal('max_severity') }),\n /** Score = sum of weights on failed rules plus reported scores, clamped, mapped through bands. */\n z.object({\n mode: z.literal('sum_weights'),\n clamp: ScoreClamp.default({ min: 0, max: 100 }),\n bands: z.array(ScoreBand).min(1),\n }),\n /** Rules in set order; the first failed rule's severity decides, `info` continues. */\n z.object({ mode: z.literal('first_match'), default: DecisionOutcome.default('approve') }),\n]);\nexport type AggregationPolicy = z.infer<typeof AggregationPolicy>;\n\nexport const RuleSetRule = z.object({\n ruleKey: DefinitionKey,\n enabled: z.boolean().default(true),\n /** Replaces the rule's own weight inside this set. */\n weightOverride: z.number().optional(),\n /** Evaluated and recorded but excluded from aggregation. */\n shadow: z.boolean().default(false),\n});\nexport type RuleSetRule = z.infer<typeof RuleSetRule>;\n\nexport const RuleSetBody = z\n .object({\n rules: z.array(RuleSetRule).min(1),\n policy: AggregationPolicy,\n })\n .superRefine((body, ctx) => {\n const seen = new Set<string>();\n body.rules.forEach((rule, index) => {\n if (seen.has(rule.ruleKey)) {\n ctx.addIssue({\n code: 'custom',\n path: ['rules', index, 'ruleKey'],\n message: `duplicate rule \"${rule.ruleKey}\"`,\n });\n }\n seen.add(rule.ruleKey);\n });\n if (body.policy.mode !== 'sum_weights') return;\n const { clamp, bands } = body.policy;\n if (clamp.min >= clamp.max) {\n ctx.addIssue({\n code: 'custom',\n path: ['policy', 'clamp'],\n message: 'clamp.min must be below clamp.max',\n });\n return;\n }\n const sorted = [...bands].sort((a, b) => a.min - b.min);\n let expected = clamp.min;\n sorted.forEach((band, index) => {\n if (band.min >= band.max) {\n ctx.addIssue({\n code: 'custom',\n path: ['policy', 'bands', index],\n message: 'band.min must be below band.max',\n });\n }\n if (band.min !== expected) {\n ctx.addIssue({\n code: 'custom',\n path: ['policy', 'bands', index],\n message: `bands must be contiguous and start at ${clamp.min}; expected min ${expected}, got ${band.min}`,\n });\n }\n expected = band.max;\n });\n if (expected !== clamp.max) {\n ctx.addIssue({\n code: 'custom',\n path: ['policy', 'bands'],\n message: `bands must end at clamp.max (${clamp.max}), got ${expected}`,\n });\n }\n });\nexport type RuleSetBody = z.infer<typeof RuleSetBody>;\n\n/** A versioned, ordered group of rules with one aggregation policy. */\nexport const RuleSetDefinition = BaseEntity.extend({\n /** Actor id that created this version; null for rows older than PR 19. */\n createdBy: z.string().nullish(),\n key: DefinitionKey,\n version: z.number().int().positive(),\n name: z.string().min(1),\n description: z.string().nullish(),\n useCase: RuleSetUseCase,\n status: DefinitionStatus,\n definition: RuleSetBody,\n});\nexport type RuleSetDefinition = z.infer<typeof RuleSetDefinition>;\n\nexport const UpsertRuleSetInput = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n useCase: RuleSetUseCase.default('custom'),\n definition: RuleSetBody,\n});\nexport type UpsertRuleSetInput = z.infer<typeof UpsertRuleSetInput>;\n\n/** The band a score falls into: `[min, max)`, with the last band including its `max`. */\nexport function bandFor(bands: ScoreBand[], score: number): ScoreBand | undefined {\n const sorted = [...bands].sort((a, b) => a.min - b.min);\n const last = sorted[sorted.length - 1];\n for (const band of sorted) {\n if (score >= band.min && (score < band.max || (band === last && score <= band.max)))\n return band;\n }\n return undefined;\n}\n","import { z } from 'zod';\nimport { Id, JsonObject } from './base.js';\nimport { DecisionOutcome } from './decision.js';\nimport { RuleEvaluationResult } from './rule.js';\n\n/**\n * Snapshot of one `evaluate_rules` step execution: the exact inputs the rules saw and what they\n * returned. Append-only; backtests replay these rows.\n */\nexport const RuleEvaluation = z.object({\n id: Id,\n tenantId: Id,\n workflowRunId: Id,\n stepId: z.string(),\n subjectId: Id,\n ruleSetKey: z.string().nullish(),\n ruleSetVersion: z.number().int().nullish(),\n ruleKeys: z.array(z.string()),\n /** The full `RuleContext.data` at evaluation time. */\n data: JsonObject,\n results: z.array(RuleEvaluationResult),\n outcome: DecisionOutcome,\n riskScore: z.number(),\n evaluatedAt: z.coerce.date(),\n});\nexport type RuleEvaluation = z.infer<typeof RuleEvaluation>;\n","import { z } from 'zod';\nimport { DefinitionKey, Id } from './base.js';\nimport { DecisionOutcome } from './decision.js';\nimport { RuleOutcome } from './rule.js';\n\nexport const BacktestStatus = z.enum(['queued', 'running', 'completed', 'failed']);\nexport type BacktestStatus = z.infer<typeof BacktestStatus>;\n\nexport const BacktestSample = z.object({\n /** Replay evaluations recorded in the last N days (at most 180). */\n lastDays: z.number().int().min(1).max(180).default(30),\n /** Newest evaluation per subject, up to this many subjects. */\n limit: z.number().int().min(1).max(5_000).default(1_000),\n});\nexport type BacktestSample = z.infer<typeof BacktestSample>;\n\nexport const StartBacktestInput = z.object({\n ruleKey: DefinitionKey,\n /** Defaults to the latest version (drafts included). */\n version: z.number().int().positive().optional(),\n sample: BacktestSample.default({ lastDays: 30, limit: 1_000 }),\n /**\n * Re-aggregate each stored evaluation with the draft rule's result substituted (or added) under\n * this rule set's policy, to report how outcomes would change.\n */\n compareWithRuleSetKey: DefinitionKey.optional(),\n});\nexport type StartBacktestInput = z.infer<typeof StartBacktestInput>;\n\nexport const BacktestProgress = z.object({\n done: z.number().int().nonnegative(),\n total: z.number().int().nonnegative(),\n});\nexport type BacktestProgress = z.infer<typeof BacktestProgress>;\n\nexport const BacktestSampleFailure = z.object({\n evaluationId: Id,\n subjectId: Id,\n evaluatedAt: z.coerce.date(),\n reasons: z.array(z.string()),\n});\nexport type BacktestSampleFailure = z.infer<typeof BacktestSampleFailure>;\n\nexport const BacktestSummary = z.object({\n evaluated: z.number().int().nonnegative(),\n outcomes: z.record(RuleOutcome, z.number().int().nonnegative()),\n /** Counts keyed `\"<before>-><after>\"` for evaluations whose aggregate outcome would change. */\n wouldChange: z.record(z.string(), z.number().int().nonnegative()),\n /** Per existing rule key: evaluations where both that rule and the draft failed. */\n overlap: z.record(z.string(), z.number().int().nonnegative()),\n /** First 50 evaluations the draft failed on. */\n sampleFailures: z.array(BacktestSampleFailure),\n durationMs: z.number().nonnegative(),\n});\nexport type BacktestSummary = z.infer<typeof BacktestSummary>;\n\nexport const Backtest = z.object({\n id: Id,\n tenantId: Id,\n ruleKey: DefinitionKey,\n ruleVersion: z.number().int().positive(),\n ruleSetKey: z.string().nullish(),\n sample: BacktestSample,\n status: BacktestStatus,\n progress: BacktestProgress,\n summary: BacktestSummary.nullish(),\n error: z.string().nullish(),\n temporalWorkflowId: z.string().nullish(),\n requestedBy: z.string(),\n createdAt: z.coerce.date(),\n finishedAt: z.coerce.date().nullish(),\n});\nexport type Backtest = z.infer<typeof Backtest>;\n\n/** The decision outcome before and after substituting the draft rule, per evaluation. */\nexport const OutcomeChange = z.object({ before: DecisionOutcome, after: DecisionOutcome });\nexport type OutcomeChange = z.infer<typeof OutcomeChange>;\n","import { z } from 'zod';\nimport { Id } from './base.js';\n\nexport const PluginCallbackStatus = z.enum(['pending', 'completed', 'failed', 'timed_out']);\nexport type PluginCallbackStatus = z.infer<typeof PluginCallbackStatus>;\n\n/**\n * A vendor session started by an asynchronous plugin action, waiting for the vendor's webhook.\n * Maps the vendor's external id back to the tenant, run and step.\n */\nexport const PluginCallback = z.object({\n id: Id,\n tenantId: Id,\n pluginName: z.string(),\n action: z.string(),\n externalId: z.string(),\n workflowRunId: Id.nullish(),\n stepId: z.string().nullish(),\n status: PluginCallbackStatus,\n output: z.unknown().nullish(),\n error: z.string().nullish(),\n createdAt: z.coerce.date(),\n completedAt: z.coerce.date().nullish(),\n});\nexport type PluginCallback = z.infer<typeof PluginCallback>;\n\n/** Payload of the `pluginCallback` workflow signal. */\nexport const PluginCallbackSignal = z.object({\n externalId: z.string(),\n status: z.enum(['completed', 'failed']),\n output: z.unknown().optional(),\n error: z.string().optional(),\n});\nexport type PluginCallbackSignal = z.infer<typeof PluginCallbackSignal>;\n\n/** A received vendor webhook, kept for de-duplication. */\nexport const WebhookEventRecord = z.object({\n id: Id,\n tenantId: Id,\n pluginName: z.string(),\n eventId: z.string(),\n externalId: z.string(),\n receivedAt: z.coerce.date(),\n});\nexport type WebhookEventRecord = z.infer<typeof WebhookEventRecord>;\n","import { z } from 'zod';\nimport { BaseEntity, Id } from './base.js';\n\n/** Upper bound on one uploaded file; enforced by the presigned policy and again on finalize. */\nexport const DOCUMENT_MAX_BYTES = 20 * 1024 * 1024;\n\n/**\n * Content types a client may declare. The stored type is always the sniffed one. HEIC is not\n * accepted: images are re-encoded on ingest and the bundled libvips cannot decode HEVC.\n */\nexport const DOCUMENT_CONTENT_TYPES = [\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'application/pdf',\n] as const;\nexport const DocumentContentType = z.enum(DOCUMENT_CONTENT_TYPES);\nexport type DocumentContentType = z.infer<typeof DocumentContentType>;\n\n/**\n * `pending`: row exists, nothing uploaded yet. `uploaded`: finalize verified the object.\n * `scanning`: the scan workflow owns it. `clean` / `infected`: the scanner's verdict.\n * `rejected`: finalize or processing refused the file (type mismatch, size, dangerous PDF).\n */\nexport const DocumentStatus = z.enum([\n 'pending',\n 'uploaded',\n 'scanning',\n 'clean',\n 'infected',\n 'rejected',\n]);\nexport type DocumentStatus = z.infer<typeof DocumentStatus>;\n\n/** Statuses from which a document can still change. */\nexport const DOCUMENT_OPEN_STATUSES: readonly DocumentStatus[] = [\n 'pending',\n 'uploaded',\n 'scanning',\n];\n\nexport const DocumentScan = z.object({\n /** Scanner that produced the verdict, e.g. `none`, `clamav`. */\n engine: z.string().min(1),\n /** Malware signature name when infected. */\n signature: z.string().optional(),\n scannedAt: z.coerce.date(),\n});\nexport type DocumentScan = z.infer<typeof DocumentScan>;\n\nexport const Document = BaseEntity.extend({\n subjectId: Id,\n submissionId: Id.nullish(),\n caseId: Id.nullish(),\n /** Collection-flow field the file was uploaded for. */\n fieldKey: z.string().nullish(),\n fileName: z.string().min(1).max(255),\n /** Declared on creation; replaced by the sniffed type on finalize. */\n contentType: z.string().min(1),\n sizeBytes: z.number().int().nonnegative(),\n /** Hex digest, set on finalize. */\n sha256: z.string().nullish(),\n /** Server-chosen object key: `${tenantId}/${subjectId}/${documentId}`. */\n storageKey: z.string().min(1),\n status: DocumentStatus,\n scan: DocumentScan.nullish(),\n /** Why the document was `rejected`, for operators and applicants. */\n rejectionReason: z.string().nullish(),\n /** Actor id of the uploader (user id, machine id or submission id). */\n uploadedBy: z.string().min(1),\n});\nexport type Document = z.infer<typeof Document>;\n\nexport const CreateDocumentInput = z.object({\n fileName: z.string().min(1).max(255),\n contentType: DocumentContentType,\n sizeBytes: z.number().int().positive().max(DOCUMENT_MAX_BYTES),\n /** Operators and integrations name the subject; applicants' subject comes from the submission. */\n subjectId: Id.optional(),\n submissionId: Id.optional(),\n caseId: Id.optional(),\n fieldKey: z.string().optional(),\n});\nexport type CreateDocumentInput = z.infer<typeof CreateDocumentInput>;\n\n/** What a client needs to POST the file straight to object storage. */\nexport const DocumentUploadTicket = z.object({\n documentId: Id,\n upload: z.object({\n url: z.url(),\n /** Form fields to send with the file (policy, signature, key); the file field goes last. */\n fields: z.record(z.string(), z.string()),\n expiresAt: z.coerce.date(),\n maxBytes: z.number().int().positive(),\n }),\n});\nexport type DocumentUploadTicket = z.infer<typeof DocumentUploadTicket>;\n\nexport const DocumentDownload = z.object({\n url: z.url(),\n expiresAt: z.coerce.date(),\n fileName: z.string(),\n contentType: z.string(),\n});\nexport type DocumentDownload = z.infer<typeof DocumentDownload>;\n\n/** Value stored in a collection-flow `file` field. */\nexport const FileFieldValue = z.object({ fileId: Id, name: z.string().optional() });\nexport type FileFieldValue = z.infer<typeof FileFieldValue>;\n","import { z } from 'zod';\nimport { Actor } from './tenant.js';\n\n/** What a subject's history is made of. Each kind maps to a read permission on the API. */\nexport const TimelineKind = z.enum([\n 'decision',\n 'case',\n 'run',\n 'submission',\n 'document',\n 'event',\n 'note',\n 'audit',\n]);\nexport type TimelineKind = z.infer<typeof TimelineKind>;\n\n/**\n * One entry of a subject's chronological history, projected server-side from the entity tables\n * and the audit log. `data` carries the kind-specific record (a `Decision`, a `Case`, ...).\n */\nexport const TimelineEntry = z.object({\n /** Stable per entry: `<kind>:<resourceId>[:<suffix>]`. */\n id: z.string().min(1),\n kind: TimelineKind,\n at: z.coerce.date(),\n title: z.string().min(1),\n summary: z.string().optional(),\n resourceType: z.string().min(1),\n resourceId: z.string().min(1),\n actor: Actor.optional(),\n data: z.unknown().optional(),\n});\nexport type TimelineEntry = z.infer<typeof TimelineEntry>;\n\nexport const TimelineQuery = z.object({\n from: z.coerce.date().optional(),\n to: z.coerce.date().optional(),\n kinds: z.array(TimelineKind).optional(),\n limit: z.coerce.number().int().positive().max(500).optional(),\n offset: z.coerce.number().int().nonnegative().optional(),\n});\nexport type TimelineQuery = z.infer<typeof TimelineQuery>;\n","import { z } from 'zod';\n\n/** Display hints the builder applies to a schema-driven form (`uiSchema` inputs for rjsf). */\nexport const FormUiHints = z.object({\n /** Fields in display order; unlisted fields follow in schema order. */\n fieldOrder: z.array(z.string()).optional(),\n labels: z.record(z.string(), z.string()).optional(),\n help: z.record(z.string(), z.string()).optional(),\n /**\n * Fields rendered with a picker instead of a free input. Values: `list`, `rule`, `ruleSet`,\n * `flow`, `plugin`, `pluginAction`, `step`, `path`, `condition`, `cel`.\n */\n pickers: z.record(z.string(), z.string()).optional(),\n});\nexport type FormUiHints = z.infer<typeof FormUiHints>;\n\n/** One workflow step type as `GET /workflow-step-types` describes it. */\nexport const StepTypeDescription = z.object({\n type: z.string().min(1),\n title: z.string().min(1),\n description: z.string(),\n /** JSON Schema of the step's own fields (`id`, `name`, `next` excluded). */\n configSchema: z.unknown(),\n /** Dot-path namespaces the step may read from the run context, e.g. `submission.<field>`. */\n dataPaths: z.array(z.string()).default([]),\n /** Context keys the step writes (`outputKey` conventions), for downstream path pickers. */\n outputs: z.array(z.string()).default([]),\n /** Whether the step ends the run (no `next`). */\n terminal: z.boolean().default(false),\n uiHints: FormUiHints.optional(),\n});\nexport type StepTypeDescription = z.infer<typeof StepTypeDescription>;\n\n/** One collection-flow field type as `GET /collection-field-types` describes it. */\nexport const FieldTypeDescription = z.object({\n type: z.string().min(1),\n title: z.string().min(1),\n description: z.string(),\n /** JSON Schema of the field-type-specific options (select options, validation, file limits). */\n optionsSchema: z.unknown(),\n /** Shape of the stored value, as JSON Schema, for previews and docs. */\n valueSchema: z.unknown(),\n});\nexport type FieldTypeDescription = z.infer<typeof FieldTypeDescription>;\n\nexport const IssueSeverity = z.enum(['error', 'warning']);\nexport type IssueSeverity = z.infer<typeof IssueSeverity>;\n\n/** A problem found while validating a definition body without saving it. */\nexport const DefinitionIssue = z.object({\n severity: IssueSeverity,\n /** JSON pointer-ish path into the body, e.g. `steps.2.next`. */\n path: z.string(),\n /** Step or field the issue belongs to, when it has one, so editors can mark it. */\n stepId: z.string().optional(),\n fieldKey: z.string().optional(),\n code: z.string().min(1),\n message: z.string().min(1),\n});\nexport type DefinitionIssue = z.infer<typeof DefinitionIssue>;\n\nexport const ValidationReport = z.object({\n ok: z.boolean(),\n issues: z.array(DefinitionIssue),\n});\nexport type ValidationReport = z.infer<typeof ValidationReport>;\n","import { z } from 'zod';\nimport { DefinitionKey, DefinitionStatus, Id } from './base.js';\nimport { ActorType } from './tenant.js';\n\n/** The four versioned definition kinds and the URL prefix each is served under. */\nexport const DefinitionKind = z.enum(['workflow', 'rule', 'rule_set', 'collection_flow']);\nexport type DefinitionKind = z.infer<typeof DefinitionKind>;\n\nexport const DEFINITION_PATHS: Record<DefinitionKind, string> = {\n workflow: '/workflow-definitions',\n rule: '/rule-definitions',\n rule_set: '/rule-sets',\n collection_flow: '/collection-flows',\n};\n\nexport const ApprovalDecision = z.enum(['approved', 'rejected']);\nexport type ApprovalDecision = z.infer<typeof ApprovalDecision>;\n\n/** One request to publish a version, and its outcome once an approver acts. */\nexport const DefinitionApproval = z.object({\n id: Id,\n tenantId: Id,\n kind: DefinitionKind,\n key: DefinitionKey,\n version: z.number().int().positive(),\n requestedBy: z.string().min(1),\n requestedAt: z.coerce.date(),\n comment: z.string().nullish(),\n decidedBy: z.string().nullish(),\n decidedAt: z.coerce.date().nullish(),\n decision: ApprovalDecision.nullish(),\n decisionComment: z.string().nullish(),\n});\nexport type DefinitionApproval = z.infer<typeof DefinitionApproval>;\n\nexport const ApprovalCommentInput = z.object({ comment: z.string().max(2000).optional() });\nexport type ApprovalCommentInput = z.infer<typeof ApprovalCommentInput>;\n\n/** A row of a definition's version history. */\nexport const DefinitionVersionSummary = z.object({\n kind: DefinitionKind,\n key: DefinitionKey,\n version: z.number().int().positive(),\n status: DefinitionStatus,\n name: z.string(),\n createdBy: z.string().nullish(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n /** The open or latest approval for this version, when any. */\n approval: DefinitionApproval.nullish(),\n});\nexport type DefinitionVersionSummary = z.infer<typeof DefinitionVersionSummary>;\n\nexport const DiffOp = z.enum(['added', 'removed', 'changed', 'moved']);\nexport type DiffOp = z.infer<typeof DiffOp>;\n\n/** One readable change between two versions, e.g. `step \"idv\" added`. */\nexport const DiffChange = z.object({\n op: DiffOp,\n /** Dotted path into the compared document, e.g. `definition.steps.idv.next`. */\n path: z.string(),\n summary: z.string().min(1),\n before: z.unknown().optional(),\n after: z.unknown().optional(),\n});\nexport type DiffChange = z.infer<typeof DiffChange>;\n\nexport const DefinitionDiff = z.object({\n kind: DefinitionKind,\n key: DefinitionKey,\n from: z.number().int().positive(),\n to: z.number().int().positive(),\n changes: z.array(DiffChange),\n /** Raw jsondiffpatch delta, for renderers that show the full tree. */\n delta: z.unknown(),\n});\nexport type DefinitionDiff = z.infer<typeof DefinitionDiff>;\n\nexport const AuditExportFormat = z.enum(['csv', 'jsonl']);\nexport type AuditExportFormat = z.infer<typeof AuditExportFormat>;\n\n/** Filters shared by `GET /audit-events` and its export. */\nexport const AuditFilter = z.object({\n /** Prefix match on the dotted action, e.g. `case.` or `case.note.added`. */\n action: z.string().min(1).max(200).optional(),\n actorId: z.string().min(1).optional(),\n actorType: ActorType.optional(),\n resourceType: z.string().min(1).optional(),\n resourceId: z.string().min(1).optional(),\n from: z.coerce.date().optional(),\n to: z.coerce.date().optional(),\n});\nexport type AuditFilter = z.infer<typeof AuditFilter>;\n","import { z } from 'zod';\nimport { DefinitionKey, DefinitionStatus, Id } from './base.js';\nimport { UpsertCollectionFlowInput } from './collection.js';\nimport { DefinitionKind } from './governance.js';\nimport { NewListEntry, UpsertListInput } from './list.js';\nimport { UpsertRuleSetInput } from './rule-set.js';\nimport { UpsertRuleDefinitionInput } from './rule.js';\nimport { UpsertWorkflowDefinitionInput } from './workflow.js';\n\n/**\n * A policy pack: a portable set of definitions (rules, rule sets, workflows, collection flows)\n * and lists that `POST /definitions/import` loads into a tenant and `GET /definitions/export`\n * produces from one. Every item is the body the matching `PUT` route accepts plus the `key` it\n * is stored under, so a pack is validated by the same schemas as the API. Plugin configuration\n * is never part of a pack: it carries secret references that belong to one deployment.\n */\n\n/** Rows per list in a pack: the cap one `addEntries` call accepts (the CSV import batch size). */\nexport const POLICY_PACK_MAX_LIST_ROWS = 10_000;\n\nexport const PolicyPackRule = UpsertRuleDefinitionInput.extend({ key: DefinitionKey });\nexport type PolicyPackRule = z.infer<typeof PolicyPackRule>;\n\nexport const PolicyPackRuleSet = UpsertRuleSetInput.extend({ key: DefinitionKey });\nexport type PolicyPackRuleSet = z.infer<typeof PolicyPackRuleSet>;\n\nexport const PolicyPackWorkflow = UpsertWorkflowDefinitionInput.extend({ key: DefinitionKey });\nexport type PolicyPackWorkflow = z.infer<typeof PolicyPackWorkflow>;\n\nexport const PolicyPackCollectionFlow = UpsertCollectionFlowInput.extend({ key: DefinitionKey });\nexport type PolicyPackCollectionFlow = z.infer<typeof PolicyPackCollectionFlow>;\n\n/** A list with its rows; lists are live data, so an import adds the rows that are not there yet. */\nexport const PolicyPackList = UpsertListInput.extend({\n key: DefinitionKey,\n rows: z.array(NewListEntry).max(POLICY_PACK_MAX_LIST_ROWS).default([]),\n});\nexport type PolicyPackList = z.infer<typeof PolicyPackList>;\n\n/** The item groups of a pack, in the order an import writes them. */\nexport const POLICY_PACK_GROUPS = [\n 'lists',\n 'rules',\n 'ruleSets',\n 'collectionFlows',\n 'workflows',\n] as const;\nexport type PolicyPackGroup = (typeof POLICY_PACK_GROUPS)[number];\n\n/** The kind of an item in a pack: a definition kind, or `list`. */\nexport const PolicyPackItemKind = z.enum([...DefinitionKind.options, 'list']);\nexport type PolicyPackItemKind = z.infer<typeof PolicyPackItemKind>;\n\nexport const POLICY_PACK_GROUP_KINDS: Record<PolicyPackGroup, PolicyPackItemKind> = {\n lists: 'list',\n rules: 'rule',\n ruleSets: 'rule_set',\n collectionFlows: 'collection_flow',\n workflows: 'workflow',\n};\n\nexport const PolicyPackDefinitions = z\n .object({\n rules: z.array(PolicyPackRule).default([]),\n ruleSets: z.array(PolicyPackRuleSet).default([]),\n workflows: z.array(PolicyPackWorkflow).default([]),\n collectionFlows: z.array(PolicyPackCollectionFlow).default([]),\n lists: z.array(PolicyPackList).default([]),\n })\n .superRefine((definitions, ctx) => {\n for (const group of POLICY_PACK_GROUPS) {\n const seen = new Set<string>();\n definitions[group].forEach((item, index) => {\n if (seen.has(item.key)) {\n ctx.addIssue({\n code: 'custom',\n path: [group, index, 'key'],\n message: `duplicate ${POLICY_PACK_GROUP_KINDS[group].replace(/_/g, ' ')} \"${item.key}\"`,\n });\n }\n seen.add(item.key);\n });\n }\n });\nexport type PolicyPackDefinitions = z.infer<typeof PolicyPackDefinitions>;\n\n/** A pack name is a slug like a definition key; the version is free text (`1.0.0`, `2026-10`). */\nexport const PolicyPackName = z\n .string()\n .min(1)\n .max(100)\n .regex(/^[a-z0-9][a-z0-9_-]*$/, 'pack names are lowercase letters, digits, \"_\" or \"-\"');\n\nexport const PolicyPack = z.object({\n name: PolicyPackName,\n version: z.string().min(1).max(50),\n description: z.string().max(2000).optional(),\n definitions: PolicyPackDefinitions,\n});\nexport type PolicyPack = z.infer<typeof PolicyPack>;\n/** The pack as written in `pack.json`: defaults may be omitted. */\nexport type PolicyPackInput = z.input<typeof PolicyPack>;\n\n/** Items per group, for audit payloads and summaries. */\nexport function policyPackCounts(pack: PolicyPack): Record<PolicyPackGroup, number> {\n return {\n lists: pack.definitions.lists.length,\n rules: pack.definitions.rules.length,\n ruleSets: pack.definitions.ruleSets.length,\n collectionFlows: pack.definitions.collectionFlows.length,\n workflows: pack.definitions.workflows.length,\n };\n}\n\n/** One item addressed as `<kind>:<key>`, the form `GET /definitions/export?keys=` takes. */\nexport const PolicyPackKeyRef = z.object({ kind: PolicyPackItemKind, key: DefinitionKey });\nexport type PolicyPackKeyRef = z.infer<typeof PolicyPackKeyRef>;\n\n/** Parses `rule:country_allowed` into `{ kind, key }`; throws a `ZodError` on a bad reference. */\nexport function parsePolicyPackKeyRef(value: string): PolicyPackKeyRef {\n const separator = value.indexOf(':');\n const kind = separator === -1 ? '' : value.slice(0, separator);\n const key = separator === -1 ? value : value.slice(separator + 1);\n return PolicyPackKeyRef.parse({ kind, key });\n}\n\n/** `<kind>:<key>` for every item of a pack, in group order. */\nexport function policyPackKeyRefs(pack: PolicyPack): string[] {\n return POLICY_PACK_GROUPS.flatMap((group) =>\n pack.definitions[group].map((item) => `${POLICY_PACK_GROUP_KINDS[group]}:${item.key}`),\n );\n}\n\n/** One definition version `POST /definitions/import` created (and published or queued for approval). */\nexport const PolicyPackImportedDefinition = z.object({\n kind: DefinitionKind,\n key: DefinitionKey,\n id: Id,\n version: z.number().int().positive(),\n status: DefinitionStatus,\n /** Set when the tenant requires approvals and `publish=true` opened a request instead. */\n approvalId: Id.nullable(),\n});\nexport type PolicyPackImportedDefinition = z.infer<typeof PolicyPackImportedDefinition>;\n\n/** One list the import created or updated, with the row counts `addEntries` reported. */\nexport const PolicyPackImportedList = z.object({\n key: DefinitionKey,\n id: Id,\n created: z.boolean(),\n added: z.number().int().nonnegative(),\n skipped: z.number().int().nonnegative(),\n invalid: z.number().int().nonnegative(),\n});\nexport type PolicyPackImportedList = z.infer<typeof PolicyPackImportedList>;\n\nexport const PolicyPackImportResult = z.object({\n name: PolicyPackName,\n version: z.string(),\n /** Whether `publish=true` was requested. */\n publish: z.boolean(),\n /** With `publish=true` and approvals required: versions are `pending_approval`, not published. */\n approvalRequired: z.boolean(),\n definitions: z.array(PolicyPackImportedDefinition),\n lists: z.array(PolicyPackImportedList),\n});\nexport type PolicyPackImportResult = z.infer<typeof PolicyPackImportResult>;\n","export class AletheiaError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly status: number = 500,\n public readonly details?: unknown,\n ) {\n super(message);\n this.name = new.target.name;\n }\n}\n\nexport class NotFoundError extends AletheiaError {\n constructor(resource: string, id: string) {\n super(`${resource} ${id} not found`, 'not_found', 404);\n }\n}\n\nexport class ValidationError extends AletheiaError {\n constructor(message: string, details?: unknown) {\n super(message, 'validation_error', 400, details);\n }\n}\n\nexport class ConflictError extends AletheiaError {\n constructor(message: string) {\n super(message, 'conflict', 409);\n }\n}\n\nexport class NotImplementedError extends AletheiaError {\n constructor(feature: string) {\n super(`${feature} is not implemented yet`, 'not_implemented', 501);\n }\n}\n\nexport class TimeoutError extends AletheiaError {\n constructor(operation: string, timeoutMs: number) {\n super(`${operation} timed out after ${timeoutMs}ms`, 'timeout', 504);\n }\n}\n","/** UUID v4. Uses the platform crypto so it works in Node, browsers and tests alike. */\nexport function createId(): string {\n return globalThis.crypto.randomUUID();\n}\n","/**\n * Minimal structural logger contract shared across packages (pino satisfies it).\n * Kept dependency-free so plugins and UIs can type against it without pulling pino.\n */\nexport type LogFn = (objOrMsg: object | string, msg?: string, ...args: unknown[]) => void;\n\nexport interface Logger {\n debug: LogFn;\n info: LogFn;\n warn: LogFn;\n error: LogFn;\n child(bindings: Record<string, unknown>): Logger;\n}\n\nexport const noopLogger: Logger = {\n debug: () => undefined,\n info: () => undefined,\n warn: () => undefined,\n error: () => undefined,\n child: () => noopLogger,\n};\n"],"mappings":"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","names":["import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod"]}