Skip to content

@kaiord/core


@kaiord/core / validateRoundTrip

Function: validateRoundTrip()

validateRoundTrip(binaryReader, binaryWriter, toleranceChecker, logger): object

Defined in: packages/core/src/application/round-trip/validate-round-trip.ts:36

Validates round-trip conversion between a binary format and KRD.

Format-agnostic in mechanism: it depends only on the injected BinaryReader/BinaryWriter ports, so it validates any binary adapter (FIT today). It exposes validateBinaryRoundTrip (binary → KRD → binary) and validateKrdRoundTrip (KRD → binary → KRD), each returning the tolerance violations found. Default tolerances: time ±1 s, power ±1 W or ±1% FTP, heart rate ±1 bpm, cadence ±1 rpm.

Parameters

binaryReader

BinaryReader

binary-format reader implementation

binaryWriter

BinaryWriter

binary-format writer implementation

toleranceChecker

ToleranceChecker

tolerance checker with configured thresholds

logger

Logger

logger for operation tracking

Returns

validateBinaryRoundTrip

validateBinaryRoundTrip: (params) => Promise<object[]>

Parameters

params
originalBinary

Uint8Array

Returns

Promise<object[]>

validateFitToKrdToFit

validateFitToKrdToFit: (params) => Promise<object[]>

Parameters

params
originalFit

Uint8Array

Returns

Promise<object[]>

Deprecated

Use validateBinaryRoundTrip; the reader/writer are format-agnostic binary ports, not FIT-specific.

validateKrdRoundTrip

validateKrdRoundTrip: (params) => Promise<object[]>

Parameters

params
originalKrd

{ events?: object[]; extensions?: {[key: string]: unknown; course?: unknown; course_points?: unknown; fit?: unknown; health?: {[key: string]: unknown; bodyComposition?: { bmi?: ... | ...; bodyFatPercent?: ... | ...; bodyWaterPercent?: ... | ...; boneMassKilograms?: ... | ...; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "bodyComposition"; leanMassKilograms?: ... | ...; measuredAt: string; sourceBridgeId?: ... | ...; version: string; }; daily?: { activeCalories: number; date: string; externalId?: ... | ...; floorsClimbed?: ... | ...; intensityMinutes: { moderate: ...; vigorous: ...; }; kaiordRecordId?: ... | ...; kind: "daily"; restingCalories: number; sourceBridgeId?: ... | ...; steps: number; version: string; }; hrv?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "hrv"; measuredAt: string; measurementWindow: ... | ...; rMSSD: number; score?: ... | ...; sourceBridgeId?: ... | ...; version: string; }; sleep?: { endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "sleep"; restingHeartRate?: ... | ...; score?: ... | ...; sourceBridgeId?: ... | ...; stages: ...[]; startTime: string; totalDurationSeconds: number; version: string; }; stress?: { averageLevel: number; endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "stress"; peakLevel: number; sourceBridgeId?: ... | ...; startTime: string; version: string; }; weight?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "weight"; measuredAt: string; sourceBridgeId?: ... | ...; version: string; weightKilograms: number; }; }; structured_workout?: unknown; }; laps?: object[]; metadata: { created: string; manufacturer?: string; product?: string; serialNumber?: string; sport?: string; subSport?: string; }; records?: object[]; sessions?: object[]; type: "structured_workout" | "recorded_activity" | "course" | "sleep_record" | "weight_measurement" | "hrv_summary" | "daily_wellness" | "body_composition" | "stress_episode"; version: string; }

originalKrd.events?

object[] = ...

originalKrd.extensions?

