Skip to content

@kaiord/core


@kaiord/core / createWorkoutKRD

Function: createWorkoutKRD()

createWorkoutKRD(workout, options?): object

Defined in: packages/core/src/domain/converters/workout-to-krd.converter.ts:21

Creates a valid KRD envelope for a structured workout.

Validates unknown input against workoutSchema before wrapping. Designed as a validation boundary for agent-provided data.

Parameters

workout

unknown

Unknown data to validate and wrap in KRD format

options?

CreateWorkoutKRDOptions

Optional overrides (created timestamp for testability)

Returns

object

Valid KRD with type "structured_workout"

events?

optional events?: object[]

extensions?

optional extensions?: object

Index Signature

[key: string]: unknown

extensions.course?

optional course?: unknown

extensions.course_points?

optional course_points?: unknown

extensions.fit?

optional fit?: unknown

extensions.health?

optional health?: object

Index Signature

[key: string]: unknown

extensions.health.bodyComposition?

optional bodyComposition?: object

extensions.health.bodyComposition.bmi?

optional bmi?: number

extensions.health.bodyComposition.bodyFatPercent?

optional bodyFatPercent?: number

extensions.health.bodyComposition.bodyWaterPercent?

optional bodyWaterPercent?: number

extensions.health.bodyComposition.boneMassKilograms?

optional boneMassKilograms?: number

extensions.health.bodyComposition.externalId?

optional externalId?: string

extensions.health.bodyComposition.kaiordRecordId?

optional kaiordRecordId?: string

extensions.health.bodyComposition.kind

kind: "bodyComposition"

extensions.health.bodyComposition.leanMassKilograms?

optional leanMassKilograms?: number

extensions.health.bodyComposition.measuredAt

measuredAt: string

extensions.health.bodyComposition.sourceBridgeId?

optional sourceBridgeId?: string

extensions.health.bodyComposition.version

version: string = healthVersionSchema

extensions.health.daily?

optional daily?: object

extensions.health.daily.activeCalories

activeCalories: number

extensions.health.daily.date

date: string

extensions.health.daily.externalId?

optional externalId?: string

extensions.health.daily.floorsClimbed?

optional floorsClimbed?: number

extensions.health.daily.intensityMinutes

intensityMinutes: object

extensions.health.daily.intensityMinutes.moderate

moderate: number

extensions.health.daily.intensityMinutes.vigorous

vigorous: number

extensions.health.daily.kaiordRecordId?

optional kaiordRecordId?: string

extensions.health.daily.kind

kind: "daily"

extensions.health.daily.restingCalories

restingCalories: number

extensions.health.daily.sourceBridgeId?

optional sourceBridgeId?: string

extensions.health.daily.steps

steps: number

extensions.health.daily.version

version: string = healthVersionSchema

extensions.health.hrv?

optional hrv?: object

extensions.health.hrv.externalId?

optional externalId?: string

extensions.health.hrv.kaiordRecordId?

optional kaiordRecordId?: string

extensions.health.hrv.kind

kind: "hrv"

extensions.health.hrv.measuredAt

measuredAt: string

extensions.health.hrv.measurementWindow

measurementWindow: "overnight" | "spot"

extensions.health.hrv.rMSSD

rMSSD: number

extensions.health.hrv.score?

optional score?: number

extensions.health.hrv.sourceBridgeId?

optional sourceBridgeId?: string

extensions.health.hrv.version

version: string = healthVersionSchema

extensions.health.sleep?

optional sleep?: object

extensions.health.sleep.endTime

endTime: string

extensions.health.sleep.externalId?

optional externalId?: string

extensions.health.sleep.kaiordRecordId?

optional kaiordRecordId?: string

extensions.health.sleep.kind

kind: "sleep"

extensions.health.sleep.restingHeartRate?

optional restingHeartRate?: number

extensions.health.sleep.score?

optional score?: number

extensions.health.sleep.sourceBridgeId?

optional sourceBridgeId?: string

extensions.health.sleep.stages

stages: object[]

extensions.health.sleep.startTime

startTime: string

extensions.health.sleep.totalDurationSeconds

totalDurationSeconds: number

extensions.health.sleep.version

version: string = healthVersionSchema

extensions.health.stress?

optional stress?: object

extensions.health.stress.averageLevel

averageLevel: number

extensions.health.stress.endTime

endTime: string

extensions.health.stress.externalId?

optional externalId?: string

extensions.health.stress.kaiordRecordId?

optional kaiordRecordId?: string

extensions.health.stress.kind

kind: "stress"

extensions.health.stress.peakLevel

peakLevel: number

extensions.health.stress.sourceBridgeId?

optional sourceBridgeId?: string

extensions.health.stress.startTime

startTime: string

extensions.health.stress.version

version: string = healthVersionSchema

extensions.health.weight?

optional weight?: object

extensions.health.weight.externalId?

optional externalId?: string

extensions.health.weight.kaiordRecordId?

optional kaiordRecordId?: string

extensions.health.weight.kind

kind: "weight"

extensions.health.weight.measuredAt

measuredAt: string

extensions.health.weight.sourceBridgeId?

optional sourceBridgeId?: string

extensions.health.weight.version

version: string = healthVersionSchema

extensions.health.weight.weightKilograms

weightKilograms: number

extensions.structured_workout?

optional structured_workout?: unknown

laps?

optional laps?: object[]

metadata

metadata: object = krdMetadataSchema

metadata.created

created: string

metadata.manufacturer?

optional manufacturer?: string

metadata.product?

optional product?: string

metadata.serialNumber?

optional serialNumber?: string

metadata.sport?

optional 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.

metadata.subSport?

optional subSport?: string

records?

optional records?: object[]

sessions?

optional sessions?: object[]

type

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

version

version: string

Throws

If workout validation fails