@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.
- package/lib/commonjs/components/Typograph/typograph.js +28 -0
- package/lib/commonjs/components/Typograph/typograph.js.map +1 -0
- package/lib/commonjs/components/index.js +14 -0
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/index.js +12 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/screens/FingerAuth/FingerAuth.js +4 -1
- package/lib/commonjs/screens/FingerAuth/FingerAuth.js.map +1 -1
- package/lib/commonjs/screens/FingerRegister/FingerRegister.js +4 -1
- package/lib/commonjs/screens/FingerRegister/FingerRegister.js.map +1 -1
- package/lib/commonjs/screens/LifeCertificate/LifeCertificate.js +6 -3
- package/lib/commonjs/screens/LifeCertificate/LifeCertificate.js.map +1 -1
- package/lib/commonjs/screens/RegisterOperations/registerOperationPointsBiometrics.js +185 -0
- package/lib/commonjs/screens/RegisterOperations/registerOperationPointsBiometrics.js.map +1 -0
- package/lib/commonjs/screens/RegisterOperations/registerOperationPointsLifeCertificate.js +165 -0
- package/lib/commonjs/screens/RegisterOperations/registerOperationPointsLifeCertificate.js.map +1 -0
- package/lib/commonjs/screens/RegisterOperations/styles.js +47 -0
- package/lib/commonjs/screens/RegisterOperations/styles.js.map +1 -0
- package/lib/commonjs/screens/index.js +14 -0
- package/lib/commonjs/screens/index.js.map +1 -1
- package/lib/commonjs/services/index.js +18 -0
- package/lib/commonjs/services/index.js.map +1 -1
- package/lib/commonjs/services/services.js +106 -1
- package/lib/commonjs/services/services.js.map +1 -1
- package/lib/commonjs/store/modules/operationPoints/index.js +19 -0
- package/lib/commonjs/store/modules/operationPoints/index.js.map +1 -0
- package/lib/commonjs/store/modules/operationPoints/selectors.js +13 -0
- package/lib/commonjs/store/modules/operationPoints/selectors.js.map +1 -0
- package/lib/commonjs/store/modules/operationPoints/slice.js +233 -0
- package/lib/commonjs/store/modules/operationPoints/slice.js.map +1 -0
- package/lib/commonjs/store/modules/operationPoints/types.js +2 -0
- package/lib/commonjs/store/modules/operationPoints/types.js.map +1 -0
- package/lib/commonjs/utils/index.js +12 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/utils/utils.js +9 -1
- package/lib/commonjs/utils/utils.js.map +1 -1
- package/lib/module/components/Typograph/typograph.js +21 -0
- package/lib/module/components/Typograph/typograph.js.map +1 -0
- package/lib/module/components/index.js +3 -1
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/index.js +2 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/screens/FingerAuth/FingerAuth.js +5 -2
- package/lib/module/screens/FingerAuth/FingerAuth.js.map +1 -1
- package/lib/module/screens/FingerRegister/FingerRegister.js +5 -2
- package/lib/module/screens/FingerRegister/FingerRegister.js.map +1 -1
- package/lib/module/screens/LifeCertificate/LifeCertificate.js +6 -3
- package/lib/module/screens/LifeCertificate/LifeCertificate.js.map +1 -1
- package/lib/module/screens/RegisterOperations/registerOperationPointsBiometrics.js +176 -0
- package/lib/module/screens/RegisterOperations/registerOperationPointsBiometrics.js.map +1 -0
- package/lib/module/screens/RegisterOperations/registerOperationPointsLifeCertificate.js +157 -0
- package/lib/module/screens/RegisterOperations/registerOperationPointsLifeCertificate.js.map +1 -0
- package/lib/module/screens/RegisterOperations/styles.js +41 -0
- package/lib/module/screens/RegisterOperations/styles.js.map +1 -0
- package/lib/module/screens/index.js +3 -1
- package/lib/module/screens/index.js.map +1 -1
- package/lib/module/services/index.js +2 -2
- package/lib/module/services/index.js.map +1 -1
- package/lib/module/services/services.js +102 -0
- package/lib/module/services/services.js.map +1 -1
- package/lib/module/store/modules/operationPoints/index.js +3 -0
- package/lib/module/store/modules/operationPoints/index.js.map +1 -0
- package/lib/module/store/modules/operationPoints/selectors.js +6 -0
- package/lib/module/store/modules/operationPoints/selectors.js.map +1 -0
- package/lib/module/store/modules/operationPoints/slice.js +227 -0
- package/lib/module/store/modules/operationPoints/slice.js.map +1 -0
- package/lib/module/store/modules/operationPoints/types.js +2 -0
- package/lib/module/store/modules/operationPoints/types.js.map +1 -0
- package/lib/module/utils/index.js +2 -2
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/utils/utils.js +7 -1
- package/lib/module/utils/utils.js.map +1 -1
- package/lib/typescript/src/components/Typograph/typograph.d.ts +10 -0
- package/lib/typescript/src/components/Typograph/typograph.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +3 -1
- package/lib/typescript/src/components/index.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/screens/FingerAuth/FingerAuth.d.ts.map +1 -1
- package/lib/typescript/src/screens/FingerRegister/FingerRegister.d.ts.map +1 -1
- package/lib/typescript/src/screens/LifeCertificate/LifeCertificate.d.ts.map +1 -1
- package/lib/typescript/src/screens/RegisterOperations/registerOperationPointsBiometrics.d.ts +7 -0
- package/lib/typescript/src/screens/RegisterOperations/registerOperationPointsBiometrics.d.ts.map +1 -0
- package/lib/typescript/src/screens/RegisterOperations/registerOperationPointsLifeCertificate.d.ts +7 -0
- package/lib/typescript/src/screens/RegisterOperations/registerOperationPointsLifeCertificate.d.ts.map +1 -0
- package/lib/typescript/src/screens/RegisterOperations/styles.d.ts +40 -0
- package/lib/typescript/src/screens/RegisterOperations/styles.d.ts.map +1 -0
- package/lib/typescript/src/screens/index.d.ts +3 -1
- package/lib/typescript/src/screens/index.d.ts.map +1 -1
- package/lib/typescript/src/services/index.d.ts +2 -2
- package/lib/typescript/src/services/index.d.ts.map +1 -1
- package/lib/typescript/src/services/services.d.ts +4 -1
- package/lib/typescript/src/services/services.d.ts.map +1 -1
- package/lib/typescript/src/services/types.d.ts +29 -0
- package/lib/typescript/src/services/types.d.ts.map +1 -1
- package/lib/typescript/src/store/modules/operationPoints/index.d.ts +3 -0
- package/lib/typescript/src/store/modules/operationPoints/index.d.ts.map +1 -0
- package/lib/typescript/src/store/modules/operationPoints/selectors.d.ts +24 -0
- package/lib/typescript/src/store/modules/operationPoints/selectors.d.ts.map +1 -0
- package/lib/typescript/src/store/modules/operationPoints/slice.d.ts +4 -0
- package/lib/typescript/src/store/modules/operationPoints/slice.d.ts.map +1 -0
- package/lib/typescript/src/store/modules/operationPoints/types.d.ts +51 -0
- package/lib/typescript/src/store/modules/operationPoints/types.d.ts.map +1 -0
- package/lib/typescript/src/utils/index.d.ts +2 -2
- package/lib/typescript/src/utils/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/utils.d.ts +3 -1
- package/lib/typescript/src/utils/utils.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/components/Typograph/typograph.tsx +24 -0
- package/src/components/index.ts +3 -1
- package/src/index.tsx +14 -2
- package/src/screens/FingerAuth/FingerAuth.tsx +7 -3
- package/src/screens/FingerRegister/FingerRegister.tsx +6 -2
- package/src/screens/LifeCertificate/LifeCertificate.tsx +6 -2
- package/src/screens/RegisterOperations/registerOperationPointsBiometrics.tsx +168 -0
- package/src/screens/RegisterOperations/registerOperationPointsLifeCertificate.tsx +175 -0
- package/src/screens/RegisterOperations/styles.ts +41 -0
- package/src/screens/index.ts +9 -1
- package/src/services/index.ts +18 -2
- package/src/services/services.ts +113 -1
- package/src/services/types.ts +33 -0
- package/src/store/modules/operationPoints/index.ts +3 -0
- package/src/store/modules/operationPoints/selectors.ts +7 -0
- package/src/store/modules/operationPoints/slice.ts +240 -0
- package/src/store/modules/operationPoints/types.ts +61 -0
- package/src/utils/index.ts +2 -2
- package/src/utils/utils.ts +9 -1
package/src/services/services.ts
CHANGED
@@ -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
|
+
};
|
package/src/services/types.ts
CHANGED
@@ -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,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
|
+
};
|
package/src/utils/index.ts
CHANGED
@@ -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 };
|
package/src/utils/utils.ts
CHANGED
@@ -11,4 +11,12 @@ const filteredFingers = (
|
|
11
11
|
return items.filter((item) => !registeredFingers.includes(item.value));
|
12
12
|
};
|
13
13
|
|
14
|
-
|
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 };
|