{[key: string]: unknown; course?: unknown; course_points?: unknown; fit?: unknown; health?: {[key: string]: unknown; bodyComposition?: { bmi?: ... | ...; bodyFatPercent?: ... | ...; bodyWaterPercent?: ... | ...; boneMassKilograms?: ... | ...; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "bodyComposition"; leanMassKilograms?: ... | ...; measuredAt: string; sourceBridgeId?: ... | ...; version: string; }; daily?: { activeCalories: number; date: string; externalId?: ... | ...; floorsClimbed?: ... | ...; intensityMinutes: { moderate: ...; vigorous: ...; }; kaiordRecordId?: ... | ...; kind: "daily"; restingCalories: number; sourceBridgeId?: ... | ...; steps: number; version: string; }; hrv?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "hrv"; measuredAt: string; measurementWindow: ... | ...; rMSSD: number; score?: ... | ...; sourceBridgeId?: ... | ...; version: string; }; sleep?: { endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "sleep"; restingHeartRate?: ... | ...; score?: ... | ...; sourceBridgeId?: ... | ...; stages: ...[]; startTime: string; totalDurationSeconds: number; version: string; }; stress?: { averageLevel: number; endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "stress"; peakLevel: number; sourceBridgeId?: ... | ...; startTime: string; version: string; }; weight?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "weight"; measuredAt: string; sourceBridgeId?: ... | ...; version: string; weightKilograms: number; }; }; structured_workout?: unknown; } = ...

originalKrd.extensions.course?

unknown = ...

originalKrd.extensions.course_points?

unknown = ...

originalKrd.extensions.fit?

unknown = ...

originalKrd.extensions.health?

{[key: string]: unknown; bodyComposition?: { bmi?: ... | ...; bodyFatPercent?: ... | ...; bodyWaterPercent?: ... | ...; boneMassKilograms?: ... | ...; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "bodyComposition"; leanMassKilograms?: ... | ...; measuredAt: string; sourceBridgeId?: ... | ...; version: string; }; daily?: { activeCalories: number; date: string; externalId?: ... | ...; floorsClimbed?: ... | ...; intensityMinutes: { moderate: ...; vigorous: ...; }; kaiordRecordId?: ... | ...; kind: "daily"; restingCalories: number; sourceBridgeId?: ... | ...; steps: number; version: string; }; hrv?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "hrv"; measuredAt: string; measurementWindow: ... | ...; rMSSD: number; score?: ... | ...; sourceBridgeId?: ... | ...; version: string; }; sleep?: { endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "sleep"; restingHeartRate?: ... | ...; score?: ... | ...; sourceBridgeId?: ... | ...; stages: ...[]; startTime: string; totalDurationSeconds: number; version: string; }; stress?: { averageLevel: number; endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "stress"; peakLevel: number; sourceBridgeId?: ... | ...; startTime: string; version: string; }; weight?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "weight"; measuredAt: string; sourceBridgeId?: ... | ...; version: string; weightKilograms: number; }; } = ...

originalKrd.extensions.health.bodyComposition?

{ bmi?: ... | ...; bodyFatPercent?: ... | ...; bodyWaterPercent?: ... | ...; boneMassKilograms?: ... | ...; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "bodyComposition"; leanMassKilograms?: ... | ...; measuredAt: string; sourceBridgeId?: ... | ...; version: string; } = ...

originalKrd.extensions.health.bodyComposition.bmi?

... | ... = ...

originalKrd.extensions.health.bodyComposition.bodyFatPercent?

... | ... = ...

originalKrd.extensions.health.bodyComposition.bodyWaterPercent?

... | ... = ...

originalKrd.extensions.health.bodyComposition.boneMassKilograms?

... | ... = ...

originalKrd.extensions.health.bodyComposition.externalId?

... | ... = ...

originalKrd.extensions.health.bodyComposition.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.bodyComposition.kind

"bodyComposition" = ...

originalKrd.extensions.health.bodyComposition.leanMassKilograms?

... | ... = ...

originalKrd.extensions.health.bodyComposition.measuredAt

string = ...

originalKrd.extensions.health.bodyComposition.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.bodyComposition.version

string = healthVersionSchema

originalKrd.extensions.health.daily?

{ activeCalories: number; date: string; externalId?: ... | ...; floorsClimbed?: ... | ...; intensityMinutes: { moderate: ...; vigorous: ...; }; kaiordRecordId?: ... | ...; kind: "daily"; restingCalories: number; sourceBridgeId?: ... | ...; steps: number; version: string; } = ...

originalKrd.extensions.health.daily.activeCalories

number = ...

originalKrd.extensions.health.daily.date

string = ...

originalKrd.extensions.health.daily.externalId?

... | ... = ...

