TypeScript Types Reference
Complete reference for Sightline's TypeScript type system.
For the complete data specification, see Data Specification. For component props, see Component Reference.
Core Types
Incident
The canonical incident data structure.
interface Incident {
id: string;
status: PublicationStatus; // 'draft' | 'review' | 'published' | 'archived' | 'retracted'
createdAt: string;
updatedAt: string;
// Required sections
temporal: TemporalData;
location: LocationData;
// Optional sections
summary?: string;
classification?: ClassificationData;
witnesses?: WitnessData;
sensorEvidence?: SensorEvidenceData;
objectCharacteristics?: ObjectCharacteristics;
movement?: MovementData;
investigation?: InvestigationData;
responseImpact?: ResponseImpactData;
sourceData?: SourceData;
environment?: EnvironmentalConditions;
media?: MediaAttachment[];
relations?: RelationalData;
}IncidentDisplay
Incident with computed display properties (used in UI).
interface IncidentDisplay extends Incident {
// Computed display values
coordinates: [number, number]; // [longitude, latitude]
sensitivityColor?: string; // Only if sensitivity set and not 'none'
sensitivityLabel?: string; // Only if sensitivity set and not 'none'
formattedDate: string; // Human-readable date
ageInDays: number; // Days since incident
dataSourceId: string; // Source this incident came from
}Temporal Types
interface TemporalData {
date: string; // YYYY-MM-DD (required)
dateCertainty: TemporalCertainty; // Required
time?: string; // HH:MM:SS
timeCertainty?: TemporalCertainty;
timezone?: string; // IANA timezone
durationSeconds?: number; // Duration in seconds
durationDescription?: string; // Human-readable duration
timeOfDay?: string; // 'dawn' | 'morning' | 'afternoon' | etc.
moonPhase?: number; // 0-1 scale (0 = new moon, 0.5 = full)
isDaylightSaving?: boolean;
}
type TemporalCertainty = 'exact' | 'approximate' | 'estimated' | 'unknown';Location Types
interface LocationData {
id: string; // Required unique identifier
name: string;
country: string;
longitude: number; // Required
latitude: number; // Required
siteType: SiteType;
locationSensitivity?: LocationSensitivity; // Optional
// Optional
region?: string;
city?: string;
address?: string;
elevationMeters?: number;
elevationSource?: string;
coordinatePrecision?: number; // Decimal places
coordinatesApproximate?: boolean;
terrain?: string;
secondarySiteTypes?: SiteType[];
proximitySites?: ProximitySite[];
airspaceClass?: AirspaceClass;
}
type LocationSensitivity = 'critical' | 'high' | 'moderate' | 'standard' | 'none';
type SiteType =
| 'military_base' | 'nuclear_facility' | 'government_building'
| 'airport_commercial' | 'airport_military' | 'research_facility'
| 'urban' | 'suburban' | 'rural' | 'wilderness'
| 'ocean' | 'lake' | 'mountain' | 'desert'
// ... 40+ total optionsClassification Types
interface ClassificationData {
incidentType: IncidentType;
hynekClassification?: HynekClassification;
valleeClassification?: ValleeClassification;
tags?: string[];
}
type IncidentType =
| 'sighting' | 'encounter' | 'landing' | 'abduction'
| 'physical_trace' | 'electromagnetic' | 'animal_reaction'
| 'vehicle_interference' | 'physiological' | 'other';
type HynekClassification =
| 'nl' // Nocturnal Lights
| 'dd' // Daylight Discs
| 'rv' // Radar-Visual
| 'ce1' // Close Encounter 1st Kind
| 'ce2' // Close Encounter 2nd Kind
| 'ce3'; // Close Encounter 3rd Kind
type ValleeClassification =
| 'an1' | 'an2' | 'an3' | 'an4' | 'an5' // Anomaly
| 'fb1' | 'fb2' | 'fb3' | 'fb4' | 'fb5' // Fly-by
| 'ma1' | 'ma2' | 'ma3' | 'ma4' | 'ma5' // Maneuver
| 'ce1' | 'ce2' | 'ce3' | 'ce4' | 'ce5'; // Close EncounterWitness Types
interface WitnessData {
witnessCount: number;
witnessCategories: WitnessCategory[];
credibilityFactors?: CredibilityFactor[];
observationConditions?: string;
}
type WitnessCategory =
| 'civilian' | 'military' | 'pilot_commercial' | 'pilot_military'
| 'law_enforcement' | 'scientist' | 'government_official'
| 'air_traffic_controller' | 'astronaut' | 'child';Evidence Types
interface SensorEvidenceData {
detectionMethods: DetectionMethod[];
evidenceTypes: EvidenceType[];
radarConfirmed?: boolean;
physicalTraces?: PhysicalTrace[];
electromagneticEffects?: ElectromagneticEffect[];
}
type DetectionMethod =
| 'visual' | 'radar_military' | 'radar_civilian' | 'radar_atc'
| 'infrared' | 'satellite' | 'sonar' | 'lidar'
| 'radio_frequency' | 'electromagnetic' | 'gravimetric'
// ... more options
type EvidenceType =
| 'witness_testimony' | 'photograph' | 'video' | 'radar_data'
| 'physical_trace' | 'audio_recording' | 'medical_report'
| 'government_document' | 'scientific_analysis'
// ... more optionsObject Types
interface ObjectCharacteristicsData {
objectCount?: number;
primaryObject?: ObservedObject;
additionalObjects?: ObservedObject[];
}
interface ObservedObject {
shape: ObjectShape;
colors: string[];
estimatedSize?: ObjectSize;
luminosity?: Luminosity;
soundDescription?: string;
surfaceFeatures?: SurfaceFeature[];
}
type ObjectShape =
| 'sphere' | 'disk' | 'oval' | 'triangle' | 'rectangle'
| 'cylinder' | 'cigar' | 'diamond' | 'boomerang' | 'chevron'
| 'tic_tac' | 'orb' | 'jellyfish' | 'cube' | 'pyramid'
// ... 50+ total optionsInvestigation Types
interface InvestigationData {
status: InvestigationStatus;
explanationStatus: ExplanationStatus;
confidenceLevel: ConfidenceLevel;
corroborationLevel: CorroborationLevel;
investigatingBodies?: InvestigatingBody[];
}
type InvestigationStatus =
| 'not_investigated' | 'under_investigation' | 'closed'
| 'reopened' | 'pending_review' | 'unknown';
type ExplanationStatus =
| 'unexplained' | 'explained' | 'insufficient_data'
| 'hoax' | 'misidentification' | 'classified';
type InvestigatingBody =
| 'aaro' | 'uaptf' | 'aatip' | 'project_blue_book'
| 'geipan' | 'cefaa' | 'mufon' | 'nuforc'
// ... more optionsMedia Types
interface MediaItem {
type: MediaType;
url: string;
thumbnailUrl?: string;
caption?: string;
timestamp?: string;
source?: string;
verification?: VerificationStatus;
}
type MediaType = 'image' | 'video' | 'audio' | 'document';
type VerificationStatus = 'verified' | 'unverified' | 'disputed' | 'debunked';Filter Types
interface IncidentFilters {
dateRange?: DateRange;
countries?: string[];
siteTypes?: SiteType[];
locationSensitivities?: LocationSensitivity[];
incidentTypes?: IncidentType[];
hynekClassifications?: HynekClassification[];
valleeClassifications?: ValleeClassification[];
detectionMethods?: DetectionMethod[];
evidenceTypes?: EvidenceType[];
investigationStatuses?: InvestigationStatus[];
investigatingBodies?: InvestigatingBody[];
objectShapes?: ObjectShape[];
explanationStatuses?: ExplanationStatus[];
// Quick filters
radarConfirmed?: boolean;
multipleWitnesses?: boolean;
physicalEvidence?: boolean;
officialInvestigation?: boolean;
videoEvidence?: boolean;
militaryWitness?: boolean;
}
interface DateRange {
start: string;
end: string;
}Utility Types
// Status values
type IncidentStatus = 'draft' | 'published' | 'archived';
// Altitude measurement
interface Altitude {
value: number;
unit: 'feet' | 'meters';
reference?: 'agl' | 'msl' | 'flight_level';
}
// Geographic precision
type CoordinatePrecision =
| 'exact' | 'approximate' | 'area' | 'region' | 'country';Importing Types
All types are exported from the @disclosureos/sightline-core package:
import type {
Incident,
IncidentDisplay,
LocationData,
TemporalData,
ClassificationData,
// ... etc
} from '@disclosureos/sightline-core';For convenience, you can also import specific categories of types:
import type {
LocationSensitivity,
SiteType,
ObjectShape,
Luminosity,
HynekClassification,
ValleeClassification
} from '@disclosureos/sightline-core';Related
- Data Specification — Complete schema documentation
- Component Reference — Component props and APIs
- Architecture - Type System — Type system design
- Examples & Recipes — Real-world usage patterns
- Migration Guide — Type changes between versions