An official website of the Disclosure Foundation
Datasets

v1 · Previous stable standard

Companions

Constants, guards, factories, formatters, and labels for the record lexicon

Every vocabulary in the lexicon ships companions — at minimum a constants array and a type guard, plus labels and formatters where the values surface in a UI. This page is the reference for what records provides and where.

Subpaths

SubpathContents
@disclosureos/records/constantsValue arrays: SOURCE_TYPES, TIMES_OF_DAY, SITE_TYPES, OBJECT_SHAPES, ...
@disclosureos/records/guardsType guards: isSourceType, isTimeOfDay, isObjectShape, ...
@disclosureos/records/factoriescreateObservation, createTemporalData, createMediaAttachment, createSensorReading
@disclosureos/records/formattersformatTemporalData, formatFuzzyDate, formatDateRange, formatSourceType, ...
@disclosureos/records/labelsDisplay maps: SOURCE_TYPE_LABELS, TIME_OF_DAY_LABELS, OBJECT_SHAPE_LABELS, ...
@disclosureos/records/validatorsvalidateObservation, isValidLatitude, isValidLongitude, isValidISODate

Everything is also re-exported from the package barrel.

Constants and guards

Constants are derived directly from the Zod schemas (Schema.options), so they can never drift from the types. Guards are built with makeGuard(Schema) — they narrow unknown to the schema's type:

import { SOURCE_CREDIBILITIES } from '@disclosureos/records/constants';
import { isSourceCredibility } from '@disclosureos/records/guards';

SOURCE_CREDIBILITIES;
// ['official', 'verified', 'credible', 'unverified', 'questionable', 'disputed', 'unknown']

if (isSourceCredibility(input)) {
  // input: SourceCredibility
}

Covered vocabularies include source types and credibility, temporal certainty, date granularity and range types, time of day, media types, site/terrain types, airspace classes, location sensitivity, coordinate precision, object shapes, maneuver types, relation kinds, confidence levels, and publication status.

Factories

Factories fill defaults, generate ids, and parse on construction — they throw on invalid input and their return values are guaranteed valid:

import {
  createObservation,
  createTemporalData,
  createMediaAttachment,
  createSensorReading,
} from '@disclosureos/records/factories';

const temporal = createTemporalData('2004-11-14', 'exact', { durationSeconds: 300 });

const photo = createMediaAttachment('image', 'https://example.org/frame.png');
// photo.id auto-generated — citable via evidenceRef('media', photo.id)

const radar = createSensorReading('shipborne_radar', 'radar_phased_array');
// radar.id auto-generated — citable via evidenceRef('sensor', radar.id)

createMediaAttachment and createSensorReading auto-generate stable ids precisely so that claims can cite them.

Formatters and labels

Formatters turn structured values into prose; labels map enum values to display names:

import { formatTemporalData, formatFuzzyDate } from '@disclosureos/records/formatters';
import { OBJECT_SHAPE_LABELS } from '@disclosureos/records/labels';

formatTemporalData({ date: '2004-11-14', dateCertainty: 'approximate' });
// "2004-11-14 [Approximate]"

formatFuzzyDate({ value: '1947-07', granularity: 'month', certainty: 'approximate' });
// "July 1947"

OBJECT_SHAPE_LABELS['tic_tac']; // "Tic Tac"

The temporal formatters understand the full fuzzy-date model — exact dates, ranges, granularities, and relative dates — so UIs never reimplement date display logic.

Validators

import {
  validateObservation,
  isValidLatitude,
  isValidLongitude,
  isValidISODate,
} from '@disclosureos/records/validators';

validateObservation is the package's record-level validator — see Validating at Boundaries for usage patterns and the strip hazard.

On this page

Subpaths
Constants and guards
Factories
Formatters and labels
Validators