@ha_tecno/live-id-sdk 2.12.2 → 2.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. package/lib/commonjs/components/Typograph/typograph.js +28 -0
  2. package/lib/commonjs/components/Typograph/typograph.js.map +1 -0
  3. package/lib/commonjs/components/index.js +14 -0
  4. package/lib/commonjs/components/index.js.map +1 -1
  5. package/lib/commonjs/index.js +12 -0
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/screens/FingerAuth/FingerAuth.js +4 -1
  8. package/lib/commonjs/screens/FingerAuth/FingerAuth.js.map +1 -1
  9. package/lib/commonjs/screens/FingerRegister/FingerRegister.js +4 -1
  10. package/lib/commonjs/screens/FingerRegister/FingerRegister.js.map +1 -1
  11. package/lib/commonjs/screens/LifeCertificate/LifeCertificate.js +6 -3
  12. package/lib/commonjs/screens/LifeCertificate/LifeCertificate.js.map +1 -1
  13. package/lib/commonjs/screens/RegisterOperations/registerOperationPointsBiometrics.js +185 -0
  14. package/lib/commonjs/screens/RegisterOperations/registerOperationPointsBiometrics.js.map +1 -0
  15. package/lib/commonjs/screens/RegisterOperations/registerOperationPointsLifeCertificate.js +165 -0
  16. package/lib/commonjs/screens/RegisterOperations/registerOperationPointsLifeCertificate.js.map +1 -0
  17. package/lib/commonjs/screens/RegisterOperations/styles.js +47 -0
  18. package/lib/commonjs/screens/RegisterOperations/styles.js.map +1 -0
  19. package/lib/commonjs/screens/index.js +14 -0
  20. package/lib/commonjs/screens/index.js.map +1 -1
  21. package/lib/commonjs/services/index.js +18 -0
  22. package/lib/commonjs/services/index.js.map +1 -1
  23. package/lib/commonjs/services/services.js +106 -1
  24. package/lib/commonjs/services/services.js.map +1 -1
  25. package/lib/commonjs/store/modules/operationPoints/index.js +19 -0
  26. package/lib/commonjs/store/modules/operationPoints/index.js.map +1 -0
  27. package/lib/commonjs/store/modules/operationPoints/selectors.js +13 -0
  28. package/lib/commonjs/store/modules/operationPoints/selectors.js.map +1 -0
  29. package/lib/commonjs/store/modules/operationPoints/slice.js +233 -0
  30. package/lib/commonjs/store/modules/operationPoints/slice.js.map +1 -0
  31. package/lib/commonjs/store/modules/operationPoints/types.js +2 -0
  32. package/lib/commonjs/store/modules/operationPoints/types.js.map +1 -0
  33. package/lib/commonjs/utils/index.js +12 -0
  34. package/lib/commonjs/utils/index.js.map +1 -1
  35. package/lib/commonjs/utils/utils.js +9 -1
  36. package/lib/commonjs/utils/utils.js.map +1 -1
  37. package/lib/module/components/Typograph/typograph.js +21 -0
  38. package/lib/module/components/Typograph/typograph.js.map +1 -0
  39. package/lib/module/components/index.js +3 -1
  40. package/lib/module/components/index.js.map +1 -1
  41. package/lib/module/index.js +2 -2
  42. package/lib/module/index.js.map +1 -1
  43. package/lib/module/screens/FingerAuth/FingerAuth.js +5 -2
  44. package/lib/module/screens/FingerAuth/FingerAuth.js.map +1 -1
  45. package/lib/module/screens/FingerRegister/FingerRegister.js +5 -2
  46. package/lib/module/screens/FingerRegister/FingerRegister.js.map +1 -1
  47. package/lib/module/screens/LifeCertificate/LifeCertificate.js +6 -3
  48. package/lib/module/screens/LifeCertificate/LifeCertificate.js.map +1 -1
  49. package/lib/module/screens/RegisterOperations/registerOperationPointsBiometrics.js +176 -0
  50. package/lib/module/screens/RegisterOperations/registerOperationPointsBiometrics.js.map +1 -0
  51. package/lib/module/screens/RegisterOperations/registerOperationPointsLifeCertificate.js +157 -0
  52. package/lib/module/screens/RegisterOperations/registerOperationPointsLifeCertificate.js.map +1 -0
  53. package/lib/module/screens/RegisterOperations/styles.js +41 -0
  54. package/lib/module/screens/RegisterOperations/styles.js.map +1 -0
  55. package/lib/module/screens/index.js +3 -1
  56. package/lib/module/screens/index.js.map +1 -1
  57. package/lib/module/services/index.js +2 -2
  58. package/lib/module/services/index.js.map +1 -1
  59. package/lib/module/services/services.js +102 -0
  60. package/lib/module/services/services.js.map +1 -1
  61. package/lib/module/store/modules/operationPoints/index.js +3 -0
  62. package/lib/module/store/modules/operationPoints/index.js.map +1 -0
  63. package/lib/module/store/modules/operationPoints/selectors.js +6 -0
  64. package/lib/module/store/modules/operationPoints/selectors.js.map +1 -0
  65. package/lib/module/store/modules/operationPoints/slice.js +227 -0
  66. package/lib/module/store/modules/operationPoints/slice.js.map +1 -0
  67. package/lib/module/store/modules/operationPoints/types.js +2 -0
  68. package/lib/module/store/modules/operationPoints/types.js.map +1 -0
  69. package/lib/module/utils/index.js +2 -2
  70. package/lib/module/utils/index.js.map +1 -1
  71. package/lib/module/utils/utils.js +7 -1
  72. package/lib/module/utils/utils.js.map +1 -1
  73. package/lib/typescript/src/components/Typograph/typograph.d.ts +10 -0
  74. package/lib/typescript/src/components/Typograph/typograph.d.ts.map +1 -0
  75. package/lib/typescript/src/components/index.d.ts +3 -1
  76. package/lib/typescript/src/components/index.d.ts.map +1 -1
  77. package/lib/typescript/src/index.d.ts +2 -2
  78. package/lib/typescript/src/index.d.ts.map +1 -1
  79. package/lib/typescript/src/screens/FingerAuth/FingerAuth.d.ts.map +1 -1
  80. package/lib/typescript/src/screens/FingerRegister/FingerRegister.d.ts.map +1 -1
  81. package/lib/typescript/src/screens/LifeCertificate/LifeCertificate.d.ts.map +1 -1
  82. package/lib/typescript/src/screens/RegisterOperations/registerOperationPointsBiometrics.d.ts +7 -0
  83. package/lib/typescript/src/screens/RegisterOperations/registerOperationPointsBiometrics.d.ts.map +1 -0
  84. package/lib/typescript/src/screens/RegisterOperations/registerOperationPointsLifeCertificate.d.ts +7 -0
  85. package/lib/typescript/src/screens/RegisterOperations/registerOperationPointsLifeCertificate.d.ts.map +1 -0
  86. package/lib/typescript/src/screens/RegisterOperations/styles.d.ts +40 -0
  87. package/lib/typescript/src/screens/RegisterOperations/styles.d.ts.map +1 -0
  88. package/lib/typescript/src/screens/index.d.ts +3 -1
  89. package/lib/typescript/src/screens/index.d.ts.map +1 -1
  90. package/lib/typescript/src/services/index.d.ts +2 -2
  91. package/lib/typescript/src/services/index.d.ts.map +1 -1
  92. package/lib/typescript/src/services/services.d.ts +4 -1
  93. package/lib/typescript/src/services/services.d.ts.map +1 -1
  94. package/lib/typescript/src/services/types.d.ts +29 -0
  95. package/lib/typescript/src/services/types.d.ts.map +1 -1
  96. package/lib/typescript/src/store/modules/operationPoints/index.d.ts +3 -0
  97. package/lib/typescript/src/store/modules/operationPoints/index.d.ts.map +1 -0
  98. package/lib/typescript/src/store/modules/operationPoints/selectors.d.ts +24 -0
  99. package/lib/typescript/src/store/modules/operationPoints/selectors.d.ts.map +1 -0
  100. package/lib/typescript/src/store/modules/operationPoints/slice.d.ts +4 -0
  101. package/lib/typescript/src/store/modules/operationPoints/slice.d.ts.map +1 -0
  102. package/lib/typescript/src/store/modules/operationPoints/types.d.ts +51 -0
  103. package/lib/typescript/src/store/modules/operationPoints/types.d.ts.map +1 -0
  104. package/lib/typescript/src/utils/index.d.ts +2 -2
  105. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  106. package/lib/typescript/src/utils/utils.d.ts +3 -1
  107. package/lib/typescript/src/utils/utils.d.ts.map +1 -1
  108. package/package.json +2 -1
  109. package/src/components/Typograph/typograph.tsx +24 -0
  110. package/src/components/index.ts +3 -1
  111. package/src/index.tsx +14 -2
  112. package/src/screens/FingerAuth/FingerAuth.tsx +7 -3
  113. package/src/screens/FingerRegister/FingerRegister.tsx +6 -2
  114. package/src/screens/LifeCertificate/LifeCertificate.tsx +6 -2
  115. package/src/screens/RegisterOperations/registerOperationPointsBiometrics.tsx +168 -0
  116. package/src/screens/RegisterOperations/registerOperationPointsLifeCertificate.tsx +175 -0
  117. package/src/screens/RegisterOperations/styles.ts +41 -0
  118. package/src/screens/index.ts +9 -1
  119. package/src/services/index.ts +18 -2
  120. package/src/services/services.ts +113 -1
  121. package/src/services/types.ts +33 -0
  122. package/src/store/modules/operationPoints/index.ts +3 -0
  123. package/src/store/modules/operationPoints/selectors.ts +7 -0
  124. package/src/store/modules/operationPoints/slice.ts +240 -0
  125. package/src/store/modules/operationPoints/types.ts +61 -0
  126. package/src/utils/index.ts +2 -2
  127. package/src/utils/utils.ts +9 -1