originalKrd.extensions.health.daily.floorsClimbed?

... | ... = ...

originalKrd.extensions.health.daily.intensityMinutes

{ moderate: ...; vigorous: ...; } = ...

originalKrd.extensions.health.daily.intensityMinutes.moderate

... = ...

originalKrd.extensions.health.daily.intensityMinutes.vigorous

... = ...

originalKrd.extensions.health.daily.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.daily.kind

"daily" = ...

originalKrd.extensions.health.daily.restingCalories

number = ...

originalKrd.extensions.health.daily.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.daily.steps

number = ...

originalKrd.extensions.health.daily.version

string = healthVersionSchema

originalKrd.extensions.health.hrv?

{ externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "hrv"; measuredAt: string; measurementWindow: ... | ...; rMSSD: number; score?: ... | ...; sourceBridgeId?: ... | ...; version: string; } = ...

originalKrd.extensions.health.hrv.externalId?

... | ... = ...

originalKrd.extensions.health.hrv.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.hrv.kind

"hrv" = ...

originalKrd.extensions.health.hrv.measuredAt

string = ...

originalKrd.extensions.health.hrv.measurementWindow

... | ... = ...

originalKrd.extensions.health.hrv.rMSSD

number = ...

originalKrd.extensions.health.hrv.score?

... | ... = ...

originalKrd.extensions.health.hrv.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.hrv.version

string = healthVersionSchema

originalKrd.extensions.health.sleep?

{ endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "sleep"; restingHeartRate?: ... | ...; score?: ... | ...; sourceBridgeId?: ... | ...; stages: ...[]; startTime: string; totalDurationSeconds: number; version: string; } = ...

originalKrd.extensions.health.sleep.endTime

string = ...

originalKrd.extensions.health.sleep.externalId?

... | ... = ...

originalKrd.extensions.health.sleep.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.sleep.kind

"sleep" = ...

originalKrd.extensions.health.sleep.restingHeartRate?

... | ... = ...

originalKrd.extensions.health.sleep.score?

... | ... = ...

originalKrd.extensions.health.sleep.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.sleep.stages

...[] = ...

originalKrd.extensions.health.sleep.startTime

string = ...

originalKrd.extensions.health.sleep.totalDurationSeconds

number = ...

originalKrd.extensions.health.sleep.version

string = healthVersionSchema

originalKrd.extensions.health.stress?

{ averageLevel: number; endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "stress"; peakLevel: number; sourceBridgeId?: ... | ...; startTime: string; version: string; } = ...

originalKrd.extensions.health.stress.averageLevel

number = ...

originalKrd.extensions.health.stress.endTime

string = ...

originalKrd.extensions.health.stress.externalId?

... | ... = ...

originalKrd.extensions.health.stress.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.stress.kind

"stress" = ...

originalKrd.extensions.health.stress.peakLevel

number = ...

originalKrd.extensions.health.stress.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.stress.startTime

string = ...

originalKrd.extensions.health.stress.version

string = healthVersionSchema

originalKrd.extensions.health.weight?

{ externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "weight"; measuredAt: string; sourceBridgeId?: ... | ...; version: string; weightKilograms: number; } = ...

originalKrd.extensions.health.weight.externalId?

... | ... = ...

originalKrd.extensions.health.weight.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.weight.kind

"weight" = ...

originalKrd.extensions.health.weight.measuredAt

string = ...

originalKrd.extensions.health.weight.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.weight.version

string = healthVersionSchema

originalKrd.extensions.health.weight.weightKilograms

number = ...

originalKrd.extensions.structured_workout?

unknown = ...

originalKrd.laps?

object[] = ...

originalKrd.metadata

{ created: string; manufacturer?: string; product?: string; serialNumber?: string; sport?: string; subSport?: string; } = krdMetadataSchema

originalKrd.metadata.created

string = ...

originalKrd.metadata.manufacturer?

string = ...

originalKrd.metadata.product?

string = ...

originalKrd.metadata.serialNumber?

string = ...

originalKrd.metadata.sport?

string = ...

See

sportSchema for known sport values. Accepts custom strings for forward compatibility.

