From 24b3961263c977af0b2347eae9d459b4afe52dce Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:28:04 +0000 Subject: [PATCH] feat: add logging support and SSE event-level discrimination MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This release introduces SDK-level logging configuration capabilities and enhanced SSE stream processing for discriminated union types. The logging feature is opt-in and silent by default, requiring explicit configuration to produce output. Key changes: - Add logging configuration to ClientOptions builder with LogConfig parameter - Add SSE event-level discrimination support for discriminated unions - Remove InputStream-based file upload methods from LabReportClient - Add SSE_EVENT_DISCRIMINATED stream type with new iterator implementation - Update lab report documentation to reference multiple file uploads 🌿 Generated with Fern --- .fern/metadata.json | 7 +- .fernignore | 1 + build.gradle | 4 +- changelog.md | 37 ++ reference.md | 341 ++++++++++- src/main/java/com/vital/api/AsyncVital.java | 16 + .../java/com/vital/api/AsyncVitalBuilder.java | 24 + src/main/java/com/vital/api/Vital.java | 16 + src/main/java/com/vital/api/VitalBuilder.java | 24 + .../com/vital/api/core/ClientOptions.java | 36 +- .../com/vital/api/core/ConsoleLogger.java | 51 ++ src/main/java/com/vital/api/core/ILogger.java | 38 ++ .../java/com/vital/api/core/LogConfig.java | 98 ++++ .../java/com/vital/api/core/LogLevel.java | 36 ++ src/main/java/com/vital/api/core/Logger.java | 97 ++++ .../vital/api/core/LoggingInterceptor.java | 104 ++++ .../java/com/vital/api/core/SseEvent.java | 114 ++++ .../com/vital/api/core/SseEventParser.java | 228 ++++++++ src/main/java/com/vital/api/core/Stream.java | 221 ++++++- .../activity/AsyncRawActivityClient.java | 8 +- .../resources/activity/RawActivityClient.java | 8 +- .../requests/ActivityGetRawRequest.java | 16 + .../activity/requests/ActivityGetRequest.java | 16 + .../aggregate/AsyncRawAggregateClient.java | 12 +- .../aggregate/RawAggregateClient.java | 12 +- ...tTaskHistoryForContinuousQueryRequest.java | 10 + .../aggregate/requests/QueryBatch.java | 16 + .../resources/body/AsyncRawBodyClient.java | 8 +- .../api/resources/body/RawBodyClient.java | 8 +- .../body/requests/BodyGetRawRequest.java | 16 + .../body/requests/BodyGetRequest.java | 16 + .../compendium/AsyncCompendiumClient.java | 48 ++ .../compendium/AsyncRawCompendiumClient.java | 191 ++++++ .../compendium/CompendiumClient.java | 45 ++ .../compendium/RawCompendiumClient.java | 156 +++++ .../requests/ConvertCompendiumBody.java | 245 ++++++++ .../requests/SearchCompendiumBody.java | 345 +++++++++++ .../types/CompendiumConvertRequestTeamId.java | 22 + .../types/CompendiumSearchRequestTeamId.java | 22 + .../devices/AsyncRawDevicesClient.java | 4 +- .../resources/devices/RawDevicesClient.java | 4 +- .../requests/DevicesGetRawRequest.java | 10 + .../AsyncRawElectrocardiogramClient.java | 4 +- .../RawElectrocardiogramClient.java | 4 +- .../requests/ElectrocardiogramGetRequest.java | 16 + .../insurance/AsyncRawInsuranceClient.java | 12 +- .../insurance/RawInsuranceClient.java | 12 +- .../InsuranceSearchDiagnosisRequest.java | 16 + .../InsuranceSearchGetPayorInfoRequest.java | 10 + .../requests/PayorSearchRequest.java | 10 + .../introspect/AsyncRawIntrospectClient.java | 8 +- .../introspect/RawIntrospectClient.java | 8 +- ...trospectGetUserHistoricalPullsRequest.java | 10 + .../IntrospectGetUserResourcesRequest.java | 10 + .../labaccount/AsyncLabAccountClient.java | 46 ++ .../labaccount/AsyncRawLabAccountClient.java | 118 ++++ .../labaccount/LabAccountClient.java | 44 ++ .../labaccount/RawLabAccountClient.java | 97 ++++ .../LabAccountGetTeamLabAccountsRequest.java | 132 +++++ .../labreport/AsyncLabReportClient.java | 26 +- .../labreport/AsyncRawLabReportClient.java | 241 +------- .../resources/labreport/LabReportClient.java | 25 +- .../labreport/RawLabReportClient.java | 180 +----- .../BodyCreateLabReportParserJob.java | 16 + .../labtests/AsyncLabTestsClient.java | 20 +- .../labtests/AsyncRawLabTestsClient.java | 194 ++++--- .../resources/labtests/LabTestsClient.java | 20 +- .../resources/labtests/RawLabTestsClient.java | 194 ++++--- ...OrdersHelpersAppointmentCancelRequest.java | 16 + .../requests/CreateLabTestRequest.java | 99 +++- .../CreateOrderRequestCompatible.java | 48 ++ .../labtests/requests/ImportOrderBody.java | 16 + .../LabTestsBookPscAppointmentRequest.java | 16 + .../requests/LabTestsGetAreaInfoRequest.java | 16 + .../requests/LabTestsGetByIdRequest.java | 10 + .../requests/LabTestsGetLabelsPdfRequest.java | 16 + ...tsGetMarkersByLabAndProviderIdRequest.java | 10 + .../LabTestsGetMarkersForLabTestRequest.java | 10 + .../LabTestsGetMarkersForOrderSetRequest.java | 16 + .../requests/LabTestsGetMarkersRequest.java | 45 +- .../LabTestsGetOrderPscInfoRequest.java | 10 + .../requests/LabTestsGetOrdersRequest.java | 10 + .../requests/LabTestsGetPaginatedRequest.java | 10 + ...ebotomyAppointmentAvailabilityRequest.java | 16 + ...sGetPscAppointmentAvailabilityRequest.java | 29 +- .../requests/LabTestsGetPscInfoRequest.java | 16 + .../labtests/requests/LabTestsGetRequest.java | 10 + .../LabTestsSimulateOrderProcessRequest.java | 10 + .../requests/RequestAppointmentRequest.java | 59 +- .../requests/UpdateLabTestRequest.java | 10 + .../requests/ValidateIcdCodesBody.java | 10 + ...GetlabsSchemaAppointmentCancelRequest.java | 16 + .../resources/link/AsyncRawLinkClient.java | 95 +-- .../api/resources/link/RawLinkClient.java | 95 +-- .../link/requests/BeginLinkTokenRequest.java | 16 + .../requests/BulkExportConnectionsBody.java | 16 + .../requests/BulkImportConnectionsBody.java | 16 + .../requests/BulkPauseConnectionsBody.java | 16 + .../BulkTriggerHistoricalPullBody.java | 16 + .../CompletePasswordProviderMfaBody.java | 16 + .../DemoConnectionCreationPayload.java | 16 + .../link/requests/EmailAuthLink.java | 16 + .../link/requests/EmailProviderAuthLink.java | 16 + .../link/requests/IndividualProviderData.java | 16 + .../link/requests/LinkCodeCreateRequest.java | 16 + .../LinkGenerateOauthLinkRequest.java | 10 + .../requests/LinkGetAllProvidersRequest.java | 10 + .../link/requests/LinkListBulkOpsRequest.java | 10 + .../link/requests/LinkTokenExchange.java | 16 + .../link/requests/LinkTokenStateRequest.java | 10 + .../requests/LinkTokenValidationRequest.java | 16 + .../link/requests/ManualConnectionData.java | 129 ++++- .../link/requests/PasswordAuthLink.java | 16 + .../resources/meal/AsyncRawMealClient.java | 4 +- .../api/resources/meal/RawMealClient.java | 4 +- .../meal/requests/MealGetRequest.java | 16 + .../AsyncRawMenstrualCycleClient.java | 4 +- .../RawMenstrualCycleClient.java | 4 +- .../requests/MenstrualCycleGetRequest.java | 16 + .../resources/order/AsyncRawOrderClient.java | 4 +- .../api/resources/order/RawOrderClient.java | 4 +- .../order/requests/ResendWebhookBody.java | 10 + .../AsyncRawOrderTransactionClient.java | 12 +- .../RawOrderTransactionClient.java | 12 +- .../resources/payor/AsyncRawPayorClient.java | 4 +- .../api/resources/payor/RawPayorClient.java | 4 +- .../payor/requests/CreatePayorBody.java | 16 + .../profile/AsyncRawProfileClient.java | 8 +- .../resources/profile/RawProfileClient.java | 8 +- .../requests/ProfileGetRawRequest.java | 10 + .../profile/requests/ProfileGetRequest.java | 10 + .../providers/AsyncRawProvidersClient.java | 4 +- .../providers/RawProvidersClient.java | 4 +- .../requests/ProvidersGetAllRequest.java | 10 + .../resources/sleep/AsyncRawSleepClient.java | 12 +- .../api/resources/sleep/RawSleepClient.java | 12 +- .../sleep/requests/SleepGetRawRequest.java | 16 + .../sleep/requests/SleepGetRequest.java | 16 + .../sleepcycle/AsyncRawSleepCycleClient.java | 4 +- .../sleepcycle/RawSleepCycleClient.java | 4 +- .../requests/SleepCycleGetRequest.java | 16 + .../resources/team/AsyncRawTeamClient.java | 31 +- .../api/resources/team/RawTeamClient.java | 31 +- .../requests/TeamGetLinkConfigRequest.java | 10 + .../TeamGetSourcePrioritiesRequest.java | 10 + .../team/requests/TeamGetUserByIdRequest.java | 10 + .../testkit/AsyncRawTestkitClient.java | 8 +- .../resources/testkit/RawTestkitClient.java | 8 +- .../CreateRegistrableTestkitOrderRequest.java | 16 + .../requests/RegisterTestkitRequest.java | 16 + .../resources/user/AsyncRawUserClient.java | 76 +-- .../api/resources/user/RawUserClient.java | 76 +-- .../user/requests/CreateInsuranceRequest.java | 16 + .../requests/CreateUserPortalUrlBody.java | 16 + .../user/requests/UserCreateBody.java | 16 + .../user/requests/UserGetAllRequest.java | 10 + .../UserGetLatestInsuranceRequest.java | 10 + .../user/requests/UserInfoCreateRequest.java | 30 +- .../user/requests/UserPatchBody.java | 10 + .../user/requests/UserRefreshRequest.java | 10 + .../user/requests/UserUndoDeleteRequest.java | 10 + .../vitals/AsyncRawVitalsClient.java | 312 +++++----- .../api/resources/vitals/RawVitalsClient.java | 312 +++++----- .../VitalsAfibBurdenGroupedRequest.java | 16 + ...alsBasalBodyTemperatureGroupedRequest.java | 16 + .../VitalsBloodOxygenGroupedRequest.java | 16 + .../requests/VitalsBloodOxygenRequest.java | 16 + .../VitalsBloodPressureGroupedRequest.java | 16 + .../requests/VitalsBloodPressureRequest.java | 16 + .../requests/VitalsBodyFatGroupedRequest.java | 16 + .../vitals/requests/VitalsBodyFatRequest.java | 16 + .../VitalsBodyMassIndexGroupedRequest.java | 16 + ...alsBodyTemperatureDeltaGroupedRequest.java | 16 + .../VitalsBodyTemperatureGroupedRequest.java | 16 + .../VitalsBodyWeightGroupedRequest.java | 16 + .../requests/VitalsBodyWeightRequest.java | 16 + .../VitalsCaffeineGroupedRequest.java | 16 + .../requests/VitalsCaffeineRequest.java | 16 + .../VitalsCaloriesActiveGroupedRequest.java | 16 + .../requests/VitalsCaloriesActiveRequest.java | 16 + .../VitalsCaloriesBasalGroupedRequest.java | 16 + .../requests/VitalsCaloriesBasalRequest.java | 16 + .../VitalsCarbohydratesGroupedRequest.java | 16 + .../VitalsCholesterolGroupedRequest.java | 16 + .../requests/VitalsCholesterolHdlRequest.java | 16 + .../requests/VitalsCholesterolLdlRequest.java | 16 + .../requests/VitalsCholesterolRequest.java | 16 + .../VitalsCholesterolTotalRequest.java | 16 + ...VitalsCholesterolTriglyceridesRequest.java | 16 + .../VitalsDaylightExposureGroupedRequest.java | 16 + .../VitalsDistanceGroupedRequest.java | 16 + .../requests/VitalsDistanceRequest.java | 16 + ...lectrocardiogramVoltageGroupedRequest.java | 16 + ...VitalsElectrocardiogramVoltageRequest.java | 16 + .../requests/VitalsFallGroupedRequest.java | 16 + .../VitalsFloorsClimbedGroupedRequest.java | 16 + .../requests/VitalsFloorsClimbedRequest.java | 16 + ...ForcedExpiratoryVolume1GroupedRequest.java | 16 + ...talsForcedVitalCapacityGroupedRequest.java | 16 + .../requests/VitalsGlucoseGroupedRequest.java | 16 + .../vitals/requests/VitalsGlucoseRequest.java | 16 + .../VitalsHandwashingGroupedRequest.java | 16 + .../VitalsHeartRateAlertGroupedRequest.java | 16 + ...rtRateRecoveryOneMinuteGroupedRequest.java | 16 + .../VitalsHeartrateGroupedRequest.java | 16 + .../requests/VitalsHeartrateRequest.java | 16 + .../requests/VitalsHrvGroupedRequest.java | 16 + .../vitals/requests/VitalsHrvRequest.java | 16 + .../VitalsHypnogramGroupedRequest.java | 16 + .../requests/VitalsHypnogramRequest.java | 16 + .../requests/VitalsIgeGroupedRequest.java | 16 + .../vitals/requests/VitalsIgeRequest.java | 16 + .../requests/VitalsIggGroupedRequest.java | 16 + .../vitals/requests/VitalsIggRequest.java | 16 + .../VitalsInhalerUsageGroupedRequest.java | 16 + .../VitalsInsulinInjectionGroupedRequest.java | 16 + .../VitalsLeanBodyMassGroupedRequest.java | 16 + ...italsMindfulnessMinutesGroupedRequest.java | 16 + .../VitalsMindfulnessMinutesRequest.java | 16 + .../requests/VitalsNoteGroupedRequest.java | 16 + ...sPeakExpiratoryFlowRateGroupedRequest.java | 16 + .../VitalsRespiratoryRateGroupedRequest.java | 16 + .../VitalsRespiratoryRateRequest.java | 16 + .../VitalsSleepApneaAlertGroupedRequest.java | 16 + ...eepBreathingDisturbanceGroupedRequest.java | 16 + .../VitalsStandDurationGroupedRequest.java | 16 + .../VitalsStandHourGroupedRequest.java | 16 + .../requests/VitalsStepsGroupedRequest.java | 16 + .../vitals/requests/VitalsStepsRequest.java | 16 + .../VitalsStressLevelGroupedRequest.java | 16 + .../requests/VitalsStressLevelRequest.java | 16 + .../VitalsUvExposureGroupedRequest.java | 16 + .../requests/VitalsVo2MaxGroupedRequest.java | 16 + .../vitals/requests/VitalsVo2MaxRequest.java | 16 + ...italsWaistCircumferenceGroupedRequest.java | 16 + .../requests/VitalsWaterGroupedRequest.java | 16 + .../vitals/requests/VitalsWaterRequest.java | 16 + .../VitalsWheelchairPushGroupedRequest.java | 16 + .../VitalsWorkoutDistanceGroupedRequest.java | 16 + .../VitalsWorkoutDurationGroupedRequest.java | 16 + ...lsWorkoutSwimmingStrokeGroupedRequest.java | 16 + .../workouts/AsyncRawWorkoutsClient.java | 12 +- .../resources/workouts/RawWorkoutsClient.java | 12 +- .../requests/WorkoutsGetRawRequest.java | 16 + .../workouts/requests/WorkoutsGetRequest.java | 16 + .../vital/api/types/ActivityColumnExpr.java | 16 + .../com/vital/api/types/ActivityV2InDb.java | 16 + .../java/com/vital/api/types/AddOnOrder.java | 10 + .../java/com/vital/api/types/Address.java | 53 +- .../com/vital/api/types/AggregateExpr.java | 16 + .../com/vital/api/types/AggregateExprArg.java | 78 +-- .../vital/api/types/AggregationResponse.java | 10 + .../vital/api/types/AggregationResult.java | 10 + src/main/java/com/vital/api/types/Answer.java | 16 + src/main/java/com/vital/api/types/AoE.java | 10 + .../java/com/vital/api/types/AoEAnswer.java | 16 + .../types/AppointmentAvailabilitySlots.java | 10 + .../api/types/AppointmentBookingRequest.java | 48 ++ .../vital/api/types/AppointmentLocation.java | 16 + .../vital/api/types/AppointmentProvider.java | 4 +- .../vital/api/types/AppointmentPscLabs.java | 24 + .../types/AppointmentRescheduleRequest.java | 55 +- .../java/com/vital/api/types/AreaInfo.java | 16 + .../api/types/AsleepAtValueMacroExpr.java | 10 + .../api/types/AwakeAtValueMacroExpr.java | 10 + .../api/types/BasalBodyTemperatureEntry.java | 16 + .../com/vital/api/types/BiomarkerResult.java | 16 + .../types/BloodPressureTimeseriesExpr.java | 16 + .../com/vital/api/types/BodyColumnExpr.java | 16 + .../java/com/vital/api/types/BodyV2InDb.java | 16 + .../types/BulkExportConnectionsResponse.java | 10 + .../types/BulkImportConnectionsResponse.java | 10 + src/main/java/com/vital/api/types/BulkOp.java | 16 + .../com/vital/api/types/BulkOpsResponse.java | 10 + .../vital/api/types/CanonicalCandidate.java | 397 +++++++++++++ .../vital/api/types/CervicalMucusEntry.java | 16 + .../api/types/ChronotypeValueMacroExpr.java | 10 + .../api/types/ClientActivityResponse.java | 10 + .../vital/api/types/ClientBodyResponse.java | 10 + .../types/ClientFacingAFibBurdenSample.java | 16 + .../vital/api/types/ClientFacingActivity.java | 16 + .../types/ClientFacingActivityChanged.java | 16 + ...FacingActivityHistoricalPullCompleted.java | 16 + .../types/ClientFacingAfibBurdenChanged.java | 16 + ...cingAfibBurdenHistoricalPullCompleted.java | 16 + .../vital/api/types/ClientFacingApiKey.java | 16 + .../api/types/ClientFacingAppointment.java | 48 ++ ...ntFacingAppointmentCancellationReason.java | 16 + .../types/ClientFacingAppointmentChanged.java | 16 + .../types/ClientFacingAppointmentEvent.java | 16 + .../ClientFacingAtHomePhlebotomyOrder.java | 16 + ...entFacingAtHomePhlebotomyOrderDetails.java | 10 + ...ientFacingBasalBodyTemperatureChanged.java | 16 + ...odyTemperatureHistoricalPullCompleted.java | 16 + ...lientFacingBasalBodyTemperatureSample.java | 16 + .../types/ClientFacingBloodOxygenChanged.java | 16 + ...ingBloodOxygenHistoricalPullCompleted.java | 16 + .../ClientFacingBloodOxygenTimeseries.java | 16 + .../ClientFacingBloodPressureChanged.java | 16 + ...gBloodPressureHistoricalPullCompleted.java | 16 + .../ClientFacingBloodPressureTimeseries.java | 16 + .../com/vital/api/types/ClientFacingBody.java | 16 + .../api/types/ClientFacingBodyChanged.java | 16 + .../types/ClientFacingBodyFatTimeseries.java | 16 + ...ientFacingBodyHistoricalPullCompleted.java | 16 + .../ClientFacingBodyMassIndexChanged.java | 16 + ...gBodyMassIndexHistoricalPullCompleted.java | 16 + .../ClientFacingBodyMassIndexSample.java | 16 + .../ClientFacingBodyTemperatureChanged.java | 16 + ...ientFacingBodyTemperatureDeltaChanged.java | 16 + ...mperatureDeltaHistoricalPullCompleted.java | 16 + ...lientFacingBodyTemperatureDeltaSample.java | 16 + ...odyTemperatureHistoricalPullCompleted.java | 16 + .../ClientFacingBodyTemperatureSample.java | 16 + .../ClientFacingBodyWeightTimeseries.java | 16 + .../types/ClientFacingCaffeineChanged.java | 16 + ...FacingCaffeineHistoricalPullCompleted.java | 16 + .../types/ClientFacingCaffeineTimeseries.java | 16 + .../ClientFacingCaloriesActiveChanged.java | 16 + ...CaloriesActiveHistoricalPullCompleted.java | 16 + .../ClientFacingCaloriesActiveTimeseries.java | 16 + .../ClientFacingCaloriesBasalChanged.java | 16 + ...gCaloriesBasalHistoricalPullCompleted.java | 16 + .../ClientFacingCaloriesBasalTimeseries.java | 16 + .../ClientFacingCarbohydratesChanged.java | 16 + ...gCarbohydratesHistoricalPullCompleted.java | 16 + .../ClientFacingCarbohydratesSample.java | 16 + .../types/ClientFacingCholesterolChanged.java | 16 + ...ingCholesterolHistoricalPullCompleted.java | 16 + .../ClientFacingCholesterolTimeseries.java | 16 + .../ClientFacingConnectionErrorDetails.java | 16 + ...cingContinuousQueryResultTableChanged.java | 16 + .../api/types/ClientFacingCriticalResult.java | 16 + .../ClientFacingCriticalResultIdentified.java | 16 + .../ClientFacingDaylightExposureChanged.java | 16 + ...ylightExposureHistoricalPullCompleted.java | 16 + .../ClientFacingDaylightExposureSample.java | 16 + .../vital/api/types/ClientFacingDevice.java | 16 + .../api/types/ClientFacingDeviceChanged.java | 16 + .../types/ClientFacingDeviceSourceType.java | 2 + .../ClientFacingDiagnosisInformation.java | 16 + .../types/ClientFacingDistanceChanged.java | 16 + ...FacingDistanceHistoricalPullCompleted.java | 16 + .../types/ClientFacingDistanceTimeseries.java | 16 + .../types/ClientFacingElectrocardiogram.java | 16 + .../ClientFacingElectrocardiogramChanged.java | 16 + ...ctrocardiogramHistoricalPullCompleted.java | 16 + ...ClientFacingElectrocardiogramResponse.java | 10 + ...ientFacingElectrocardiogramSourceType.java | 2 + ...FacingElectrocardiogramVoltageChanged.java | 16 + ...diogramVoltageHistoricalPullCompleted.java | 16 + ...ingElectrocardiogramVoltageTimeseries.java | 16 + .../api/types/ClientFacingFallChanged.java | 16 + ...ientFacingFallHistoricalPullCompleted.java | 16 + .../api/types/ClientFacingFallSample.java | 16 + .../api/types/ClientFacingFatChanged.java | 16 + ...lientFacingFatHistoricalPullCompleted.java | 16 + .../ClientFacingFloorsClimbedChanged.java | 16 + ...gFloorsClimbedHistoricalPullCompleted.java | 16 + .../ClientFacingFloorsClimbedTimeseries.java | 16 + .../com/vital/api/types/ClientFacingFood.java | 10 + ...tFacingForcedExpiratoryVolume1Changed.java | 16 + ...iratoryVolume1HistoricalPullCompleted.java | 16 + ...ntFacingForcedExpiratoryVolume1Sample.java | 16 + ...lientFacingForcedVitalCapacityChanged.java | 16 + ...dVitalCapacityHistoricalPullCompleted.java | 16 + ...ClientFacingForcedVitalCapacitySample.java | 16 + .../api/types/ClientFacingGlucoseChanged.java | 16 + ...tFacingGlucoseHistoricalPullCompleted.java | 16 + .../types/ClientFacingGlucoseTimeseries.java | 16 + .../types/ClientFacingHandwashingChanged.java | 16 + ...ingHandwashingHistoricalPullCompleted.java | 16 + .../types/ClientFacingHandwashingSample.java | 16 + .../api/types/ClientFacingHeartRate.java | 10 + .../ClientFacingHeartRateAlertChanged.java | 16 + ...HeartRateAlertHistoricalPullCompleted.java | 16 + .../ClientFacingHeartRateAlertSample.java | 16 + ...cingHeartRateRecoveryOneMinuteChanged.java | 16 + ...overyOneMinuteHistoricalPullCompleted.java | 16 + ...acingHeartRateRecoveryOneMinuteSample.java | 16 + .../ClientFacingHeartRateTimeseries.java | 16 + .../types/ClientFacingHeartrateChanged.java | 16 + ...acingHeartrateHistoricalPullCompleted.java | 16 + .../api/types/ClientFacingHrvChanged.java | 16 + ...lientFacingHrvHistoricalPullCompleted.java | 16 + .../api/types/ClientFacingHrvTimeseries.java | 16 + .../ClientFacingHypnogramTimeseries.java | 16 + .../api/types/ClientFacingIgeChanged.java | 16 + ...lientFacingIgeHistoricalPullCompleted.java | 16 + .../api/types/ClientFacingIgeTimeseries.java | 16 + .../api/types/ClientFacingIggChanged.java | 16 + ...lientFacingIggHistoricalPullCompleted.java | 16 + .../api/types/ClientFacingIggTimeseries.java | 16 + .../ClientFacingInhalerUsageChanged.java | 16 + ...ngInhalerUsageHistoricalPullCompleted.java | 16 + .../types/ClientFacingInhalerUsageSample.java | 16 + .../ClientFacingInsulinInjectionChanged.java | 16 + ...sulinInjectionHistoricalPullCompleted.java | 16 + .../ClientFacingInsulinInjectionSample.java | 179 +++++- ...ingInsulinInjectionSampleBolusPurpose.java | 28 + ...ingInsulinInjectionSampleDeliveryForm.java | 24 + ...ingInsulinInjectionSampleDeliveryMode.java | 24 + .../api/types/ClientFacingInsurance.java | 16 + .../com/vital/api/types/ClientFacingLab.java | 16 + .../api/types/ClientFacingLabAccount.java | 451 +++++++++++++++ .../api/types/ClientFacingLabLocation.java | 16 + ...FacingLabReportParsingJobCreatedEvent.java | 199 +++++++ ...FacingLabReportParsingJobUpdatedEvent.java | 199 +++++++ .../vital/api/types/ClientFacingLabTest.java | 16 + .../com/vital/api/types/ClientFacingLabs.java | 4 +- .../ClientFacingLeanBodyMassChanged.java | 16 + ...ngLeanBodyMassHistoricalPullCompleted.java | 16 + .../types/ClientFacingLeanBodyMassSample.java | 16 + .../vital/api/types/ClientFacingLoinc.java | 16 + .../vital/api/types/ClientFacingMarker.java | 16 + .../api/types/ClientFacingMarkerComplete.java | 16 + .../api/types/ClientFacingMealChanged.java | 16 + ...ientFacingMealHistoricalPullCompleted.java | 16 + .../api/types/ClientFacingMealResponse.java | 10 + .../api/types/ClientFacingMenstrualCycle.java | 16 + .../ClientFacingMenstrualCycleChanged.java | 16 + ...MenstrualCycleHistoricalPullCompleted.java | 16 + .../ClientFacingMenstrualCycleSourceType.java | 2 + ...ClientFacingMindfulnessMinutesChanged.java | 16 + ...fulnessMinutesHistoricalPullCompleted.java | 16 + ...entFacingMindfulnessMinutesTimeseries.java | 16 + .../api/types/ClientFacingNoteChanged.java | 16 + ...ientFacingNoteHistoricalPullCompleted.java | 16 + .../api/types/ClientFacingNoteSample.java | 16 + .../ClientFacingOnSiteCollectionOrder.java | 16 + ...entFacingOnSiteCollectionOrderDetails.java | 10 + .../vital/api/types/ClientFacingOrder.java | 80 ++- .../api/types/ClientFacingOrderChanged.java | 16 + .../api/types/ClientFacingOrderEvent.java | 61 +- .../types/ClientFacingOrderInTransaction.java | 16 + .../types/ClientFacingOrderTransaction.java | 16 + .../ClientFacingPatientDetailsCompatible.java | 16 + .../vital/api/types/ClientFacingPayor.java | 16 + .../ClientFacingPayorSearchResponse.java | 16 + ...ntFacingPayorSearchResponseDeprecated.java | 16 + ...ntFacingPeakExpiratoryFlowRateChanged.java | 16 + ...ratoryFlowRateHistoricalPullCompleted.java | 16 + ...entFacingPeakExpiratoryFlowRateSample.java | 16 + .../api/types/ClientFacingPhysician.java | 16 + .../vital/api/types/ClientFacingProfile.java | 16 + .../api/types/ClientFacingProfileChanged.java | 16 + ...tFacingProfileHistoricalPullCompleted.java | 16 + .../vital/api/types/ClientFacingProvider.java | 16 + ...tFacingProviderConnectionCreatedEvent.java | 16 + ...entFacingProviderConnectionErrorEvent.java | 16 + .../types/ClientFacingProviderDetailed.java | 16 + .../types/ClientFacingProviderWithStatus.java | 16 + .../ClientFacingRespiratoryRateChanged.java | 16 + ...espiratoryRateHistoricalPullCompleted.java | 16 + ...ClientFacingRespiratoryRateTimeseries.java | 16 + .../vital/api/types/ClientFacingResult.java | 16 + .../ClientFacingShallowWorkoutStream.java | 16 + .../vital/api/types/ClientFacingShipment.java | 16 + .../vital/api/types/ClientFacingSleep.java | 16 + .../ClientFacingSleepApneaAlertChanged.java | 16 + ...leepApneaAlertHistoricalPullCompleted.java | 16 + .../ClientFacingSleepApneaAlertSample.java | 16 + ...acingSleepBreathingDisturbanceChanged.java | 16 + ...ingDisturbanceHistoricalPullCompleted.java | 16 + ...FacingSleepBreathingDisturbanceSample.java | 16 + .../api/types/ClientFacingSleepChanged.java | 16 + .../api/types/ClientFacingSleepCycle.java | 16 + .../types/ClientFacingSleepCycleChanged.java | 16 + ...cingSleepCycleHistoricalPullCompleted.java | 16 + .../ClientFacingSleepCycleSourceType.java | 2 + ...entFacingSleepHistoricalPullCompleted.java | 16 + .../api/types/ClientFacingSleepStream.java | 10 + .../vital/api/types/ClientFacingSource.java | 16 + .../vital/api/types/ClientFacingSport.java | 16 + .../ClientFacingStandDurationChanged.java | 16 + ...gStandDurationHistoricalPullCompleted.java | 16 + .../ClientFacingStandDurationSample.java | 16 + .../types/ClientFacingStandHourChanged.java | 16 + ...acingStandHourHistoricalPullCompleted.java | 16 + .../types/ClientFacingStandHourSample.java | 16 + .../api/types/ClientFacingStepsChanged.java | 16 + ...entFacingStepsHistoricalPullCompleted.java | 16 + .../types/ClientFacingStepsTimeseries.java | 16 + .../vital/api/types/ClientFacingStream.java | 10 + .../types/ClientFacingStressLevelChanged.java | 16 + ...ingStressLevelHistoricalPullCompleted.java | 16 + .../ClientFacingStressLevelTimeseries.java | 16 + .../com/vital/api/types/ClientFacingTeam.java | 16 + .../ClientFacingTestKitOrderDetails.java | 10 + .../api/types/ClientFacingTestkitOrder.java | 16 + .../com/vital/api/types/ClientFacingUser.java | 16 + .../vital/api/types/ClientFacingUserKey.java | 16 + .../types/ClientFacingUvExposureChanged.java | 16 + ...cingUvExposureHistoricalPullCompleted.java | 16 + .../types/ClientFacingUvExposureSample.java | 16 + .../api/types/ClientFacingVo2MaxChanged.java | 16 + ...ntFacingVo2MaxHistoricalPullCompleted.java | 16 + .../types/ClientFacingVo2MaxTimeseries.java | 16 + ...ClientFacingWaistCircumferenceChanged.java | 16 + ...tCircumferenceHistoricalPullCompleted.java | 16 + .../ClientFacingWaistCircumferenceSample.java | 16 + .../types/ClientFacingWalkInOrderDetails.java | 10 + .../types/ClientFacingWalkInTestOrder.java | 16 + .../api/types/ClientFacingWaterChanged.java | 16 + ...entFacingWaterHistoricalPullCompleted.java | 16 + .../types/ClientFacingWaterTimeseries.java | 16 + .../api/types/ClientFacingWeightChanged.java | 16 + ...ntFacingWeightHistoricalPullCompleted.java | 16 + .../ClientFacingWheelchairPushChanged.java | 16 + ...WheelchairPushHistoricalPullCompleted.java | 16 + .../ClientFacingWheelchairPushSample.java | 16 + .../vital/api/types/ClientFacingWorkout.java | 16 + .../ClientFacingWorkoutDistanceChanged.java | 16 + ...orkoutDistanceHistoricalPullCompleted.java | 16 + .../ClientFacingWorkoutDistanceSample.java | 16 + .../ClientFacingWorkoutDurationChanged.java | 16 + ...orkoutDurationHistoricalPullCompleted.java | 16 + .../ClientFacingWorkoutDurationSample.java | 16 + .../api/types/ClientFacingWorkoutMap.java | 10 + .../ClientFacingWorkoutStreamChanged.java | 16 + ...gWorkoutStreamHistoricalPullCompleted.java | 16 + ...entFacingWorkoutSwimmingStrokeChanged.java | 16 + ...SwimmingStrokeHistoricalPullCompleted.java | 16 + ...ientFacingWorkoutSwimmingStrokeSample.java | 16 + .../types/ClientFacingWorkoutsChanged.java | 16 + ...FacingWorkoutsHistoricalPullCompleted.java | 16 + .../api/types/ClientSleepCycleResponse.java | 10 + .../vital/api/types/ClientSleepResponse.java | 10 + .../vital/api/types/ClientUserIdConflict.java | 16 + .../types/ClientUserIdConflictResponse.java | 16 + .../api/types/ClientWorkoutResponse.java | 10 + .../vital/api/types/ClinicalInformation.java | 10 + .../com/vital/api/types/CompanyDetails.java | 16 + .../vital/api/types/CompendiumSearchLabs.java | 28 + .../types/ConnectedSourceClientFacing.java | 16 + .../com/vital/api/types/ConnectionRecipe.java | 16 + .../java/com/vital/api/types/Consent.java | 16 + .../ContinuousQueryResultTableChanges.java | 16 + .../ContinuousQueryTaskHistoryEntry.java | 16 + .../ContinuousQueryTaskHistoryResponse.java | 10 + .../vital/api/types/ContraceptiveEntry.java | 16 + .../api/types/ConvertCompendiumResponse.java | 344 +++++++++++ .../types/CreateUserPortalUrlResponse.java | 16 + .../com/vital/api/types/DatePartExpr.java | 16 + .../com/vital/api/types/DateTruncExpr.java | 16 + .../java/com/vital/api/types/DaySlots.java | 16 + .../vital/api/types/DemoConnectionStatus.java | 16 + .../api/types/DerivedReadinessColumnExpr.java | 130 +++++ ...edReadinessColumnExprDerivedReadiness.java | 36 ++ .../api/types/DetectedDeviationEntry.java | 16 + .../com/vital/api/types/DeviceV2InDb.java | 16 + .../api/types/DiscreteTimeseriesExpr.java | 16 + src/main/java/com/vital/api/types/Energy.java | 16 + .../types/EventDestinationPreferences.java | 16 + .../vital/api/types/FallbackBirthDate.java | 16 + .../com/vital/api/types/FallbackTimeZone.java | 16 + src/main/java/com/vital/api/types/Fats.java | 10 + .../vital/api/types/GetMarkersResponse.java | 10 + .../types/GetOrderTransactionResponse.java | 28 +- .../vital/api/types/GetOrdersResponse.java | 10 + .../api/types/GetTeamLabAccountsResponse.java | 107 ++++ .../vital/api/types/GroupKeyColumnExpr.java | 16 + .../vital/api/types/GroupedAFibBurden.java | 16 + .../api/types/GroupedAFibBurdenResponse.java | 10 + .../types/GroupedBasalBodyTemperature.java | 16 + .../GroupedBasalBodyTemperatureResponse.java | 10 + .../vital/api/types/GroupedBloodOxygen.java | 16 + .../api/types/GroupedBloodOxygenResponse.java | 10 + .../vital/api/types/GroupedBloodPressure.java | 16 + .../types/GroupedBloodPressureResponse.java | 10 + .../com/vital/api/types/GroupedBodyFat.java | 16 + .../api/types/GroupedBodyFatResponse.java | 10 + .../vital/api/types/GroupedBodyMassIndex.java | 16 + .../types/GroupedBodyMassIndexResponse.java | 10 + .../api/types/GroupedBodyTemperature.java | 16 + .../types/GroupedBodyTemperatureDelta.java | 16 + .../GroupedBodyTemperatureDeltaResponse.java | 10 + .../types/GroupedBodyTemperatureResponse.java | 10 + .../vital/api/types/GroupedBodyWeight.java | 16 + .../api/types/GroupedBodyWeightResponse.java | 10 + .../com/vital/api/types/GroupedCaffeine.java | 16 + .../api/types/GroupedCaffeineResponse.java | 10 + .../api/types/GroupedCaloriesActive.java | 16 + .../types/GroupedCaloriesActiveResponse.java | 10 + .../vital/api/types/GroupedCaloriesBasal.java | 16 + .../types/GroupedCaloriesBasalResponse.java | 10 + .../vital/api/types/GroupedCarbohydrates.java | 16 + .../types/GroupedCarbohydratesResponse.java | 10 + .../vital/api/types/GroupedCholesterol.java | 16 + .../api/types/GroupedCholesterolResponse.java | 10 + .../api/types/GroupedDaylightExposure.java | 16 + .../GroupedDaylightExposureResponse.java | 10 + .../com/vital/api/types/GroupedDistance.java | 16 + .../api/types/GroupedDistanceResponse.java | 10 + .../GroupedElectrocardiogramVoltage.java | 16 + ...oupedElectrocardiogramVoltageResponse.java | 10 + .../java/com/vital/api/types/GroupedFall.java | 16 + .../vital/api/types/GroupedFallResponse.java | 10 + .../vital/api/types/GroupedFloorsClimbed.java | 16 + .../types/GroupedFloorsClimbedResponse.java | 10 + .../types/GroupedForcedExpiratoryVolume1.java | 16 + ...roupedForcedExpiratoryVolume1Response.java | 10 + .../api/types/GroupedForcedVitalCapacity.java | 16 + .../GroupedForcedVitalCapacityResponse.java | 10 + .../com/vital/api/types/GroupedGlucose.java | 16 + .../api/types/GroupedGlucoseResponse.java | 10 + .../vital/api/types/GroupedHandwashing.java | 16 + .../api/types/GroupedHandwashingResponse.java | 10 + .../com/vital/api/types/GroupedHeartRate.java | 16 + .../api/types/GroupedHeartRateAlert.java | 16 + .../types/GroupedHeartRateAlertResponse.java | 10 + .../GroupedHeartRateRecoveryOneMinute.java | 16 + ...pedHeartRateRecoveryOneMinuteResponse.java | 10 + .../api/types/GroupedHeartRateResponse.java | 10 + .../java/com/vital/api/types/GroupedHrv.java | 16 + .../vital/api/types/GroupedHrvResponse.java | 10 + .../com/vital/api/types/GroupedHypnogram.java | 16 + .../api/types/GroupedHypnogramResponse.java | 10 + .../java/com/vital/api/types/GroupedIge.java | 16 + .../vital/api/types/GroupedIgeResponse.java | 10 + .../java/com/vital/api/types/GroupedIgg.java | 16 + .../vital/api/types/GroupedIggResponse.java | 10 + .../vital/api/types/GroupedInhalerUsage.java | 16 + .../types/GroupedInhalerUsageResponse.java | 10 + .../api/types/GroupedInsulinInjection.java | 16 + .../GroupedInsulinInjectionResponse.java | 10 + .../vital/api/types/GroupedLeanBodyMass.java | 16 + .../types/GroupedLeanBodyMassResponse.java | 10 + .../api/types/GroupedMindfulnessMinutes.java | 16 + .../GroupedMindfulnessMinutesResponse.java | 10 + .../java/com/vital/api/types/GroupedNote.java | 16 + .../vital/api/types/GroupedNoteResponse.java | 10 + .../types/GroupedPeakExpiratoryFlowRate.java | 16 + ...GroupedPeakExpiratoryFlowRateResponse.java | 10 + .../api/types/GroupedRespiratoryRate.java | 16 + .../types/GroupedRespiratoryRateResponse.java | 10 + .../api/types/GroupedSleepApneaAlert.java | 16 + .../types/GroupedSleepApneaAlertResponse.java | 10 + .../GroupedSleepBreathingDisturbance.java | 16 + ...upedSleepBreathingDisturbanceResponse.java | 10 + .../vital/api/types/GroupedStandDuration.java | 16 + .../types/GroupedStandDurationResponse.java | 10 + .../com/vital/api/types/GroupedStandHour.java | 16 + .../api/types/GroupedStandHourResponse.java | 10 + .../com/vital/api/types/GroupedSteps.java | 16 + .../vital/api/types/GroupedStepsResponse.java | 10 + .../vital/api/types/GroupedStressLevel.java | 16 + .../api/types/GroupedStressLevelResponse.java | 10 + .../vital/api/types/GroupedUvExposure.java | 16 + .../api/types/GroupedUvExposureResponse.java | 10 + .../com/vital/api/types/GroupedVo2Max.java | 16 + .../api/types/GroupedVo2MaxResponse.java | 10 + .../api/types/GroupedWaistCircumference.java | 16 + .../GroupedWaistCircumferenceResponse.java | 10 + .../com/vital/api/types/GroupedWater.java | 16 + .../vital/api/types/GroupedWaterResponse.java | 10 + .../api/types/GroupedWheelchairPush.java | 16 + .../types/GroupedWheelchairPushResponse.java | 10 + .../api/types/GroupedWorkoutDistance.java | 16 + .../types/GroupedWorkoutDistanceResponse.java | 10 + .../api/types/GroupedWorkoutDuration.java | 16 + .../types/GroupedWorkoutDurationResponse.java | 10 + .../types/GroupedWorkoutSwimmingStroke.java | 16 + .../GroupedWorkoutSwimmingStrokeResponse.java | 10 + .../com/vital/api/types/GuarantorDetails.java | 16 + .../types/HealthInsuranceCreateRequest.java | 10 + .../api/types/HistoricalPullCompleted.java | 16 + .../api/types/HistoricalPullTimeline.java | 16 + .../api/types/HomePregnancyTestEntry.java | 16 + .../api/types/HomeProgesteroneTestEntry.java | 16 + .../vital/api/types/HttpValidationError.java | 10 + .../vital/api/types/IcdExcludesViolation.java | 16 + .../vital/api/types/IcdExcludesWarning.java | 16 + .../com/vital/api/types/IndexColumnExpr.java | 16 + .../vital/api/types/IndexColumnExprIndex.java | 2 + .../types/IntermenstrualBleedingEntry.java | 16 + .../api/types/IntervalTimeseriesExpr.java | 16 + src/main/java/com/vital/api/types/Jpeg.java | 16 + .../api/types/LabAccountDelegatedFlow.java | 28 + .../com/vital/api/types/LabAccountStatus.java | 26 + .../vital/api/types/LabLocationMetadata.java | 16 + .../com/vital/api/types/LabReportResult.java | 16 + .../vital/api/types/LabResultsMetadata.java | 16 + .../com/vital/api/types/LabResultsRaw.java | 54 +- .../api/types/LabTestResourcesResponse.java | 10 + src/main/java/com/vital/api/types/Labs.java | 6 +- .../java/com/vital/api/types/LastAttempt.java | 16 + .../java/com/vital/api/types/LibreConfig.java | 10 + .../api/types/LinkTokenExchangeResponse.java | 16 + src/main/java/com/vital/api/types/LngLat.java | 16 + .../java/com/vital/api/types/LoincMatch.java | 16 + src/main/java/com/vital/api/types/Macros.java | 10 + .../com/vital/api/types/ManualProviders.java | 4 +- .../com/vital/api/types/MealColumnExpr.java | 16 + .../types/MealInDbBaseClientFacingSource.java | 16 + .../api/types/MenstrualCycleResponse.java | 10 + .../vital/api/types/MenstrualFlowEntry.java | 16 + .../com/vital/api/types/MetricsResult.java | 16 + src/main/java/com/vital/api/types/Micros.java | 10 + .../api/types/MissingBiomarkerResult.java | 16 + .../vital/api/types/NotFoundErrorBody.java | 10 + .../vital/api/types/NoteTimeseriesExpr.java | 16 + .../vital/api/types/OrderLowLevelStatus.java | 6 +- .../com/vital/api/types/OrderSetRequest.java | 10 + .../java/com/vital/api/types/OrderStatus.java | 12 +- .../com/vital/api/types/OrderSummary.java | 16 + .../vital/api/types/OvulationTestEntry.java | 16 + .../api/types/PaginatedUsersResponse.java | 16 + .../vital/api/types/ParentBiomarkerData.java | 16 + .../vital/api/types/ParsedLabReportData.java | 16 + .../java/com/vital/api/types/ParsingJob.java | 57 +- .../vital/api/types/PasswordProviders.java | 4 +- .../com/vital/api/types/PatientAddress.java | 59 +- .../api/types/PatientAddressCompatible.java | 58 +- .../types/PatientAddressWithValidation.java | 58 +- .../types/PatientDetailsWithValidation.java | 16 + .../api/types/PayorCodeExternalProvider.java | 6 +- .../com/vital/api/types/PerLabCandidate.java | 546 ++++++++++++++++++ .../vital/api/types/PerformingLaboratory.java | 16 + src/main/java/com/vital/api/types/Period.java | 16 + .../vital/api/types/PhlebotomyAreaInfo.java | 16 + .../api/types/PhlebotomyProviderInfo.java | 16 + .../api/types/PhysicianCreateRequest.java | 16 + .../api/types/PhysicianCreateRequestBase.java | 16 + .../java/com/vital/api/types/Placeholder.java | 16 + src/main/java/com/vital/api/types/Png.java | 16 + .../vital/api/types/PostOrderResponse.java | 16 + .../vital/api/types/ProfileColumnExpr.java | 16 + .../java/com/vital/api/types/ProfileInDb.java | 16 + .../api/types/ProviderConnectionCreated.java | 16 + .../api/types/ProviderConnectionError.java | 16 + .../types/ProviderIdConversionResponse.java | 152 +++++ .../vital/api/types/ProviderLinkResponse.java | 16 + .../vital/api/types/ProviderMfaRequest.java | 16 + .../java/com/vital/api/types/Providers.java | 4 + .../java/com/vital/api/types/PscAreaInfo.java | 16 + .../vital/api/types/PscAreaInfoDetails.java | 16 + .../java/com/vital/api/types/PscInfo.java | 16 + src/main/java/com/vital/api/types/Query.java | 10 + .../java/com/vital/api/types/QueryConfig.java | 10 + .../com/vital/api/types/QueryGroupByItem.java | 78 +-- .../com/vital/api/types/QuerySelectItem.java | 82 +-- .../java/com/vital/api/types/Question.java | 16 + .../java/com/vital/api/types/RawActivity.java | 10 + .../java/com/vital/api/types/RawBody.java | 10 + .../java/com/vital/api/types/RawDevices.java | 10 + .../java/com/vital/api/types/RawProfile.java | 16 + .../java/com/vital/api/types/RawSleep.java | 10 + .../java/com/vital/api/types/RawWorkout.java | 10 + .../com/vital/api/types/RelatedCandidate.java | 201 +++++++ .../vital/api/types/RelativeTimeframe.java | 16 + .../api/types/ResendWebhookResponse.java | 10 + .../vital/api/types/ResourceAvailability.java | 16 + .../com/vital/api/types/ResultMetadata.java | 42 ++ .../vital/api/types/ResultMetadataGender.java | 26 + .../java/com/vital/api/types/SampleData.java | 10 + .../api/types/ScopeRequirementsGrants.java | 16 + .../vital/api/types/ScopeRequirementsStr.java | 10 + .../api/types/SearchCompendiumResponse.java | 244 ++++++++ .../java/com/vital/api/types/SearchMode.java | 24 + .../vital/api/types/SexualActivityEntry.java | 16 + .../com/vital/api/types/ShippingAddress.java | 16 + .../types/ShippingAddressWithValidation.java | 16 + .../com/vital/api/types/SimulationFlags.java | 10 + .../types/SingleHistoricalPullStatistics.java | 16 + .../SingleProviderHistoricalPullResponse.java | 10 + .../api/types/SingleResourceStatistics.java | 10 + .../SingleUserHistoricalPullResponse.java | 16 + .../api/types/SingleUserResourceResponse.java | 16 + .../com/vital/api/types/SleepColumnExpr.java | 16 + .../api/types/SleepScoreValueMacroExpr.java | 10 + .../java/com/vital/api/types/SleepV2InDb.java | 16 + src/main/java/com/vital/api/types/Source.java | 16 + .../com/vital/api/types/SourceColumnExpr.java | 16 + .../java/com/vital/api/types/SourceLink.java | 16 + .../java/com/vital/api/types/TeamConfig.java | 16 + .../api/types/TemperatureTimeseriesExpr.java | 16 + .../java/com/vital/api/types/TimeSlot.java | 16 + .../api/types/TimeseriesMetricPoint.java | 16 + .../api/types/UnrecognizedValueMacroExpr.java | 16 + .../java/com/vital/api/types/UsAddress.java | 53 +- .../java/com/vital/api/types/UsState.java | 120 ++++ .../java/com/vital/api/types/UserAddress.java | 280 +++++++++ .../types/UserHistoricalPullsResponse.java | 10 + .../java/com/vital/api/types/UserInfo.java | 28 +- .../api/types/UserRefreshErrorResponse.java | 16 + .../api/types/UserRefreshSuccessResponse.java | 16 + .../api/types/UserResourcesResponse.java | 10 + .../api/types/UserSignInTokenResponse.java | 16 + .../vital/api/types/UserSuccessResponse.java | 16 + .../types/UtcTimestampWithTimezoneOffset.java | 16 + .../api/types/ValidateIcdCodesResponse.java | 16 + .../com/vital/api/types/ValidationError.java | 16 + ...asLabTestHealthInsurancePersonDetails.java | 16 + ...bSchemasLabTestInsurancePersonDetails.java | 16 + .../api/types/VitalTokenCreatedResponse.java | 16 + .../vital/api/types/WorkoutColumnExpr.java | 16 + .../types/WorkoutDurationTimeseriesExpr.java | 16 + .../com/vital/api/types/WorkoutV2InDb.java | 16 + src/test/java/com/vital/api/StreamTest.java | 23 + 800 files changed, 18592 insertions(+), 1555 deletions(-) create mode 100644 changelog.md create mode 100644 src/main/java/com/vital/api/core/ConsoleLogger.java create mode 100644 src/main/java/com/vital/api/core/ILogger.java create mode 100644 src/main/java/com/vital/api/core/LogConfig.java create mode 100644 src/main/java/com/vital/api/core/LogLevel.java create mode 100644 src/main/java/com/vital/api/core/Logger.java create mode 100644 src/main/java/com/vital/api/core/LoggingInterceptor.java create mode 100644 src/main/java/com/vital/api/core/SseEvent.java create mode 100644 src/main/java/com/vital/api/core/SseEventParser.java create mode 100644 src/main/java/com/vital/api/resources/compendium/AsyncCompendiumClient.java create mode 100644 src/main/java/com/vital/api/resources/compendium/AsyncRawCompendiumClient.java create mode 100644 src/main/java/com/vital/api/resources/compendium/CompendiumClient.java create mode 100644 src/main/java/com/vital/api/resources/compendium/RawCompendiumClient.java create mode 100644 src/main/java/com/vital/api/resources/compendium/requests/ConvertCompendiumBody.java create mode 100644 src/main/java/com/vital/api/resources/compendium/requests/SearchCompendiumBody.java create mode 100644 src/main/java/com/vital/api/resources/compendium/types/CompendiumConvertRequestTeamId.java create mode 100644 src/main/java/com/vital/api/resources/compendium/types/CompendiumSearchRequestTeamId.java create mode 100644 src/main/java/com/vital/api/resources/labaccount/AsyncLabAccountClient.java create mode 100644 src/main/java/com/vital/api/resources/labaccount/AsyncRawLabAccountClient.java create mode 100644 src/main/java/com/vital/api/resources/labaccount/LabAccountClient.java create mode 100644 src/main/java/com/vital/api/resources/labaccount/RawLabAccountClient.java create mode 100644 src/main/java/com/vital/api/resources/labaccount/requests/LabAccountGetTeamLabAccountsRequest.java create mode 100644 src/main/java/com/vital/api/types/AppointmentPscLabs.java create mode 100644 src/main/java/com/vital/api/types/CanonicalCandidate.java create mode 100644 src/main/java/com/vital/api/types/ClientFacingInsulinInjectionSampleBolusPurpose.java create mode 100644 src/main/java/com/vital/api/types/ClientFacingInsulinInjectionSampleDeliveryForm.java create mode 100644 src/main/java/com/vital/api/types/ClientFacingInsulinInjectionSampleDeliveryMode.java create mode 100644 src/main/java/com/vital/api/types/ClientFacingLabAccount.java create mode 100644 src/main/java/com/vital/api/types/ClientFacingLabReportParsingJobCreatedEvent.java create mode 100644 src/main/java/com/vital/api/types/ClientFacingLabReportParsingJobUpdatedEvent.java create mode 100644 src/main/java/com/vital/api/types/CompendiumSearchLabs.java create mode 100644 src/main/java/com/vital/api/types/ConvertCompendiumResponse.java create mode 100644 src/main/java/com/vital/api/types/DerivedReadinessColumnExpr.java create mode 100644 src/main/java/com/vital/api/types/DerivedReadinessColumnExprDerivedReadiness.java create mode 100644 src/main/java/com/vital/api/types/GetTeamLabAccountsResponse.java create mode 100644 src/main/java/com/vital/api/types/LabAccountDelegatedFlow.java create mode 100644 src/main/java/com/vital/api/types/LabAccountStatus.java create mode 100644 src/main/java/com/vital/api/types/PerLabCandidate.java create mode 100644 src/main/java/com/vital/api/types/ProviderIdConversionResponse.java create mode 100644 src/main/java/com/vital/api/types/RelatedCandidate.java create mode 100644 src/main/java/com/vital/api/types/ResultMetadataGender.java create mode 100644 src/main/java/com/vital/api/types/SearchCompendiumResponse.java create mode 100644 src/main/java/com/vital/api/types/SearchMode.java create mode 100644 src/main/java/com/vital/api/types/UsState.java create mode 100644 src/main/java/com/vital/api/types/UserAddress.java diff --git a/.fern/metadata.json b/.fern/metadata.json index 189279f9..3d116222 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -1,12 +1,13 @@ { - "cliVersion": "3.48.2", + "cliVersion": "4.43.1", "generatorName": "fernapi/fern-java-sdk", - "generatorVersion": "3.33.2", + "generatorVersion": "3.39.1", "generatorConfig": { "publish-to": "central", "base-api-exception-class-name": "ApiError", "client-class-name": "Vital", "enable-forward-compatible-enums": false }, - "sdkVersion": "1.2.605" + "originGitCommit": "d0228d3b3f0af4a1df61296ebf5865dd6ad62531", + "sdkVersion": "2.0.0" } \ No newline at end of file diff --git a/.fernignore b/.fernignore index 43ca0d22..07281cd7 100644 --- a/.fernignore +++ b/.fernignore @@ -1,3 +1,4 @@ # Specify files that shouldn't be modified by Fern README.md +changelog.md diff --git a/build.gradle b/build.gradle index a36120f5..c7a2ef79 100644 --- a/build.gradle +++ b/build.gradle @@ -47,7 +47,7 @@ java { group = 'io.tryvital' -version = '1.2.605' +version = '2.0.0' jar { dependsOn(":generatePomFileForMavenPublication") @@ -78,7 +78,7 @@ publishing { maven(MavenPublication) { groupId = 'io.tryvital' artifactId = 'vital-java' - version = '1.2.605' + version = '2.0.0' from components.java pom { name = 'vital' diff --git a/changelog.md b/changelog.md new file mode 100644 index 00000000..c6561373 --- /dev/null +++ b/changelog.md @@ -0,0 +1,37 @@ +## 2.0.0 - 2026-03-24 +* The SDK now supports logging configuration through the ClientOptions builder. Use the `logging()` method to configure log output for debugging HTTP requests and responses. New SSE event-level discrimination capabilities are available for handling discriminated union types in Server-Sent Events streams. InputStream-based file upload methods have been removed from the LabReportClient - use File-based methods instead. +* The SDK removes deprecated InputStream-based file upload methods from RawLabReportClient and adds new lab configuration options. Lab test requests now support lab account ID and lab slug parameters for more precise lab selection. Appointment requests now accept optional notes, and PSC appointment availability requests use a structured enum for lab specification instead of free-form strings. +* New optional fields available: vitalIosSdkVersion, vitalAndroidSdkVersion, and grantedPermissions on ManualConnectionData; appointmentNotes on AppointmentRescheduleRequest; and accessNotes on Address. The SDK now uses UserAddress type instead of Address in UserInfoCreateRequest. Support added for DerivedReadinessColumnExpr in aggregate expressions. +* The SDK now supports enhanced insulin delivery tracking with new optional fields for delivery mode, delivery form, and bolus purpose on insulin injection samples. Orders now include optional clinical notes for additional documentation. The lab results API also provides order transaction information when available. +* The `jobId` field and `getJobId()` method have been removed from `ParsingJob`. Code that accesses this field will need to be updated to use alternative identification methods. Additionally, a new optional `accessNotes` field is now available on all patient address types (`PatientAddress`, `PatientAddressCompatible`, and `PatientAddressWithValidation`). +* The UsAddress class now includes an optional accessNotes field for additional delivery or access instructions. The UserInfo class address field type has been updated from Address to UserAddress for improved type safety. +* New optional `lab_slug` parameter available in `getMarkers()` method for filtering markers by specific lab. Updated method documentation to clarify marker types returned by different endpoints. +* The SDK now supports configurable logging through the new `logging()` method on builders. Two new client modules are available: `CompendiumClient` and `LabAccountClient`. Additional providers and status values have been added to support Sonora Quest, Samsung Health, Tandem Source, and other lab providers. +* New CompendiumClient available with search() and convert() methods for compendium API operations. Added SseEventParser utility class for parsing Server-Sent Events with discriminated union support. +* New lab account management capabilities available through LabAccountClient, including the getTeamLabAccounts() method for retrieving team lab accounts with optional filtering. Added compendium search and convert functionality with new request types ConvertCompendiumBody and SearchCompendiumBody for lab test discovery and conversion operations. +* New lab account management API available through `RawLabAccountClient` with `getTeamLabAccounts()` method for retrieving team lab accounts. The `CreateOrderRequestCompatible` now supports an optional `clinicalNotes` parameter for including clinical notes with lab test orders. +* Request builders now support adding custom properties via new `additionalProperty()` and `additionalProperties()` methods, enabling more flexible API interactions. +* New `additionalProperty()` and `additionalProperties()` builder methods are now available on all request classes, allowing custom properties to be included in API requests. +* New additionalProperty() and additionalProperties() methods available on all vitals request builders for passing custom fields. +* New `additionalProperty()` and `additionalProperties()` methods available on all vitals request builders for passing custom key-value pairs in API requests. +* The SDK now provides additionalProperty() and additionalProperties() methods on all request builders for dynamic property assignment. A new appointmentNotes field is available in AppointmentBookingRequest, and a new AppointmentPscLabs enum supports Quest and Sonora Quest values. +* New additionalProperty() and additionalProperties() builder methods are now available on data model classes, allowing custom properties to be set during object construction. A new CanonicalCandidate class has been added for biomarker candidate data. +* New `appointmentNotes` field available on `ClientFacingAppointment` objects. All type builders now support `additionalProperty()` and `additionalProperties()` methods for setting custom fields. +* New builder methods `additionalProperty()` and `additionalProperties()` are now available on all type builders, enabling fluent setting of additional properties for forward compatibility with API changes. +* The SDK now supports insulin pump device sources with the new INSULIN_PUMP source type. Enhanced builder pattern with additionalProperty methods for improved extensibility across data model classes. +* New `additionalProperty()` and `additionalProperties()` methods are now available on builder classes, allowing dynamic property setting during object construction. +* New insulin injection sample enums available for delivery modes, forms, and bolus purposes. Added ClientFacingLabAccount type for managing lab provider accounts and webhook events for lab report parsing jobs. +* New optional builder methods `additionalProperty()` and `additionalProperties()` are now available on client-facing types, enabling custom key-value data to be added when constructing objects. The SDK also adds support for `INSULIN_PUMP` as a menstrual cycle source type. +* New builder methods available for setting additional properties on model objects. The `additionalProperty()` and `additionalProperties()` methods provide a consistent way to handle arbitrary key-value data from API responses. A new `INSULIN_PUMP` source type is now supported for sleep cycle data. +* The SDK now supports setting additional properties on builder objects through new `additionalProperty()` and `additionalProperties()` methods. +* New `additionalProperty()` and `additionalProperties()` methods available on builder classes for response objects. These methods enable setting additional properties on API response objects for better extensibility. +* New builder methods `additionalProperty()` and `additionalProperties()` are now available on response object builders for consistent handling of additional fields. Added new lab test conversion capabilities through `ConvertCompendiumResponse` and support for querying readiness data with new `DerivedReadinessColumnExpr` types. +* The SDK now supports setting additional properties on builder objects through new `additionalProperty()` and `additionalProperties()` methods. A new `GetTeamLabAccountsResponse` type is available for lab account management operations. +* New builder methods available for all Grouped data types: `additionalProperty()` and `additionalProperties()` methods allow setting custom fields during object construction. +* New `additionalProperty()` and `additionalProperties()` methods available on all grouped data type builders for setting custom properties beyond standard fields. +* The SDK now supports additional properties in builder patterns across all type classes. New `additionalProperty()` and `additionalProperties()` methods allow dynamic property assignment during object construction. Added new enum value `DERIVED_READINESS` to `IndexColumnExprIndex` and new enum types `LabAccountDelegatedFlow` and `LabAccountStatus`. +* Builder classes now support additionalProperty() and additionalProperties() methods for setting custom additional properties on model instances during construction. +* The SDK now includes the `PerLabCandidate` type for working with laboratory test candidate data, including LOINC codes, CPT codes, confidence scores, and marker popularity information. Additionally, several existing types now support additional properties through enhanced builder methods. +* New API types available: ProviderIdConversionResponse and RelatedCandidate for provider ID conversion workflows. Added support for TANDEM_SOURCE and SAMSUNG_HEALTH providers. Enhanced ResultMetadata with optional gender field. All builder classes now include additionalProperty methods for extensibility. +* The SDK now supports compendium search functionality with new `SearchCompendiumResponse` and `SearchMode` types. A new `UsState` enum is also available for US state handling. Additionally, builder patterns have been enhanced across many existing types with improved support for additional properties. + diff --git a/reference.md b/reference.md index ab88a1cb..4c472928 100644 --- a/reference.md +++ b/reference.md @@ -706,7 +706,6 @@ Check link token state - can be hit continuously used as heartbeat client.link().tokenState( LinkTokenStateRequest .builder() - .vitalLinkToken("x-vital-link-token") .build() ); ``` @@ -768,7 +767,6 @@ client.link().emailAuth( .email("email") .provider(Providers.OURA) .authType(AuthType.PASSWORD) - .vitalLinkToken("x-vital-link-token") .build() ); ``` @@ -863,7 +861,6 @@ client.link().passwordAuth( .password("password") .provider(Providers.OURA) .authType(AuthType.PASSWORD) - .vitalLinkToken("x-vital-link-token") .build() ); ``` @@ -955,7 +952,6 @@ client.link().generateOauthLink( OAuthProviders.OURA, LinkGenerateOauthLinkRequest .builder() - .vitalLinkToken("x-vital-link-token") .build() ); ``` @@ -1025,7 +1021,6 @@ client.link().connectPasswordProvider( .builder() .username("username") .password("password") - .vitalLinkToken("x-vital-link-token") .build() ); ``` @@ -1118,7 +1113,6 @@ client.link().completePasswordProviderMfa( CompletePasswordProviderMfaBody .builder() .mfaCode("mfa_code") - .vitalLinkToken("x-vital-link-token") .build() ); ``` @@ -1195,7 +1189,6 @@ client.link().connectEmailAuthProvider( EmailProviderAuthLink .builder() .email("email") - .vitalLinkToken("x-vital-link-token") .build() ); ``` @@ -1286,7 +1279,6 @@ GET List of all available providers given the generated link token. client.link().getAllProviders( LinkGetAllProvidersRequest .builder() - .vitalLinkToken("x-vital-link-token") .build() ); ``` @@ -1357,6 +1349,22 @@ client.link().connectManualProvider(
client.compendium.search(request) -> SearchCompendiumResponseclient.compendium.convert(request) -> ConvertCompendiumResponseclient.labAccount.getTeamLabAccounts() -> GetTeamLabAccountsResponseUses the "fern" logger name with a simple format of "LEVEL - message". + */ +public final class ConsoleLogger implements ILogger { + + private static final java.util.logging.Logger logger = java.util.logging.Logger.getLogger("fern"); + + static { + if (logger.getHandlers().length == 0) { + java.util.logging.ConsoleHandler handler = new java.util.logging.ConsoleHandler(); + handler.setFormatter(new java.util.logging.SimpleFormatter() { + @Override + public String format(java.util.logging.LogRecord record) { + return record.getLevel() + " - " + record.getMessage() + System.lineSeparator(); + } + }); + logger.addHandler(handler); + logger.setUseParentHandlers(false); + logger.setLevel(Level.ALL); + } + } + + @Override + public void debug(String message) { + logger.log(Level.FINE, message); + } + + @Override + public void info(String message) { + logger.log(Level.INFO, message); + } + + @Override + public void warn(String message) { + logger.log(Level.WARNING, message); + } + + @Override + public void error(String message) { + logger.log(Level.SEVERE, message); + } +} diff --git a/src/main/java/com/vital/api/core/ILogger.java b/src/main/java/com/vital/api/core/ILogger.java new file mode 100644 index 00000000..b8972346 --- /dev/null +++ b/src/main/java/com/vital/api/core/ILogger.java @@ -0,0 +1,38 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.vital.api.core; + +/** + * Interface for custom logger implementations. + * + *
Implement this interface to provide a custom logging backend for the SDK. + * The SDK will call the appropriate method based on the log level. + * + *
Example: + *
{@code
+ * public class MyCustomLogger implements ILogger {
+ * public void debug(String message) {
+ * System.out.println("[DBG] " + message);
+ * }
+ * public void info(String message) {
+ * System.out.println("[INF] " + message);
+ * }
+ * public void warn(String message) {
+ * System.out.println("[WRN] " + message);
+ * }
+ * public void error(String message) {
+ * System.out.println("[ERR] " + message);
+ * }
+ * }
+ * }
+ */
+public interface ILogger {
+ void debug(String message);
+
+ void info(String message);
+
+ void warn(String message);
+
+ void error(String message);
+}
diff --git a/src/main/java/com/vital/api/core/LogConfig.java b/src/main/java/com/vital/api/core/LogConfig.java
new file mode 100644
index 00000000..33c5b4aa
--- /dev/null
+++ b/src/main/java/com/vital/api/core/LogConfig.java
@@ -0,0 +1,98 @@
+/**
+ * This file was auto-generated by Fern from our API Definition.
+ */
+package com.vital.api.core;
+
+/**
+ * Configuration for SDK logging.
+ *
+ * Use the builder to configure logging behavior: + *
{@code
+ * LogConfig config = LogConfig.builder()
+ * .level(LogLevel.DEBUG)
+ * .silent(false)
+ * .build();
+ * }
+ *
+ * Or with a custom logger: + *
{@code
+ * LogConfig config = LogConfig.builder()
+ * .level(LogLevel.DEBUG)
+ * .logger(new MyCustomLogger())
+ * .silent(false)
+ * .build();
+ * }
+ *
+ * Defaults: + *
Silent by default — no log output unless explicitly configured. + * Create via {@link LogConfig} or directly: + *
{@code
+ * Logger logger = new Logger(LogLevel.DEBUG, new ConsoleLogger(), false);
+ * logger.debug("request sent");
+ * }
+ */
+public final class Logger {
+
+ private static final Logger DEFAULT = new Logger(LogLevel.INFO, new ConsoleLogger(), true);
+
+ private final LogLevel level;
+ private final ILogger logger;
+ private final boolean silent;
+
+ public Logger(LogLevel level, ILogger logger, boolean silent) {
+ this.level = level;
+ this.logger = logger;
+ this.silent = silent;
+ }
+
+ /**
+ * Returns a default silent logger (no output).
+ */
+ public static Logger getDefault() {
+ return DEFAULT;
+ }
+
+ /**
+ * Creates a Logger from a {@link LogConfig}. If config is {@code null}, returns the default silent logger.
+ */
+ public static Logger from(LogConfig config) {
+ if (config == null) {
+ return DEFAULT;
+ }
+ return new Logger(config.level(), config.logger(), config.silent());
+ }
+
+ /**
+ * Creates a Logger from an {@code OptionalLogs request method, URL, and headers (with sensitive values redacted) at debug level.
+ * Logs response status at debug level, and 4xx/5xx responses at error level.
+ * Does nothing if the logger is silent.
+ */
+public final class LoggingInterceptor implements Interceptor {
+
+ private static final Set
+ * Handles two discrimination patterns:
+ *
+ * Constructs the full SSE envelope object with event, data, id, and retry fields,
+ * then deserializes it to the target union type.
+ *
+ * @param eventType The SSE event type (from event: field)
+ * @param data The SSE data content (from data: field)
+ * @param id The SSE event ID (from id: field), may be null
+ * @param retry The SSE retry value (from retry: field), may be null
+ * @param unionClass The target union class
+ * @param discriminatorProperty The property name used for discrimination (e.g., "event")
+ * @param
+ * Simply parses the data field as JSON and deserializes it to the target type.
+ * Jackson's polymorphic deserialization handles the discrimination automatically.
+ *
+ * @param data The SSE data content (from data: field)
+ * @param valueType The target type
+ * @param
+ *
+ */
+public final class SseEventParser {
+
+ private static final Set