@@ -8,7 +8,11 @@ import type {
8
8
  RegisterFingerResponse,
9
9
  RegisterFingerImagesType,
10
10
  AuthFingerType,
11
- AuthFingerResponse
11
+ AuthFingerResponse,
12
+ SendImagesForRegisterOperationPointsType,
13
+ SendImagesForRegisterOperationPointsResponse,
14
+ SendVideoForRegisterOperationPointsType,
15
+ SendVideoForRegisterOperationPointsResponse
12
16
  } from "./types";
13
17
  import DeviceInfo from "react-native-device-info";
14
18
 
@@ -136,3 +140,111 @@ export const lifeCertificate = async ({
136
140
  };
137
141
  }
138
142
  };
143
+
144
+ export const getConfigOperationPoints = async (): Promise<GetConfigApiResponse> => {
145
+ const { data } = await axiosInstance.get("/configs", {
146
+ headers: {
147
+ "Content-Type": "application/json",
148
+ Authorization: `Bearer ${TOKEN}`
149
+ }
150
+ });
151
+ return data.deviceParamsConfig;
152
+ };
153
+
154
+ export const sendImagesForRegisterOperationPoints = async ({
155
+ deviceModel,
156
+ exposure,
157
+ exposureMax,
158
+ exposureMin,
159
+ exposureScaleZeroToOneBiometrics,
160
+ images,
161
+ zoom,
162
+ zoomMax,
163
+ zoomMin,
164
+ zoomScaleZeroToOne
165
+ }: SendImagesForRegisterOperationPointsType): Promise<SendImagesForRegisterOperationPointsResponse> => {
166
+ try {
167
+ const { data } = await axiosInstance.post(
168
+ "/images-quality",
169
+ {
170
+ device_model: deviceModel,
171
+ images,
172
+ exposure,
173
+ exposureMin,
174
+ exposureMax,
175
+ exposureScaleZeroToOne: exposureScaleZeroToOneBiometrics,
176
+ zoom,
177
+ zoomMin,
178
+ zoomMax,
179
+ zoomScaleZeroToOne,
180
+ operationalSystem: Platform.OS
181
+ },
182
+ {
183
+ headers: {
184
+ "Content-Type": "application/json",
185
+ Authorization: `Bearer ${TOKEN}`
186
+ }
187
+ }
188
+ );
189
+ return {
190
+ message: "Cadastro de ponto de operação realizado com sucesso!",
191
+ status: data.status
192
+ };
193
+ } catch (error: any) {
194
+ return {
195
+ message: "Continue, faça com o próximo ponto de operação.",
196
+ status: error.response.data.status
197
+ };
198
+ }
199
+ };
200
+
201
+ export const sendVideoForRegisterOperationPoints = async ({
202
+ deviceModel,
203
+ exposure,
204
+ exposureMax,
205
+ exposureMin,
206
+ exposureScaleZeroToOneLifeCertificate,
207
+ videoPath
208
+ }: SendVideoForRegisterOperationPointsType): Promise<SendVideoForRegisterOperationPointsResponse> => {
209
+ try {
210
+ const uuidv4 = uuid.v4();
211
+ const formData = new FormData();
212
+
213
+ formData.append("video", {
214
+ uri: Platform.select({
215
+ ios: videoPath,
216
+ android: `file://${videoPath}`
217
+ }),
218
+ type: "video/mp4",
219
+ name: `${uuidv4}.mp4`
220
+ });
221
+
222
+ formData.append("video_key", uuidv4);
223
+ formData.append("device_model", deviceModel);
224
+ formData.append("operationalSystem", Platform.OS);
225
+ formData.append("exposure", exposure);
226
+ formData.append("exposureMin", exposureMin);
227
+ formData.append("exposureMax", exposureMax);
228
+ formData.append("exposureScaleZeroToOne", exposureScaleZeroToOneLifeCertificate);
229
+
230
+ const { data } = await axiosInstance.post("/video-quality", formData, {
231
+ headers: {
232
+ "Content-Type": "multipart/form-data",
233
+ Authorization: `Bearer ${TOKEN}`
234
+ }
235
+ });
236
+ const hasConfig = data.config !== undefined;
237
+ return {
238
+ message: hasConfig
239
+ ? "Cadastro de ponto de operação realizado com sucesso!"
240
+ : "A calibração foi um sucesso, faça novamente mais uma vez!",
241
+ status: data.status,
242
+ hasConfig
243
+ };
244
+ } catch (e: any) {
245
+ return {
246
+ message: "Continue, faça com o próximo ponto de operação.",
247
+ status: e.response.data.status
248
+ };
249
+ }
250
+ };
@@ -58,3 +58,36 @@ export type LifeCertificateResponse = {
58
58
  bpm?: number;
59
59
  message?: string;
60
60
  };