Optional at the metadata level because health-metric KRD types (sleep, weight, HRV, daily wellness, body composition, stress) have no associated sport. A conditional refinement on krdSchema still requires sport for the three legacy workout/activity/course types so v1.x consumers see no change for those.

originalKrd.metadata.subSport?

string = ...

originalKrd.records?

object[] = ...

originalKrd.sessions?

object[] = ...

originalKrd.type

"structured_workout" | "recorded_activity" | "course" | "sleep_record" | "weight_measurement" | "hrv_summary" | "daily_wellness" | "body_composition" | "stress_episode" = fileTypeSchema

originalKrd.version

string = ...

Returns

Promise<object[]>

validateKrdToFitToKrd

validateKrdToFitToKrd: (params) => Promise<object[]>

Parameters

params
originalKrd

{ events?: object[]; extensions?: {[key: string]: unknown; course?: unknown; course_points?: unknown; fit?: unknown; health?: {[key: string]: unknown; bodyComposition?: { bmi?: ... | ...; bodyFatPercent?: ... | ...; bodyWaterPercent?: ... | ...; boneMassKilograms?: ... | ...; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "bodyComposition"; leanMassKilograms?: ... | ...; measuredAt: string; sourceBridgeId?: ... | ...; version: string; }; daily?: { activeCalories: number; date: string; externalId?: ... | ...; floorsClimbed?: ... | ...; intensityMinutes: { moderate: ...; vigorous: ...; }; kaiordRecordId?: ... | ...; kind: "daily"; restingCalories: number; sourceBridgeId?: ... | ...; steps: number; version: string; }; hrv?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "hrv"; measuredAt: string; measurementWindow: ... | ...; rMSSD: number; score?: ... | ...; sourceBridgeId?: ... | ...; version: string; }; sleep?: { endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "sleep"; restingHeartRate?: ... | ...; score?: ... | ...; sourceBridgeId?: ... | ...; stages: ...[]; startTime: string; totalDurationSeconds: number; version: string; }; stress?: { averageLevel: number; endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "stress"; peakLevel: number; sourceBridgeId?: ... | ...; startTime: string; version: string; }; weight?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "weight"; measuredAt: string; sourceBridgeId?: ... | ...; version: string; weightKilograms: number; }; }; structured_workout?: unknown; }; laps?: object[]; metadata: { created: string; manufacturer?: string; product?: string; serialNumber?: string; sport?: string; subSport?: string; }; records?: object[]; sessions?: object[]; type: "structured_workout" | "recorded_activity" | "course" | "sleep_record" | "weight_measurement" | "hrv_summary" | "daily_wellness" | "body_composition" | "stress_episode"; version: string; }

originalKrd.events?

object[] = ...

originalKrd.extensions?

{[key: string]: unknown; course?: unknown; course_points?: unknown; fit?: unknown; health?: {[key: string]: unknown; bodyComposition?: { bmi?: ... | ...; bodyFatPercent?: ... | ...; bodyWaterPercent?: ... | ...; boneMassKilograms?: ... | ...; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "bodyComposition"; leanMassKilograms?: ... | ...; measuredAt: string; sourceBridgeId?: ... | ...; version: string; }; daily?: { activeCalories: number; date: string; externalId?: ... | ...; floorsClimbed?: ... | ...; intensityMinutes: { moderate: ...; vigorous: ...; }; kaiordRecordId?: ... | ...; kind: "daily"; restingCalories: number; sourceBridgeId?: ... | ...; steps: number; version: string; }; hrv?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "hrv"; measuredAt: string; measurementWindow: ... | ...; rMSSD: number; score?: ... | ...; sourceBridgeId?: ... | ...; version: string; }; sleep?: { endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "sleep"; restingHeartRate?: ... | ...; score?: ... | ...; sourceBridgeId?: ... | ...; stages: ...[]; startTime: string; totalDurationSeconds: number; version: string; }; stress?: { averageLevel: number; endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "stress"; peakLevel: number; sourceBridgeId?: ... | ...; startTime: string; version: string; }; weight?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "weight"; measuredAt: string; sourceBridgeId?: ... | ...; version: string; weightKilograms: number; }; }; structured_workout?: unknown; } = ...

originalKrd.extensions.course?

