@ha_tecno/live-id-sdk 2.12.2 → 2.13.0

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.
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 };