61
+
62
+ export type SendImagesForRegisterOperationPointsType = {
63
+ deviceModel: string;
64
+ images: string[];
65
+ exposure: number;
66
+ exposureMin: number;
67
+ exposureMax: number;
68
+ exposureScaleZeroToOneBiometrics: number;
69
+ zoom: number;
70
+ zoomMax: number;
71
+ zoomMin: number;
72
+ zoomScaleZeroToOne: number;
73
+ };
74
+
75
+ export type SendImagesForRegisterOperationPointsResponse = {
76
+ status: number;
77
+ message: string;
78
+ };
79
+
80
+ export type SendVideoForRegisterOperationPointsType = {
81
+ deviceModel: string;
82
+ videoPath: string;
83
+ exposure: number;
84
+ exposureScaleZeroToOneLifeCertificate: number;
85
+ exposureMin: number;
86
+ exposureMax: number;
87
+ };
88
+
89
+ export type SendVideoForRegisterOperationPointsResponse = {
90
+ status: number;
91
+ message: string;
92
+ hasConfig?: boolean;
93
+ };
@@ -0,0 +1,3 @@
1
+ import { useDispatch, useSelector } from "./selectors";
2
+
3
+ export { useDispatch, useSelector };
@@ -0,0 +1,7 @@
1
+ import createSelectors from "../../createSelectors";
2
+ import OperationPointsStore from "./slice";
3
+
4
+ const selector = createSelectors(OperationPointsStore);
5
+
6
+ export const useSelector = selector.use.state;
7
+ export const useDispatch = selector.use.dispatch;
@@ -0,0 +1,240 @@
1
+ import { create } from "zustand";
2
+ import {
3
+ ExposureMapOperationPoints,
4
+ InitialState,
5
+ OperationPointsState,
6
+ SendImagesBase64Payload,
7
+ SetImageBase64Payload,
8
+ sendVideosLifeCertificatePayload
9
+ } from "./types";
10
+ import { Platform } from "react-native";
11
+ import {
12
+ getConfigOperationPoints,
13
+ sendImagesForRegisterOperationPoints,
14
+ sendVideoForRegisterOperationPoints
15
+ } from "../../../services";
16
+ import { getModel } from "react-native-device-info";
17
+ import { scale0to1, scale0to1Inverse } from "../../../utils";
18
+
19
+ const initialState: InitialState = {
20
+ state: {
21
+ loading: "idle",
22
+ hasConfigOperationPointsBiometrics: "idle",
23
+ hasConfigOperationPointsLifeCertificate: "idle",
24
+ base64Images: [],
25
+ exposureScaleZeroToOneBiometrics: Platform.OS === "android" ? 0.12 : 0.3,
26
+ exposureScaleZeroToOneLifeCertificate: Platform.OS === "android" ? 0.12 : 0.3,
27
+ registered: false,
28
+ helpStep: "introduction"
29
+ }
30
+ };
31
+
32
+ const resetState = () => {
33
+ slice.setState((state) => ({
34
+ state: {
35
+ ...state.state,
36
+ loading: "idle",
37
+ base64Images: [],
38
+ registered: false,
39
+ helpStep: "introduction"
40
+ }
41
+ }));
42
+ };
43
+
44
+ const loadingPending = () => {
45
+ slice.setState((state) => ({
46
+ state: {
47
+ ...state.state,
48
+ loading: "pending"
49
+ }
50
+ }));
51
+ };
52
+
53
+ const setImageBase64 = (imageBase64: SetImageBase64Payload) => {
54
+ slice.setState((state) => ({
55
+ state: {
56
+ ...state.state,
57
+ base64Images: [...state.state.base64Images, imageBase64]
58
+ }
59
+ }));
60
+ };
61
+
62
+ const changeExposureBiometrics = () => {
63
+ resetState();
64
+ const exposureMap: ExposureMapOperationPoints = {
65
+ 0.12: 0.2,
66
+ 0.2: 0.35,
67
+ 0.3: 0.4,
68
+ 0.35: 0.5,
69
+ 0.4: 0.5,
70
+ 0.5: Platform.OS === "android" ? 0.65 : 0.6,
71
+ 0.65: 0.8,
72
+ 0.6: 0.7,
73
+ 0.7: 0.3,
74
+ 0.8: 0.12
75
+ };
76
+ slice.setState((state) => {
77
+ const { exposureScaleZeroToOneBiometrics } = state.state;
78
+ return {
79
+ state: {
80
+ ...state.state,
81
+ exposureScaleZeroToOneBiometrics:
82
+ exposureMap[exposureScaleZeroToOneBiometrics] || exposureScaleZeroToOneBiometrics
83
+ }
84
+ };
85
+ });
86
+ };
87
+
88
+ const changeExposureLifeCertificate = () => {
89
+ resetState();
90
+ const exposureMap: ExposureMapOperationPoints = {
91
+ 0.12: 0.2,
92
+ 0.2: 0.35,
93
+ 0.3: 0.4,
94
+ 0.35: 0.5,
95
+ 0.4: 0.5,
96
+ 0.5: Platform.OS === "android" ? 0.65 : 0.6,
97
+ 0.65: 0.8,
98
+ 0.6: 0.7,
99
+ 0.7: 0.3,
100
+ 0.8: 0.12
101
+ };
102
+ slice.setState((state) => {
103
+ const { exposureScaleZeroToOneLifeCertificate } = state.state;
104
+ return {
105
+ state: {
106
+ ...state.state,
107
+ exposureScaleZeroToOneLifeCertificate:
108
+ exposureMap[exposureScaleZeroToOneLifeCertificate] || exposureScaleZeroToOneLifeCertificate
109
+ }
110
+ };
111
+ });
112
+ };
113
+
114
+ const handleStepHelp = () => {
115
+ slice.setState((state) => {
116
+ const { helpStep } = state.state;
117
+ return {
118
+ state: {
119
+ ...state.state,
120
+ helpStep: helpStep === "introduction" ? "instruction" : "introduction"
121
+ }
122
+ };
123
+ });
124
+ };
125
+
126
+ // separar a lógica do store
127
+ const getConfigDefault = async (operation: "finger" | "liveness") => {
128
+ const configs = await getConfigOperationPoints();
129
+ const deviceModel = getModel();
130
+ const deviceType = Platform.OS;
131
+ const configsDeviceType = configs.filter(
132
+ (config) => config.deviceType === deviceType && config.serviceType === operation
133
+ );
134
+ const configDeviceModel = configsDeviceType.find((config) => config.deviceModels.includes(deviceModel));
135
+ return configDeviceModel === undefined ? false : true;
136
+ };
137
+
138
+ const getConfigDefaultBiometrics = async () => {
139
+ const payload = await getConfigDefault("finger");
140
+ slice.setState((state) => ({
141
+ state: {
142
+ ...state.state,
143
+ hasConfigOperationPointsBiometrics: payload ? "notEmpty" : "empty"
144
+ }
145
+ }));
146
+ resetState();
147
+ };
148
+
149
+ const getConfigDefaultLifeCertificate = async () => {
150
+ const payload = await getConfigDefault("liveness");
151
+ slice.setState((state) => ({
152
+ state: {
153
+ ...state.state,
154
+ hasConfigOperationPointsLifeCertificate: payload ? "notEmpty" : "empty"
155
+ }
156
+ }));
157
+ resetState();
158
+ };
159
+
160
+ // separar a lógica do store
161
+ const sendImagesBase64 = async ({
162
+ exposureScaleZeroToOneBiometrics,
163
+ base64Images,
164
+ exposureMax,
165
+ exposureMin,
166
+ zoomMax,
167
+ zoomMin
168
+ }: SendImagesBase64Payload) => {
169
+ loadingPending();
170
+ const deviceModel = getModel();
171
+ const zoom = 3;
172
+ const zoomScaleZeroToOne = scale0to1(zoom, zoomMin, zoomMax);
173
+ const exposure = scale0to1Inverse(exposureScaleZeroToOneBiometrics, exposureMin, exposureMax);
174
+ const { message, status } = await sendImagesForRegisterOperationPoints({
175
+ deviceModel,
176
+ images: base64Images,
177
+ exposure,
178
+ exposureMin,
179
+ exposureMax,
180
+ exposureScaleZeroToOneBiometrics,
181
+ zoom,
182
+ zoomMin,
183
+ zoomMax,
184
+ zoomScaleZeroToOne
185
+ });
186
+ slice.setState((state) => ({
187
+ state: {
188
+ ...state.state,
189
+ loading: status === 200 ? "succeeded" : "failed",
190
+ status: status,
191
+ message: message
192
+ }
193
+ }));
194
+ };
195
+
196
+ // separar a lógica do store
197
+ const sendVideosLifeCertificate = async ({
198
+ exposureMax,
199
+ exposureMin,
200
+ videoPath,
201
+ exposureScaleZeroToOneLifeCertificate
202
+ }: sendVideosLifeCertificatePayload) => {
203
+ loadingPending();
204
+ const deviceModel = getModel();
205
+ const exposure = scale0to1Inverse(exposureScaleZeroToOneLifeCertificate, exposureMin, exposureMax);
206
+ const { message, status, hasConfig } = await sendVideoForRegisterOperationPoints({
207
+ deviceModel,
208
+ exposure,
209
+ videoPath,
210
+ exposureMax,
211
+ exposureMin,
212
+ exposureScaleZeroToOneLifeCertificate
213
+ });
214
+ slice.setState((state) => ({
215
+ state: {
216
+ ...state.state,
217
+ registered: hasConfig ?? false,
218
+ loading: status === 200 && hasConfig ? "succeeded" : "failed",
219
+ status: status,
220
+ message: message
221
+ }
222
+ }));
223
+ };
224
+
225
+ const slice = create<OperationPointsState>(() => ({
226
+ ...initialState,
227
+ dispatch: {
228
+ setImageBase64,
229
+ resetState,
230
+ changeExposureBiometrics,
231
+ changeExposureLifeCertificate,
232
+ handleStepHelp,
233
+ getConfigDefaultBiometrics,
234
+ getConfigDefaultLifeCertificate,
235
+ sendImagesBase64,
236
+ sendVideosLifeCertificate
237
+ }
238
+ }));
239
+
240
+ export default slice;
@@ -0,0 +1,61 @@
1
+ type ScaleZeroToOneAndroid = 0.12 | 0.2 | 0.35 | 0.5 | 0.65 | 0.8;
2
+ type ScaleZeroToOneIOS = 0.3 | 0.4 | 0.5 | 0.6 | 0.7;
3
+
4
+ type StatusConfigOperationPoints = "empty" | "notEmpty" | "idle";
5
+
6
+ type State = {
7
+ exposureScaleZeroToOneBiometrics: ScaleZeroToOneIOS | ScaleZeroToOneAndroid;
8
+ exposureScaleZeroToOneLifeCertificate: ScaleZeroToOneIOS | ScaleZeroToOneAndroid;
9
+ loading: "idle" | "pending" | "succeeded" | "failed";
10
+ hasConfigOperationPointsBiometrics: StatusConfigOperationPoints;
11
+ hasConfigOperationPointsLifeCertificate: StatusConfigOperationPoints;
12
+ base64Images: string[];
13
+ status?: number;
14
+ message?: string;
15
+ registered: boolean;
16
+ helpStep: "introduction" | "instruction";
17
+ };
18
+
19
+ type Dispatch = {
20
+ setImageBase64: (imageBase64: SetImageBase64Payload) => void;
21
+ resetState: () => void;
22
+ changeExposureBiometrics: () => void;
23
+ changeExposureLifeCertificate: () => void;
24
+ handleStepHelp: () => void;
25
+ getConfigDefaultBiometrics: () => void;
26
+ getConfigDefaultLifeCertificate: () => void;
27
+ sendImagesBase64: (payload: SendImagesBase64Payload) => void;
28
+ sendVideosLifeCertificate: (payload: sendVideosLifeCertificatePayload) => void;
29
+ };
30
+
31
+ export type InitialState = {
32
+ state: State;
33
+ };
34
+
35
+ export type OperationPointsState = {
36
+ state: State;
37
+ dispatch: Dispatch;
38
+ };
39
+
40
+ export type ExposureMapOperationPoints = Record<
41
+ State["exposureScaleZeroToOneBiometrics"],
42
+ State["exposureScaleZeroToOneBiometrics"]
43
+ >;
44
+
45
+ export type SetImageBase64Payload = string;
46
+
47
+ export type SendImagesBase64Payload = {
48
+ base64Images: string[];
49
+ exposureScaleZeroToOneBiometrics: State["exposureScaleZeroToOneBiometrics"];
50
+ exposureMin: number;
51
+ exposureMax: number;
52
+ zoomMin: number;
53
+ zoomMax: number;
54
+ };
55
+
56
+ export type sendVideosLifeCertificatePayload = {
57
+ exposureMin: number;
58
+ exposureMax: number;
59
+ videoPath: string;
60
+ exposureScaleZeroToOneLifeCertificate: State["exposureScaleZeroToOneLifeCertificate"];
61
+ };
@@ -1,5 +1,5 @@
1
1
  import getConfigCamera from "./getConfigCamera";
2
- import { randomHeartRate, filteredFingers } from "./utils";
2
+ import { randomHeartRate, filteredFingers, scale0to1, scale0to1Inverse } from "./utils";
3
3
  import { useIsForeground } from "./hooks/useIsForeground";
4
4
 
5
- export { getConfigCamera, useIsForeground, randomHeartRate, filteredFingers };
5
+ export { getConfigCamera, useIsForeground, randomHeartRate, filteredFingers, scale0to1, scale0to1Inverse };
@@ -11,4 +11,12 @@ const filteredFingers = (
11
11
  return items.filter((item) => !registeredFingers.includes(item.value));
12
12
  };
13
13
 
14
- export { randomHeartRate, filteredFingers };
14
+ const scale0to1 = (value: number, min: number, max: number) => {
15
+ return (value - min) / (max - min);
16
+ };
17
+
18
+ const scale0to1Inverse = (scaledValue: number, min: number, max: number) => {
19
+ return scaledValue * (max - min) + min;
20
+ };
21
+
22
+ export { randomHeartRate, filteredFingers, scale0to1, scale0to1Inverse };