unknown = ...

originalKrd.extensions.course_points?

unknown = ...

originalKrd.extensions.fit?

unknown = ...

originalKrd.extensions.health?

{[key: string]: unknown; bodyComposition?: { bmi?: ... | ...; bodyFatPercent?: ... | ...; bodyWaterPercent?: ... | ...; boneMassKilograms?: ... | ...; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "bodyComposition"; leanMassKilograms?: ... | ...; measuredAt: string; sourceBridgeId?: ... | ...; version: string; }; daily?: { activeCalories: number; date: string; externalId?: ... | ...; floorsClimbed?: ... | ...; intensityMinutes: { moderate: ...; vigorous: ...; }; kaiordRecordId?: ... | ...; kind: "daily"; restingCalories: number; sourceBridgeId?: ... | ...; steps: number; version: string; }; hrv?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "hrv"; measuredAt: string; measurementWindow: ... | ...; rMSSD: number; score?: ... | ...; sourceBridgeId?: ... | ...; version: string; }; sleep?: { endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "sleep"; restingHeartRate?: ... | ...; score?: ... | ...; sourceBridgeId?: ... | ...; stages: ...[]; startTime: string; totalDurationSeconds: number; version: string; }; stress?: { averageLevel: number; endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "stress"; peakLevel: number; sourceBridgeId?: ... | ...; startTime: string; version: string; }; weight?: { externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "weight"; measuredAt: string; sourceBridgeId?: ... | ...; version: string; weightKilograms: number; }; } = ...

originalKrd.extensions.health.bodyComposition?

{ bmi?: ... | ...; bodyFatPercent?: ... | ...; bodyWaterPercent?: ... | ...; boneMassKilograms?: ... | ...; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "bodyComposition"; leanMassKilograms?: ... | ...; measuredAt: string; sourceBridgeId?: ... | ...; version: string; } = ...

originalKrd.extensions.health.bodyComposition.bmi?

... | ... = ...

originalKrd.extensions.health.bodyComposition.bodyFatPercent?

... | ... = ...

originalKrd.extensions.health.bodyComposition.bodyWaterPercent?

... | ... = ...

originalKrd.extensions.health.bodyComposition.boneMassKilograms?

... | ... = ...

originalKrd.extensions.health.bodyComposition.externalId?

... | ... = ...

originalKrd.extensions.health.bodyComposition.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.bodyComposition.kind

"bodyComposition" = ...

originalKrd.extensions.health.bodyComposition.leanMassKilograms?

... | ... = ...

originalKrd.extensions.health.bodyComposition.measuredAt

string = ...

originalKrd.extensions.health.bodyComposition.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.bodyComposition.version

string = healthVersionSchema

originalKrd.extensions.health.daily?

{ activeCalories: number; date: string; externalId?: ... | ...; floorsClimbed?: ... | ...; intensityMinutes: { moderate: ...; vigorous: ...; }; kaiordRecordId?: ... | ...; kind: "daily"; restingCalories: number; sourceBridgeId?: ... | ...; steps: number; version: string; } = ...

originalKrd.extensions.health.daily.activeCalories

number = ...

originalKrd.extensions.health.daily.date

string = ...

originalKrd.extensions.health.daily.externalId?

... | ... = ...

originalKrd.extensions.health.daily.floorsClimbed?

... | ... = ...

originalKrd.extensions.health.daily.intensityMinutes

{ moderate: ...; vigorous: ...; } = ...

originalKrd.extensions.health.daily.intensityMinutes.moderate

... = ...

originalKrd.extensions.health.daily.intensityMinutes.vigorous

... = ...

originalKrd.extensions.health.daily.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.daily.kind

"daily" = ...

originalKrd.extensions.health.daily.restingCalories

number = ...

originalKrd.extensions.health.daily.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.daily.steps

number = ...

originalKrd.extensions.health.daily.version

string = healthVersionSchema

originalKrd.extensions.health.hrv?

{ externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "hrv"; measuredAt: string; measurementWindow: ... | ...; rMSSD: number; score?: ... | ...; sourceBridgeId?: ... | ...; version: string; } = ...

originalKrd.extensions.health.hrv.externalId?

