Skip to content

Protocol Schemas

Doug Fennell edited this page Oct 1, 2025 · 2 revisions

RDCP Protocol Schemas (Zod)

As of PR #42, protocol-level Zod schemas are centralized in @rdcp.dev/core. The server package re-exports these schemas for backward compatibility, but new code should import from core.

See also: Core-Package-Boundaries β€” architectural responsibilities and import rules for core/server/client.

Exports

Schemas:

  • protocolVersionSchema
  • controlRequestSchema
  • controlResponseSchema
  • discoveryResponseSchema
  • statusResponseSchema
  • healthResponseSchema
  • protocolDiscoverySchema
  • errorResponseSchema

Fixtures (sample typed payloads):

  • protocolVersionFixture
  • controlRequestEnableFixture | controlRequestDisableFixture | controlRequestResetFixture | controlRequestStatusFixture
  • controlResponseFixture
  • discoveryResponseFixture
  • statusResponseFixture
  • healthResponseFixture
  • protocolDiscoveryFixture
  • errorResponseFixture

Usage

Validate incoming requests (recommended):

import { controlRequestSchema } from '@rdcp.dev/core'

const result = controlRequestSchema.safeParse(req.body)
if (!result.success) {
  // handle validation errors
}

Typed validation with Zod:

import { z } from 'zod'
import { controlRequestSchema } from '@rdcp.dev/core'

type ControlRequest = z.infer<typeof controlRequestSchema>

function validate(body: unknown): ControlRequest {
  return controlRequestSchema.parse(body)
}

Constants, schemas, and fixtures together:

import {
  PROTOCOL_VERSION,
  RDCP_HEADERS,
  RDCP_PATHS,
  controlRequestSchema,
  controlRequestEnableFixture,
  discoveryResponseFixture,
} from '@rdcp.dev/core'

// Use fixtures in tests or examples
const req = controlRequestEnableFixture
const discovery = discoveryResponseFixture

Back-compat import (still supported):

import {
  controlRequestSchema,
  controlRequestEnableFixture,
} from '@rdcp.dev/server'

Notes

  • Core remains protocol-only (no framework/server coupling). Schemas use a minimal runtime dependency on zod.
  • Additions to schemas are semver-minor; breaking changes are semver-major.
  • See also: RDCP-Protocol-Specification and Core-Package-Boundaries.

Centralized JSON Schema definitions ($defs)

A machine-readable set of domain-specific primitives is provided at Protocol-Schemas (docs/schemas/defs.json mirrored in wiki). Downstream schemas should reference these via $ref instead of inlining patterns. This improves consistency between documentation, validation, and implementations.

Clone this wiki locally