HostDomain host.domain@1

Generated at from openvibe-contracts v0.53.0 and openvibe-sdk v0.11.0.

Version
1.0.0
Owner
host
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/host/domain.v1.json

host.domain@1: one domain of a static site on OpenVibe.Host (server/http/serialize.js domain): the default <site>.openvibe.host, or a custom domain that is served only once its DNS TXT record is verified (re-checked daily; it lapses when the record is gone). A custom domain carries the records its owner must publish (the TXT verification value is public by design and shown only to members); TLS certificates are issued by an operator.

Fields

FieldTypeRequiredDescriptionConstraints
idstringyes
  • pattern ^dom_[0-9A-HJKMNP-TV-Z]{26}$
site_idstringyes
  • pattern ^site_[0-9A-HJKMNP-TV-Z]{26}$
hostnamestringyes
kindenumyes
  • one of "default", "custom"
statusenumyes
  • one of "pending", "verified", "failed", "lapsed"
servedbooleanyes
verified_atstring | nullyes
  • format date-time
last_checked_atstring | nullyes
  • format date-time
last_errorstring | nullyes
instructionsobject
instructions.verificationobjectyes
instructions.verification.typeconstyes
  • = "TXT"
instructions.verification.namestringyes_openvibe-host.<hostname>
instructions.verification.valuestringyesopenvibe-host-verification=<token>
instructions.verification.notestring
instructions.routingarray of objectyesA CNAME for a subdomain; A/AAAA for an apex domain when the operator configured them.
instructions.routing[].typestringyes
instructions.routing[].namestringyes
instructions.routing[].valuestringyes
instructions.routing[].notestring
instructions.tlsstringyes

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: custom
{
  "id": "dom_01JAD6D6E7F8G9H0J1K2M3N4P5",
  "site_id": "site_01JAD2S3T4V5W6X7Y8Z9A0B1C2",
  "hostname": "www.harbourradio.example",
  "kind": "custom",
  "status": "pending",
  "served": false,
  "verified_at": null,
  "last_checked_at": "2026-09-24T09:40:12.000Z",
  "last_error": "no TXT record at _openvibe-host.www.harbourradio.example yet",
  "instructions": {
    "verification": {
      "type": "TXT",
      "name": "_openvibe-host.www.harbourradio.example",
      "value": "openvibe-host-verification=5f0c2a9e1b7d4c3a8e6f0b2d4c6a8e0f1a3c5e7b",
      "note": "keep this record: Host re-checks it daily"
    },
    "routing": [
      {
        "type": "CNAME",
        "name": "www.harbourradio.example",
        "value": "harbour-radio.openvibe.host",
        "note": "for a subdomain such as www.example.org"
      }
    ],
    "tls": "after verification an operator issues the certificate (Let's Encrypt); HTTPS starts working once it is installed"
  }
}
Valid: default
{
  "id": "dom_01JAD5D6E7F8G9H0J1K2M3N4P5",
  "site_id": "site_01JAD2S3T4V5W6X7Y8Z9A0B1C2",
  "hostname": "harbour-radio.openvibe.host",
  "kind": "default",
  "status": "verified",
  "served": true,
  "verified_at": "2026-09-24T08:15:00.000Z",
  "last_checked_at": null,
  "last_error": null
}
Rejected: bad-status
{
  "id": "dom_01JAD5D6E7F8G9H0J1K2M3N4P5",
  "site_id": "site_01JAD2S3T4V5W6X7Y8Z9A0B1C2",
  "hostname": "harbour-radio.openvibe.host",
  "kind": "default",
  "status": "active",
  "served": true,
  "verified_at": "2026-09-24T08:15:00.000Z",
  "last_checked_at": null,
  "last_error": null
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('host.domain@1', value);   // { valid, errors: [{ path, message }] }