... | ... = ...

originalKrd.extensions.health.hrv.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.hrv.kind

"hrv" = ...

originalKrd.extensions.health.hrv.measuredAt

string = ...

originalKrd.extensions.health.hrv.measurementWindow

... | ... = ...

originalKrd.extensions.health.hrv.rMSSD

number = ...

originalKrd.extensions.health.hrv.score?

... | ... = ...

originalKrd.extensions.health.hrv.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.hrv.version

string = healthVersionSchema

originalKrd.extensions.health.sleep?

{ endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "sleep"; restingHeartRate?: ... | ...; score?: ... | ...; sourceBridgeId?: ... | ...; stages: ...[]; startTime: string; totalDurationSeconds: number; version: string; } = ...

originalKrd.extensions.health.sleep.endTime

string = ...

originalKrd.extensions.health.sleep.externalId?

... | ... = ...

originalKrd.extensions.health.sleep.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.sleep.kind

"sleep" = ...

originalKrd.extensions.health.sleep.restingHeartRate?

... | ... = ...

originalKrd.extensions.health.sleep.score?

... | ... = ...

originalKrd.extensions.health.sleep.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.sleep.stages

...[] = ...

originalKrd.extensions.health.sleep.startTime

string = ...

originalKrd.extensions.health.sleep.totalDurationSeconds

number = ...

originalKrd.extensions.health.sleep.version

string = healthVersionSchema

originalKrd.extensions.health.stress?

{ averageLevel: number; endTime: string; externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "stress"; peakLevel: number; sourceBridgeId?: ... | ...; startTime: string; version: string; } = ...

originalKrd.extensions.health.stress.averageLevel

number = ...

originalKrd.extensions.health.stress.endTime

string = ...

originalKrd.extensions.health.stress.externalId?

... | ... = ...

originalKrd.extensions.health.stress.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.stress.kind

"stress" = ...

originalKrd.extensions.health.stress.peakLevel

number = ...

originalKrd.extensions.health.stress.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.stress.startTime

string = ...

originalKrd.extensions.health.stress.version

string = healthVersionSchema

originalKrd.extensions.health.weight?

{ externalId?: ... | ...; kaiordRecordId?: ... | ...; kind: "weight"; measuredAt: string; sourceBridgeId?: ... | ...; version: string; weightKilograms: number; } = ...

originalKrd.extensions.health.weight.externalId?

... | ... = ...

originalKrd.extensions.health.weight.kaiordRecordId?

... | ... = ...

originalKrd.extensions.health.weight.kind

"weight" = ...

originalKrd.extensions.health.weight.measuredAt

string = ...

originalKrd.extensions.health.weight.sourceBridgeId?

... | ... = ...

originalKrd.extensions.health.weight.version

string = healthVersionSchema

originalKrd.extensions.health.weight.weightKilograms

number = ...

originalKrd.extensions.structured_workout?

unknown = ...

originalKrd.laps?

object[] = ...

originalKrd.metadata

{ created: string; manufacturer?: string; product?: string; serialNumber?: string; sport?: string; subSport?: string; } = krdMetadataSchema

originalKrd.metadata.created

string = ...

originalKrd.metadata.manufacturer?

string = ...

originalKrd.metadata.product?

string = ...

originalKrd.metadata.serialNumber?

string = ...

originalKrd.metadata.sport?

string = ...

See

sportSchema for known sport values. Accepts custom strings for forward compatibility.

Optional at the metadata level because health-metric KRD types (sleep, weight, HRV, daily wellness, body composition, stress) have no associated sport. A conditional refinement on krdSchema still requires sport for the three legacy workout/activity/course types so v1.x consumers see no change for those.

originalKrd.metadata.subSport?

string = ...

originalKrd.records?

object[] = ...

originalKrd.sessions?

object[] = ...

originalKrd.type

"structured_workout" | "recorded_activity" | "course" | "sleep_record" | "weight_measurement" | "hrv_summary" | "daily_wellness" | "body_composition" | "stress_episode" = fileTypeSchema

originalKrd.version

string = ...

Returns

Promise<object[]>

Deprecated

Use validateKrdRoundTrip.