@shenai/react-native-sdk 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +5 -0
- package/android/build.gradle +81 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/shenaisdk/ShenaiSdkModule.java +1325 -0
- package/android/src/main/java/com/shenaisdk/ShenaiSdkPackage.java +24 -0
- package/android/src/main/java/com/shenaisdk/ShenaiSdkViewManager.java +37 -0
- package/ios/ShenaiSdkNativeModule.m +1121 -0
- package/ios/ShenaiSdkViewManager.m +37 -0
- package/lib/module/hooks.js +83 -0
- package/lib/module/index.js +667 -0
- package/lib/typescript/src/hooks.d.ts +37 -0
- package/lib/typescript/src/index.d.ts +466 -0
- package/package.json +57 -0
- package/react-native-shenai-sdk.podspec +37 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to continuously fetch the heart rate computed from the last 10 seconds of video.
|
|
3
|
+
*
|
|
4
|
+
* @returns The latest heart rate in BPM or null if uninitialized/error/bad signal.
|
|
5
|
+
*/
|
|
6
|
+
export declare const useRealtimeHeartRate: () => number | null;
|
|
7
|
+
/**
|
|
8
|
+
* Hook to continuously fetch the heart rate computed from the last 4 seconds of video.
|
|
9
|
+
*
|
|
10
|
+
* @returns The latest heart rate in BPM or null if uninitialized/error/bad signal.
|
|
11
|
+
*/
|
|
12
|
+
export declare const useRealtimeHeartRate4s: () => number | null;
|
|
13
|
+
/**
|
|
14
|
+
* Hook to get realtime metrics of the measurement computed from the last `period_sec` seconds of video.
|
|
15
|
+
*
|
|
16
|
+
* @param period_sec Duration in seconds of the period of interest.
|
|
17
|
+
* @returns The latest realtime metrics or null if uninitialized/error/bad signal.
|
|
18
|
+
*/
|
|
19
|
+
export declare const useRealtimeMetrics: (period_sec: number) => import("./index").MeasurementResults | null;
|
|
20
|
+
/**
|
|
21
|
+
* Hook to get results of the measurement.
|
|
22
|
+
*
|
|
23
|
+
* @returns The latest measurement results or null if the measurement hasn't finished yet.
|
|
24
|
+
*/
|
|
25
|
+
export declare const useMeasurementResults: () => import("./index").MeasurementResults | null;
|
|
26
|
+
/**
|
|
27
|
+
* Hook to get the measurement progress percentage.
|
|
28
|
+
*
|
|
29
|
+
* @returns The current measurement progress percentage.
|
|
30
|
+
*/
|
|
31
|
+
export declare const useMeasurementProgress: (update_interval_ms?: number) => number | null;
|
|
32
|
+
/**
|
|
33
|
+
* Hook to get the realtime heartbeats.
|
|
34
|
+
*
|
|
35
|
+
* @returns The latest heartbeats or null if uninitialized/error/bad signal.
|
|
36
|
+
*/
|
|
37
|
+
export declare const useRealtimeHeartbeats: () => import("./index").Heartbeat[] | null;
|
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
import { type ViewProps } from "react-native";
|
|
2
|
+
export declare const ShenaiSdkView: import("react-native").HostComponent<ViewProps> | (() => never);
|
|
3
|
+
export declare const enum InitializationResult {
|
|
4
|
+
OK = 0,
|
|
5
|
+
INVALID_API_KEY = 1,
|
|
6
|
+
CONNECTION_ERROR = 2,
|
|
7
|
+
INTERNAL_ERROR = 3
|
|
8
|
+
}
|
|
9
|
+
export declare const enum OperatingMode {
|
|
10
|
+
POSITIONING = 0,
|
|
11
|
+
MEASURE = 1,
|
|
12
|
+
SYSTEM_OVERLOADED = 2
|
|
13
|
+
}
|
|
14
|
+
export declare const enum CalibrationState {
|
|
15
|
+
CALIBRATED = 0,
|
|
16
|
+
NOT_CALIBRATED = 1,
|
|
17
|
+
OUTDATED = 2
|
|
18
|
+
}
|
|
19
|
+
export declare const enum PrecisionMode {
|
|
20
|
+
STRICT = 0,
|
|
21
|
+
RELAXED = 1
|
|
22
|
+
}
|
|
23
|
+
export declare const enum MeasurementEnvironmentCondition {
|
|
24
|
+
FACE_POSITION = 0,
|
|
25
|
+
FOREHEAD_VISIBLE = 1,
|
|
26
|
+
GLASSES_NOT_DETECTED = 2,
|
|
27
|
+
SUFFICIENT_LIGHT_LEVEL = 3,
|
|
28
|
+
EVEN_LIGHTING = 4,
|
|
29
|
+
NO_BACKLIGHT = 5,
|
|
30
|
+
FACE_STABLE = 6,
|
|
31
|
+
DEVICE_STABLE = 7
|
|
32
|
+
}
|
|
33
|
+
export declare const enum Screen {
|
|
34
|
+
INITIALIZATION = 0,
|
|
35
|
+
ONBOARDING = 1,
|
|
36
|
+
MEASUREMENT = 2,
|
|
37
|
+
INSTRUCTIONS = 3,
|
|
38
|
+
RESULTS = 4,
|
|
39
|
+
HEALTH_RISKS = 5,
|
|
40
|
+
HEALTH_RISKS_EDIT = 6,
|
|
41
|
+
CALIBRATION_ONBOARDING = 7,
|
|
42
|
+
CALIBRATION_FINISH = 8,
|
|
43
|
+
CALIBRATION_DATA_ENTRY = 9,
|
|
44
|
+
DISCLAIMER = 10,
|
|
45
|
+
DASHBOARD = 11
|
|
46
|
+
}
|
|
47
|
+
export declare const enum Metric {
|
|
48
|
+
HEART_RATE = 0,
|
|
49
|
+
HRV_SDNN = 1,
|
|
50
|
+
BREATHING_RATE = 2,
|
|
51
|
+
SYSTOLIC_BP = 3,
|
|
52
|
+
DIASTOLIC_BP = 4,
|
|
53
|
+
CARDIAC_STRESS = 5,
|
|
54
|
+
PNS_ACTIVITY = 6,
|
|
55
|
+
CARDIAC_WORKLOAD = 7,
|
|
56
|
+
AGE = 8,
|
|
57
|
+
BMI = 9,
|
|
58
|
+
BLOOD_PRESSURE = 10,
|
|
59
|
+
BLOOD_PRESSURE_SCALE = 11
|
|
60
|
+
}
|
|
61
|
+
export declare const enum BmiCategory {
|
|
62
|
+
UNDERWEIGHT_SEVERE = 0,
|
|
63
|
+
UNDERWEIGHT_MODERATE = 1,
|
|
64
|
+
UNDERWEIGHT_MILD = 2,
|
|
65
|
+
NORMAL = 3,
|
|
66
|
+
OVERWEIGHT = 4,
|
|
67
|
+
OBESE_CLASS_I = 5,
|
|
68
|
+
OBESE_CLASS_II = 6,
|
|
69
|
+
OBESE_CLASS_III = 7
|
|
70
|
+
}
|
|
71
|
+
export declare const enum HealthIndex {
|
|
72
|
+
WELLNESS_SCORE = 0,
|
|
73
|
+
VASCULAR_AGE = 1,
|
|
74
|
+
CARDIOVASCULAR_DISEASE_RISK = 2,
|
|
75
|
+
HARD_AND_FATAL_EVENTS_RISKS = 3,
|
|
76
|
+
CARDIO_VASCULAR_RISK_SCORE = 4,
|
|
77
|
+
WAIST_TO_HEIGHT_RATIO = 5,
|
|
78
|
+
BODY_FAT_PERCENTAGE = 6,
|
|
79
|
+
BODY_ROUNDNESS_INDEX = 7,
|
|
80
|
+
A_BODY_SHAPE_INDEX = 8,
|
|
81
|
+
CONICITY_INDEX = 9,
|
|
82
|
+
BASAL_METABOLIC_RATE = 10,
|
|
83
|
+
TOTAL_DAILY_ENERGY_EXPENDITURE = 11,
|
|
84
|
+
HYPERTENSION_RISK = 12,
|
|
85
|
+
DIABETES_RISK = 13,
|
|
86
|
+
NON_ALCOHOLIC_FATYY_LIVER_DISEASE_RISK = 14
|
|
87
|
+
}
|
|
88
|
+
export declare const enum MeasurementPreset {
|
|
89
|
+
ONE_MINUTE_HR_HRV_BR = 0,
|
|
90
|
+
ONE_MINUTE_BETA_METRICS = 1,
|
|
91
|
+
INFINITE_HR = 2,
|
|
92
|
+
INFINITE_METRICS = 3,
|
|
93
|
+
FOURTY_FIVE_SECONDS_UNVALIDATED = 4,
|
|
94
|
+
THIRTY_SECONDS_UNVALIDATED = 5,
|
|
95
|
+
CUSTOM = 6,
|
|
96
|
+
ONE_MINUTE_ALL_METRICS = 7,
|
|
97
|
+
FOURTY_FIVE_SECONDS_ALL_METRICS = 8,
|
|
98
|
+
THIRTY_SECONDS_ALL_METRICS = 9,
|
|
99
|
+
QUICK_HR_MODE = 10
|
|
100
|
+
}
|
|
101
|
+
export declare const enum CameraMode {
|
|
102
|
+
OFF = 0,
|
|
103
|
+
FACING_USER = 1,
|
|
104
|
+
FACING_ENVIRONMENT = 2,
|
|
105
|
+
CUSTOM_FRAMES = 3
|
|
106
|
+
}
|
|
107
|
+
export declare const enum CameraError {
|
|
108
|
+
UNKNOWN = 0,
|
|
109
|
+
UNSUPPORTED_MODE = 1,
|
|
110
|
+
NO_CAMERA_DEVICE = 2,
|
|
111
|
+
PERMISSION_NOT_GRANTED = 3,
|
|
112
|
+
INVALID_DEVICE_ID = 4,
|
|
113
|
+
DEVICE_UNAVAILABLE = 5
|
|
114
|
+
}
|
|
115
|
+
export declare const enum OnboardingMode {
|
|
116
|
+
HIDDEN = 0,
|
|
117
|
+
SHOW_ONCE = 1,
|
|
118
|
+
SHOW_ALWAYS = 2
|
|
119
|
+
}
|
|
120
|
+
export declare const enum UiVersion {
|
|
121
|
+
V1 = 0,
|
|
122
|
+
V2 = 1,
|
|
123
|
+
V3 = 2
|
|
124
|
+
}
|
|
125
|
+
export declare const enum InitializationMode {
|
|
126
|
+
MEASUREMENT = 0,
|
|
127
|
+
CALIBRATION = 1,
|
|
128
|
+
CALIBRATED_MEASUREMENT = 2,
|
|
129
|
+
FAST_CALIBRATION = 3
|
|
130
|
+
}
|
|
131
|
+
export type EventName = "START_BUTTON_CLICKED" | "STOP_BUTTON_CLICKED" | "MEASUREMENT_FINISHED" | "USER_FLOW_FINISHED" | "SCREEN_CHANGED";
|
|
132
|
+
export interface InitializationSettings {
|
|
133
|
+
precisionMode?: PrecisionMode;
|
|
134
|
+
operatingMode?: OperatingMode;
|
|
135
|
+
measurementPreset?: MeasurementPreset;
|
|
136
|
+
cameraMode?: CameraMode;
|
|
137
|
+
onboardingMode?: OnboardingMode;
|
|
138
|
+
initializationMode?: InitializationMode;
|
|
139
|
+
offlineProcessing?: boolean;
|
|
140
|
+
showUserInterface?: boolean;
|
|
141
|
+
showFacePositioningOverlay?: boolean;
|
|
142
|
+
showVisualWarnings?: boolean;
|
|
143
|
+
enableCameraSwap?: boolean;
|
|
144
|
+
showFaceMask?: boolean;
|
|
145
|
+
showBloodFlow?: boolean;
|
|
146
|
+
hideShenaiLogo?: boolean;
|
|
147
|
+
includeTimestampInPdf?: boolean;
|
|
148
|
+
pdfEmailSubject?: string;
|
|
149
|
+
pdfEmailBody?: string;
|
|
150
|
+
enableStartAfterSuccess?: boolean;
|
|
151
|
+
enableSummaryScreen?: boolean;
|
|
152
|
+
showResultsFinishButton?: boolean;
|
|
153
|
+
enableHealthRisks?: boolean;
|
|
154
|
+
showHealthIndicesFinishButton?: boolean;
|
|
155
|
+
saveHealthRisksFactors?: boolean;
|
|
156
|
+
showOutOfRangeResultIndicators?: boolean;
|
|
157
|
+
showTrialMetricLabels?: boolean;
|
|
158
|
+
applyPrecisionModeToBloodPressure?: boolean;
|
|
159
|
+
blockingMeasurementConditions?: MeasurementEnvironmentCondition[];
|
|
160
|
+
warningMeasurementConditions?: MeasurementEnvironmentCondition[];
|
|
161
|
+
showSignalQualityIndicator?: boolean;
|
|
162
|
+
showSignalTile?: boolean;
|
|
163
|
+
showStartStopButton?: boolean;
|
|
164
|
+
showInfoButton?: boolean;
|
|
165
|
+
showDisclaimer?: boolean;
|
|
166
|
+
enableMeasurementsDashboard?: boolean;
|
|
167
|
+
uiVersion?: UiVersion;
|
|
168
|
+
uiFlowScreens?: Screen[];
|
|
169
|
+
frameWidth?: number;
|
|
170
|
+
frameHeight?: number;
|
|
171
|
+
rotation?: number;
|
|
172
|
+
risksFactors?: RisksFactors;
|
|
173
|
+
}
|
|
174
|
+
export interface CustomMeasurementConfig {
|
|
175
|
+
durationSeconds?: number;
|
|
176
|
+
infiniteMeasurement?: boolean;
|
|
177
|
+
instantMetrics?: Metric[];
|
|
178
|
+
summaryMetrics?: Metric[];
|
|
179
|
+
healthIndices?: HealthIndex[];
|
|
180
|
+
realtimeHrPeriodSeconds?: number;
|
|
181
|
+
realtimeHrvPeriodSeconds?: number;
|
|
182
|
+
realtimeCardiacStressPeriodSeconds?: number;
|
|
183
|
+
}
|
|
184
|
+
export interface CustomColorTheme {
|
|
185
|
+
themeColor: string;
|
|
186
|
+
textColor: string;
|
|
187
|
+
backgroundColor: string;
|
|
188
|
+
tileColor: string;
|
|
189
|
+
buttonMainColor?: string;
|
|
190
|
+
buttonSecondaryColor?: string;
|
|
191
|
+
}
|
|
192
|
+
export declare function initialize(apiKey: string, userId?: string, settings?: InitializationSettings): Promise<InitializationResult>;
|
|
193
|
+
export declare function isInitialized(): Promise<boolean>;
|
|
194
|
+
export declare function deinitialize(): Promise<void>;
|
|
195
|
+
export declare function setOperatingMode(operatingMode: OperatingMode): Promise<void>;
|
|
196
|
+
export declare function getOperatingMode(): Promise<OperatingMode>;
|
|
197
|
+
export declare function startMeasurement(): Promise<void>;
|
|
198
|
+
export declare function stopMeasurement(): Promise<void>;
|
|
199
|
+
export declare function resetMeasurementSession(): Promise<void>;
|
|
200
|
+
export declare function isReadyToStartMeasurement(): Promise<boolean>;
|
|
201
|
+
export declare function areRequiredModelsDownloaded(): Promise<boolean>;
|
|
202
|
+
export declare function getCalibrationState(): Promise<CalibrationState>;
|
|
203
|
+
export declare function setPrecisionMode(precisionMode: PrecisionMode): Promise<void>;
|
|
204
|
+
export declare function getPrecisionMode(): Promise<PrecisionMode>;
|
|
205
|
+
export declare function setApplyPrecisionModeToBloodPressure(apply: boolean): Promise<void>;
|
|
206
|
+
export declare function getApplyPrecisionModeToBloodPressure(): Promise<boolean>;
|
|
207
|
+
export declare function setBlockingMeasurementConditions(conditions: MeasurementEnvironmentCondition[]): Promise<void>;
|
|
208
|
+
export declare function getBlockingMeasurementConditions(): Promise<MeasurementEnvironmentCondition[]>;
|
|
209
|
+
export declare function setWarningMeasurementConditions(conditions: MeasurementEnvironmentCondition[]): Promise<void>;
|
|
210
|
+
export declare function getWarningMeasurementConditions(): Promise<MeasurementEnvironmentCondition[]>;
|
|
211
|
+
export declare function getCurrentViolatedMeasurementEnvironmentCondition(): Promise<MeasurementEnvironmentCondition | null>;
|
|
212
|
+
export declare function setMeasurementPreset(measurementPreset: MeasurementPreset): Promise<void>;
|
|
213
|
+
export declare function getMeasurementPreset(): Promise<MeasurementPreset>;
|
|
214
|
+
export declare function setCustomMeasurementConfig(config: CustomMeasurementConfig): Promise<void>;
|
|
215
|
+
export declare function setCustomColorTheme(theme: CustomColorTheme): Promise<void>;
|
|
216
|
+
export declare function setCameraMode(cameraMode: CameraMode): Promise<void>;
|
|
217
|
+
export declare function getCameraMode(): Promise<CameraMode>;
|
|
218
|
+
export declare function getLastCameraError(): Promise<CameraError | null>;
|
|
219
|
+
export declare function setScreen(screen: Screen): Promise<void>;
|
|
220
|
+
export declare function getScreen(): Promise<Screen>;
|
|
221
|
+
export declare function setShowUserInterface(showUserInterface: boolean): Promise<void>;
|
|
222
|
+
export declare function getShowUserInterface(): Promise<boolean>;
|
|
223
|
+
export declare function setShowFacePositioningOverlay(showFacePositioningOverlay: boolean): Promise<void>;
|
|
224
|
+
export declare function getShowFacePositioningOverlay(): Promise<boolean>;
|
|
225
|
+
export declare function setShowVisualWarnings(showVisualWarnings: boolean): Promise<void>;
|
|
226
|
+
export declare function getShowVisualWarnings(): Promise<boolean>;
|
|
227
|
+
export declare function setEnableCameraSwap(enableCameraSwap: boolean): Promise<void>;
|
|
228
|
+
export declare function getEnableCameraSwap(): Promise<boolean>;
|
|
229
|
+
export declare function setShowFaceMask(showFaceMask: boolean): Promise<void>;
|
|
230
|
+
export declare function getShowFaceMask(): Promise<boolean>;
|
|
231
|
+
export declare function setShowBloodFlow(showBloodFlow: boolean): Promise<void>;
|
|
232
|
+
export declare function getShowBloodFlow(): Promise<boolean>;
|
|
233
|
+
export declare function setIncludeTimestampInPdf(include: boolean): Promise<void>;
|
|
234
|
+
export declare function getIncludeTimestampInPdf(): Promise<boolean>;
|
|
235
|
+
export declare function setPdfEmailSubject(subject: string): Promise<void>;
|
|
236
|
+
export declare function setPdfEmailBody(body: string): Promise<void>;
|
|
237
|
+
export declare function setShowStartStopButton(show: boolean): Promise<void>;
|
|
238
|
+
export declare function getShowStartStopButton(): Promise<boolean>;
|
|
239
|
+
export declare function setEnableMeasurementsDashboard(enable: boolean): Promise<void>;
|
|
240
|
+
export declare function getEnableMeasurementsDashboard(): Promise<boolean>;
|
|
241
|
+
export declare function setShowInfoButton(show: boolean): Promise<void>;
|
|
242
|
+
export declare function getShowInfoButton(): Promise<boolean>;
|
|
243
|
+
export declare function getShowDisclaimer(): Promise<boolean>;
|
|
244
|
+
export declare function setEnableStartAfterSuccess(enableStartAfterSuccess: boolean): Promise<void>;
|
|
245
|
+
export declare function getEnableStartAfterSuccess(): Promise<boolean>;
|
|
246
|
+
export declare const enum FaceState {
|
|
247
|
+
OK = 0,
|
|
248
|
+
TOO_FAR = 1,
|
|
249
|
+
TOO_CLOSE = 2,
|
|
250
|
+
NOT_CENTERED = 3,
|
|
251
|
+
NOT_VISIBLE = 4,
|
|
252
|
+
UNKNOWN = 5
|
|
253
|
+
}
|
|
254
|
+
export declare function getFaceState(): Promise<FaceState>;
|
|
255
|
+
export interface NormalizedFaceBbox {
|
|
256
|
+
x: number;
|
|
257
|
+
y: number;
|
|
258
|
+
width: number;
|
|
259
|
+
height: number;
|
|
260
|
+
}
|
|
261
|
+
export declare function getNormalizedFaceBbox(): Promise<NormalizedFaceBbox | null>;
|
|
262
|
+
export declare const enum MeasurementState {
|
|
263
|
+
NOT_STARTED = 0,
|
|
264
|
+
WAITING_FOR_FACE = 1,
|
|
265
|
+
RUNNING_SIGNAL_SHORT = 2,
|
|
266
|
+
RUNNING_SIGNAL_GOOD = 3,
|
|
267
|
+
RUNNING_SIGNAL_BAD = 4,
|
|
268
|
+
RUNNING_SIGNAL_BAD_DEVICE_UNSTABLE = 5,
|
|
269
|
+
FINALIZING = 6,
|
|
270
|
+
FINISHED = 7,
|
|
271
|
+
FAILED = 8
|
|
272
|
+
}
|
|
273
|
+
export declare function getMeasurementState(): Promise<MeasurementState>;
|
|
274
|
+
export declare function getMeasurementProgressPercentage(): Promise<number>;
|
|
275
|
+
export declare const enum Event {
|
|
276
|
+
START_BUTTON_CLICKED = 0,
|
|
277
|
+
STOP_BUTTON_CLICKED = 1,
|
|
278
|
+
MEASUREMENT_FINISHED = 2,
|
|
279
|
+
USER_FLOW_FINISHED = 3,
|
|
280
|
+
SCREEN_CHANGED = 4
|
|
281
|
+
}
|
|
282
|
+
export declare function getHeartRate10s(): Promise<number | null>;
|
|
283
|
+
export declare function getHeartRate4s(): Promise<number | null>;
|
|
284
|
+
export interface Heartbeat {
|
|
285
|
+
startLocationSec: number;
|
|
286
|
+
endLocationSec: number;
|
|
287
|
+
durationMs: number;
|
|
288
|
+
}
|
|
289
|
+
export interface MeasurementQualityMetrics {
|
|
290
|
+
ppgQualityIndex: number | null;
|
|
291
|
+
bcgQualityIndex: number | null;
|
|
292
|
+
breathingQualityIndex: number | null;
|
|
293
|
+
bloodPressureQualityIndex: number | null;
|
|
294
|
+
expectedSbpMedianAbsErrorMmhg: number | null;
|
|
295
|
+
expectedSbpP80AbsErrorMmhg: number | null;
|
|
296
|
+
expectedSbpMeanAbsErrorMmhg: number | null;
|
|
297
|
+
expectedSbpBalancedMaeMmhg: number | null;
|
|
298
|
+
expectedDbpMedianAbsErrorMmhg: number | null;
|
|
299
|
+
expectedDbpP80AbsErrorMmhg: number | null;
|
|
300
|
+
expectedDbpMeanAbsErrorMmhg: number | null;
|
|
301
|
+
expectedDbpBalancedMaeMmhg: number | null;
|
|
302
|
+
}
|
|
303
|
+
export interface MeasurementResults {
|
|
304
|
+
heartRateBpm: number;
|
|
305
|
+
hrvSdnnMs: number | null;
|
|
306
|
+
hrvLnrmssdMs: number | null;
|
|
307
|
+
stressIndex: number | null;
|
|
308
|
+
parasympatheticActivity: number | null;
|
|
309
|
+
breathingRateBpm: number | null;
|
|
310
|
+
systolicBloodPressureMmhg: number | null;
|
|
311
|
+
diastolicBloodPressureMmhg: number | null;
|
|
312
|
+
cardiacWorkloadMmhgPerSec: number | null;
|
|
313
|
+
ageYears: number | null;
|
|
314
|
+
bmiKgPerM2: number | null;
|
|
315
|
+
bmiCategory?: BmiCategory | null;
|
|
316
|
+
weightKg: number | null;
|
|
317
|
+
heightCm: number | null;
|
|
318
|
+
qualityMetrics: MeasurementQualityMetrics | null;
|
|
319
|
+
heartbeats: Heartbeat[];
|
|
320
|
+
averageSignalQuality: number;
|
|
321
|
+
}
|
|
322
|
+
export interface MeasurementResultsWithMetadata {
|
|
323
|
+
measurementResults: MeasurementResults;
|
|
324
|
+
epochTimestamp: number;
|
|
325
|
+
isCalibration: boolean;
|
|
326
|
+
}
|
|
327
|
+
export interface MeasurementResultsHistory {
|
|
328
|
+
history: MeasurementResultsWithMetadata[];
|
|
329
|
+
}
|
|
330
|
+
export declare function getRealtimeMetrics(periodSec: number): Promise<MeasurementResults | null>;
|
|
331
|
+
export declare function getMeasurementResults(): Promise<MeasurementResults | null>;
|
|
332
|
+
export declare function getMeasurementResultsHistory(): Promise<MeasurementResultsHistory | null>;
|
|
333
|
+
export declare function getResultAsFhirObservation(): Promise<string | null>;
|
|
334
|
+
export declare function sendResultFhirObservation(url: string): Promise<string | null>;
|
|
335
|
+
export interface MomentaryHrValue {
|
|
336
|
+
timestamp: number;
|
|
337
|
+
value: number;
|
|
338
|
+
}
|
|
339
|
+
export declare function getHeartRateHistory10s(maxTimeSec?: number): Promise<MomentaryHrValue[]>;
|
|
340
|
+
export declare function getHeartRateHistory4s(maxTimeSec?: number): Promise<MomentaryHrValue[]>;
|
|
341
|
+
export declare function getRealtimeHeartbeats(periodSec?: number): Promise<Heartbeat[]>;
|
|
342
|
+
export declare function getFullPpgSignal(): Promise<number[]>;
|
|
343
|
+
export declare function setRecordingEnabled(enabled: boolean): Promise<void>;
|
|
344
|
+
export declare function getRecordingEnabled(): Promise<boolean>;
|
|
345
|
+
export declare function getTotalBadSignalSeconds(): Promise<number>;
|
|
346
|
+
export declare function getCurrentSignalQualityMetric(): Promise<number>;
|
|
347
|
+
export declare function getSignalQualityMapPng(): Promise<number[]>;
|
|
348
|
+
export declare function getFaceTexturePng(): Promise<number[]>;
|
|
349
|
+
export declare function setLanguage(language: string): Promise<void>;
|
|
350
|
+
export declare const enum Gender {
|
|
351
|
+
MALE = 0,
|
|
352
|
+
FEMALE = 1,
|
|
353
|
+
OTHER = 2
|
|
354
|
+
}
|
|
355
|
+
export declare const enum PhysicalActivity {
|
|
356
|
+
SEDENTARY = 0,
|
|
357
|
+
LIGHTLY_ACTIVE = 1,
|
|
358
|
+
MODERATELY = 2,
|
|
359
|
+
VERY_ACTIVE = 3,
|
|
360
|
+
EXTRA_ACTIVE = 4
|
|
361
|
+
}
|
|
362
|
+
export declare const enum Race {
|
|
363
|
+
WHITE = 0,
|
|
364
|
+
AFRICAN_AMERICAN = 1,
|
|
365
|
+
OTHER = 2
|
|
366
|
+
}
|
|
367
|
+
export declare const enum HypertensionTreatment {
|
|
368
|
+
NOT_NEEDED = 0,
|
|
369
|
+
NO = 1,
|
|
370
|
+
YES = 2
|
|
371
|
+
}
|
|
372
|
+
export declare const enum ParentalHistory {
|
|
373
|
+
NONE = 0,
|
|
374
|
+
ONE = 1,
|
|
375
|
+
BOTH = 2
|
|
376
|
+
}
|
|
377
|
+
export declare const enum FamilyHistory {
|
|
378
|
+
NONE = 0,
|
|
379
|
+
NONE_FIRST_DEGREE = 1,
|
|
380
|
+
FIRST_DEGREE = 2
|
|
381
|
+
}
|
|
382
|
+
export declare const enum NAFLDRisk {
|
|
383
|
+
LOW = 0,
|
|
384
|
+
MODERATE = 1,
|
|
385
|
+
HIGH = 2
|
|
386
|
+
}
|
|
387
|
+
export interface HardAndFatalEventsRisks {
|
|
388
|
+
coronaryDeathEventRisk: number | null;
|
|
389
|
+
fatalStrokeEventRisk: number | null;
|
|
390
|
+
totalCVMortalityRisk: number | null;
|
|
391
|
+
hardCVEventRisk: number | null;
|
|
392
|
+
}
|
|
393
|
+
export interface CVDiseasesRisks {
|
|
394
|
+
overallRisk: number | null;
|
|
395
|
+
coronaryHeartDiseaseRisk: number | null;
|
|
396
|
+
strokeRisk: number | null;
|
|
397
|
+
heartFailureRisk: number | null;
|
|
398
|
+
peripheralVascularDiseaseRisk: number | null;
|
|
399
|
+
}
|
|
400
|
+
export interface RisksFactorsScores {
|
|
401
|
+
ageScore: number | null;
|
|
402
|
+
sbpScore: number | null;
|
|
403
|
+
smokingScore: number | null;
|
|
404
|
+
diabetesScore: number | null;
|
|
405
|
+
bmiScore: number | null;
|
|
406
|
+
cholesterolScore: number | null;
|
|
407
|
+
cholesterolHdlScore: number | null;
|
|
408
|
+
totalScore: number | null;
|
|
409
|
+
}
|
|
410
|
+
export interface HealthRisks {
|
|
411
|
+
wellnessScore: number | null;
|
|
412
|
+
hardAndFatalEvents: HardAndFatalEventsRisks;
|
|
413
|
+
cvDiseases: CVDiseasesRisks;
|
|
414
|
+
vascularAge: number | null;
|
|
415
|
+
waistToHeightRatio: number | null;
|
|
416
|
+
bodyFatPercentage: number | null;
|
|
417
|
+
basalMetabolicRate: number | null;
|
|
418
|
+
bodyRoundnessIndex: number | null;
|
|
419
|
+
conicityIndex: number | null;
|
|
420
|
+
aBodyShapeIndex: number | null;
|
|
421
|
+
totalDailyEnergyExpenditure: number | null;
|
|
422
|
+
scores: RisksFactorsScores;
|
|
423
|
+
hypertensionRisk?: number | null;
|
|
424
|
+
diabetesRisk?: number | null;
|
|
425
|
+
nonAlcoholicFattyLiverDiseaseRisk?: NAFLDRisk | null;
|
|
426
|
+
}
|
|
427
|
+
export interface RisksFactors {
|
|
428
|
+
age?: number;
|
|
429
|
+
cholesterol?: number;
|
|
430
|
+
cholesterolHdl?: number;
|
|
431
|
+
sbp?: number;
|
|
432
|
+
dbp?: number;
|
|
433
|
+
isSmoker?: boolean;
|
|
434
|
+
hypertensionTreatment?: HypertensionTreatment;
|
|
435
|
+
hasDiabetes?: boolean;
|
|
436
|
+
bodyHeight?: number;
|
|
437
|
+
bodyWeight?: number;
|
|
438
|
+
waistCircumference?: number;
|
|
439
|
+
neckCircumference?: number;
|
|
440
|
+
hipCircumference?: number;
|
|
441
|
+
gender?: Gender;
|
|
442
|
+
physicalActivity?: PhysicalActivity;
|
|
443
|
+
country?: string;
|
|
444
|
+
race?: Race;
|
|
445
|
+
vegetableFruitDiet?: boolean;
|
|
446
|
+
historyOfHypertension?: boolean;
|
|
447
|
+
historyOfHighGlucose?: boolean;
|
|
448
|
+
fastingGlucose?: number;
|
|
449
|
+
triglyceride?: number;
|
|
450
|
+
parentalHypertension?: ParentalHistory;
|
|
451
|
+
familyDiabetes?: FamilyHistory;
|
|
452
|
+
}
|
|
453
|
+
export declare function getHealthRisksFactors(): Promise<RisksFactors>;
|
|
454
|
+
export declare function clearHealthRisksFactors(): Promise<void>;
|
|
455
|
+
export declare function getHealthRisks(): Promise<HealthRisks>;
|
|
456
|
+
export declare function computeHealthRisks(factors: RisksFactors): Promise<HealthRisks>;
|
|
457
|
+
export declare function getMaximalRisks(factors: RisksFactors): Promise<HealthRisks>;
|
|
458
|
+
export declare function getMinimalRisks(factors: RisksFactors): Promise<HealthRisks>;
|
|
459
|
+
export declare function getReferenceRisks(factors: RisksFactors): Promise<HealthRisks>;
|
|
460
|
+
export declare function openMeasurementResultsPdfInBrowser(): Promise<void>;
|
|
461
|
+
export declare function sendMeasurementResultsPdfToEmail(email: string): Promise<void>;
|
|
462
|
+
export declare function requestMeasurementResultsPdfUrl(): Promise<void>;
|
|
463
|
+
export declare function getMeasurementResultsPdfUrl(): Promise<string | null>;
|
|
464
|
+
export declare function requestMeasurementResultsPdfBytes(): Promise<void>;
|
|
465
|
+
export declare function getMeasurementResultsPdfBytes(): Promise<number[] | null>;
|
|
466
|
+
export * from "./hooks";
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shenai/react-native-sdk",
|
|
3
|
+
"version": "3.1.1",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "Shen.AI SDK for React Native.",
|
|
6
|
+
"main": "lib/module/index.js",
|
|
7
|
+
"types": "lib/typescript/src/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"lib",
|
|
10
|
+
"!lib/**/*.map",
|
|
11
|
+
"!**/__tests__",
|
|
12
|
+
"!**/__fixtures__",
|
|
13
|
+
"!**/__mocks__",
|
|
14
|
+
"android",
|
|
15
|
+
"ios",
|
|
16
|
+
"*.podspec"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
20
|
+
"clean": "rimraf android/build ios/build lib"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/mxlaboratories/shenai-sdk"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"react-native",
|
|
28
|
+
"shenai",
|
|
29
|
+
"sdk"
|
|
30
|
+
],
|
|
31
|
+
"author": "Shen.AI SDK Developers <sdk-developers@shen.ai> (https://developer.shen.ai)",
|
|
32
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/mxlaboratories/shenai-sdk/issues"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://developer.shen.ai",
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"react": "*",
|
|
39
|
+
"react-native": "*"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/react": "^18.2.67",
|
|
43
|
+
"@types/react-native": "^0.73.0",
|
|
44
|
+
"eslint": "^8.57.0",
|
|
45
|
+
"react-native-builder-bob": "^0.23.2",
|
|
46
|
+
"typescript": "^5.1.6"
|
|
47
|
+
},
|
|
48
|
+
"module": "lib/module/index.js",
|
|
49
|
+
"eslintIgnore": [
|
|
50
|
+
"node_modules/",
|
|
51
|
+
"lib/"
|
|
52
|
+
],
|
|
53
|
+
"publishConfig": {
|
|
54
|
+
"access": "public",
|
|
55
|
+
"tag": "latest"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
4
|
+
folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
|
|
5
|
+
|
|
6
|
+
Pod::Spec.new do |s|
|
|
7
|
+
s.name = "react-native-shenai-sdk"
|
|
8
|
+
s.version = package["version"]
|
|
9
|
+
s.summary = package["description"]
|
|
10
|
+
s.homepage = package["homepage"]
|
|
11
|
+
s.license = { :file => "LICENSE.md" }
|
|
12
|
+
s.authors = package["author"]
|
|
13
|
+
s.platforms = { :ios => "14.0" }
|
|
14
|
+
s.source = { :path => "." }
|
|
15
|
+
s.source_files = "ios/**/*.{h,m,mm}"
|
|
16
|
+
s.dependency "ShenaiSDK", "3.1.1"
|
|
17
|
+
|
|
18
|
+
if respond_to?(:install_modules_dependencies, true)
|
|
19
|
+
install_modules_dependencies(s)
|
|
20
|
+
else
|
|
21
|
+
s.dependency "React-Core"
|
|
22
|
+
if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
|
|
23
|
+
s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
|
|
24
|
+
s.pod_target_xcconfig = {
|
|
25
|
+
"HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
|
|
26
|
+
"OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1",
|
|
27
|
+
"CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
|
|
28
|
+
}
|
|
29
|
+
s.dependency "React-RCTFabric"
|
|
30
|
+
s.dependency "React-Codegen"
|
|
31
|
+
s.dependency "RCT-Folly"
|
|
32
|
+
s.dependency "RCTRequired"
|
|
33
|
+
s.dependency "RCTTypeSafety"
|
|
34
|
+
s.dependency "ReactCommon/turbomodule/core"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|