@sports-alliance/sports-lib
Version:
A Library to for importing / exporting and processing GPX, TCX, FIT and JSON files from services such as Strava, Movescount, Garmin, Polar etc
46 lines (45 loc) • 2.15 kB
TypeScript
import { ActivityInterface } from '../../activities/activity.interface';
import { type DurabilityEvidenceValue } from '../../data/data.durability-evidence';
export interface DurabilityProtocol {
smoothingWindowSeconds: number;
warmupSeconds: number;
cooldownSeconds: number;
minimumActivityDurationSeconds: number;
minimumQualifyingDurationSeconds: number;
minimumCoverageRatio: number;
maximumOutputCoefficientOfVariation: number;
maximumHardZoneRatio: number;
maximumFlatGradePercent: number;
minimumFlatGradeCoverageRatio: number;
minimumPoolComparableLengths: number;
minimumPoolThirdLengths: number;
}
export declare const DEFAULT_DURABILITY_PROTOCOL: Readonly<DurabilityProtocol>;
export interface DurabilityTimelinePoint {
elapsedSeconds: number;
sampleDurationSeconds: number;
output: number;
heartRateBpm: number;
aerobicEfficiency: number;
rawOutput: number;
rawHeartRateBpm: number;
inComparisonWindow: boolean;
comparisonHalf: 'first' | 'second' | null;
}
export interface ActivityDurabilityAnalysis {
/** Aerobic-only display series. Pool evidence is length-based and intentionally has no 1 Hz timeline. */
timeline: DurabilityTimelinePoint[];
summary: DurabilityEvidenceValue | null;
}
export interface AnalyzeActivityDurabilityOptions {
includeTimeline?: boolean;
}
/**
* Hashes the effective protocol-v1 source inputs without retaining a second copy of long streams.
* The digest is an invalidation key, not a security boundary.
*/
export declare function calculateActivityDurabilitySourceFingerprint(activity: ActivityInterface): string;
/** True when the activity still contains raw inputs from which durability can be recalculated. */
export declare function hasActivityDurabilitySourceData(activity: ActivityInterface): boolean;
export declare function calculateAerobicEfficiency(output: number | null | undefined, heartRateBpm: number | null | undefined): number | null;
export declare function analyzeActivityDurability(activity: ActivityInterface, options?: AnalyzeActivityDurabilityOptions): ActivityDurabilityAnalysis;