@casimesh/contracts 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.
- package/index.d.ts +1120 -21
- package/index.js +247 -10
- package/index.js.map +1 -1
- package/package.json +1 -1
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/capability.ts","../src/common.ts","../src/ids.ts","../src/agent.ts","../src/auth.ts","../src/link.ts","../src/node.ts","../src/organization.ts","../src/task.ts","../src/events.ts","../src/health.ts","../src/identity.ts","../src/mesh.ts","../src/projection.ts","../src/mesh-state.ts","../src/page.ts","../src/problem.ts","../src/realtime.ts"],"names":["z","event"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\n/** Dotted, lowercase capability name, e.g. `vision` or `terrain.analysis` (deck slide 07). */\nexport const CapabilityName = z\n .string()\n .regex(/^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)*$/, \"Dotted lowercase name, e.g. terrain.analysis\")\n .max(100);\nexport type CapabilityName = z.infer<typeof CapabilityName>;\n\nexport const Capability = z\n .object({\n name: CapabilityName,\n version: z.string().max(32).default(\"1.0.0\"),\n description: z.string().max(500).optional(),\n })\n .meta({ id: \"Capability\", description: \"A machine-discoverable description of what an agent can perform.\" });\nexport type Capability = z.infer<typeof Capability>;\n","import { z } from \"zod\";\n\n/** ISO-8601 UTC timestamp with milliseconds, e.g. `2026-09-28T09:28:12.123Z`. */\nexport const Timestamp = z.iso.datetime().meta({ example: \"2026-09-28T09:28:12.123Z\" });\nexport type Timestamp = z.infer<typeof Timestamp>;\n\n/** Monotonic per-entity version used for replication and optimistic concurrency (ADR-0004). */\nexport const Version = z.int().min(1).meta({ description: \"Monotonic per-entity version\" });\nexport type Version = z.infer<typeof Version>;\n\n/** Human-readable display name. */\nexport const DisplayName = z.string().trim().min(1).max(120);\n\n/** URL-safe identifier, unique within its parent (e.g. an organization within a node). */\nexport const Slug = z\n .string()\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, \"Lowercase letters, digits and single hyphens\")\n .max(63);\nexport type Slug = z.infer<typeof Slug>;\n\n/** Free-form, JSON-serialisable metadata. */\nexport const Metadata = z.record(z.string(), z.unknown());\nexport type Metadata = z.infer<typeof Metadata>;\n\n/** Fields every replicated entity carries. */\nexport const EntityAudit = {\n version: Version,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n};\n","import { z } from \"zod\";\n\n/** Prefixes for time-sortable ULID identifiers (ROADMAP §2.3). */\nexport const ID_PREFIX = {\n node: \"node\",\n organization: \"org\",\n agent: \"agt\",\n link: \"lnk\",\n event: \"evt\",\n command: \"cmd\",\n principal: \"prn\",\n roleBinding: \"rol\",\n apiKey: \"key\",\n task: \"tsk\",\n} as const;\n\nexport type IdKind = keyof typeof ID_PREFIX;\n\n/** Crockford base32 ULID body (26 chars, no I, L, O, U). */\nexport const ULID_PATTERN = \"[0-9A-HJKMNP-TV-Z]{26}\";\n\n/** Builds a Zod schema that validates `<prefix>_<ULID>` identifiers. */\nexport const prefixedId = <K extends IdKind>(kind: K) =>\n z\n .string()\n .regex(new RegExp(`^${ID_PREFIX[kind]}_${ULID_PATTERN}$`), `Expected a ${kind} id (${ID_PREFIX[kind]}_<ULID>)`)\n .meta({ description: `${kind} identifier`, example: `${ID_PREFIX[kind]}_01J9Z3K7Q8R5T2V4W6X8Y0A1B2` });\n\nexport const NodeId = prefixedId(\"node\");\nexport const OrganizationId = prefixedId(\"organization\");\nexport const AgentId = prefixedId(\"agent\");\nexport const LinkId = prefixedId(\"link\");\nexport const EventId = prefixedId(\"event\");\nexport const CommandId = prefixedId(\"command\");\nexport const PrincipalId = prefixedId(\"principal\");\nexport const RoleBindingId = prefixedId(\"roleBinding\");\nexport const TaskId = prefixedId(\"task\");\n\nexport type NodeId = z.infer<typeof NodeId>;\nexport type OrganizationId = z.infer<typeof OrganizationId>;\nexport type AgentId = z.infer<typeof AgentId>;\nexport type LinkId = z.infer<typeof LinkId>;\nexport type EventId = z.infer<typeof EventId>;\nexport type CommandId = z.infer<typeof CommandId>;\nexport type PrincipalId = z.infer<typeof PrincipalId>;\nexport type RoleBindingId = z.infer<typeof RoleBindingId>;\nexport type TaskId = z.infer<typeof TaskId>;\n","import { z } from \"zod\";\nimport { Capability } from \"./capability.ts\";\nimport { DisplayName, EntityAudit, Metadata } from \"./common.ts\";\nimport { AgentId, NodeId, OrganizationId } from \"./ids.ts\";\n\n/** `mesh` marks the organization's Mesh Agent — exactly one per organization (ADR-0003). */\nexport const AgentKind = z.enum([\"standard\", \"mesh\"]);\nexport type AgentKind = z.infer<typeof AgentKind>;\n\nexport const AgentStatus = z.enum([\"created\", \"starting\", \"running\", \"stopped\", \"error\"]);\nexport type AgentStatus = z.infer<typeof AgentStatus>;\n\nconst capabilityList = z\n .array(Capability)\n .max(64)\n .refine((caps) => new Set(caps.map((c) => c.name)).size === caps.length, \"Capability names must be unique\");\n\nexport const Agent = z\n .object({\n id: AgentId,\n organizationId: OrganizationId,\n nodeId: NodeId,\n name: DisplayName,\n kind: AgentKind,\n status: AgentStatus,\n capabilities: capabilityList,\n /** Model backing the agent, e.g. `claude-sonnet-5`; null for rule-based agents. */\n model: z.string().max(100).nullable(),\n metadata: Metadata,\n ...EntityAudit,\n })\n .meta({ id: \"Agent\", description: \"An autonomous software entity with identity, capabilities and policies.\" });\nexport type Agent = z.infer<typeof Agent>;\n\nexport const CreateAgentRequest = z\n .object({\n name: DisplayName,\n capabilities: capabilityList.default([]),\n model: z.string().max(100).nullable().default(null),\n metadata: Metadata.optional(),\n })\n .meta({ id: \"CreateAgentRequest\" });\n/** Parsed request (defaults applied) — what use cases receive. */\nexport type CreateAgentRequest = z.infer<typeof CreateAgentRequest>;\n/** What callers may send — capabilities and model are optional. */\nexport type CreateAgentRequestInput = z.input<typeof CreateAgentRequest>;\n\nexport const UpdateAgentRequest = z\n .object({\n name: DisplayName.optional(),\n capabilities: capabilityList.optional(),\n model: z.string().max(100).nullable().optional(),\n metadata: Metadata.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateAgentRequest\" });\nexport type UpdateAgentRequest = z.infer<typeof UpdateAgentRequest>;\n","import { z } from \"zod\";\nimport { DisplayName, Timestamp } from \"./common.ts\";\nimport { NodeId, OrganizationId, PrincipalId, RoleBindingId } from \"./ids.ts\";\n\nexport const PrincipalKind = z.enum([\"user\", \"service\"]);\nexport type PrincipalKind = z.infer<typeof PrincipalKind>;\n\nexport const Principal = z\n .object({\n id: PrincipalId,\n kind: PrincipalKind,\n name: DisplayName,\n publicKey: z.string().nullable(),\n createdAt: Timestamp,\n })\n .meta({ id: \"Principal\", description: \"A user or service that can be authenticated and granted roles.\" });\nexport type Principal = z.infer<typeof Principal>;\n\n/** Ownership roles (ADR-0010). */\nexport const Role = z.enum([\"node_owner\", \"org_owner\"]);\nexport type Role = z.infer<typeof Role>;\n\nexport const RoleScope = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"node\"), nodeId: NodeId }),\n z.object({ type: z.literal(\"organization\"), organizationId: OrganizationId, nodeId: NodeId }),\n]);\nexport type RoleScope = z.infer<typeof RoleScope>;\n\nexport const RoleBinding = z\n .object({\n id: RoleBindingId,\n principalId: PrincipalId,\n role: Role,\n scope: RoleScope,\n createdAt: Timestamp,\n })\n .refine(\n (b) => (b.role === \"node_owner\" ? b.scope.type === \"node\" : b.scope.type === \"organization\"),\n \"node_owner must be node-scoped and org_owner organization-scoped\",\n )\n .meta({ id: \"RoleBinding\" });\nexport type RoleBinding = z.infer<typeof RoleBinding>;\n\nexport const GrantOwnerRequest = z.object({ principalId: PrincipalId }).meta({ id: \"GrantOwnerRequest\" });\nexport type GrantOwnerRequest = z.infer<typeof GrantOwnerRequest>;\n","import { z } from \"zod\";\nimport { EntityAudit, Timestamp } from \"./common.ts\";\nimport { LinkId, NodeId } from \"./ids.ts\";\n\nexport const TransportKind = z.enum([\"memory\", \"ws-peer\", \"tcp\", \"mqtt\", \"meshtastic\", \"meshcore\"]);\nexport type TransportKind = z.infer<typeof TransportKind>;\n\n/** `requested` = an owner drew the edge in the Monitor and the peer has not accepted yet (ADR-0008). */\nexport const LinkState = z.enum([\"requested\", \"up\", \"down\"]);\nexport type LinkState = z.infer<typeof LinkState>;\n\nexport const LinkQuality = z.object({\n latencyMs: z.number().nonnegative().optional(),\n rssi: z.number().optional(),\n});\nexport type LinkQuality = z.infer<typeof LinkQuality>;\n\nexport const Link = z\n .object({\n id: LinkId,\n aNodeId: NodeId,\n bNodeId: NodeId,\n transport: TransportKind,\n state: LinkState,\n quality: LinkQuality,\n lastSeenAt: Timestamp.nullable(),\n ...EntityAudit,\n })\n .refine((link) => link.aNodeId !== link.bNodeId, \"A link must connect two different nodes\")\n .meta({ id: \"Link\", description: \"Transport-level adjacency between two nodes — the edges of the topology.\" });\nexport type Link = z.infer<typeof Link>;\n\nexport const CreateLinkRequest = z\n .object({ aNodeId: NodeId, bNodeId: NodeId, transport: TransportKind })\n .refine((body) => body.aNodeId !== body.bNodeId, \"A link must connect two different nodes\")\n .meta({ id: \"CreateLinkRequest\" });\nexport type CreateLinkRequest = z.infer<typeof CreateLinkRequest>;\n","import { z } from \"zod\";\nimport { DisplayName, EntityAudit, Metadata, Timestamp } from \"./common.ts\";\nimport { NodeId } from \"./ids.ts\";\n\nexport const NodeStatus = z.enum([\"online\", \"degraded\", \"offline\"]);\nexport type NodeStatus = z.infer<typeof NodeStatus>;\n\nexport const Node = z\n .object({\n id: NodeId,\n name: DisplayName,\n publicKey: z.string().min(1),\n /** Base URL where other nodes and clients reach this node, e.g. `https://node-a.example:7700` (ADR-0017). */\n endpoint: z.url().nullable(),\n status: NodeStatus,\n metadata: Metadata,\n lastSeenAt: Timestamp.nullable(),\n ...EntityAudit,\n })\n .meta({ id: \"Node\", description: \"A physical or virtual endpoint connected to the mesh.\" });\nexport type Node = z.infer<typeof Node>;\n\nexport const UpdateNodeRequest = z\n .object({\n name: DisplayName.optional(),\n endpoint: z.url().nullable().optional(),\n metadata: Metadata.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateNodeRequest\" });\nexport type UpdateNodeRequest = z.infer<typeof UpdateNodeRequest>;\n","import { z } from \"zod\";\nimport { DisplayName, EntityAudit, Metadata, Slug } from \"./common.ts\";\nimport { NodeId, OrganizationId, PrincipalId } from \"./ids.ts\";\n\nexport const Organization = z\n .object({\n id: OrganizationId,\n nodeId: NodeId,\n name: DisplayName,\n slug: Slug,\n metadata: Metadata,\n ...EntityAudit,\n })\n .meta({ id: \"Organization\", description: \"A logical boundary on a node that owns policies, identities and agents.\" });\nexport type Organization = z.infer<typeof Organization>;\n\nexport const CreateOrganizationRequest = z\n .object({\n name: DisplayName,\n /** Derived from `name` when omitted. */\n slug: Slug.optional(),\n metadata: Metadata.optional(),\n /** Principal to make the first org owner; defaults to the caller. */\n ownerPrincipalId: PrincipalId.optional(),\n })\n .meta({ id: \"CreateOrganizationRequest\" });\nexport type CreateOrganizationRequest = z.infer<typeof CreateOrganizationRequest>;\n\nexport const UpdateOrganizationRequest = z\n .object({\n name: DisplayName.optional(),\n metadata: Metadata.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateOrganizationRequest\" });\nexport type UpdateOrganizationRequest = z.infer<typeof UpdateOrganizationRequest>;\n","import { z } from \"zod\";\nimport { CapabilityName } from \"./capability.ts\";\nimport { Metadata, Timestamp, Version } from \"./common.ts\";\nimport { AgentId, NodeId, OrganizationId, TaskId } from \"./ids.ts\";\n\n/**\n * A capability request between agents (ADR-0020, deck slides 06/07). Created by the requester's node; every later\n * change is written by the assignee's node only.\n */\nexport const TaskStatus = z.enum([\"requested\", \"accepted\", \"completed\", \"failed\"]);\nexport type TaskStatus = z.infer<typeof TaskStatus>;\n\nexport const TERMINAL_TASK_STATUSES: readonly TaskStatus[] = [\"completed\", \"failed\"];\n\n/** An agent taking part in a task, with where it lives. */\nexport const TaskParty = z.object({ agentId: AgentId, organizationId: OrganizationId, nodeId: NodeId });\nexport type TaskParty = z.infer<typeof TaskParty>;\n\n/** The organization a task was routed to, through its Mesh Agent. */\nexport const TaskAssignee = z.object({ organizationId: OrganizationId, nodeId: NodeId, meshAgentId: AgentId });\nexport type TaskAssignee = z.infer<typeof TaskAssignee>;\n\n/** One stage of the observe → reason → act → verify pipeline (deck slide 05). */\nexport const TaskStep = z.object({\n name: z.enum([\"observe\", \"reason\", \"act\", \"verify\"]),\n at: Timestamp,\n summary: z.string().max(1000),\n});\nexport type TaskStep = z.infer<typeof TaskStep>;\n\nexport const TaskError = z.object({ code: z.string().max(64), message: z.string().max(1000) });\nexport type TaskError = z.infer<typeof TaskError>;\n\nexport const Task = z\n .object({\n id: TaskId,\n capability: CapabilityName,\n input: Metadata,\n status: TaskStatus,\n requester: TaskParty,\n /** The requester organization's Mesh Agent, the first hop of the route. */\n requesterMeshAgentId: AgentId,\n assignee: TaskAssignee,\n /** The agent that does the work, chosen by the assignee's Mesh Agent on acceptance. */\n provider: TaskParty.nullable(),\n output: Metadata.nullable(),\n error: TaskError.nullable(),\n steps: z.array(TaskStep).max(32),\n /** Model that produced the result; null when a rule-based model did. */\n model: z.string().max(100).nullable(),\n version: Version,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n })\n .meta({\n id: \"Task\",\n description: \"A capability request routed through Mesh Agents, with its result and provenance (ADR-0020).\",\n });\nexport type Task = z.infer<typeof Task>;\n\nexport const RequestTaskRequest = z\n .object({\n capability: CapabilityName,\n input: Metadata.default({}),\n })\n .meta({ id: \"RequestTaskRequest\" });\nexport type RequestTaskRequest = z.infer<typeof RequestTaskRequest>;\nexport type RequestTaskRequestInput = z.input<typeof RequestTaskRequest>;\n\n/** An agent offering a capability, as listed by the capability directory. */\nexport const CapabilityProvider = z\n .object({\n agentId: AgentId,\n agentName: z.string(),\n organizationId: OrganizationId,\n organizationName: z.string(),\n nodeId: NodeId,\n /** Running, on a node that is not offline — i.e. a task could be routed to it now. */\n available: z.boolean(),\n })\n .meta({ id: \"CapabilityProvider\" });\nexport type CapabilityProvider = z.infer<typeof CapabilityProvider>;\n","import { z } from \"zod\";\nimport { Agent, AgentStatus } from \"./agent.ts\";\nimport { RoleBinding } from \"./auth.ts\";\nimport { Timestamp, Version } from \"./common.ts\";\nimport {\n AgentId,\n CommandId,\n EventId,\n LinkId,\n NodeId,\n OrganizationId,\n PrincipalId,\n RoleBindingId,\n TaskId,\n} from \"./ids.ts\";\nimport { Link } from \"./link.ts\";\nimport { Node, NodeStatus } from \"./node.ts\";\nimport { Organization } from \"./organization.ts\";\nimport { Task } from \"./task.ts\";\n\n/**\n * Event catalog (ROADMAP §2.4). Every state change in the mesh is one of these events.\n *\n * A *domain event* is what the domain produces: `type`, `subject` and `payload`.\n * A *mesh event* wraps it in the envelope (id, seq, origin, causation, timestamp, signature)\n * when it is committed, replicated and pushed to clients.\n */\n\nconst subject = <K extends string, S extends z.ZodType<string>>(kind: K, id: S) =>\n z.object({ kind: z.literal(kind), id, version: Version });\n\nconst NodeSubject = subject(\"node\", NodeId);\nconst OrganizationSubject = subject(\"organization\", OrganizationId);\nconst AgentSubject = subject(\"agent\", AgentId);\nconst LinkSubject = subject(\"link\", LinkId);\nconst RoleBindingSubject = subject(\"roleBinding\", RoleBindingId);\nconst TaskSubject = subject(\"task\", TaskId);\n\nconst event = <T extends string, S extends z.ZodType, P extends z.ZodType>(type: T, subjectSchema: S, payload: P) =>\n z.object({ type: z.literal(type), subject: subjectSchema, payload });\n\nconst AgentRegistration = z.object({\n meshAgentId: AgentId,\n agentId: AgentId,\n organizationId: OrganizationId,\n nodeId: NodeId,\n});\n\nexport const NodeCreated = event(\"node.created\", NodeSubject, z.object({ node: Node }));\nexport const NodeUpdated = event(\"node.updated\", NodeSubject, z.object({ node: Node }));\nexport const NodeRemoved = event(\"node.removed\", NodeSubject, z.object({ nodeId: NodeId }));\n/** Derived locally by each node's presence detector; does not bump the owned entity version. */\nexport const NodeStatusChanged = event(\n \"node.status_changed\",\n NodeSubject,\n z.object({ nodeId: NodeId, status: NodeStatus, previousStatus: NodeStatus, lastSeenAt: Timestamp.nullable() }),\n);\n/** Mesh-only liveness signal; aggregated into `lastSeenAt`, never forwarded to UI clients. */\nexport const NodeHeartbeat = event(\"node.heartbeat\", NodeSubject, z.object({ nodeId: NodeId, at: Timestamp }));\n\nexport const OrganizationCreated = event(\n \"organization.created\",\n OrganizationSubject,\n z.object({ organization: Organization }),\n);\nexport const OrganizationUpdated = event(\n \"organization.updated\",\n OrganizationSubject,\n z.object({ organization: Organization }),\n);\nexport const OrganizationRemoved = event(\n \"organization.removed\",\n OrganizationSubject,\n z.object({ organizationId: OrganizationId, nodeId: NodeId }),\n);\n\nexport const AgentCreated = event(\"agent.created\", AgentSubject, z.object({ agent: Agent }));\nexport const AgentUpdated = event(\"agent.updated\", AgentSubject, z.object({ agent: Agent }));\nexport const AgentStatusChanged = event(\n \"agent.status_changed\",\n AgentSubject,\n z.object({ agent: Agent, previousStatus: AgentStatus }),\n);\nexport const AgentRemoved = event(\n \"agent.removed\",\n AgentSubject,\n z.object({ agentId: AgentId, organizationId: OrganizationId, nodeId: NodeId }),\n);\n\nexport const MeshAgentAgentRegistered = event(\"mesh_agent.agent_registered\", AgentSubject, AgentRegistration);\nexport const MeshAgentAgentDeregistered = event(\"mesh_agent.agent_deregistered\", AgentSubject, AgentRegistration);\n\nexport const LinkRequested = event(\"link.requested\", LinkSubject, z.object({ link: Link }));\nexport const LinkUp = event(\"link.up\", LinkSubject, z.object({ link: Link }));\nexport const LinkUpdated = event(\"link.updated\", LinkSubject, z.object({ link: Link }));\nexport const LinkDown = event(\"link.down\", LinkSubject, z.object({ link: Link }));\nexport const LinkRemoved = event(\"link.removed\", LinkSubject, z.object({ linkId: LinkId }));\n\nexport const RoleGranted = event(\"role.granted\", RoleBindingSubject, z.object({ binding: RoleBinding }));\nexport const RoleRevoked = event(\"role.revoked\", RoleBindingSubject, z.object({ binding: RoleBinding }));\n\n/** Committed by the requester's node; the task's later events come from the assignee's node only (ADR-0020). */\nexport const TaskRequested = event(\"task.requested\", TaskSubject, z.object({ task: Task }));\nexport const TaskAccepted = event(\"task.accepted\", TaskSubject, z.object({ task: Task }));\nexport const TaskCompleted = event(\"task.completed\", TaskSubject, z.object({ task: Task }));\nexport const TaskFailed = event(\"task.failed\", TaskSubject, z.object({ task: Task }));\n\nexport const DomainEvent = z\n .discriminatedUnion(\"type\", [\n NodeCreated,\n NodeUpdated,\n NodeRemoved,\n NodeStatusChanged,\n NodeHeartbeat,\n OrganizationCreated,\n OrganizationUpdated,\n OrganizationRemoved,\n AgentCreated,\n AgentUpdated,\n AgentStatusChanged,\n AgentRemoved,\n MeshAgentAgentRegistered,\n MeshAgentAgentDeregistered,\n LinkRequested,\n LinkUp,\n LinkUpdated,\n LinkDown,\n LinkRemoved,\n RoleGranted,\n RoleRevoked,\n TaskRequested,\n TaskAccepted,\n TaskCompleted,\n TaskFailed,\n ])\n .meta({ id: \"DomainEvent\" });\nexport type DomainEvent = z.infer<typeof DomainEvent>;\nexport type DomainEventType = DomainEvent[\"type\"];\nexport type DomainEventOf<T extends DomainEventType> = Extract<DomainEvent, { type: T }>;\n\nexport const DOMAIN_EVENT_TYPES = DomainEvent.options.map((o) => o.shape.type.value) as readonly DomainEventType[];\n\n/** Envelope schema version (ADR-0009). */\nexport const ENVELOPE_VERSION = 1 as const;\n\nexport const EnvelopeMeta = z.object({\n v: z.literal(ENVELOPE_VERSION),\n id: EventId,\n /** Monotonic per origin node; `(origin.nodeId, seq)` is the replication cursor. */\n seq: z.int().min(1),\n origin: z.object({ nodeId: NodeId, principalId: PrincipalId.nullable() }),\n /** Groups the events produced by one command, e.g. a cascade (ADR-0005). */\n causationId: CommandId,\n timestamp: Timestamp,\n /** Ed25519 signature over the canonical encoding; attached by the protocol layer (Phase 5). */\n sig: z.string().nullable(),\n});\nexport type EnvelopeMeta = z.infer<typeof EnvelopeMeta>;\n\nexport const MeshEvent = z.intersection(EnvelopeMeta, DomainEvent).meta({ id: \"MeshEvent\" });\nexport type MeshEvent = z.infer<typeof MeshEvent>;\n","import { z } from \"zod\";\nimport { NodeId } from \"./ids.ts\";\n\nexport const HealthResponse = z\n .object({\n status: z.enum([\"ok\", \"degraded\"]),\n service: z.literal(\"node-server\"),\n /** The node this server runs as — clients use it to know where their writes are accepted (ADR-0004). */\n nodeId: NodeId,\n version: z.string(),\n uptimeSeconds: z.number().nonnegative(),\n timestamp: z.iso.datetime(),\n })\n .meta({ id: \"HealthResponse\", description: \"Liveness and version information for a Node Server.\" });\n\nexport type HealthResponse = z.infer<typeof HealthResponse>;\n","import { z } from \"zod\";\nimport { Principal, PrincipalKind, RoleBinding } from \"./auth.ts\";\nimport { DisplayName, Timestamp } from \"./common.ts\";\n\n/** Who the caller is and which ownership roles they hold — drives the Monitor's controls (ADR-0010). */\nexport const Me = z\n .object({ principal: Principal, roles: z.array(RoleBinding) })\n .meta({ id: \"Me\", description: \"The authenticated principal and its role bindings.\" });\nexport type Me = z.infer<typeof Me>;\n\nexport const CreatePrincipalRequest = z\n .object({ name: DisplayName, kind: PrincipalKind.default(\"user\") })\n .meta({ id: \"CreatePrincipalRequest\" });\nexport type CreatePrincipalRequest = z.infer<typeof CreatePrincipalRequest>;\n\n/** Shown exactly once. Users get a bearer token; services get a long-lived API key. */\nexport const Credential = z\n .discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"token\"), token: z.string(), expiresAt: Timestamp }),\n z.object({ type: z.literal(\"apiKey\"), apiKey: z.string() }),\n ])\n .meta({ id: \"Credential\" });\nexport type Credential = z.infer<typeof Credential>;\n\nexport const CreatePrincipalResponse = z\n .object({ principal: Principal, credential: Credential })\n .meta({ id: \"CreatePrincipalResponse\" });\nexport type CreatePrincipalResponse = z.infer<typeof CreatePrincipalResponse>;\n","import { z } from \"zod\";\nimport { Agent } from \"./agent.ts\";\nimport { Capability } from \"./capability.ts\";\nimport { NodeId } from \"./ids.ts\";\nimport { Link } from \"./link.ts\";\nimport { Node } from \"./node.ts\";\nimport { Organization } from \"./organization.ts\";\nimport { Task } from \"./task.ts\";\n\n/** Per-origin-node sequence reached by a replica: `{ [nodeId]: seq }`. */\nexport const MeshCursor = z.record(NodeId, z.int().min(0)).meta({ id: \"MeshCursor\" });\nexport type MeshCursor = z.infer<typeof MeshCursor>;\n\nexport const MeshSnapshot = z\n .object({\n nodes: z.array(Node),\n organizations: z.array(Organization),\n agents: z.array(Agent),\n links: z.array(Link),\n /** The most recent tasks, newest first (ADR-0020). */\n tasks: z.array(Task),\n cursor: MeshCursor,\n })\n .meta({ id: \"MeshSnapshot\", description: \"Full mesh state plus the cursor to resume the event stream from.\" });\nexport type MeshSnapshot = z.infer<typeof MeshSnapshot>;\n\nexport const MeshStats = z\n .object({\n nodes: z.int().min(0),\n online: z.int().min(0),\n degraded: z.int().min(0),\n offline: z.int().min(0),\n organizations: z.int().min(0),\n agents: z.int().min(0),\n })\n .meta({ id: \"MeshStats\", description: \"Counters shown in the Monitor's mesh summary.\" });\nexport type MeshStats = z.infer<typeof MeshStats>;\n\nexport const NodeDetail = z\n .object({\n node: Node,\n organizations: z.array(Organization),\n agents: z.array(Agent),\n /** Distinct capabilities offered by the node's agents. */\n capabilities: z.array(Capability),\n })\n .meta({ id: \"NodeDetail\", description: \"Everything the Monitor's node detail panel shows (ui.md).\" });\nexport type NodeDetail = z.infer<typeof NodeDetail>;\n\n/** Encodes a cursor for URLs (`?cursor=`): base64url of its JSON. */\nexport function encodeCursor(cursor: MeshCursor): string {\n const bytes = new TextEncoder().encode(JSON.stringify(cursor));\n return btoa(String.fromCharCode(...bytes))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n/** Decodes a cursor produced by `encodeCursor`. Throws on malformed input. */\nexport function decodeCursor(encoded: string): MeshCursor {\n const base64 = encoded.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const bytes = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n return MeshCursor.parse(JSON.parse(new TextDecoder().decode(bytes)));\n}\n","import type { Agent } from \"./agent.ts\";\nimport type { RoleBinding } from \"./auth.ts\";\nimport type { DomainEvent } from \"./events.ts\";\nimport type { Link } from \"./link.ts\";\nimport type { Node, NodeStatus } from \"./node.ts\";\nimport type { Organization } from \"./organization.ts\";\nimport type { Task } from \"./task.ts\";\n\n/**\n * Translates an event into the state change it implies. The node server's persistence applies these operations\n * atomically with the event append, replication (Phase 5) applies them for remote events, and clients (the SDK's\n * mesh mirror, the Monitor) apply them to their local copy — so nobody can disagree about what an event means.\n */\nexport type ProjectionOp =\n | { readonly op: \"upsert\"; readonly kind: \"node\"; readonly entity: Node }\n | { readonly op: \"upsert\"; readonly kind: \"organization\"; readonly entity: Organization }\n | { readonly op: \"upsert\"; readonly kind: \"agent\"; readonly entity: Agent }\n | { readonly op: \"upsert\"; readonly kind: \"link\"; readonly entity: Link }\n | { readonly op: \"upsert\"; readonly kind: \"roleBinding\"; readonly entity: RoleBinding }\n /** Tasks have two writers in turn (ADR-0020), so replicas apply only newer versions. */\n | { readonly op: \"upsert\"; readonly kind: \"task\"; readonly entity: Task }\n | {\n readonly op: \"delete\";\n readonly kind: \"node\" | \"organization\" | \"agent\" | \"link\" | \"roleBinding\";\n readonly id: string;\n }\n | {\n readonly op: \"presence\";\n readonly nodeId: string;\n readonly status: NodeStatus;\n readonly lastSeenAt: string | null;\n }\n | { readonly op: \"none\" };\n\nexport function project(event: DomainEvent): ProjectionOp {\n switch (event.type) {\n case \"node.created\":\n case \"node.updated\":\n return { op: \"upsert\", kind: \"node\", entity: event.payload.node };\n case \"node.removed\":\n return { op: \"delete\", kind: \"node\", id: event.payload.nodeId };\n case \"node.status_changed\":\n return {\n op: \"presence\",\n nodeId: event.payload.nodeId,\n status: event.payload.status,\n lastSeenAt: event.payload.lastSeenAt,\n };\n case \"organization.created\":\n case \"organization.updated\":\n return { op: \"upsert\", kind: \"organization\", entity: event.payload.organization };\n case \"organization.removed\":\n return { op: \"delete\", kind: \"organization\", id: event.payload.organizationId };\n case \"agent.created\":\n case \"agent.updated\":\n case \"agent.status_changed\":\n return { op: \"upsert\", kind: \"agent\", entity: event.payload.agent };\n case \"agent.removed\":\n return { op: \"delete\", kind: \"agent\", id: event.payload.agentId };\n case \"link.requested\":\n case \"link.up\":\n case \"link.updated\":\n case \"link.down\":\n return { op: \"upsert\", kind: \"link\", entity: event.payload.link };\n case \"link.removed\":\n return { op: \"delete\", kind: \"link\", id: event.payload.linkId };\n case \"role.granted\":\n return { op: \"upsert\", kind: \"roleBinding\", entity: event.payload.binding };\n case \"role.revoked\":\n return { op: \"delete\", kind: \"roleBinding\", id: event.payload.binding.id };\n case \"task.requested\":\n case \"task.accepted\":\n case \"task.completed\":\n case \"task.failed\":\n return { op: \"upsert\", kind: \"task\", entity: event.payload.task };\n // Registration is implied by organization membership; heartbeats are handled by the presence detector.\n case \"mesh_agent.agent_registered\":\n case \"mesh_agent.agent_deregistered\":\n case \"node.heartbeat\":\n return { op: \"none\" };\n }\n}\n","import type { Agent } from \"./agent.ts\";\nimport type { MeshEvent } from \"./events.ts\";\nimport type { Link } from \"./link.ts\";\nimport type { MeshCursor, MeshSnapshot } from \"./mesh.ts\";\nimport type { Node } from \"./node.ts\";\nimport type { Organization } from \"./organization.ts\";\nimport { project } from \"./projection.ts\";\nimport type { Task } from \"./task.ts\";\n\n/** A client-side mirror of the mesh, kept current by applying events to a snapshot. */\nexport interface MeshState {\n readonly nodes: Readonly<Record<string, Node>>;\n readonly organizations: Readonly<Record<string, Organization>>;\n readonly agents: Readonly<Record<string, Agent>>;\n readonly links: Readonly<Record<string, Link>>;\n readonly tasks: Readonly<Record<string, Task>>;\n readonly cursor: MeshCursor;\n}\n\nconst byId = <T extends { id: string }>(items: readonly T[]): Record<string, T> =>\n Object.fromEntries(items.map((item) => [item.id, item]));\n\nexport function meshStateFromSnapshot(snapshot: MeshSnapshot): MeshState {\n return {\n nodes: byId(snapshot.nodes),\n organizations: byId(snapshot.organizations),\n agents: byId(snapshot.agents),\n links: byId(snapshot.links),\n // Nodes from before Phase 6 send no tasks; tolerate them during rolling upgrades.\n tasks: byId(snapshot.tasks ?? []),\n cursor: { ...snapshot.cursor },\n };\n}\n\n/**\n * Applies one event immutably. Events at or below the cursor for their origin are ignored, so replays\n * and duplicates are harmless. Role bindings are not mirrored (they are not part of the snapshot).\n */\nexport function applyMeshEvent(state: MeshState, event: MeshEvent): MeshState {\n const seen = state.cursor[event.origin.nodeId] ?? 0;\n if (event.seq <= seen) return state;\n const cursor = { ...state.cursor, [event.origin.nodeId]: event.seq };\n const op = project(event);\n\n switch (op.op) {\n case \"upsert\":\n switch (op.kind) {\n case \"node\":\n return { ...state, cursor, nodes: { ...state.nodes, [op.entity.id]: op.entity } };\n case \"organization\":\n return { ...state, cursor, organizations: { ...state.organizations, [op.entity.id]: op.entity } };\n case \"agent\":\n return { ...state, cursor, agents: { ...state.agents, [op.entity.id]: op.entity } };\n case \"link\":\n return { ...state, cursor, links: { ...state.links, [op.entity.id]: op.entity } };\n case \"roleBinding\":\n return { ...state, cursor };\n case \"task\": {\n // Two writers in turn (ADR-0020): an older version arriving late must not win.\n const current = state.tasks[op.entity.id];\n if (current && current.version >= op.entity.version) return { ...state, cursor };\n return { ...state, cursor, tasks: { ...state.tasks, [op.entity.id]: op.entity } };\n }\n }\n break;\n case \"delete\": {\n if (op.kind === \"roleBinding\") return { ...state, cursor };\n const table = { node: \"nodes\", organization: \"organizations\", agent: \"agents\", link: \"links\" } as const;\n const key = table[op.kind];\n const { [op.id]: _removed, ...rest } = state[key];\n return { ...state, cursor, [key]: rest };\n }\n case \"presence\": {\n const node = state.nodes[op.nodeId];\n if (!node) return { ...state, cursor };\n return {\n ...state,\n cursor,\n nodes: { ...state.nodes, [node.id]: { ...node, status: op.status, lastSeenAt: op.lastSeenAt } },\n };\n }\n case \"none\":\n return { ...state, cursor };\n }\n}\n","import { z } from \"zod\";\n\n/** Cursor pagination query (ROADMAP §2.6). `cursor` is opaque to clients. */\nexport const PageQuery = z.object({\n limit: z.coerce.number().int().min(1).max(200).default(50),\n cursor: z.string().min(1).optional(),\n});\nexport type PageQuery = z.infer<typeof PageQuery>;\n\n/** A page of results; `nextCursor` is null on the last page. */\nexport const Page = <T extends z.ZodType>(item: T, id: string) =>\n z.object({ items: z.array(item), nextCursor: z.string().nullable() }).meta({ id });\n\nexport interface PageOf<T> {\n readonly items: T[];\n readonly nextCursor: string | null;\n}\n","import { z } from \"zod\";\n\n/** RFC 9457 problem details — every API error uses this shape. */\nexport const ProblemDetails = z\n .object({\n type: z.string().meta({ example: \"/problems/forbidden\" }),\n title: z.string(),\n status: z.int().min(400).max(599),\n detail: z.string().optional(),\n instance: z.string().optional(),\n code: z.string().meta({ description: \"Stable machine-readable error code\" }),\n errors: z.array(z.object({ path: z.string(), message: z.string() })).optional(),\n })\n .meta({ id: \"ProblemDetails\" });\nexport type ProblemDetails = z.infer<typeof ProblemDetails>;\n","import { z } from \"zod\";\nimport { MeshEvent } from \"./events.ts\";\nimport { PrincipalId } from \"./ids.ts\";\nimport { MeshCursor } from \"./mesh.ts\";\n\n/**\n * Realtime protocol over `WS /v1/realtime` (ADR-0014). JSON text frames.\n *\n * client → hello { token, cursor?, topics? } first frame, within 5 s\n * server → event { event }* replay of everything after `cursor`\n * server → welcome { principalId, cursor } replay done; live events follow\n * server → event { event }* live\n * server → resync.required { reason } the client must fetch a fresh snapshot and reconnect\n */\n\n/** Subject kinds a client can subscribe to. Default: everything. */\nexport const Topic = z.enum([\"node\", \"organization\", \"agent\", \"link\", \"roleBinding\", \"task\"]);\nexport type Topic = z.infer<typeof Topic>;\n\nexport const ClientMessage = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"hello\"),\n /** Bearer token or API key — sent in the first frame because browsers cannot set WebSocket headers. */\n token: z.string().min(1),\n /** Resume point, usually the cursor of the snapshot the client just loaded. */\n cursor: MeshCursor.optional(),\n topics: z.array(Topic).optional(),\n }),\n z.object({ type: z.literal(\"subscribe\"), topics: z.array(Topic) }),\n]);\nexport type ClientMessage = z.infer<typeof ClientMessage>;\n\nexport const ServerMessage = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"welcome\"), principalId: PrincipalId, cursor: MeshCursor }),\n z.object({ type: z.literal(\"event\"), event: MeshEvent }),\n z.object({ type: z.literal(\"resync.required\"), reason: z.string() }),\n z.object({ type: z.literal(\"error\"), code: z.string(), message: z.string() }),\n]);\nexport type ServerMessage = z.infer<typeof ServerMessage>;\n\n/** WebSocket close codes used by the node server. */\nexport const RealtimeCloseCode = {\n normal: 1000,\n goingAway: 1001,\n badMessage: 4400,\n unauthenticated: 4401,\n helloTimeout: 4408,\n resyncRequired: 4409,\n} as const;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/capability.ts","../src/common.ts","../src/ids.ts","../src/agent.ts","../src/audit.ts","../src/auth.ts","../src/link.ts","../src/trust.ts","../src/node.ts","../src/policy.ts","../src/organization.ts","../src/task.ts","../src/events.ts","../src/health.ts","../src/identity.ts","../src/mesh.ts","../src/projection.ts","../src/writers.ts","../src/mesh-state.ts","../src/page.ts","../src/problem.ts","../src/realtime.ts"],"names":["z","event"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\n/** Dotted, lowercase capability name, e.g. `vision` or `terrain.analysis` (deck slide 07). */\nexport const CapabilityName = z\n .string()\n .regex(/^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)*$/, \"Dotted lowercase name, e.g. terrain.analysis\")\n .max(100);\nexport type CapabilityName = z.infer<typeof CapabilityName>;\n\nexport const Capability = z\n .object({\n name: CapabilityName,\n version: z.string().max(32).default(\"1.0.0\"),\n description: z.string().max(500).optional(),\n })\n .meta({ id: \"Capability\", description: \"A machine-discoverable description of what an agent can perform.\" });\nexport type Capability = z.infer<typeof Capability>;\n","import { z } from \"zod\";\n\n/** ISO-8601 UTC timestamp with milliseconds, e.g. `2026-09-28T09:28:12.123Z`. */\nexport const Timestamp = z.iso.datetime().meta({ example: \"2026-09-28T09:28:12.123Z\" });\nexport type Timestamp = z.infer<typeof Timestamp>;\n\n/** Monotonic per-entity version used for replication and optimistic concurrency (ADR-0004). */\nexport const Version = z.int().min(1).meta({ description: \"Monotonic per-entity version\" });\nexport type Version = z.infer<typeof Version>;\n\n/** Human-readable display name. */\nexport const DisplayName = z.string().trim().min(1).max(120);\n\n/** URL-safe identifier, unique within its parent (e.g. an organization within a node). */\nexport const Slug = z\n .string()\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, \"Lowercase letters, digits and single hyphens\")\n .max(63);\nexport type Slug = z.infer<typeof Slug>;\n\n/** Free-form, JSON-serialisable metadata. */\nexport const Metadata = z.record(z.string(), z.unknown());\nexport type Metadata = z.infer<typeof Metadata>;\n\n/** Fields every replicated entity carries. */\nexport const EntityAudit = {\n version: Version,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n};\n","import { z } from \"zod\";\n\n/** Prefixes for time-sortable ULID identifiers (ROADMAP §2.3). */\nexport const ID_PREFIX = {\n node: \"node\",\n organization: \"org\",\n agent: \"agt\",\n link: \"lnk\",\n event: \"evt\",\n command: \"cmd\",\n principal: \"prn\",\n roleBinding: \"rol\",\n apiKey: \"key\",\n task: \"tsk\",\n token: \"tok\",\n audit: \"aud\",\n revocation: \"rev\",\n} as const;\n\nexport type IdKind = keyof typeof ID_PREFIX;\n\n/** Crockford base32 ULID body (26 chars, no I, L, O, U). */\nexport const ULID_PATTERN = \"[0-9A-HJKMNP-TV-Z]{26}\";\n\n/** Builds a Zod schema that validates `<prefix>_<ULID>` identifiers. */\nexport const prefixedId = <K extends IdKind>(kind: K) =>\n z\n .string()\n .regex(new RegExp(`^${ID_PREFIX[kind]}_${ULID_PATTERN}$`), `Expected a ${kind} id (${ID_PREFIX[kind]}_<ULID>)`)\n .meta({ description: `${kind} identifier`, example: `${ID_PREFIX[kind]}_01J9Z3K7Q8R5T2V4W6X8Y0A1B2` });\n\nexport const NodeId = prefixedId(\"node\");\nexport const OrganizationId = prefixedId(\"organization\");\nexport const AgentId = prefixedId(\"agent\");\nexport const LinkId = prefixedId(\"link\");\nexport const EventId = prefixedId(\"event\");\nexport const CommandId = prefixedId(\"command\");\nexport const PrincipalId = prefixedId(\"principal\");\nexport const RoleBindingId = prefixedId(\"roleBinding\");\nexport const TaskId = prefixedId(\"task\");\nexport const TokenId = prefixedId(\"token\");\nexport const AuditId = prefixedId(\"audit\");\nexport const RevocationId = prefixedId(\"revocation\");\nexport const ApiKeyId = prefixedId(\"apiKey\");\n\nexport type NodeId = z.infer<typeof NodeId>;\nexport type OrganizationId = z.infer<typeof OrganizationId>;\nexport type AgentId = z.infer<typeof AgentId>;\nexport type LinkId = z.infer<typeof LinkId>;\nexport type EventId = z.infer<typeof EventId>;\nexport type CommandId = z.infer<typeof CommandId>;\nexport type PrincipalId = z.infer<typeof PrincipalId>;\nexport type RoleBindingId = z.infer<typeof RoleBindingId>;\nexport type TaskId = z.infer<typeof TaskId>;\n","import { z } from \"zod\";\nimport { Capability } from \"./capability.ts\";\nimport { DisplayName, EntityAudit, Metadata } from \"./common.ts\";\nimport { AgentId, NodeId, OrganizationId } from \"./ids.ts\";\n\n/** `mesh` marks the organization's Mesh Agent — exactly one per organization (ADR-0003). */\nexport const AgentKind = z.enum([\"standard\", \"mesh\"]);\nexport type AgentKind = z.infer<typeof AgentKind>;\n\nexport const AgentStatus = z.enum([\"created\", \"starting\", \"running\", \"stopped\", \"error\"]);\nexport type AgentStatus = z.infer<typeof AgentStatus>;\n\nconst capabilityList = z\n .array(Capability)\n .max(64)\n .refine((caps) => new Set(caps.map((c) => c.name)).size === caps.length, \"Capability names must be unique\");\n\nexport const Agent = z\n .object({\n id: AgentId,\n organizationId: OrganizationId,\n nodeId: NodeId,\n name: DisplayName,\n kind: AgentKind,\n status: AgentStatus,\n capabilities: capabilityList,\n /** Model backing the agent, e.g. `claude-sonnet-5`; null for rule-based agents. */\n model: z.string().max(100).nullable(),\n metadata: Metadata,\n ...EntityAudit,\n })\n .meta({ id: \"Agent\", description: \"An autonomous software entity with identity, capabilities and policies.\" });\nexport type Agent = z.infer<typeof Agent>;\n\nexport const CreateAgentRequest = z\n .object({\n name: DisplayName,\n capabilities: capabilityList.default([]),\n model: z.string().max(100).nullable().default(null),\n metadata: Metadata.optional(),\n })\n .meta({ id: \"CreateAgentRequest\" });\n/** Parsed request (defaults applied) — what use cases receive. */\nexport type CreateAgentRequest = z.infer<typeof CreateAgentRequest>;\n/** What callers may send — capabilities and model are optional. */\nexport type CreateAgentRequestInput = z.input<typeof CreateAgentRequest>;\n\nexport const UpdateAgentRequest = z\n .object({\n name: DisplayName.optional(),\n capabilities: capabilityList.optional(),\n model: z.string().max(100).nullable().optional(),\n metadata: Metadata.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateAgentRequest\" });\nexport type UpdateAgentRequest = z.infer<typeof UpdateAgentRequest>;\n","import { z } from \"zod\";\nimport { Timestamp } from \"./common.ts\";\nimport { AuditId, PrincipalId } from \"./ids.ts\";\n\n/**\n * The node's audit log (ADR-0024): append-only, hash-chained and signed with the node key. Each entry records a\n * security-relevant decision or event on this node; it is local, never replicated.\n */\nexport const AuditKind = z.enum([\n \"authorization\",\n \"authentication\",\n \"credential\",\n \"principal\",\n \"policy\",\n \"replication\",\n]);\nexport type AuditKind = z.infer<typeof AuditKind>;\n\n/** `allowed` / `denied` for decisions; `done` for changes that simply happened (a token issued). */\nexport const AuditOutcome = z.enum([\"allowed\", \"denied\", \"done\"]);\nexport type AuditOutcome = z.infer<typeof AuditOutcome>;\n\nexport const AuditTarget = z.object({\n nodeId: z.string().optional(),\n organizationId: z.string().optional(),\n /** The entity, credential or event concerned, when there is one. */\n id: z.string().optional(),\n});\nexport type AuditTarget = z.infer<typeof AuditTarget>;\n\nexport const AuditEntry = z\n .object({\n /** 1, 2, 3… with no gaps: a missing number is a removed entry. */\n seq: z.int().min(1),\n id: AuditId,\n at: Timestamp,\n kind: AuditKind,\n /** What was attempted or done, e.g. `agent.create`, `token.issue`, `event.refused`. */\n action: z.string().max(64),\n outcome: AuditOutcome,\n principalId: PrincipalId.nullable(),\n credentialId: z.string().nullable(),\n target: AuditTarget,\n detail: z.string().max(500),\n /** SHA-256 (hex) of the previous entry; 64 zeros for the first. */\n prevHash: z.string().regex(/^[0-9a-f]{64}$/),\n /** SHA-256 (hex) of this entry's canonical JSON without `hash` and `sig`. */\n hash: z.string().regex(/^[0-9a-f]{64}$/),\n /** The node key's Ed25519 signature over `hash`. */\n sig: z.string(),\n /** The node key that signed (keys rotate; ADR-0025). Not part of `hash`; null for entries from before rotation. */\n signer: z.string().nullable(),\n })\n .meta({ id: \"AuditEntry\", description: \"One signed, hash-chained record of the node's audit log.\" });\nexport type AuditEntry = z.infer<typeof AuditEntry>;\n\nexport const AuditVerification = z\n .object({\n valid: z.boolean(),\n entries: z.int().min(0),\n /** The first entry that failed, or null when the whole chain holds. */\n brokenAt: z.int().nullable(),\n reason: z.string().nullable(),\n /** The node's current key; entries may also be signed by its earlier keys. */\n publicKey: z.string(),\n })\n .meta({ id: \"AuditVerification\" });\nexport type AuditVerification = z.infer<typeof AuditVerification>;\n\nexport const GENESIS_HASH = \"0\".repeat(64);\n","import { z } from \"zod\";\nimport { DisplayName, Timestamp } from \"./common.ts\";\nimport { NodeId, OrganizationId, PrincipalId, RoleBindingId } from \"./ids.ts\";\n\nexport const PrincipalKind = z.enum([\"user\", \"service\"]);\nexport type PrincipalKind = z.infer<typeof PrincipalKind>;\n\nexport const Principal = z\n .object({\n id: PrincipalId,\n kind: PrincipalKind,\n name: DisplayName,\n publicKey: z.string().nullable(),\n createdAt: Timestamp,\n })\n .meta({ id: \"Principal\", description: \"A user or service that can be authenticated and granted roles.\" });\nexport type Principal = z.infer<typeof Principal>;\n\n/**\n * Roles (ADR-0010, ADR-0022). Node-scoped: `node_owner` manages the node; `viewer` reads the mesh; `auditor` reads the\n * mesh and the audit log. Organization-scoped: `org_owner` manages the organization; `agent_operator` starts and stops\n * its agents and requests capabilities for them, without creating or removing anything.\n */\nexport const Role = z.enum([\"node_owner\", \"org_owner\", \"viewer\", \"auditor\", \"agent_operator\"]);\nexport type Role = z.infer<typeof Role>;\n\nexport const NODE_ROLES: readonly Role[] = [\"node_owner\", \"viewer\", \"auditor\"];\nexport const ORGANIZATION_ROLES: readonly Role[] = [\"org_owner\", \"agent_operator\"];\n/** Roles whose last holder cannot be removed, so every node and organization stays manageable. */\nexport const OWNER_ROLES: readonly Role[] = [\"node_owner\", \"org_owner\"];\n\n/** What a credential may be used for (ADR-0022). A token can never do more than its principal's roles allow. */\nexport const TokenScope = z.enum([\"read\", \"write\", \"admin\"]);\nexport type TokenScope = z.infer<typeof TokenScope>;\nexport const ALL_SCOPES: readonly TokenScope[] = [\"read\", \"write\", \"admin\"];\n\nexport const RoleScope = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"node\"), nodeId: NodeId }),\n z.object({ type: z.literal(\"organization\"), organizationId: OrganizationId, nodeId: NodeId }),\n]);\nexport type RoleScope = z.infer<typeof RoleScope>;\n\nexport const RoleBinding = z\n .object({\n id: RoleBindingId,\n principalId: PrincipalId,\n role: Role,\n scope: RoleScope,\n createdAt: Timestamp,\n })\n .refine(\n (b) => (NODE_ROLES.includes(b.role) ? b.scope.type === \"node\" : b.scope.type === \"organization\"),\n \"node_owner, viewer and auditor are node-scoped; org_owner and agent_operator organization-scoped\",\n )\n .meta({ id: \"RoleBinding\" });\nexport type RoleBinding = z.infer<typeof RoleBinding>;\n\nexport const GrantOwnerRequest = z.object({ principalId: PrincipalId }).meta({ id: \"GrantOwnerRequest\" });\nexport type GrantOwnerRequest = z.infer<typeof GrantOwnerRequest>;\n\n/** Where a role applies, as callers name it; the server fills in the node of an organization. */\nexport const RoleTarget = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"node\"), nodeId: NodeId }),\n z.object({ type: z.literal(\"organization\"), organizationId: OrganizationId }),\n]);\nexport type RoleTarget = z.infer<typeof RoleTarget>;\n\nexport const GrantRoleRequest = z\n .object({ principalId: PrincipalId, role: Role, target: RoleTarget })\n .meta({ id: \"GrantRoleRequest\" });\nexport type GrantRoleRequest = z.infer<typeof GrantRoleRequest>;\n","import { z } from \"zod\";\nimport { EntityAudit, Timestamp } from \"./common.ts\";\nimport { LinkId, NodeId } from \"./ids.ts\";\n\nexport const TransportKind = z.enum([\"memory\", \"ws-peer\", \"tcp\", \"mqtt\", \"meshtastic\", \"meshcore\"]);\nexport type TransportKind = z.infer<typeof TransportKind>;\n\n/** `requested` = an owner drew the edge in the Monitor and the peer has not accepted yet (ADR-0008). */\nexport const LinkState = z.enum([\"requested\", \"up\", \"down\"]);\nexport type LinkState = z.infer<typeof LinkState>;\n\nexport const LinkQuality = z.object({\n latencyMs: z.number().nonnegative().optional(),\n rssi: z.number().optional(),\n});\nexport type LinkQuality = z.infer<typeof LinkQuality>;\n\nexport const Link = z\n .object({\n id: LinkId,\n aNodeId: NodeId,\n bNodeId: NodeId,\n transport: TransportKind,\n state: LinkState,\n quality: LinkQuality,\n lastSeenAt: Timestamp.nullable(),\n ...EntityAudit,\n })\n .refine((link) => link.aNodeId !== link.bNodeId, \"A link must connect two different nodes\")\n .meta({ id: \"Link\", description: \"Transport-level adjacency between two nodes — the edges of the topology.\" });\nexport type Link = z.infer<typeof Link>;\n\nexport const CreateLinkRequest = z\n .object({ aNodeId: NodeId, bNodeId: NodeId, transport: TransportKind })\n .refine((body) => body.aNodeId !== body.bNodeId, \"A link must connect two different nodes\")\n .meta({ id: \"CreateLinkRequest\" });\nexport type CreateLinkRequest = z.infer<typeof CreateLinkRequest>;\n","import { z } from \"zod\";\nimport { Timestamp } from \"./common.ts\";\nimport { NodeId } from \"./ids.ts\";\n\n/**\n * The mesh's trust hierarchy (ADR-0025, deck slide 09): an offline **mesh root** key certifies node keys, and revokes\n * them. A mesh configured with the root's public key admits and trusts only certified, unrevoked node keys.\n */\nconst Ed25519Key = z.string().startsWith(\"ed25519:\");\n\n/** \"This node id owns this key until `expiresAt`\", signed by the mesh root. */\nexport const NodeCertificate = z\n .object({\n v: z.literal(1),\n nodeId: NodeId,\n publicKey: Ed25519Key,\n issuedAt: Timestamp,\n expiresAt: Timestamp,\n /** The mesh root's public key. */\n rootKey: Ed25519Key,\n /** The root's signature over the canonical JSON of every other field. */\n sig: z.string(),\n })\n .meta({ id: \"NodeCertificate\", description: \"A node key certified by the mesh root (ADR-0025).\" });\nexport type NodeCertificate = z.infer<typeof NodeCertificate>;\n\n/** \"Stop trusting this key\", signed by the mesh root. */\nexport const KeyRevocation = z\n .object({\n v: z.literal(1),\n publicKey: Ed25519Key,\n nodeId: NodeId,\n revokedAt: Timestamp,\n reason: z.string().max(500),\n rootKey: Ed25519Key,\n sig: z.string(),\n })\n .meta({ id: \"KeyRevocation\", description: \"A node key revoked by the mesh root (ADR-0025).\" });\nexport type KeyRevocation = z.infer<typeof KeyRevocation>;\n","import { z } from \"zod\";\nimport { DisplayName, EntityAudit, Metadata, Timestamp } from \"./common.ts\";\nimport { NodeId } from \"./ids.ts\";\nimport { NodeCertificate } from \"./trust.ts\";\n\nexport const NodeStatus = z.enum([\"online\", \"degraded\", \"offline\"]);\nexport type NodeStatus = z.infer<typeof NodeStatus>;\n\nexport const Node = z\n .object({\n id: NodeId,\n name: DisplayName,\n publicKey: z.string().min(1),\n /** Base URL where other nodes and clients reach this node, e.g. `https://node-a.example:7700` (ADR-0017). */\n endpoint: z.url().nullable(),\n status: NodeStatus,\n metadata: Metadata,\n lastSeenAt: Timestamp.nullable(),\n /** The mesh root's certificate for `publicKey`, in a rooted mesh (ADR-0025). */\n certificate: NodeCertificate.nullable().default(null),\n ...EntityAudit,\n })\n .meta({ id: \"Node\", description: \"A physical or virtual endpoint connected to the mesh.\" });\nexport type Node = z.infer<typeof Node>;\n\nexport const UpdateNodeRequest = z\n .object({\n name: DisplayName.optional(),\n endpoint: z.url().nullable().optional(),\n metadata: Metadata.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateNodeRequest\" });\nexport type UpdateNodeRequest = z.infer<typeof UpdateNodeRequest>;\n","import { z } from \"zod\";\nimport { AgentId, NodeId, OrganizationId } from \"./ids.ts\";\n\n/**\n * Organization policies (ADR-0023): declarative rules on who may ask the organization for which capabilities\n * (`inbound`), whom its agents may ask (`outbound`), and which tools its agents may use (`tools`). A policy is part of\n * its organization, so it replicates with it and every node evaluates it the same way.\n *\n * Evaluation: among the rules that match, a `deny` wins over an `allow`; with no matching rule the section's default\n * applies. Patterns are an exact name, a dotted prefix ending in `.*` (`terrain.*` matches `terrain.analysis`), or `*`.\n */\nexport const Effect = z.enum([\"allow\", \"deny\"]);\nexport type Effect = z.infer<typeof Effect>;\n\nexport const NamePattern = z\n .string()\n .regex(/^(\\*|[a-z][a-z0-9_-]*(?:\\.[a-z][a-z0-9_-]*)*(?:\\.\\*)?)$/i, \"An exact name, `prefix.*` or `*`\")\n .max(100);\nexport type NamePattern = z.infer<typeof NamePattern>;\n\n/** A capability rule. `organizationId` / `nodeId` name the other side: the requester (inbound) or provider (outbound). */\nexport const CapabilityRule = z.object({\n effect: Effect,\n capability: NamePattern,\n organizationId: OrganizationId.optional(),\n nodeId: NodeId.optional(),\n});\nexport type CapabilityRule = z.infer<typeof CapabilityRule>;\n\nexport const ToolRule = z.object({ effect: Effect, tool: NamePattern, agentId: AgentId.optional() });\nexport type ToolRule = z.infer<typeof ToolRule>;\n\nconst section = <R extends z.ZodType>(rule: R) =>\n z.object({ default: Effect.default(\"allow\"), rules: z.array(rule).max(100).default([]) });\n\nexport const OrganizationPolicy = z\n .object({\n inbound: section(CapabilityRule).default({ default: \"allow\", rules: [] }),\n outbound: section(CapabilityRule).default({ default: \"allow\", rules: [] }),\n tools: section(ToolRule).default({ default: \"allow\", rules: [] }),\n })\n .meta({\n id: \"OrganizationPolicy\",\n description: \"Who may request which capabilities, whom its agents may ask, and which tools they may use.\",\n });\nexport type OrganizationPolicy = z.infer<typeof OrganizationPolicy>;\n\n/** Allows everything: the policy of every organization until its owners set one. */\nexport const OPEN_POLICY: OrganizationPolicy = {\n inbound: { default: \"allow\", rules: [] },\n outbound: { default: \"allow\", rules: [] },\n tools: { default: \"allow\", rules: [] },\n};\n\nexport function matchesPattern(pattern: string, name: string): boolean {\n if (pattern === \"*\") return true;\n if (pattern.endsWith(\".*\")) return name.startsWith(pattern.slice(0, -1));\n return pattern === name;\n}\n\nexport interface PolicyDecision {\n readonly allowed: boolean;\n /** The rule that decided, or undefined when the section's default did. */\n readonly rule: CapabilityRule | ToolRule | undefined;\n}\n\nfunction decide<R extends CapabilityRule | ToolRule>(\n policySection: { default: Effect; rules: readonly R[] },\n matches: (rule: R) => boolean,\n): PolicyDecision {\n const matching = policySection.rules.filter(matches);\n const deny = matching.find((r) => r.effect === \"deny\");\n if (deny) return { allowed: false, rule: deny };\n const allow = matching.find((r) => r.effect === \"allow\");\n if (allow) return { allowed: true, rule: allow };\n return { allowed: policySection.default === \"allow\", rule: undefined };\n}\n\nconst party = (rule: CapabilityRule, other: { organizationId: string; nodeId: string }) =>\n (rule.organizationId === undefined || rule.organizationId === other.organizationId) &&\n (rule.nodeId === undefined || rule.nodeId === other.nodeId);\n\n/** Minimal organization shape the evaluators need (a contracts `Organization` satisfies it). */\nexport interface PolicyHolder {\n readonly id: string;\n readonly nodeId: string;\n readonly policy: OrganizationPolicy;\n}\n\n/**\n * May `requester`'s agents ask `provider` for `capability`? Both sides must agree: the requester's outbound policy and\n * the provider's inbound policy. Within one organization, policy never applies (internal collaboration).\n */\nexport function mayRequest(requester: PolicyHolder, provider: PolicyHolder, capability: string): PolicyDecision {\n if (requester.id === provider.id) return { allowed: true, rule: undefined };\n const outbound = decide(\n requester.policy.outbound,\n (r) =>\n matchesPattern(r.capability, capability) && party(r, { organizationId: provider.id, nodeId: provider.nodeId }),\n );\n if (!outbound.allowed) return outbound;\n return decide(\n provider.policy.inbound,\n (r) =>\n matchesPattern(r.capability, capability) && party(r, { organizationId: requester.id, nodeId: requester.nodeId }),\n );\n}\n\n/**\n * The provider's side alone: does its inbound policy let `requester` ask for `capability`? The assignee's node checks\n * this again on acceptance — it has the final say over its own organization (ADR-0023).\n */\nexport function inboundAllows(\n provider: PolicyHolder,\n requester: { readonly organizationId: string; readonly nodeId: string },\n capability: string,\n): PolicyDecision {\n if (requester.organizationId === provider.id) return { allowed: true, rule: undefined };\n return decide(provider.policy.inbound, (r) => matchesPattern(r.capability, capability) && party(r, requester));\n}\n\n/** May this agent of the organization use the tool? */\nexport function mayUseTool(organization: PolicyHolder, agentId: string, tool: string): PolicyDecision {\n return decide(\n organization.policy.tools,\n (r) => matchesPattern(r.tool, tool) && (r.agentId === undefined || r.agentId === agentId),\n );\n}\n","import { z } from \"zod\";\nimport { DisplayName, EntityAudit, Metadata, Slug } from \"./common.ts\";\nimport { NodeId, OrganizationId, PrincipalId } from \"./ids.ts\";\nimport { OPEN_POLICY, OrganizationPolicy } from \"./policy.ts\";\n\nexport const Organization = z\n .object({\n id: OrganizationId,\n nodeId: NodeId,\n name: DisplayName,\n slug: Slug,\n metadata: Metadata,\n /** Capability and tool policy (ADR-0023). Organizations from before it have the open policy. */\n policy: OrganizationPolicy.default(OPEN_POLICY),\n ...EntityAudit,\n })\n .meta({ id: \"Organization\", description: \"A logical boundary on a node that owns policies, identities and agents.\" });\nexport type Organization = z.infer<typeof Organization>;\n\nexport const CreateOrganizationRequest = z\n .object({\n name: DisplayName,\n /** Derived from `name` when omitted. */\n slug: Slug.optional(),\n metadata: Metadata.optional(),\n /** Principal to make the first org owner; defaults to the caller. */\n ownerPrincipalId: PrincipalId.optional(),\n })\n .meta({ id: \"CreateOrganizationRequest\" });\nexport type CreateOrganizationRequest = z.infer<typeof CreateOrganizationRequest>;\n\nexport const UpdateOrganizationRequest = z\n .object({\n name: DisplayName.optional(),\n metadata: Metadata.optional(),\n policy: OrganizationPolicy.optional(),\n })\n .refine((body) => Object.keys(body).length > 0, \"At least one field must be provided\")\n .meta({ id: \"UpdateOrganizationRequest\" });\nexport type UpdateOrganizationRequest = z.infer<typeof UpdateOrganizationRequest>;\n","import { z } from \"zod\";\nimport { CapabilityName } from \"./capability.ts\";\nimport { Metadata, Timestamp, Version } from \"./common.ts\";\nimport { AgentId, NodeId, OrganizationId, TaskId } from \"./ids.ts\";\n\n/**\n * A capability request between agents (ADR-0020, deck slides 06/07). Created by the requester's node; every later\n * change is written by the assignee's node only.\n */\nexport const TaskStatus = z.enum([\"requested\", \"accepted\", \"completed\", \"failed\"]);\nexport type TaskStatus = z.infer<typeof TaskStatus>;\n\nexport const TERMINAL_TASK_STATUSES: readonly TaskStatus[] = [\"completed\", \"failed\"];\n\n/** An agent taking part in a task, with where it lives. */\nexport const TaskParty = z.object({ agentId: AgentId, organizationId: OrganizationId, nodeId: NodeId });\nexport type TaskParty = z.infer<typeof TaskParty>;\n\n/** The organization a task was routed to, through its Mesh Agent. */\nexport const TaskAssignee = z.object({ organizationId: OrganizationId, nodeId: NodeId, meshAgentId: AgentId });\nexport type TaskAssignee = z.infer<typeof TaskAssignee>;\n\n/** One stage of the observe → reason → act → verify pipeline (deck slide 05). */\nexport const TaskStep = z.object({\n name: z.enum([\"observe\", \"reason\", \"act\", \"verify\"]),\n at: Timestamp,\n summary: z.string().max(1000),\n});\nexport type TaskStep = z.infer<typeof TaskStep>;\n\nexport const TaskError = z.object({ code: z.string().max(64), message: z.string().max(1000) });\nexport type TaskError = z.infer<typeof TaskError>;\n\nexport const Task = z\n .object({\n id: TaskId,\n capability: CapabilityName,\n input: Metadata,\n status: TaskStatus,\n requester: TaskParty,\n /** The requester organization's Mesh Agent, the first hop of the route. */\n requesterMeshAgentId: AgentId,\n assignee: TaskAssignee,\n /** The agent that does the work, chosen by the assignee's Mesh Agent on acceptance. */\n provider: TaskParty.nullable(),\n output: Metadata.nullable(),\n error: TaskError.nullable(),\n steps: z.array(TaskStep).max(32),\n /** Model that produced the result; null when a rule-based model did. */\n model: z.string().max(100).nullable(),\n version: Version,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n })\n .meta({\n id: \"Task\",\n description: \"A capability request routed through Mesh Agents, with its result and provenance (ADR-0020).\",\n });\nexport type Task = z.infer<typeof Task>;\n\nexport const RequestTaskRequest = z\n .object({\n capability: CapabilityName,\n input: Metadata.default({}),\n })\n .meta({ id: \"RequestTaskRequest\" });\nexport type RequestTaskRequest = z.infer<typeof RequestTaskRequest>;\nexport type RequestTaskRequestInput = z.input<typeof RequestTaskRequest>;\n\n/** An agent offering a capability, as listed by the capability directory. */\nexport const CapabilityProvider = z\n .object({\n agentId: AgentId,\n agentName: z.string(),\n organizationId: OrganizationId,\n organizationName: z.string(),\n nodeId: NodeId,\n /** Running, on a node that is not offline — i.e. a task could be routed to it now. */\n available: z.boolean(),\n /** Whether both organizations' policies let the agent named by `forAgent` ask this provider (ADR-0023); null without it. */\n permitted: z.boolean().nullable(),\n })\n .meta({ id: \"CapabilityProvider\" });\nexport type CapabilityProvider = z.infer<typeof CapabilityProvider>;\n","import { z } from \"zod\";\nimport { Agent, AgentStatus } from \"./agent.ts\";\nimport { RoleBinding } from \"./auth.ts\";\nimport { Timestamp, Version } from \"./common.ts\";\nimport {\n AgentId,\n CommandId,\n EventId,\n LinkId,\n NodeId,\n OrganizationId,\n PrincipalId,\n RevocationId,\n RoleBindingId,\n TaskId,\n} from \"./ids.ts\";\nimport { Link } from \"./link.ts\";\nimport { Node, NodeStatus } from \"./node.ts\";\nimport { Organization } from \"./organization.ts\";\nimport { Task } from \"./task.ts\";\nimport { KeyRevocation } from \"./trust.ts\";\n\n/**\n * Event catalog (ROADMAP §2.4). Every state change in the mesh is one of these events.\n *\n * A *domain event* is what the domain produces: `type`, `subject` and `payload`.\n * A *mesh event* wraps it in the envelope (id, seq, origin, causation, timestamp, signature)\n * when it is committed, replicated and pushed to clients.\n */\n\nconst subject = <K extends string, S extends z.ZodType<string>>(kind: K, id: S) =>\n z.object({ kind: z.literal(kind), id, version: Version });\n\nconst NodeSubject = subject(\"node\", NodeId);\nconst OrganizationSubject = subject(\"organization\", OrganizationId);\nconst AgentSubject = subject(\"agent\", AgentId);\nconst LinkSubject = subject(\"link\", LinkId);\nconst RoleBindingSubject = subject(\"roleBinding\", RoleBindingId);\nconst TaskSubject = subject(\"task\", TaskId);\nconst RevocationSubject = subject(\"revocation\", RevocationId);\n\nconst event = <T extends string, S extends z.ZodType, P extends z.ZodType>(type: T, subjectSchema: S, payload: P) =>\n z.object({ type: z.literal(type), subject: subjectSchema, payload });\n\nconst AgentRegistration = z.object({\n meshAgentId: AgentId,\n agentId: AgentId,\n organizationId: OrganizationId,\n nodeId: NodeId,\n});\n\nexport const NodeCreated = event(\"node.created\", NodeSubject, z.object({ node: Node }));\nexport const NodeUpdated = event(\"node.updated\", NodeSubject, z.object({ node: Node }));\nexport const NodeRemoved = event(\"node.removed\", NodeSubject, z.object({ nodeId: NodeId }));\n/** Derived locally by each node's presence detector; does not bump the owned entity version. */\nexport const NodeStatusChanged = event(\n \"node.status_changed\",\n NodeSubject,\n z.object({ nodeId: NodeId, status: NodeStatus, previousStatus: NodeStatus, lastSeenAt: Timestamp.nullable() }),\n);\n/** Mesh-only liveness signal; aggregated into `lastSeenAt`, never forwarded to UI clients. */\nexport const NodeHeartbeat = event(\"node.heartbeat\", NodeSubject, z.object({ nodeId: NodeId, at: Timestamp }));\n\nexport const OrganizationCreated = event(\n \"organization.created\",\n OrganizationSubject,\n z.object({ organization: Organization }),\n);\nexport const OrganizationUpdated = event(\n \"organization.updated\",\n OrganizationSubject,\n z.object({ organization: Organization }),\n);\nexport const OrganizationRemoved = event(\n \"organization.removed\",\n OrganizationSubject,\n z.object({ organizationId: OrganizationId, nodeId: NodeId }),\n);\n\nexport const AgentCreated = event(\"agent.created\", AgentSubject, z.object({ agent: Agent }));\nexport const AgentUpdated = event(\"agent.updated\", AgentSubject, z.object({ agent: Agent }));\nexport const AgentStatusChanged = event(\n \"agent.status_changed\",\n AgentSubject,\n z.object({ agent: Agent, previousStatus: AgentStatus }),\n);\nexport const AgentRemoved = event(\n \"agent.removed\",\n AgentSubject,\n z.object({ agentId: AgentId, organizationId: OrganizationId, nodeId: NodeId }),\n);\n\nexport const MeshAgentAgentRegistered = event(\"mesh_agent.agent_registered\", AgentSubject, AgentRegistration);\nexport const MeshAgentAgentDeregistered = event(\"mesh_agent.agent_deregistered\", AgentSubject, AgentRegistration);\n\nexport const LinkRequested = event(\"link.requested\", LinkSubject, z.object({ link: Link }));\nexport const LinkUp = event(\"link.up\", LinkSubject, z.object({ link: Link }));\nexport const LinkUpdated = event(\"link.updated\", LinkSubject, z.object({ link: Link }));\nexport const LinkDown = event(\"link.down\", LinkSubject, z.object({ link: Link }));\nexport const LinkRemoved = event(\"link.removed\", LinkSubject, z.object({ linkId: LinkId }));\n\nexport const RoleGranted = event(\"role.granted\", RoleBindingSubject, z.object({ binding: RoleBinding }));\nexport const RoleRevoked = event(\"role.revoked\", RoleBindingSubject, z.object({ binding: RoleBinding }));\n\n/** Committed by the requester's node; the task's later events come from the assignee's node only (ADR-0020). */\nexport const TaskRequested = event(\"task.requested\", TaskSubject, z.object({ task: Task }));\nexport const TaskAccepted = event(\"task.accepted\", TaskSubject, z.object({ task: Task }));\nexport const TaskCompleted = event(\"task.completed\", TaskSubject, z.object({ task: Task }));\nexport const TaskFailed = event(\"task.failed\", TaskSubject, z.object({ task: Task }));\n\n/**\n * A mesh-root revocation, published through any node so it gossips (ADR-0025). Its authority is the root's signature\n * inside, not the publishing node: any node may publish one, and every node checks it against its own root key.\n */\nexport const MeshKeyRevoked = event(\"mesh.key_revoked\", RevocationSubject, z.object({ revocation: KeyRevocation }));\n\nexport const DomainEvent = z\n .discriminatedUnion(\"type\", [\n NodeCreated,\n NodeUpdated,\n NodeRemoved,\n NodeStatusChanged,\n NodeHeartbeat,\n OrganizationCreated,\n OrganizationUpdated,\n OrganizationRemoved,\n AgentCreated,\n AgentUpdated,\n AgentStatusChanged,\n AgentRemoved,\n MeshAgentAgentRegistered,\n MeshAgentAgentDeregistered,\n LinkRequested,\n LinkUp,\n LinkUpdated,\n LinkDown,\n LinkRemoved,\n RoleGranted,\n RoleRevoked,\n TaskRequested,\n TaskAccepted,\n TaskCompleted,\n TaskFailed,\n MeshKeyRevoked,\n ])\n .meta({ id: \"DomainEvent\" });\nexport type DomainEvent = z.infer<typeof DomainEvent>;\nexport type DomainEventType = DomainEvent[\"type\"];\nexport type DomainEventOf<T extends DomainEventType> = Extract<DomainEvent, { type: T }>;\n\nexport const DOMAIN_EVENT_TYPES = DomainEvent.options.map((o) => o.shape.type.value) as readonly DomainEventType[];\n\n/** Envelope schema version (ADR-0009). */\nexport const ENVELOPE_VERSION = 1 as const;\n\nexport const EnvelopeMeta = z.object({\n v: z.literal(ENVELOPE_VERSION),\n id: EventId,\n /** Monotonic per origin node; `(origin.nodeId, seq)` is the replication cursor. */\n seq: z.int().min(1),\n origin: z.object({ nodeId: NodeId, principalId: PrincipalId.nullable() }),\n /** Groups the events produced by one command, e.g. a cascade (ADR-0005). */\n causationId: CommandId,\n timestamp: Timestamp,\n /** Ed25519 signature over the canonical encoding; attached by the protocol layer (Phase 5). */\n sig: z.string().nullable(),\n});\nexport type EnvelopeMeta = z.infer<typeof EnvelopeMeta>;\n\nexport const MeshEvent = z.intersection(EnvelopeMeta, DomainEvent).meta({ id: \"MeshEvent\" });\nexport type MeshEvent = z.infer<typeof MeshEvent>;\n","import { z } from \"zod\";\nimport { NodeId } from \"./ids.ts\";\n\nexport const HealthResponse = z\n .object({\n status: z.enum([\"ok\", \"degraded\"]),\n service: z.literal(\"node-server\"),\n /** The node this server runs as — clients use it to know where their writes are accepted (ADR-0004). */\n nodeId: NodeId,\n version: z.string(),\n uptimeSeconds: z.number().nonnegative(),\n timestamp: z.iso.datetime(),\n })\n .meta({ id: \"HealthResponse\", description: \"Liveness and version information for a Node Server.\" });\n\nexport type HealthResponse = z.infer<typeof HealthResponse>;\n","import { z } from \"zod\";\nimport { Principal, PrincipalKind, RoleBinding, TokenScope } from \"./auth.ts\";\nimport { DisplayName, Timestamp } from \"./common.ts\";\nimport { ApiKeyId, PrincipalId, TokenId } from \"./ids.ts\";\n\n/** Who the caller is and which ownership roles they hold — drives the Monitor's controls (ADR-0010). */\nexport const Me = z\n .object({\n principal: Principal,\n roles: z.array(RoleBinding),\n /** What the credential used for this request may do (ADR-0022). */\n scopes: z.array(TokenScope),\n })\n .meta({ id: \"Me\", description: \"The authenticated principal and its role bindings.\" });\nexport type Me = z.infer<typeof Me>;\n\nexport const CreatePrincipalRequest = z\n .object({ name: DisplayName, kind: PrincipalKind.default(\"user\") })\n .meta({ id: \"CreatePrincipalRequest\" });\nexport type CreatePrincipalRequest = z.infer<typeof CreatePrincipalRequest>;\n\n/** Shown exactly once. Users get a bearer token; services get a long-lived API key. */\nexport const Credential = z\n .discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"token\"), token: z.string(), expiresAt: Timestamp }),\n z.object({ type: z.literal(\"apiKey\"), apiKey: z.string() }),\n ])\n .meta({ id: \"Credential\" });\nexport type Credential = z.infer<typeof Credential>;\n\nexport const CreatePrincipalResponse = z\n .object({ principal: Principal, credential: Credential })\n .meta({ id: \"CreatePrincipalResponse\" });\nexport type CreatePrincipalResponse = z.infer<typeof CreatePrincipalResponse>;\n\n/** Longest lifetime a bearer token may be issued for. */\nexport const MAX_TOKEN_TTL_SECONDS = 365 * 24 * 60 * 60;\n\nexport const IssueTokenRequest = z\n .object({\n /** Defaults to all scopes the caller's own credential has. */\n scopes: z.array(TokenScope).min(1).optional(),\n ttlSeconds: z\n .int()\n .min(60)\n .max(MAX_TOKEN_TTL_SECONDS)\n .default(30 * 24 * 60 * 60),\n label: z.string().trim().max(120).optional(),\n })\n .meta({ id: \"IssueTokenRequest\" });\nexport type IssueTokenRequest = z.infer<typeof IssueTokenRequest>;\nexport type IssueTokenRequestInput = z.input<typeof IssueTokenRequest>;\n\n/** A new bearer token, shown exactly once. */\nexport const IssuedToken = z\n .object({ id: TokenId, token: z.string(), scopes: z.array(TokenScope), expiresAt: Timestamp })\n .meta({ id: \"IssuedToken\" });\nexport type IssuedToken = z.infer<typeof IssuedToken>;\n\n/** A credential's metadata — never its secret. */\nexport const CredentialInfo = z\n .object({\n id: z.union([TokenId, ApiKeyId]),\n type: z.enum([\"token\", \"apiKey\"]),\n principalId: PrincipalId,\n scopes: z.array(TokenScope),\n label: z.string().nullable(),\n createdAt: Timestamp,\n expiresAt: Timestamp.nullable(),\n revokedAt: Timestamp.nullable(),\n lastUsedAt: Timestamp.nullable(),\n })\n .meta({ id: \"CredentialInfo\" });\nexport type CredentialInfo = z.infer<typeof CredentialInfo>;\n","import { z } from \"zod\";\nimport { Agent } from \"./agent.ts\";\nimport { Capability } from \"./capability.ts\";\nimport { NodeId } from \"./ids.ts\";\nimport { Link } from \"./link.ts\";\nimport { Node } from \"./node.ts\";\nimport { Organization } from \"./organization.ts\";\nimport { Task } from \"./task.ts\";\n\n/** Per-origin-node sequence reached by a replica: `{ [nodeId]: seq }`. */\nexport const MeshCursor = z.record(NodeId, z.int().min(0)).meta({ id: \"MeshCursor\" });\nexport type MeshCursor = z.infer<typeof MeshCursor>;\n\nexport const MeshSnapshot = z\n .object({\n nodes: z.array(Node),\n organizations: z.array(Organization),\n agents: z.array(Agent),\n links: z.array(Link),\n /** The most recent tasks, newest first (ADR-0020). */\n tasks: z.array(Task),\n cursor: MeshCursor,\n })\n .meta({ id: \"MeshSnapshot\", description: \"Full mesh state plus the cursor to resume the event stream from.\" });\nexport type MeshSnapshot = z.infer<typeof MeshSnapshot>;\n\nexport const MeshStats = z\n .object({\n nodes: z.int().min(0),\n online: z.int().min(0),\n degraded: z.int().min(0),\n offline: z.int().min(0),\n organizations: z.int().min(0),\n agents: z.int().min(0),\n })\n .meta({ id: \"MeshStats\", description: \"Counters shown in the Monitor's mesh summary.\" });\nexport type MeshStats = z.infer<typeof MeshStats>;\n\nexport const NodeDetail = z\n .object({\n node: Node,\n organizations: z.array(Organization),\n agents: z.array(Agent),\n /** Distinct capabilities offered by the node's agents. */\n capabilities: z.array(Capability),\n })\n .meta({ id: \"NodeDetail\", description: \"Everything the Monitor's node detail panel shows (ui.md).\" });\nexport type NodeDetail = z.infer<typeof NodeDetail>;\n\n/** Encodes a cursor for URLs (`?cursor=`): base64url of its JSON. */\nexport function encodeCursor(cursor: MeshCursor): string {\n const bytes = new TextEncoder().encode(JSON.stringify(cursor));\n return btoa(String.fromCharCode(...bytes))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n/** Decodes a cursor produced by `encodeCursor`. Throws on malformed input. */\nexport function decodeCursor(encoded: string): MeshCursor {\n const base64 = encoded.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const bytes = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n return MeshCursor.parse(JSON.parse(new TextDecoder().decode(bytes)));\n}\n","import type { Agent } from \"./agent.ts\";\nimport type { RoleBinding } from \"./auth.ts\";\nimport type { DomainEvent } from \"./events.ts\";\nimport type { Link } from \"./link.ts\";\nimport type { Node, NodeStatus } from \"./node.ts\";\nimport type { Organization } from \"./organization.ts\";\nimport type { Task } from \"./task.ts\";\nimport type { KeyRevocation } from \"./trust.ts\";\n\n/**\n * Translates an event into the state change it implies. The node server's persistence applies these operations\n * atomically with the event append, replication (Phase 5) applies them for remote events, and clients (the SDK's\n * mesh mirror, the Monitor) apply them to their local copy — so nobody can disagree about what an event means.\n */\nexport type ProjectionOp =\n | { readonly op: \"upsert\"; readonly kind: \"node\"; readonly entity: Node }\n | { readonly op: \"upsert\"; readonly kind: \"organization\"; readonly entity: Organization }\n | { readonly op: \"upsert\"; readonly kind: \"agent\"; readonly entity: Agent }\n | { readonly op: \"upsert\"; readonly kind: \"link\"; readonly entity: Link }\n | { readonly op: \"upsert\"; readonly kind: \"roleBinding\"; readonly entity: RoleBinding }\n /** Tasks have two writers in turn (ADR-0020), so replicas apply only newer versions. */\n | { readonly op: \"upsert\"; readonly kind: \"task\"; readonly entity: Task }\n /** Stored as published; each node decides whether it is genuine against its own mesh root (ADR-0025). */\n | { readonly op: \"upsert\"; readonly kind: \"revocation\"; readonly entity: KeyRevocation & { readonly id: string } }\n | {\n readonly op: \"delete\";\n readonly kind: \"node\" | \"organization\" | \"agent\" | \"link\" | \"roleBinding\";\n readonly id: string;\n }\n | {\n readonly op: \"presence\";\n readonly nodeId: string;\n readonly status: NodeStatus;\n readonly lastSeenAt: string | null;\n }\n | { readonly op: \"none\" };\n\nexport function project(event: DomainEvent): ProjectionOp {\n switch (event.type) {\n case \"node.created\":\n case \"node.updated\":\n return { op: \"upsert\", kind: \"node\", entity: event.payload.node };\n case \"node.removed\":\n return { op: \"delete\", kind: \"node\", id: event.payload.nodeId };\n case \"node.status_changed\":\n return {\n op: \"presence\",\n nodeId: event.payload.nodeId,\n status: event.payload.status,\n lastSeenAt: event.payload.lastSeenAt,\n };\n case \"organization.created\":\n case \"organization.updated\":\n return { op: \"upsert\", kind: \"organization\", entity: event.payload.organization };\n case \"organization.removed\":\n return { op: \"delete\", kind: \"organization\", id: event.payload.organizationId };\n case \"agent.created\":\n case \"agent.updated\":\n case \"agent.status_changed\":\n return { op: \"upsert\", kind: \"agent\", entity: event.payload.agent };\n case \"agent.removed\":\n return { op: \"delete\", kind: \"agent\", id: event.payload.agentId };\n case \"link.requested\":\n case \"link.up\":\n case \"link.updated\":\n case \"link.down\":\n return { op: \"upsert\", kind: \"link\", entity: event.payload.link };\n case \"link.removed\":\n return { op: \"delete\", kind: \"link\", id: event.payload.linkId };\n case \"role.granted\":\n return { op: \"upsert\", kind: \"roleBinding\", entity: event.payload.binding };\n case \"role.revoked\":\n return { op: \"delete\", kind: \"roleBinding\", id: event.payload.binding.id };\n case \"task.requested\":\n case \"task.accepted\":\n case \"task.completed\":\n case \"task.failed\":\n return { op: \"upsert\", kind: \"task\", entity: event.payload.task };\n case \"mesh.key_revoked\":\n return { op: \"upsert\", kind: \"revocation\", entity: { ...event.payload.revocation, id: event.subject.id } };\n // Registration is implied by organization membership; heartbeats are handled by the presence detector.\n case \"mesh_agent.agent_registered\":\n case \"mesh_agent.agent_deregistered\":\n case \"node.heartbeat\":\n return { op: \"none\" };\n }\n}\n","import type { DomainEvent } from \"./events.ts\";\n\n/**\n * Who may commit an event (ADR-0021): the single writer of the entity it creates or changes (ADR-0004), read from the\n * event itself so every replica — server or client — decides the same way without extra state.\n *\n * - Creations and updates come only from the owning node: a node for itself, an organization's or agent's node, the\n * lower node id for links (ADR-0017), the scope's node for role grants, and for tasks the requester's node\n * (`task.requested`) then the assignee's node (ADR-0020).\n * - Removals may come from any node: forgetting an offline node (ADR-0017) removes its organizations, agents, links\n * and bindings under the forgetting node's signature. Revocable trust for that comes with mesh-root certificates.\n * - Presence observations (`node.status_changed`) are each node's own and never applied by replicas (ADR-0018).\n */\nexport type Writers = { readonly kind: \"owner\"; readonly nodeIds: readonly string[] } | { readonly kind: \"any\" };\n\nconst owner = (...nodeIds: string[]): Writers => ({ kind: \"owner\", nodeIds });\nconst ANY: Writers = { kind: \"any\" };\n\nexport function writersOf(event: DomainEvent): Writers {\n switch (event.type) {\n case \"node.created\":\n case \"node.updated\":\n return owner(event.payload.node.id);\n case \"node.heartbeat\":\n return owner(event.payload.nodeId);\n case \"organization.created\":\n case \"organization.updated\":\n return owner(event.payload.organization.nodeId);\n case \"agent.created\":\n case \"agent.updated\":\n case \"agent.status_changed\":\n return owner(event.payload.agent.nodeId);\n case \"mesh_agent.agent_registered\":\n return owner(event.payload.nodeId);\n case \"link.up\":\n case \"link.updated\":\n case \"link.down\":\n return owner(event.payload.link.aNodeId);\n case \"link.requested\":\n return owner(event.payload.link.aNodeId, event.payload.link.bNodeId);\n case \"role.granted\":\n return owner(event.payload.binding.scope.nodeId);\n case \"task.requested\":\n return owner(event.payload.task.requester.nodeId);\n case \"task.accepted\":\n case \"task.completed\":\n case \"task.failed\":\n return owner(event.payload.task.assignee.nodeId);\n case \"node.removed\":\n case \"node.status_changed\":\n case \"organization.removed\":\n case \"agent.removed\":\n case \"mesh_agent.agent_deregistered\":\n case \"link.removed\":\n case \"role.revoked\":\n case \"mesh.key_revoked\":\n return ANY;\n }\n}\n\n/** True when `originNodeId` may have committed `event`. Events that fail are kept in the log but never applied. */\nexport function isAuthorizedWriter(event: DomainEvent, originNodeId: string): boolean {\n const writers = writersOf(event);\n return writers.kind === \"any\" || writers.nodeIds.includes(originNodeId);\n}\n","import type { Agent } from \"./agent.ts\";\nimport type { MeshEvent } from \"./events.ts\";\nimport type { Link } from \"./link.ts\";\nimport type { MeshCursor, MeshSnapshot } from \"./mesh.ts\";\nimport type { Node } from \"./node.ts\";\nimport type { Organization } from \"./organization.ts\";\nimport { project } from \"./projection.ts\";\nimport type { Task } from \"./task.ts\";\nimport { isAuthorizedWriter } from \"./writers.ts\";\n\n/** A client-side mirror of the mesh, kept current by applying events to a snapshot. */\nexport interface MeshState {\n readonly nodes: Readonly<Record<string, Node>>;\n readonly organizations: Readonly<Record<string, Organization>>;\n readonly agents: Readonly<Record<string, Agent>>;\n readonly links: Readonly<Record<string, Link>>;\n readonly tasks: Readonly<Record<string, Task>>;\n readonly cursor: MeshCursor;\n}\n\nconst byId = <T extends { id: string }>(items: readonly T[]): Record<string, T> =>\n Object.fromEntries(items.map((item) => [item.id, item]));\n\nexport function meshStateFromSnapshot(snapshot: MeshSnapshot): MeshState {\n return {\n nodes: byId(snapshot.nodes),\n organizations: byId(snapshot.organizations),\n agents: byId(snapshot.agents),\n links: byId(snapshot.links),\n // Nodes from before Phase 6 send no tasks; tolerate them during rolling upgrades.\n tasks: byId(snapshot.tasks ?? []),\n cursor: { ...snapshot.cursor },\n };\n}\n\n/**\n * Applies one event immutably. Events at or below the cursor for their origin are ignored, so replays\n * and duplicates are harmless. Role bindings are not mirrored (they are not part of the snapshot).\n */\nexport function applyMeshEvent(state: MeshState, event: MeshEvent): MeshState {\n const seen = state.cursor[event.origin.nodeId] ?? 0;\n if (event.seq <= seen) return state;\n const cursor = { ...state.cursor, [event.origin.nodeId]: event.seq };\n // An event its origin was not allowed to write is part of the log, but never changes the view (ADR-0021).\n if (!isAuthorizedWriter(event, event.origin.nodeId)) return { ...state, cursor };\n const op = project(event);\n\n switch (op.op) {\n case \"upsert\":\n switch (op.kind) {\n case \"node\":\n return { ...state, cursor, nodes: { ...state.nodes, [op.entity.id]: op.entity } };\n case \"organization\":\n return { ...state, cursor, organizations: { ...state.organizations, [op.entity.id]: op.entity } };\n case \"agent\":\n return { ...state, cursor, agents: { ...state.agents, [op.entity.id]: op.entity } };\n case \"link\":\n return { ...state, cursor, links: { ...state.links, [op.entity.id]: op.entity } };\n case \"roleBinding\":\n case \"revocation\":\n return { ...state, cursor };\n case \"task\": {\n // Two writers in turn (ADR-0020): an older version arriving late must not win.\n const current = state.tasks[op.entity.id];\n if (current && current.version >= op.entity.version) return { ...state, cursor };\n return { ...state, cursor, tasks: { ...state.tasks, [op.entity.id]: op.entity } };\n }\n }\n break;\n case \"delete\": {\n if (op.kind === \"roleBinding\") return { ...state, cursor };\n const table = { node: \"nodes\", organization: \"organizations\", agent: \"agents\", link: \"links\" } as const;\n const key = table[op.kind];\n const { [op.id]: _removed, ...rest } = state[key];\n return { ...state, cursor, [key]: rest };\n }\n case \"presence\": {\n const node = state.nodes[op.nodeId];\n if (!node) return { ...state, cursor };\n return {\n ...state,\n cursor,\n nodes: { ...state.nodes, [node.id]: { ...node, status: op.status, lastSeenAt: op.lastSeenAt } },\n };\n }\n case \"none\":\n return { ...state, cursor };\n }\n}\n","import { z } from \"zod\";\n\n/** Cursor pagination query (ROADMAP §2.6). `cursor` is opaque to clients. */\nexport const PageQuery = z.object({\n limit: z.coerce.number().int().min(1).max(200).default(50),\n cursor: z.string().min(1).optional(),\n});\nexport type PageQuery = z.infer<typeof PageQuery>;\n\n/** A page of results; `nextCursor` is null on the last page. */\nexport const Page = <T extends z.ZodType>(item: T, id: string) =>\n z.object({ items: z.array(item), nextCursor: z.string().nullable() }).meta({ id });\n\nexport interface PageOf<T> {\n readonly items: T[];\n readonly nextCursor: string | null;\n}\n","import { z } from \"zod\";\n\n/** RFC 9457 problem details — every API error uses this shape. */\nexport const ProblemDetails = z\n .object({\n type: z.string().meta({ example: \"/problems/forbidden\" }),\n title: z.string(),\n status: z.int().min(400).max(599),\n detail: z.string().optional(),\n instance: z.string().optional(),\n code: z.string().meta({ description: \"Stable machine-readable error code\" }),\n errors: z.array(z.object({ path: z.string(), message: z.string() })).optional(),\n })\n .meta({ id: \"ProblemDetails\" });\nexport type ProblemDetails = z.infer<typeof ProblemDetails>;\n","import { z } from \"zod\";\nimport { MeshEvent } from \"./events.ts\";\nimport { PrincipalId } from \"./ids.ts\";\nimport { MeshCursor } from \"./mesh.ts\";\n\n/**\n * Realtime protocol over `WS /v1/realtime` (ADR-0014). JSON text frames.\n *\n * client → hello { token, cursor?, topics? } first frame, within 5 s\n * server → event { event }* replay of everything after `cursor`\n * server → welcome { principalId, cursor } replay done; live events follow\n * server → event { event }* live\n * server → resync.required { reason } the client must fetch a fresh snapshot and reconnect\n */\n\n/** Subject kinds a client can subscribe to. Default: everything. */\nexport const Topic = z.enum([\"node\", \"organization\", \"agent\", \"link\", \"roleBinding\", \"task\", \"revocation\"]);\nexport type Topic = z.infer<typeof Topic>;\n\nexport const ClientMessage = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"hello\"),\n /** Bearer token or API key — sent in the first frame because browsers cannot set WebSocket headers. */\n token: z.string().min(1),\n /** Resume point, usually the cursor of the snapshot the client just loaded. */\n cursor: MeshCursor.optional(),\n topics: z.array(Topic).optional(),\n }),\n z.object({ type: z.literal(\"subscribe\"), topics: z.array(Topic) }),\n]);\nexport type ClientMessage = z.infer<typeof ClientMessage>;\n\nexport const ServerMessage = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"welcome\"), principalId: PrincipalId, cursor: MeshCursor }),\n z.object({ type: z.literal(\"event\"), event: MeshEvent }),\n z.object({ type: z.literal(\"resync.required\"), reason: z.string() }),\n z.object({ type: z.literal(\"error\"), code: z.string(), message: z.string() }),\n]);\nexport type ServerMessage = z.infer<typeof ServerMessage>;\n\n/** WebSocket close codes used by the node server. */\nexport const RealtimeCloseCode = {\n normal: 1000,\n goingAway: 1001,\n badMessage: 4400,\n unauthenticated: 4401,\n /** Authenticated, but without a role on this node (ADR-0022). */\n forbidden: 4403,\n helloTimeout: 4408,\n resyncRequired: 4409,\n} as const;\n"]}
|
package/package.json
CHANGED