UNPKG

react-native-healthkit-bridge

Version:

A comprehensive React Native bridge for Apple HealthKit with TypeScript support, advanced authorization, and flexible data queries

711 lines (594 loc) 30.4 kB
import { HealthKitIdentifiers } from './HealthKitIdentifiers'; import { HealthKitUnits } from './HealthKitUnits'; // Enums para identificadores do HealthKit export enum QuantityTypeIdentifier { // Activity & Fitness StepCount = 'HKQuantityTypeIdentifierStepCount', DistanceWalkingRunning = 'HKQuantityTypeIdentifierDistanceWalkingRunning', DistanceCycling = 'HKQuantityTypeIdentifierDistanceCycling', DistanceSwimming = 'HKQuantityTypeIdentifierDistanceSwimming', ActiveEnergyBurned = 'HKQuantityTypeIdentifierActiveEnergyBurned', BasalEnergyBurned = 'HKQuantityTypeIdentifierBasalEnergyBurned', AppleExerciseTime = 'HKQuantityTypeIdentifierAppleExerciseTime', FlightsClimbed = 'HKQuantityTypeIdentifierFlightsClimbed', SwimmingStrokeCount = 'HKQuantityTypeIdentifierSwimmingStrokeCount', ExerciseTime = 'HKQuantityTypeIdentifierExerciseTime', StandTime = 'HKQuantityTypeIdentifierStandTime', PushCount = 'HKQuantityTypeIdentifierPushCount', DistanceWheelchair = 'HKQuantityTypeIdentifierDistanceWheelchair', DistanceDownhillSnowSports = 'HKQuantityTypeIdentifierDistanceDownhillSnowSports', // Heart HeartRate = 'HKQuantityTypeIdentifierHeartRate', RestingHeartRate = 'HKQuantityTypeIdentifierRestingHeartRate', WalkingHeartRateAverage = 'HKQuantityTypeIdentifierWalkingHeartRateAverage', HeartRateVariabilitySDNN = 'HKQuantityTypeIdentifierHeartRateVariabilitySDNN', IrregularHeartRhythmEvent = 'HKQuantityTypeIdentifierIrregularHeartRhythmEvent', HighHeartRateEvent = 'HKQuantityTypeIdentifierHighHeartRateEvent', LowHeartRateEvent = 'HKQuantityTypeIdentifierLowHeartRateEvent', // Body Measurements Height = 'HKQuantityTypeIdentifierHeight', BodyMass = 'HKQuantityTypeIdentifierBodyMass', BodyFatPercentage = 'HKQuantityTypeIdentifierBodyFatPercentage', LeanBodyMass = 'HKQuantityTypeIdentifierLeanBodyMass', BodyTemperature = 'HKQuantityTypeIdentifierBodyTemperature', WaistCircumference = 'HKQuantityTypeIdentifierWaistCircumference', HipCircumference = 'HKQuantityTypeIdentifierHipCircumference', HeadCircumference = 'HKQuantityTypeIdentifierHeadCircumference', BodyMassIndex = 'HKQuantityTypeIdentifierBodyMassIndex', // Vitals BloodPressureSystolic = 'HKQuantityTypeIdentifierBloodPressureSystolic', BloodPressureDiastolic = 'HKQuantityTypeIdentifierBloodPressureDiastolic', OxygenSaturation = 'HKQuantityTypeIdentifierOxygenSaturation', RespiratoryRate = 'HKQuantityTypeIdentifierRespiratoryRate', PeripheralPerfusionIndex = 'HKQuantityTypeIdentifierPeripheralPerfusionIndex', // Lab Results BloodGlucose = 'HKQuantityTypeIdentifierBloodGlucose', VO2Max = 'HKQuantityTypeIdentifierVO2Max', BloodAlcoholContent = 'HKQuantityTypeIdentifierBloodAlcoholContent', BloodTypeA = 'HKQuantityTypeIdentifierBloodTypeA', BloodTypeB = 'HKQuantityTypeIdentifierBloodTypeB', BloodTypeAB = 'HKQuantityTypeIdentifierBloodTypeAB', BloodTypeO = 'HKQuantityTypeIdentifierBloodTypeO', InsulinDelivery = 'HKQuantityTypeIdentifierInsulinDelivery', NumberOfTimesFallen = 'HKQuantityTypeIdentifierNumberOfTimesFallen', ElectrodermalActivity = 'HKQuantityTypeIdentifierElectrodermalActivity', InhalerUsage = 'HKQuantityTypeIdentifierInhalerUsage', // Nutrition DietaryEnergy = 'HKQuantityTypeIdentifierDietaryEnergy', DietaryFatTotal = 'HKQuantityTypeIdentifierDietaryFatTotal', DietaryFatPolyunsaturated = 'HKQuantityTypeIdentifierDietaryFatPolyunsaturated', DietaryFatMonounsaturated = 'HKQuantityTypeIdentifierDietaryFatMonounsaturated', DietaryFatSaturated = 'HKQuantityTypeIdentifierDietaryFatSaturated', DietaryCholesterol = 'HKQuantityTypeIdentifierDietaryCholesterol', DietarySodium = 'HKQuantityTypeIdentifierDietarySodium', DietaryCarbohydrates = 'HKQuantityTypeIdentifierDietaryCarbohydrates', DietaryFiber = 'HKQuantityTypeIdentifierDietaryFiber', DietarySugar = 'HKQuantityTypeIdentifierDietarySugar', DietaryProtein = 'HKQuantityTypeIdentifierDietaryProtein', DietaryVitaminA = 'HKQuantityTypeIdentifierDietaryVitaminA', DietaryVitaminB6 = 'HKQuantityTypeIdentifierDietaryVitaminB6', DietaryVitaminB12 = 'HKQuantityTypeIdentifierDietaryVitaminB12', DietaryVitaminC = 'HKQuantityTypeIdentifierDietaryVitaminC', DietaryVitaminD = 'HKQuantityTypeIdentifierDietaryVitaminD', DietaryVitaminE = 'HKQuantityTypeIdentifierDietaryVitaminE', DietaryVitaminK = 'HKQuantityTypeIdentifierDietaryVitaminK', DietaryCalcium = 'HKQuantityTypeIdentifierDietaryCalcium', DietaryIron = 'HKQuantityTypeIdentifierDietaryIron', DietaryThiamin = 'HKQuantityTypeIdentifierDietaryThiamin', DietaryRiboflavin = 'HKQuantityTypeIdentifierDietaryRiboflavin', DietaryNiacin = 'HKQuantityTypeIdentifierDietaryNiacin', DietaryFolate = 'HKQuantityTypeIdentifierDietaryFolate', DietaryBiotin = 'HKQuantityTypeIdentifierDietaryBiotin', DietaryPantothenicAcid = 'HKQuantityTypeIdentifierDietaryPantothenicAcid', DietaryPhosphorus = 'HKQuantityTypeIdentifierDietaryPhosphorus', DietaryIodine = 'HKQuantityTypeIdentifierDietaryIodine', DietaryMagnesium = 'HKQuantityTypeIdentifierDietaryMagnesium', DietaryZinc = 'HKQuantityTypeIdentifierDietaryZinc', DietarySelenium = 'HKQuantityTypeIdentifierDietarySelenium', DietaryCopper = 'HKQuantityTypeIdentifierDietaryCopper', DietaryManganese = 'HKQuantityTypeIdentifierDietaryManganese', DietaryChromium = 'HKQuantityTypeIdentifierDietaryChromium', DietaryMolybdenum = 'HKQuantityTypeIdentifierDietaryMolybdenum', DietaryChloride = 'HKQuantityTypeIdentifierDietaryChloride', DietaryPotassium = 'HKQuantityTypeIdentifierDietaryPotassium', DietaryCaffeine = 'HKQuantityTypeIdentifierDietaryCaffeine', DietaryWater = 'HKQuantityTypeIdentifierDietaryWater', // Mobility WalkingSpeed = 'HKQuantityTypeIdentifierWalkingSpeed', WalkingStepLength = 'HKQuantityTypeIdentifierWalkingStepLength', WalkingAsymmetryPercentage = 'HKQuantityTypeIdentifierWalkingAsymmetryPercentage', WalkingDoubleSupportPercentage = 'HKQuantityTypeIdentifierWalkingDoubleSupportPercentage', StairAscentSpeed = 'HKQuantityTypeIdentifierStairAscentSpeed', StairDescentSpeed = 'HKQuantityTypeIdentifierStairDescentSpeed', SixMinuteWalkTestDistance = 'HKQuantityTypeIdentifierSixMinuteWalkTestDistance', // Hearing EnvironmentalAudioExposure = 'HKQuantityTypeIdentifierEnvironmentalAudioExposure', HeadphoneAudioExposure = 'HKQuantityTypeIdentifierHeadphoneAudioExposure' } export enum CategoryTypeIdentifier { // Activity AppleStandHour = 'HKCategoryTypeIdentifierAppleStandHour', AppleStandTime = 'HKCategoryTypeIdentifierAppleStandTime', Caffeine = 'HKCategoryTypeIdentifierCaffeine', WaterConsumed = 'HKCategoryTypeIdentifierWaterConsumed', // Sleep SleepAnalysis = 'HKCategoryTypeIdentifierSleepAnalysis', // Mindfulness MindfulSession = 'HKCategoryTypeIdentifierMindfulSession', // Reproductive Health MenstrualFlow = 'HKCategoryTypeIdentifierMenstrualFlow', IntermenstrualBleeding = 'HKCategoryTypeIdentifierIntermenstrualBleeding', SexualActivity = 'HKCategoryTypeIdentifierSexualActivity', CervicalMucusQuality = 'HKCategoryTypeIdentifierCervicalMucusQuality', OvulationTestResult = 'HKCategoryTypeIdentifierOvulationTestResult', Pregnancy = 'HKCategoryTypeIdentifierPregnancy', Lactation = 'HKCategoryTypeIdentifierLactation', Contraceptive = 'HKCategoryTypeIdentifierContraceptive', // Heart HighHeartRateEvent = 'HKCategoryTypeIdentifierHighHeartRateEvent', LowHeartRateEvent = 'HKCategoryTypeIdentifierLowHeartRateEvent', IrregularHeartRhythmEvent = 'HKCategoryTypeIdentifierIrregularHeartRhythmEvent', HeartRhythm = 'HKCategoryTypeIdentifierHeartRhythm', // Hearing AudioExposureEvent = 'HKCategoryTypeIdentifierAudioExposureEvent', // Mobility WalkingSteadiness = 'HKCategoryTypeIdentifierWalkingSteadiness', StairAscentEvent = 'HKCategoryTypeIdentifierStairAscentEvent', StairDescentEvent = 'HKCategoryTypeIdentifierStairDescentEvent', // Other ToothbrushingEvent = 'HKCategoryTypeIdentifierToothbrushingEvent', HandwashingEvent = 'HKCategoryTypeIdentifierHandwashingEvent', Dizziness = 'HKCategoryTypeIdentifierDizziness', Headache = 'HKCategoryTypeIdentifierHeadache', Acne = 'HKCategoryTypeIdentifierAcne', AppetiteChanges = 'HKCategoryTypeIdentifierAppetiteChanges', ChestTightnessOrPain = 'HKCategoryTypeIdentifierChestTightnessOrPain', Chills = 'HKCategoryTypeIdentifierChills', Constipation = 'HKCategoryTypeIdentifierConstipation', Coughing = 'HKCategoryTypeIdentifierCoughing', Diarrhea = 'HKCategoryTypeIdentifierDiarrhea', DrySkin = 'HKCategoryTypeIdentifierDrySkin', Fainting = 'HKCategoryTypeIdentifierFainting', Fatigue = 'HKCategoryTypeIdentifierFatigue', Fever = 'HKCategoryTypeIdentifierFever', GeneralChestDiscomfort = 'HKCategoryTypeIdentifierGeneralChestDiscomfort', HairLoss = 'HKCategoryTypeIdentifierHairLoss', HotFlashes = 'HKCategoryTypeIdentifierHotFlashes', LossOfSmell = 'HKCategoryTypeIdentifierLossOfSmell', LossOfTaste = 'HKCategoryTypeIdentifierLossOfTaste', LowerBackPain = 'HKCategoryTypeIdentifierLowerBackPain', MemoryLapse = 'HKCategoryTypeIdentifierMemoryLapse', MoodChanges = 'HKCategoryTypeIdentifierMoodChanges', Nausea = 'HKCategoryTypeIdentifierNausea', NightSweats = 'HKCategoryTypeIdentifierNightSweats', PelvicPain = 'HKCategoryTypeIdentifierPelvicPain', RapidPoundingOrFlutteringHeartbeat = 'HKCategoryTypeIdentifierRapidPoundingOrFlutteringHeartbeat', RunnyNose = 'HKCategoryTypeIdentifierRunnyNose', ShortnessOfBreath = 'HKCategoryTypeIdentifierShortnessOfBreath', SinusCongestion = 'HKCategoryTypeIdentifierSinusCongestion', SkippedHeartbeat = 'HKCategoryTypeIdentifierSkippedHeartbeat', SleepChanges = 'HKCategoryTypeIdentifierSleepChanges', SoreThroat = 'HKCategoryTypeIdentifierSoreThroat', VaginalDryness = 'HKCategoryTypeIdentifierVaginalDryness', Vomiting = 'HKCategoryTypeIdentifierVomiting', Wheezing = 'HKCategoryTypeIdentifierWheezing' } export enum CharacteristicTypeIdentifier { BiologicalSex = 'HKCharacteristicTypeIdentifierBiologicalSex', DateOfBirth = 'HKCharacteristicTypeIdentifierDateOfBirth', BloodType = 'HKCharacteristicTypeIdentifierBloodType', FitzpatrickSkinType = 'HKCharacteristicTypeIdentifierFitzpatrickSkinType' } export enum WorkoutTypeIdentifier { Workout = 'HKWorkoutTypeIdentifier' } // Enums para unidades do HealthKit export enum HealthKitUnit { // Count count = 'count', // Distance meters = 'm', kilometers = 'km', millimeters = 'mm', centimeters = 'cm', feet = 'ft', inches = 'in', miles = 'mi', // Energy kilocalories = 'kcal', calories = 'cal', kilojoules = 'kJ', // Time seconds = 's', minutes = 'min', hours = 'hr', // Heart rate beatsPerMinute = 'bpm', // Mass kilograms = 'kg', grams = 'g', pounds = 'lb', ounces = 'oz', // Temperature celsius = '°C', fahrenheit = '°F', // Pressure millimetersOfMercury = 'mmHg', // Blood glucose milligramsPerDeciliter = 'mg/dL', millimolesPerLiter = 'mmol/L', // Percentage percent = '%', // Respiratory rate breathsPerMinute = 'breaths/min', // VO2 Max millilitersPerKilogramPerMinute = 'mL/kg·min', // Heart rate variability milliseconds = 'ms', // Volume liters = 'L', milliliters = 'mL', fluidOunces = 'fl_oz', cups = 'cup', // Speed metersPerSecond = 'm/s', milesPerHour = 'mi/hr', // Audio exposure decibels = 'dB', // Blood alcohol gramsPerDeciliter = 'g/dL', // Insulin internationalUnits = 'IU', // Electrodermal activity siemens = 'S', // Mobility countPerMinute = 'count/min' } // Tipos para mapeamento de identificadores para unidades export type QuantityTypeToUnit = { // Activity & Fitness [QuantityTypeIdentifier.StepCount]: HealthKitUnit.count; [QuantityTypeIdentifier.FlightsClimbed]: HealthKitUnit.count; [QuantityTypeIdentifier.SwimmingStrokeCount]: HealthKitUnit.count; [QuantityTypeIdentifier.PushCount]: HealthKitUnit.count; [QuantityTypeIdentifier.NumberOfTimesFallen]: HealthKitUnit.count; [QuantityTypeIdentifier.DistanceWalkingRunning]: HealthKitUnit.meters; [QuantityTypeIdentifier.DistanceCycling]: HealthKitUnit.meters; [QuantityTypeIdentifier.DistanceSwimming]: HealthKitUnit.meters; [QuantityTypeIdentifier.DistanceWheelchair]: HealthKitUnit.meters; [QuantityTypeIdentifier.DistanceDownhillSnowSports]: HealthKitUnit.meters; [QuantityTypeIdentifier.ActiveEnergyBurned]: HealthKitUnit.kilocalories; [QuantityTypeIdentifier.BasalEnergyBurned]: HealthKitUnit.kilocalories; [QuantityTypeIdentifier.DietaryEnergy]: HealthKitUnit.kilocalories; [QuantityTypeIdentifier.AppleExerciseTime]: HealthKitUnit.minutes; [QuantityTypeIdentifier.ExerciseTime]: HealthKitUnit.minutes; [QuantityTypeIdentifier.StandTime]: HealthKitUnit.minutes; // Heart [QuantityTypeIdentifier.HeartRate]: HealthKitUnit.beatsPerMinute; [QuantityTypeIdentifier.RestingHeartRate]: HealthKitUnit.beatsPerMinute; [QuantityTypeIdentifier.WalkingHeartRateAverage]: HealthKitUnit.beatsPerMinute; [QuantityTypeIdentifier.HeartRateVariabilitySDNN]: HealthKitUnit.milliseconds; // Body Measurements [QuantityTypeIdentifier.BodyMass]: HealthKitUnit.kilograms; [QuantityTypeIdentifier.LeanBodyMass]: HealthKitUnit.kilograms; [QuantityTypeIdentifier.Height]: HealthKitUnit.centimeters; [QuantityTypeIdentifier.WaistCircumference]: HealthKitUnit.centimeters; [QuantityTypeIdentifier.HipCircumference]: HealthKitUnit.centimeters; [QuantityTypeIdentifier.HeadCircumference]: HealthKitUnit.centimeters; [QuantityTypeIdentifier.BodyTemperature]: HealthKitUnit.celsius; [QuantityTypeIdentifier.BloodPressureSystolic]: HealthKitUnit.millimetersOfMercury; [QuantityTypeIdentifier.BloodPressureDiastolic]: HealthKitUnit.millimetersOfMercury; [QuantityTypeIdentifier.BloodGlucose]: HealthKitUnit.milligramsPerDeciliter; [QuantityTypeIdentifier.BloodAlcoholContent]: HealthKitUnit.gramsPerDeciliter; [QuantityTypeIdentifier.OxygenSaturation]: HealthKitUnit.percent; [QuantityTypeIdentifier.BodyFatPercentage]: HealthKitUnit.percent; [QuantityTypeIdentifier.PeripheralPerfusionIndex]: HealthKitUnit.percent; [QuantityTypeIdentifier.RespiratoryRate]: HealthKitUnit.breathsPerMinute; [QuantityTypeIdentifier.VO2Max]: HealthKitUnit.millilitersPerKilogramPerMinute; [QuantityTypeIdentifier.InsulinDelivery]: HealthKitUnit.internationalUnits; [QuantityTypeIdentifier.ElectrodermalActivity]: HealthKitUnit.siemens; [QuantityTypeIdentifier.EnvironmentalAudioExposure]: HealthKitUnit.decibels; [QuantityTypeIdentifier.HeadphoneAudioExposure]: HealthKitUnit.decibels; // Mobility [QuantityTypeIdentifier.WalkingSpeed]: HealthKitUnit.metersPerSecond; [QuantityTypeIdentifier.WalkingStepLength]: HealthKitUnit.centimeters; [QuantityTypeIdentifier.WalkingAsymmetryPercentage]: HealthKitUnit.percent; [QuantityTypeIdentifier.WalkingDoubleSupportPercentage]: HealthKitUnit.percent; [QuantityTypeIdentifier.StairAscentSpeed]: HealthKitUnit.metersPerSecond; [QuantityTypeIdentifier.StairDescentSpeed]: HealthKitUnit.metersPerSecond; [QuantityTypeIdentifier.SixMinuteWalkTestDistance]: HealthKitUnit.meters; // Nutrition - Mass [QuantityTypeIdentifier.DietaryFatTotal]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryFatPolyunsaturated]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryFatMonounsaturated]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryFatSaturated]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryCholesterol]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryCarbohydrates]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryFiber]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietarySugar]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryProtein]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryCaffeine]: HealthKitUnit.grams; // Nutrition - Volume [QuantityTypeIdentifier.DietaryWater]: HealthKitUnit.liters; // Nutrition - Minerals [QuantityTypeIdentifier.DietarySodium]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryCalcium]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryIron]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryPhosphorus]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryIodine]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryMagnesium]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryZinc]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietarySelenium]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryCopper]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryManganese]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryChromium]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryMolybdenum]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryChloride]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryPotassium]: HealthKitUnit.grams; // Nutrition - Vitamins [QuantityTypeIdentifier.DietaryVitaminA]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryVitaminB6]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryVitaminB12]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryVitaminC]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryVitaminD]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryVitaminE]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryVitaminK]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryThiamin]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryRiboflavin]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryNiacin]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryFolate]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryBiotin]: HealthKitUnit.grams; [QuantityTypeIdentifier.DietaryPantothenicAcid]: HealthKitUnit.grams; // Blood Types [QuantityTypeIdentifier.BloodTypeA]: HealthKitUnit.count; [QuantityTypeIdentifier.BloodTypeB]: HealthKitUnit.count; [QuantityTypeIdentifier.BloodTypeAB]: HealthKitUnit.count; [QuantityTypeIdentifier.BloodTypeO]: HealthKitUnit.count; // Other [QuantityTypeIdentifier.InhalerUsage]: HealthKitUnit.count, }; // Tipos para os dados retornados (compatíveis com o provider) export interface HealthKitSample { value: number; startDate: string; endDate: string; uuid?: string; sourceRevision?: any; } export interface HealthKitWorkout { workoutActivityType: number; duration: number; startDate: string; endDate: string; uuid?: string; sourceRevision?: any; } export interface AuthorizationStatus { identifier: string; status: string; } export interface HealthKitTypeInfo { identifier: string; name: string; description: string; category: string; type: string; } // Interface para compatibilidade (versão atual) export interface HealthKitBridgeAPICompat { // Autorização checkAvailability(): Promise<boolean>; // 1. Autorização completa (leitura e escrita de todos os dados) requestFullAuthorization(): Promise<boolean>; // 2. Obter tipos disponíveis para seleção do usuário getAvailableTypesForAuthorization(): Promise<HealthKitTypeInfo[]>; // 3. Autorização de leitura específica requestReadAuthorization( readTypes: Array<QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier> ): Promise<boolean>; // 4. Autorização de escrita específica requestWriteAuthorization( writeTypes: Array<QuantityTypeIdentifier | CategoryTypeIdentifier> ): Promise<boolean>; // 5. Autorização seletiva (leitura e escrita) requestSelectiveAuthorization( readTypes: Array<QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier>, writeTypes?: Array<QuantityTypeIdentifier | CategoryTypeIdentifier> ): Promise<boolean>; // 6. Método legado mantido para compatibilidade requestAuthorization(): Promise<boolean>; getAuthorizationStatus( identifiers: Array<QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier> ): Promise<AuthorizationStatus[]>; // 7. Verificação de disponibilidade de tipos isTypeAvailable(identifiers: string[]): Promise<Record<string, boolean>>; // 8. Verificação de permissão de leitura canReadType(identifiers: string[]): Promise<Record<string, boolean>>; // 9. Verificação de permissão de escrita canWriteType(identifiers: string[]): Promise<Record<string, boolean>>; // 10. Status detalhado de autorização getDetailedAuthorizationStatus(identifiers: string[]): Promise<Array<{ identifier: string; status: string; canRead: boolean; canWrite: boolean; isAvailable: boolean; }>>; /** * 🚀 NOVA FEATURE: Autorização Inteligente * Verifica quais tipos não estão autorizados e solicita apenas os necessários */ requestSmartAuthorization( requiredTypes: Array<QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier> ): Promise<{ success: boolean; authorizedTypes: string[]; deniedTypes: string[]; notDeterminedTypes: string[]; message: string; }>; /** * 🚀 NOVA FEATURE: Verificar e Solicitar Autorização para Dados Específicos * Verifica se um tipo específico está autorizado e solicita se necessário */ ensureDataTypeAuthorization( dataType: QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier ): Promise<{ isAuthorized: boolean; wasRequested: boolean; message: string; }>; // Consultas por dias getQuantitySamplesForDays<T extends QuantityTypeIdentifier>( identifier: T, unit: string, days: number ): Promise<HealthKitSample[]>; getCategorySamplesForDays( identifier: CategoryTypeIdentifier, days: number ): Promise<HealthKitSample[]>; getWorkoutsForDays(days: number): Promise<HealthKitWorkout[]>; // Consultas por range getQuantitySamplesForRange<T extends QuantityTypeIdentifier>( identifier: T, unit: string, startDate: string, endDate: string ): Promise<HealthKitSample[]>; getCategorySamplesForRange( identifier: CategoryTypeIdentifier, startDate: string, endDate: string ): Promise<HealthKitSample[]>; // Informações de tipos getAvailableTypes(): Promise<HealthKitTypeInfo[]>; getTypeInfo( identifier: QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier ): Promise<HealthKitTypeInfo>; } // Funções helper para type safety export function getQuantityUnit( identifier: QuantityTypeIdentifier ): string { const unitMap: Record<string, string> = { // Activity & Fitness [QuantityTypeIdentifier.StepCount]: HealthKitUnit.count, [QuantityTypeIdentifier.FlightsClimbed]: HealthKitUnit.count, [QuantityTypeIdentifier.SwimmingStrokeCount]: HealthKitUnit.count, [QuantityTypeIdentifier.PushCount]: HealthKitUnit.count, [QuantityTypeIdentifier.NumberOfTimesFallen]: HealthKitUnit.count, [QuantityTypeIdentifier.DistanceWalkingRunning]: HealthKitUnit.meters, [QuantityTypeIdentifier.DistanceCycling]: HealthKitUnit.meters, [QuantityTypeIdentifier.DistanceSwimming]: HealthKitUnit.meters, [QuantityTypeIdentifier.DistanceWheelchair]: HealthKitUnit.meters, [QuantityTypeIdentifier.DistanceDownhillSnowSports]: HealthKitUnit.meters, [QuantityTypeIdentifier.ActiveEnergyBurned]: HealthKitUnit.kilocalories, [QuantityTypeIdentifier.BasalEnergyBurned]: HealthKitUnit.kilocalories, [QuantityTypeIdentifier.DietaryEnergy]: HealthKitUnit.kilocalories, [QuantityTypeIdentifier.AppleExerciseTime]: HealthKitUnit.minutes, [QuantityTypeIdentifier.ExerciseTime]: HealthKitUnit.minutes, [QuantityTypeIdentifier.StandTime]: HealthKitUnit.minutes, // Heart [QuantityTypeIdentifier.HeartRate]: HealthKitUnit.beatsPerMinute, [QuantityTypeIdentifier.RestingHeartRate]: HealthKitUnit.beatsPerMinute, [QuantityTypeIdentifier.WalkingHeartRateAverage]: HealthKitUnit.beatsPerMinute, [QuantityTypeIdentifier.HeartRateVariabilitySDNN]: HealthKitUnit.milliseconds, [QuantityTypeIdentifier.IrregularHeartRhythmEvent]: HealthKitUnit.count, [QuantityTypeIdentifier.HighHeartRateEvent]: HealthKitUnit.count, [QuantityTypeIdentifier.LowHeartRateEvent]: HealthKitUnit.count, // Body Measurements [QuantityTypeIdentifier.BodyMass]: HealthKitUnit.kilograms, [QuantityTypeIdentifier.LeanBodyMass]: HealthKitUnit.kilograms, [QuantityTypeIdentifier.Height]: HealthKitUnit.centimeters, [QuantityTypeIdentifier.WaistCircumference]: HealthKitUnit.centimeters, [QuantityTypeIdentifier.HipCircumference]: HealthKitUnit.centimeters, [QuantityTypeIdentifier.HeadCircumference]: HealthKitUnit.centimeters, [QuantityTypeIdentifier.BodyTemperature]: HealthKitUnit.celsius, [QuantityTypeIdentifier.BloodPressureSystolic]: HealthKitUnit.millimetersOfMercury, [QuantityTypeIdentifier.BloodPressureDiastolic]: HealthKitUnit.millimetersOfMercury, [QuantityTypeIdentifier.BloodGlucose]: HealthKitUnit.milligramsPerDeciliter, [QuantityTypeIdentifier.BloodAlcoholContent]: HealthKitUnit.gramsPerDeciliter, [QuantityTypeIdentifier.OxygenSaturation]: HealthKitUnit.percent, [QuantityTypeIdentifier.BodyFatPercentage]: HealthKitUnit.percent, [QuantityTypeIdentifier.PeripheralPerfusionIndex]: HealthKitUnit.percent, [QuantityTypeIdentifier.RespiratoryRate]: HealthKitUnit.breathsPerMinute, [QuantityTypeIdentifier.VO2Max]: HealthKitUnit.millilitersPerKilogramPerMinute, [QuantityTypeIdentifier.InsulinDelivery]: HealthKitUnit.internationalUnits, [QuantityTypeIdentifier.ElectrodermalActivity]: HealthKitUnit.siemens, [QuantityTypeIdentifier.EnvironmentalAudioExposure]: HealthKitUnit.decibels, [QuantityTypeIdentifier.HeadphoneAudioExposure]: HealthKitUnit.decibels, // Mobility [QuantityTypeIdentifier.WalkingSpeed]: HealthKitUnit.metersPerSecond, [QuantityTypeIdentifier.WalkingStepLength]: HealthKitUnit.centimeters, [QuantityTypeIdentifier.WalkingAsymmetryPercentage]: HealthKitUnit.percent, [QuantityTypeIdentifier.WalkingDoubleSupportPercentage]: HealthKitUnit.percent, [QuantityTypeIdentifier.StairAscentSpeed]: HealthKitUnit.metersPerSecond, [QuantityTypeIdentifier.StairDescentSpeed]: HealthKitUnit.metersPerSecond, [QuantityTypeIdentifier.SixMinuteWalkTestDistance]: HealthKitUnit.meters, // Nutrition - Mass [QuantityTypeIdentifier.DietaryFatTotal]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryFatPolyunsaturated]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryFatMonounsaturated]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryFatSaturated]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryCholesterol]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryCarbohydrates]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryFiber]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietarySugar]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryProtein]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryCaffeine]: HealthKitUnit.grams, // Nutrition - Volume [QuantityTypeIdentifier.DietaryWater]: HealthKitUnit.liters, // Nutrition - Minerals [QuantityTypeIdentifier.DietarySodium]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryCalcium]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryIron]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryPhosphorus]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryIodine]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryMagnesium]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryZinc]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietarySelenium]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryCopper]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryManganese]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryChromium]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryMolybdenum]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryChloride]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryPotassium]: HealthKitUnit.grams, // Nutrition - Vitamins [QuantityTypeIdentifier.DietaryVitaminA]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryVitaminB6]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryVitaminB12]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryVitaminC]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryVitaminD]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryVitaminE]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryVitaminK]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryThiamin]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryRiboflavin]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryNiacin]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryFolate]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryBiotin]: HealthKitUnit.grams, [QuantityTypeIdentifier.DietaryPantothenicAcid]: HealthKitUnit.grams, // Blood Types [QuantityTypeIdentifier.BloodTypeA]: HealthKitUnit.count, [QuantityTypeIdentifier.BloodTypeB]: HealthKitUnit.count, [QuantityTypeIdentifier.BloodTypeAB]: HealthKitUnit.count, [QuantityTypeIdentifier.BloodTypeO]: HealthKitUnit.count, // Other [QuantityTypeIdentifier.InhalerUsage]: HealthKitUnit.count, }; return unitMap[identifier]; } // Tipos utilitários export type AllHealthKitIdentifiers = QuantityTypeIdentifier | CategoryTypeIdentifier | CharacteristicTypeIdentifier | WorkoutTypeIdentifier; export type QuantityTypeIdentifiers = keyof typeof QuantityTypeIdentifier; export type CategoryTypeIdentifiers = keyof typeof CategoryTypeIdentifier; export type CharacteristicTypeIdentifiers = keyof typeof CharacteristicTypeIdentifier; export type HealthKitUnits = keyof typeof HealthKitUnit; // Constantes para facilitar o uso export const HEALTHKIT_IDENTIFIERS = { ...QuantityTypeIdentifier, ...CategoryTypeIdentifier, ...CharacteristicTypeIdentifier, ...WorkoutTypeIdentifier } as const; export const HEALTHKIT_UNITS = HealthKitUnit;