vishwam-react-ent-sdk 1.0.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.
- package/README.md +1 -0
- package/dist/base_image~SZIbuxrl.png +0 -0
- package/dist/cam~bitjuNpz.svg +28 -0
- package/dist/capture~bjDiGtnj.svg +27 -0
- package/dist/disabled~WdYTHhIa.svg +13 -0
- package/dist/disabled~jGBIdXqZ.svg +73 -0
- package/dist/disabled~tYaAuTCY.svg +75 -0
- package/dist/disabled~vrFtVAyR.svg +75 -0
- package/dist/enabled~nhTSsDrs.svg +30 -0
- package/dist/enabled~yrzkrFnh.svg +30 -0
- package/dist/index.js +1514 -0
- package/dist/index.js.map +1 -0
- package/dist/index.modern.js +1508 -0
- package/dist/index.modern.js.map +1 -0
- package/dist/loading~JYSIUiTE.svg +52 -0
- package/dist/loading~SJupkXdT.svg +6 -0
- package/dist/loading~bhVhgQsq.svg +17 -0
- package/dist/loading~gjlyNxPR.svg +60 -0
- package/dist/loading~oqTYRQga.svg +6 -0
- package/dist/loading~swOiowAA.svg +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,1508 @@
|
|
|
1
|
+
import React__default, { createElement, useRef, useState, useCallback, useEffect, Fragment } from 'react';
|
|
2
|
+
import Webcam from 'react-webcam';
|
|
3
|
+
import styled from 'styled-components';
|
|
4
|
+
import { isMobile, BrowserView, MobileView } from 'react-device-detect';
|
|
5
|
+
import { nets, TinyFaceDetectorOptions, detectSingleFace } from 'face-api.js';
|
|
6
|
+
|
|
7
|
+
function _extends() {
|
|
8
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
|
9
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
10
|
+
var source = arguments[i];
|
|
11
|
+
for (var key in source) {
|
|
12
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
13
|
+
target[key] = source[key];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return target;
|
|
18
|
+
};
|
|
19
|
+
return _extends.apply(this, arguments);
|
|
20
|
+
}
|
|
21
|
+
function _taggedTemplateLiteralLoose(strings, raw) {
|
|
22
|
+
if (!raw) {
|
|
23
|
+
raw = strings.slice(0);
|
|
24
|
+
}
|
|
25
|
+
strings.raw = raw;
|
|
26
|
+
return strings;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var requestToken = function requestToken(url, expiry) {
|
|
30
|
+
try {
|
|
31
|
+
var formData = new FormData();
|
|
32
|
+
formData.append('expiry_at', expiry);
|
|
33
|
+
formData.append('app_id', 'jio_re-vef');
|
|
34
|
+
formData.append('app_key', 'dmlzaHdhbS1zZWxma3lj');
|
|
35
|
+
formData.append('send_token', '1');
|
|
36
|
+
return Promise.resolve(fetch(url, {
|
|
37
|
+
body: formData,
|
|
38
|
+
method: 'POST'
|
|
39
|
+
})).then(function (response) {
|
|
40
|
+
return Promise.resolve(response.json()).then(function (json) {
|
|
41
|
+
return json.token;
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
} catch (e) {
|
|
45
|
+
return Promise.reject(e);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
var request = function request(url, payload, method, token) {
|
|
49
|
+
try {
|
|
50
|
+
console.log(url, payload, method, token);
|
|
51
|
+
return Promise.resolve(fetch(url, {
|
|
52
|
+
body: payload,
|
|
53
|
+
method: method,
|
|
54
|
+
headers: new Headers({
|
|
55
|
+
Authorization: 'Bearer ' + token
|
|
56
|
+
})
|
|
57
|
+
})).then(function (response) {
|
|
58
|
+
return Promise.resolve(response.text()).then(function (string) {
|
|
59
|
+
var json = string === '' ? {} : JSON.parse(string);
|
|
60
|
+
return json;
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
} catch (e) {
|
|
64
|
+
return Promise.reject(e);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
var _path, _path2, _path3;
|
|
69
|
+
function _extends$1() {
|
|
70
|
+
_extends$1 = Object.assign ? Object.assign.bind() : function (target) {
|
|
71
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
72
|
+
var source = arguments[i];
|
|
73
|
+
for (var key in source) {
|
|
74
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
75
|
+
target[key] = source[key];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return target;
|
|
80
|
+
};
|
|
81
|
+
return _extends$1.apply(this, arguments);
|
|
82
|
+
}
|
|
83
|
+
function SvgEnabled(props) {
|
|
84
|
+
return /*#__PURE__*/createElement("svg", _extends$1({
|
|
85
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
86
|
+
width: 200,
|
|
87
|
+
height: 200,
|
|
88
|
+
viewBox: "0 0 150 150"
|
|
89
|
+
}, props), _path || (_path = /*#__PURE__*/createElement("path", {
|
|
90
|
+
d: "M61 3.5c-22.7 5.1-40.8 19-50.5 38.9-6.1 12.4-7.8 19.7-7.9 33.1 0 12.9 1.9 21.7 6.9 32.1 7.3 15.2 19.2 26.9 35 34.5 10 4.9 19.3 6.9 31.5 6.9 12.8 0 21.7-2.1 32.9-7.6 19.8-9.8 34.7-29.1 39.1-50.9 1.7-8.2 1.5-23.6-.4-31.7-6.1-26.1-26.5-47.3-52.5-54.3-8.3-2.3-26.2-2.8-34.1-1zm30.5 7c3.3.8 9.8 3.4 14.5 5.7 12 5.8 24.1 17.9 29.8 29.9 9.4 19.8 9.5 39.5.3 58.4-7.3 14.9-17.8 25.2-32.6 32-19 8.7-37.9 8.4-57-.9C24.4 124.8 10.7 104 9.3 79.4c-.9-16.7 3.5-31.1 14-45 8.1-10.7 23.3-20.7 36.4-23.8 7.9-1.9 24.4-2 31.8-.1z"
|
|
91
|
+
})), _path2 || (_path2 = /*#__PURE__*/createElement("path", {
|
|
92
|
+
d: "M58.5 13.9C37.3 20 22.4 34.4 14.8 56c-2.8 7.9-3.5 25.3-1.4 34.5 4.3 18 17.2 34.4 33.6 42.4 13.8 6.7 27.2 8.5 41.8 5.5 19.1-3.8 35.7-16.5 44.1-33.4 5.5-11.2 7.4-20.7 6.8-33-.9-16.7-6.8-29.9-19-42.2-5.3-5.3-8.8-7.7-16-11.2-5-2.4-11.6-4.9-14.5-5.5-8.1-1.7-24.7-1.2-31.7.8zm25.9 39.7c.9.3 1.6 1.2 1.6 2s.7 1.4 1.6 1.4c3.1 0 8.7 3.4 10.5 6.4 2.5 4.1 2.7 20.1.4 24.7C95.4 94 92.2 95 76 95c-12.4 0-14.9-.3-17.6-1.9C53.8 90.3 52 85.6 52 76c0-11.8 2.8-16.7 10.6-18.6 1.6-.4 3.5-1.6 4.2-2.6 1.1-1.5 2.7-1.8 8.7-1.8 4 0 8 .3 8.9.6z"
|
|
93
|
+
})), _path3 || (_path3 = /*#__PURE__*/createElement("path", {
|
|
94
|
+
d: "M70.4 66.8C61.1 72.7 65.2 87 76.2 87c3.2 0 4.7-.7 7.4-3.4 2.8-2.8 3.4-4.2 3.4-7.5 0-8.5-9.4-13.8-16.6-9.3zm10 4.3c1.7 1.4 2.6 3 2.6 5 0 6.5-8 9.3-11.9 4.3-2.7-3.5-2.6-5.9.4-8.9s5.4-3.1 8.9-.4z"
|
|
95
|
+
})));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
var _image;
|
|
99
|
+
function _extends$2() {
|
|
100
|
+
_extends$2 = Object.assign ? Object.assign.bind() : function (target) {
|
|
101
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
102
|
+
var source = arguments[i];
|
|
103
|
+
for (var key in source) {
|
|
104
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
105
|
+
target[key] = source[key];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return target;
|
|
110
|
+
};
|
|
111
|
+
return _extends$2.apply(this, arguments);
|
|
112
|
+
}
|
|
113
|
+
function SvgDisabled(props) {
|
|
114
|
+
return /*#__PURE__*/createElement("svg", _extends$2({
|
|
115
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
116
|
+
width: 80,
|
|
117
|
+
height: 80,
|
|
118
|
+
viewBox: "0 0 150 150"
|
|
119
|
+
}, props), _image || (_image = /*#__PURE__*/createElement("image", {
|
|
120
|
+
width: 150,
|
|
121
|
+
height: 150,
|
|
122
|
+
href: "data:image/png;base64,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 YWR5ccllPAAAAABJRU5ErkJggg=="
|
|
123
|
+
})));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
var _style, _g, _g2;
|
|
127
|
+
function _extends$3() {
|
|
128
|
+
_extends$3 = Object.assign ? Object.assign.bind() : function (target) {
|
|
129
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
130
|
+
var source = arguments[i];
|
|
131
|
+
for (var key in source) {
|
|
132
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
133
|
+
target[key] = source[key];
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return target;
|
|
138
|
+
};
|
|
139
|
+
return _extends$3.apply(this, arguments);
|
|
140
|
+
}
|
|
141
|
+
function SvgLoading(props) {
|
|
142
|
+
return /*#__PURE__*/createElement("svg", _extends$3({
|
|
143
|
+
id: "loading_svg__em6wghdkiauc1",
|
|
144
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
145
|
+
viewBox: "0 0 120 120",
|
|
146
|
+
shapeRendering: "geometricPrecision",
|
|
147
|
+
textRendering: "geometricPrecision"
|
|
148
|
+
}, props), _style || (_style = /*#__PURE__*/createElement("style", null, "@keyframes em6wghdkiauc2_tr__tr{0%{transform:translate(60.025px,60px) rotate(0deg)}to{transform:translate(60.025px,60px) rotate(360deg)}}")), /*#__PURE__*/createElement("g", {
|
|
149
|
+
transform: "translate(60.025 60)",
|
|
150
|
+
style: {
|
|
151
|
+
animation: "em6wghdkiauc2_tr__tr 1000ms linear infinite normal forwards"
|
|
152
|
+
}
|
|
153
|
+
}, _g || (_g = /*#__PURE__*/createElement("g", {
|
|
154
|
+
id: "loading_svg__em6wghdkiauc2",
|
|
155
|
+
transform: "translate(-60 -60)"
|
|
156
|
+
}, /*#__PURE__*/createElement("path", {
|
|
157
|
+
id: "loading_svg__em6wghdkiauc3",
|
|
158
|
+
d: "M59.9 60l45 29c-9.9 15.2-26.8 24.5-45 24.5-29.4 0-53.5-24.1-53.5-53.5S30.5 6.5 59.9 6.5s53.5 24.1 53.5 53.5H59.9z",
|
|
159
|
+
fill: "none",
|
|
160
|
+
stroke: "#F5F8FC",
|
|
161
|
+
strokeWidth: 6,
|
|
162
|
+
strokeMiterlimit: 10
|
|
163
|
+
}), /*#__PURE__*/createElement("path", {
|
|
164
|
+
id: "loading_svg__em6wghdkiauc4",
|
|
165
|
+
d: "M59.9 60l39.5 36c-10.2 11.1-24.5 17.5-39.5 17.5-29.4 0-53.5-24.1-53.5-53.5S30.5 6.5 59.9 6.5s53.5 24.1 53.5 53.5H59.9z",
|
|
166
|
+
fill: "none",
|
|
167
|
+
stroke: "#F5F6F7",
|
|
168
|
+
strokeWidth: 6,
|
|
169
|
+
strokeMiterlimit: 10
|
|
170
|
+
}), /*#__PURE__*/createElement("path", {
|
|
171
|
+
id: "loading_svg__em6wghdkiauc5",
|
|
172
|
+
d: "M59.9 60l34.6 40.9c-9.7 8.1-21.9 12.6-34.6 12.6-29.4 0-53.5-24.1-53.5-53.5S30.5 6.5 59.9 6.5s53.5 24.1 53.5 53.5H59.9z",
|
|
173
|
+
fill: "none",
|
|
174
|
+
stroke: "#E7EDF7",
|
|
175
|
+
strokeWidth: 6,
|
|
176
|
+
strokeMiterlimit: 10
|
|
177
|
+
}), /*#__PURE__*/createElement("path", {
|
|
178
|
+
id: "loading_svg__em6wghdkiauc6",
|
|
179
|
+
d: "M59.9 60l28.4 45.3c-8.5 5.4-18.4 8.2-28.4 8.2-29.4 0-53.5-24.1-53.5-53.5S30.5 6.5 59.9 6.5s53.5 24.1 53.5 53.5H59.9z",
|
|
180
|
+
fill: "none",
|
|
181
|
+
stroke: "#D2DFF8",
|
|
182
|
+
strokeWidth: 6,
|
|
183
|
+
strokeMiterlimit: 10
|
|
184
|
+
}), /*#__PURE__*/createElement("path", {
|
|
185
|
+
id: "loading_svg__em6wghdkiauc7",
|
|
186
|
+
d: "M59.9 60l22.2 48.7c-6.9 3.1-14.4 4.8-22.2 4.8-29.4 0-53.5-24.1-53.5-53.5S30.5 6.5 59.9 6.5s53.5 24.1 53.5 53.5H59.9z",
|
|
187
|
+
fill: "none",
|
|
188
|
+
stroke: "#C5D6F8",
|
|
189
|
+
strokeWidth: 6,
|
|
190
|
+
strokeMiterlimit: 10
|
|
191
|
+
}), /*#__PURE__*/createElement("path", {
|
|
192
|
+
id: "loading_svg__em6wghdkiauc8",
|
|
193
|
+
d: "M59.9 60l15.8 51.1c-5.1 1.6-10.4 2.3-15.8 2.3-29.4.1-53.5-24-53.5-53.4S30.5 6.5 59.9 6.5s53.5 24.1 53.5 53.5H59.9z",
|
|
194
|
+
fill: "none",
|
|
195
|
+
stroke: "#B6CAF5",
|
|
196
|
+
strokeWidth: 6,
|
|
197
|
+
strokeMiterlimit: 10
|
|
198
|
+
}), /*#__PURE__*/createElement("path", {
|
|
199
|
+
id: "loading_svg__em6wghdkiauc9",
|
|
200
|
+
d: "M59.9 60l3.4 53.4c-1.2.1-2.2.1-3.4.1-29.4 0-53.5-24.1-53.5-53.5S30.5 6.5 59.9 6.5s53.5 24.1 53.5 53.5H59.9z",
|
|
201
|
+
fill: "none",
|
|
202
|
+
stroke: "#AAC0EF",
|
|
203
|
+
strokeWidth: 6,
|
|
204
|
+
strokeMiterlimit: 10
|
|
205
|
+
}), /*#__PURE__*/createElement("path", {
|
|
206
|
+
id: "loading_svg__em6wghdkiauc10",
|
|
207
|
+
d: "M59.9 60l-6.7 53.1C26.5 109.7 6.4 86.8 6.4 60c0-29.4 24.1-53.5 53.5-53.5s53.5 24.1 53.5 53.5H59.9z",
|
|
208
|
+
fill: "none",
|
|
209
|
+
stroke: "#9CB5EA",
|
|
210
|
+
strokeWidth: 6,
|
|
211
|
+
strokeMiterlimit: 10
|
|
212
|
+
}), /*#__PURE__*/createElement("path", {
|
|
213
|
+
id: "loading_svg__em6wghdkiauc11",
|
|
214
|
+
d: "M59.9 60l-15.5 51.1c-22.5-6.8-38-27.7-38-51.1 0-29.4 24.1-53.5 53.5-53.5s53.5 24.1 53.5 53.5H59.9z",
|
|
215
|
+
fill: "none",
|
|
216
|
+
stroke: "#93AEE8",
|
|
217
|
+
strokeWidth: 6,
|
|
218
|
+
strokeMiterlimit: 10
|
|
219
|
+
}), /*#__PURE__*/createElement("path", {
|
|
220
|
+
id: "loading_svg__em6wghdkiauc12",
|
|
221
|
+
d: "M59.9 60l-24.3 47.6C17.7 98.6 6.4 80.1 6.4 60c0-29.4 24.1-53.5 53.5-53.5s53.5 24.1 53.5 53.5H59.9z",
|
|
222
|
+
fill: "none",
|
|
223
|
+
stroke: "#84A4E8",
|
|
224
|
+
strokeWidth: 6,
|
|
225
|
+
strokeMiterlimit: 10
|
|
226
|
+
}), /*#__PURE__*/createElement("path", {
|
|
227
|
+
id: "loading_svg__em6wghdkiauc13",
|
|
228
|
+
d: "M59.9 60l-32.7 42.4C14.1 92.2 6.4 76.6 6.4 60c0-29.4 24.1-53.5 53.5-53.5s53.5 24.1 53.5 53.5H59.9z",
|
|
229
|
+
fill: "none",
|
|
230
|
+
stroke: "#7C9CE2",
|
|
231
|
+
strokeWidth: 6,
|
|
232
|
+
strokeMiterlimit: 10
|
|
233
|
+
}), /*#__PURE__*/createElement("path", {
|
|
234
|
+
id: "loading_svg__em6wghdkiauc14",
|
|
235
|
+
d: "M59.9 60l-42 33.2C10.5 83.7 6.4 72 6.4 60c0-29.4 24.1-53.5 53.5-53.5s53.5 24.1 53.5 53.5H59.9z",
|
|
236
|
+
fill: "none",
|
|
237
|
+
stroke: "#7494D9",
|
|
238
|
+
strokeWidth: 4,
|
|
239
|
+
strokeMiterlimit: 10
|
|
240
|
+
}), /*#__PURE__*/createElement("path", {
|
|
241
|
+
id: "loading_svg__em6wghdkiauc15",
|
|
242
|
+
d: "M59.9 60l-42 33.2C10.5 83.7 6.4 72 6.4 60c0-29.4 24.1-53.5 53.5-53.5s53.5 24.1 53.5 53.5H59.9z",
|
|
243
|
+
fill: "none",
|
|
244
|
+
stroke: "#6C8DD3",
|
|
245
|
+
strokeWidth: 6,
|
|
246
|
+
strokeMiterlimit: 10
|
|
247
|
+
}), /*#__PURE__*/createElement("path", {
|
|
248
|
+
id: "loading_svg__em6wghdkiauc16",
|
|
249
|
+
d: "M59.9 60L12.7 85.3C8.5 77.5 6.4 68.8 6.4 60c0-29.4 24.1-53.5 53.5-53.5s53.5 24.1 53.5 53.5H59.9z",
|
|
250
|
+
fill: "none",
|
|
251
|
+
stroke: "#6485CB",
|
|
252
|
+
strokeWidth: 6,
|
|
253
|
+
strokeMiterlimit: 10
|
|
254
|
+
}), /*#__PURE__*/createElement("path", {
|
|
255
|
+
id: "loading_svg__em6wghdkiauc17",
|
|
256
|
+
d: "M59.9 60L8.5 74.6c-1.4-4.8-2-9.7-2-14.6C6.5 30.6 30.6 6.5 60 6.5s53.5 24.1 53.5 53.5H59.9z",
|
|
257
|
+
fill: "none",
|
|
258
|
+
stroke: "#5F80C6",
|
|
259
|
+
strokeWidth: 6,
|
|
260
|
+
strokeMiterlimit: 10
|
|
261
|
+
}), /*#__PURE__*/createElement("path", {
|
|
262
|
+
id: "loading_svg__em6wghdkiauc18",
|
|
263
|
+
d: "M59.9 60L6.6 64.6c-.1-1.6-.2-3-.2-4.6 0-29.4 24.1-53.5 53.5-53.5s53.5 24.1 53.5 53.5H59.9z",
|
|
264
|
+
fill: "none",
|
|
265
|
+
stroke: "#5879BF",
|
|
266
|
+
strokeWidth: 6,
|
|
267
|
+
strokeMiterlimit: 10
|
|
268
|
+
}), /*#__PURE__*/createElement("path", {
|
|
269
|
+
id: "loading_svg__em6wghdkiauc19",
|
|
270
|
+
d: "M59.9 60L6.6 55C9.2 27.7 32.5 6.5 59.9 6.5c29.4 0 53.5 24.1 53.5 53.5H59.9z",
|
|
271
|
+
fill: "none",
|
|
272
|
+
stroke: "#486BB7",
|
|
273
|
+
strokeWidth: 6,
|
|
274
|
+
strokeMiterlimit: 10
|
|
275
|
+
}), /*#__PURE__*/createElement("path", {
|
|
276
|
+
id: "loading_svg__em6wghdkiauc20",
|
|
277
|
+
d: "M59.9 60L8.7 44.3c7-22.5 27.8-37.8 51.2-37.8 29.4 0 53.5 24.1 53.5 53.5H59.9z",
|
|
278
|
+
fill: "none",
|
|
279
|
+
stroke: "#4568B2",
|
|
280
|
+
strokeWidth: 6,
|
|
281
|
+
strokeMiterlimit: 10
|
|
282
|
+
}), /*#__PURE__*/createElement("path", {
|
|
283
|
+
id: "loading_svg__em6wghdkiauc21",
|
|
284
|
+
d: "M59.9 60L13.6 33.2C23.2 16.7 40.9 6.5 59.9 6.5c29.4 0 53.5 24.1 53.5 53.5H59.9z",
|
|
285
|
+
fill: "none",
|
|
286
|
+
stroke: "#3E63B1",
|
|
287
|
+
strokeWidth: 6,
|
|
288
|
+
strokeMiterlimit: 10
|
|
289
|
+
}), /*#__PURE__*/createElement("path", {
|
|
290
|
+
id: "loading_svg__em6wghdkiauc22",
|
|
291
|
+
d: "M59.9 60L20.2 24.2C30.3 13 44.8 6.5 59.9 6.5c29.4 0 53.5 24.1 53.5 53.5H59.9z",
|
|
292
|
+
fill: "none",
|
|
293
|
+
stroke: "#3A5FAC",
|
|
294
|
+
strokeWidth: 6,
|
|
295
|
+
strokeMiterlimit: 10
|
|
296
|
+
}), /*#__PURE__*/createElement("path", {
|
|
297
|
+
id: "loading_svg__em6wghdkiauc23",
|
|
298
|
+
d: "M59.9 60L30.6 15.2c8.8-5.7 18.9-8.7 29.3-8.7 29.4 0 53.5 24.1 53.5 53.5H59.9z",
|
|
299
|
+
fill: "none",
|
|
300
|
+
stroke: "#3459A5",
|
|
301
|
+
strokeWidth: 6,
|
|
302
|
+
strokeMiterlimit: 10
|
|
303
|
+
}), /*#__PURE__*/createElement("path", {
|
|
304
|
+
id: "loading_svg__em6wghdkiauc24",
|
|
305
|
+
d: "M59.9 60l-17-50.8c5.5-1.8 11.2-2.7 17-2.7 29.4 0 53.5 24.1 53.5 53.5H59.9z",
|
|
306
|
+
fill: "none",
|
|
307
|
+
stroke: "#2D53A0",
|
|
308
|
+
strokeWidth: 6,
|
|
309
|
+
strokeMiterlimit: 10
|
|
310
|
+
}), /*#__PURE__*/createElement("path", {
|
|
311
|
+
id: "loading_svg__em6wghdkiauc25",
|
|
312
|
+
d: "M59.9 60l-.1-53.5h.1c29.4 0 53.5 24.1 53.5 53.5H59.9z",
|
|
313
|
+
fill: "none",
|
|
314
|
+
stroke: "#284E9D",
|
|
315
|
+
strokeWidth: 6,
|
|
316
|
+
strokeMiterlimit: 10
|
|
317
|
+
}), /*#__PURE__*/createElement("path", {
|
|
318
|
+
id: "loading_svg__em6wghdkiauc26",
|
|
319
|
+
d: "M59.9 60l28.8-45.1c8.7 5.8 13.5 12 18.1 19.4 7.6 11.4 7.2 35.1 6.5 25.7H59.9z",
|
|
320
|
+
fill: "none",
|
|
321
|
+
stroke: "#214796",
|
|
322
|
+
strokeWidth: 6,
|
|
323
|
+
strokeLinecap: "round",
|
|
324
|
+
strokeLinejoin: "round",
|
|
325
|
+
strokeMiterlimit: 10
|
|
326
|
+
}), /*#__PURE__*/createElement("circle", {
|
|
327
|
+
id: "loading_svg__em6wghdkiauc27",
|
|
328
|
+
r: 50.8,
|
|
329
|
+
transform: "translate(59.9 60)",
|
|
330
|
+
fill: "#FFF",
|
|
331
|
+
stroke: "none",
|
|
332
|
+
strokeWidth: 1
|
|
333
|
+
})))), _g2 || (_g2 = /*#__PURE__*/createElement("g", {
|
|
334
|
+
id: "loading_svg__em6wghdkiauc28",
|
|
335
|
+
stroke: "none",
|
|
336
|
+
strokeWidth: 1
|
|
337
|
+
}, /*#__PURE__*/createElement("circle", {
|
|
338
|
+
id: "loading_svg__em6wghdkiauc29",
|
|
339
|
+
transform: "rotate(-52.856 90.359 -30.36)",
|
|
340
|
+
fill: "#E11A2C",
|
|
341
|
+
r: 37
|
|
342
|
+
}), /*#__PURE__*/createElement("path", {
|
|
343
|
+
id: "loading_svg__em6wghdkiauc30",
|
|
344
|
+
d: "M77.7 67.4c-2.7 0-4.6-2-4.6-4.9 0-2.8 1.9-4.8 4.6-4.8 2.7 0 4.6 2 4.6 4.9 0 2.8-1.9 4.8-4.6 4.8zm.1-15.9c-7 0-11.6 4.4-11.6 11 0 6.8 4.5 11.1 11.5 11.1s11.6-4.3 11.6-11.1c0-6.5-4.6-11-11.5-11zm-18-9.6c-2.6 0-4.3 1.5-4.3 3.8 0 2.4 1.7 3.9 4.4 3.9 2.6 0 4.3-1.5 4.3-3.9s-1.7-3.8-4.4-3.8zm.5 9.9h-.9c-2.1 0-3.7 1-3.7 4v13.6c0 3 1.5 4 3.8 4h.9c2.1 0 3.6-1 3.6-4V55.7c-.1-3.1-1.5-3.9-3.7-3.9zm-11.2-6.5h-1.2c-2.3 0-3.6 1.3-3.6 4V62c0 3.3-1.1 4.4-3.7 4.4-2 0-3.7-.9-5-2.5-.1-.2-2.8 1.1-2.8 4.3 0 3.4 3.2 5.5 9.1 5.5 7.2 0 11-3.6 11-11.6V49.3c-.1-2.7-1.3-4-3.8-4z",
|
|
345
|
+
fill: "#FFF"
|
|
346
|
+
}))));
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
350
|
+
var callLiveness = function callLiveness(url, appId, userId, referenceId, captureType, eyesCheck, storeId, whiteBackground, expiryIn, img, img2, imageType) {
|
|
351
|
+
try {
|
|
352
|
+
var formData = new FormData();
|
|
353
|
+
formData.append('image', dataURItoBlob(img2, imageType));
|
|
354
|
+
formData.append('image2', dataURItoBlob(img, imageType));
|
|
355
|
+
formData.append('app_id', appId);
|
|
356
|
+
formData.append('user_id', userId);
|
|
357
|
+
formData.append('referenceId', referenceId);
|
|
358
|
+
formData.append('capture_type', captureType);
|
|
359
|
+
formData.append('eyesCheck', eyesCheck);
|
|
360
|
+
formData.append('store_id', storeId);
|
|
361
|
+
formData.append('whiteBackground', whiteBackground);
|
|
362
|
+
console.log('Performing Token API call');
|
|
363
|
+
return Promise.resolve(requestToken(url + '/get_auth_token', expiryIn)).then(function (token) {
|
|
364
|
+
console.log('Performing Read Document API call');
|
|
365
|
+
return Promise.resolve(request(url + '/check_liveness', formData, 'POST', token));
|
|
366
|
+
});
|
|
367
|
+
} catch (e) {
|
|
368
|
+
return Promise.reject(e);
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
var videoConstraints = {
|
|
372
|
+
audio: false,
|
|
373
|
+
video: {
|
|
374
|
+
facingMode: 'user'
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
function frontalFaceCheck(landmarks) {
|
|
378
|
+
if (!landmarks || landmarks.length < 68) {
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
var leftEyeCenter = {
|
|
382
|
+
x: (landmarks[36].x + landmarks[39].x) / 2,
|
|
383
|
+
y: (landmarks[36].y + landmarks[39].y) / 2
|
|
384
|
+
};
|
|
385
|
+
var rightEyeCenter = {
|
|
386
|
+
x: (landmarks[42].x + landmarks[45].x) / 2,
|
|
387
|
+
y: (landmarks[42].y + landmarks[45].y) / 2
|
|
388
|
+
};
|
|
389
|
+
var faceMiddlePoint = {
|
|
390
|
+
x: (leftEyeCenter.x + rightEyeCenter.x) / 2,
|
|
391
|
+
y: (leftEyeCenter.y + rightEyeCenter.y) / 2
|
|
392
|
+
};
|
|
393
|
+
var ratio = {
|
|
394
|
+
x: (rightEyeCenter.x - landmarks[30].x) / (landmarks[30].x - leftEyeCenter.x),
|
|
395
|
+
y: (landmarks[66].y - landmarks[30].y) / (landmarks[30].y - faceMiddlePoint.y)
|
|
396
|
+
};
|
|
397
|
+
if (ratio.x > 0.75 && ratio.x < 1.33 && ratio.y > 0.56 && ratio.y < 1.56) {
|
|
398
|
+
return true;
|
|
399
|
+
}
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
(function polyfillGetUserMedia() {
|
|
403
|
+
if (typeof window === 'undefined') {
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
if (navigator.mediaDevices === undefined) {
|
|
407
|
+
navigator.mediaDevices = {};
|
|
408
|
+
}
|
|
409
|
+
if (navigator.mediaDevices.getUserMedia === undefined) {
|
|
410
|
+
navigator.mediaDevices.getUserMedia = function (constraints) {
|
|
411
|
+
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
|
|
412
|
+
if (!getUserMedia) {
|
|
413
|
+
return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
|
|
414
|
+
}
|
|
415
|
+
return new Promise(function (resolve, reject) {
|
|
416
|
+
getUserMedia.call(navigator, constraints, resolve, reject);
|
|
417
|
+
});
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
})();
|
|
421
|
+
function CheckLiveness(_ref) {
|
|
422
|
+
var resizeImage = function resizeImage(base64, height, width) {
|
|
423
|
+
try {
|
|
424
|
+
return Promise.resolve(new Promise(function (resolve, reject) {
|
|
425
|
+
var canvas = document.createElement('canvas');
|
|
426
|
+
var ctx = canvas.getContext('2d');
|
|
427
|
+
var canvasCopy = document.createElement('canvas');
|
|
428
|
+
var copyContext = canvasCopy.getContext('2d');
|
|
429
|
+
var img = new Image();
|
|
430
|
+
img.src = base64;
|
|
431
|
+
img.onload = function () {
|
|
432
|
+
canvasCopy.width = img.width;
|
|
433
|
+
canvasCopy.height = img.height;
|
|
434
|
+
copyContext.drawImage(img, 0, 0);
|
|
435
|
+
canvas.width = width;
|
|
436
|
+
canvas.height = height;
|
|
437
|
+
ctx.drawImage(canvasCopy, 0, 0, canvasCopy.width, canvasCopy.height, 0, 0, canvas.width, canvas.height);
|
|
438
|
+
resolve(canvas.toDataURL());
|
|
439
|
+
};
|
|
440
|
+
}));
|
|
441
|
+
} catch (e) {
|
|
442
|
+
return Promise.reject(e);
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
var runFaceDetection = function runFaceDetection() {
|
|
446
|
+
try {
|
|
447
|
+
var _temp2 = function _temp2() {
|
|
448
|
+
if (!stopFaceDetection) {
|
|
449
|
+
setTimeout(runFaceDetection, 100);
|
|
450
|
+
}
|
|
451
|
+
};
|
|
452
|
+
var _temp = function () {
|
|
453
|
+
if (!stopFaceDetection) {
|
|
454
|
+
return Promise.resolve(detectFace()).then(function (detection) {
|
|
455
|
+
if (detection) {
|
|
456
|
+
var isFrontal = frontalFaceCheck(detection.landmarks.positions);
|
|
457
|
+
if (isFrontal) {
|
|
458
|
+
setFrontal(true);
|
|
459
|
+
} else {
|
|
460
|
+
setFrontal(false);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
}();
|
|
466
|
+
return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
|
|
467
|
+
} catch (e) {
|
|
468
|
+
return Promise.reject(e);
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
var init = function init() {
|
|
472
|
+
try {
|
|
473
|
+
var isFaceDetectorLoaded = false;
|
|
474
|
+
return Promise.resolve(nets.tinyFaceDetector.loadFromUri('https://www.rocksetta.com/tensorflowjs/saved-models/face-api-js/')).then(function () {
|
|
475
|
+
return Promise.resolve(nets.faceLandmark68TinyNet.loadFromUri('https://www.rocksetta.com/tensorflowjs/saved-models/face-api-js/')).then(function () {
|
|
476
|
+
isFaceDetectorLoaded = true;
|
|
477
|
+
setTimeout(runFaceDetection, 500);
|
|
478
|
+
setLoading(false);
|
|
479
|
+
setLoadingText('');
|
|
480
|
+
});
|
|
481
|
+
});
|
|
482
|
+
} catch (e) {
|
|
483
|
+
return Promise.reject(e);
|
|
484
|
+
}
|
|
485
|
+
};
|
|
486
|
+
var startCamera = function startCamera() {
|
|
487
|
+
try {
|
|
488
|
+
if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
|
|
489
|
+
console.log('enumerateDevices() not supported.');
|
|
490
|
+
}
|
|
491
|
+
navigator.mediaDevices.enumerateDevices().then(function (devices) {
|
|
492
|
+
devices.forEach(function (device) {
|
|
493
|
+
console.log(device.kind + ': ' + device.label + ' id = ' + device.deviceId);
|
|
494
|
+
});
|
|
495
|
+
})["catch"](function (err) {
|
|
496
|
+
console.log(err.name + ': ' + err.message);
|
|
497
|
+
});
|
|
498
|
+
navigator.mediaDevices.getUserMedia(videoConstraints).then(function (stream) {
|
|
499
|
+
videoStream = stream;
|
|
500
|
+
setCameraAvailable(true);
|
|
501
|
+
handleSuccess(stream);
|
|
502
|
+
})["catch"](function (err) {
|
|
503
|
+
console.log(err);
|
|
504
|
+
var errString = err.toString();
|
|
505
|
+
if (errString.includes('NotReadableError')) {
|
|
506
|
+
setTimeout(function () {
|
|
507
|
+
startCamera();
|
|
508
|
+
}, 1000);
|
|
509
|
+
} else if (err.name === 'NotAllowedError') {
|
|
510
|
+
console.log('Camera Permission denied');
|
|
511
|
+
var errObj = {
|
|
512
|
+
status: 'failed',
|
|
513
|
+
error: err.name,
|
|
514
|
+
message: 'Camera Permission Denied'
|
|
515
|
+
};
|
|
516
|
+
getLivenessResponse(errObj);
|
|
517
|
+
} else {
|
|
518
|
+
alert("getUserMedia error: " + err.toString());
|
|
519
|
+
}
|
|
520
|
+
});
|
|
521
|
+
return Promise.resolve();
|
|
522
|
+
} catch (e) {
|
|
523
|
+
return Promise.reject(e);
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
var detectFace = function detectFace() {
|
|
527
|
+
try {
|
|
528
|
+
var videoEl = document.getElementById('webcam');
|
|
529
|
+
var options = new TinyFaceDetectorOptions();
|
|
530
|
+
return Promise.resolve(detectSingleFace(videoEl, options).withFaceLandmarks(true));
|
|
531
|
+
} catch (e) {
|
|
532
|
+
return Promise.reject(e);
|
|
533
|
+
}
|
|
534
|
+
};
|
|
535
|
+
var url = _ref.url,
|
|
536
|
+
appId = _ref.appId,
|
|
537
|
+
userId = _ref.userId,
|
|
538
|
+
referenceId = _ref.referenceId,
|
|
539
|
+
captureType = _ref.captureType,
|
|
540
|
+
eyesCheck = _ref.eyesCheck,
|
|
541
|
+
storeId = _ref.storeId,
|
|
542
|
+
whiteBackground = _ref.whiteBackground,
|
|
543
|
+
expiryIn = _ref.expiryIn,
|
|
544
|
+
getLivenessResponse = _ref.getLivenessResponse;
|
|
545
|
+
var webcamRef = useRef();
|
|
546
|
+
var _useState = useState(false),
|
|
547
|
+
disabled = _useState[0],
|
|
548
|
+
setDisabled = _useState[1];
|
|
549
|
+
var _useState2 = useState(false),
|
|
550
|
+
frontal = _useState2[0],
|
|
551
|
+
setFrontal = _useState2[1];
|
|
552
|
+
var _useState3 = useState(false),
|
|
553
|
+
loading = _useState3[0],
|
|
554
|
+
setLoading = _useState3[1];
|
|
555
|
+
var _React$useState = React__default.useState(false),
|
|
556
|
+
cameraAvailable = _React$useState[0],
|
|
557
|
+
setCameraAvailable = _React$useState[1];
|
|
558
|
+
var _useState4 = useState('Please wait, while the face detector is initializing'),
|
|
559
|
+
loadingText = _useState4[0],
|
|
560
|
+
setLoadingText = _useState4[1];
|
|
561
|
+
var interval;
|
|
562
|
+
var videoStream = null;
|
|
563
|
+
var stopFaceDetection = false;
|
|
564
|
+
var capture = useCallback(function () {
|
|
565
|
+
try {
|
|
566
|
+
setLoadingText('Please wait while we process the image');
|
|
567
|
+
setLoading(true);
|
|
568
|
+
stopFaceDetection = true;
|
|
569
|
+
var imageSrc = isMobile ? captureSnapshot() : webcamRef.current.getScreenshot({
|
|
570
|
+
width: 450,
|
|
571
|
+
height: 450
|
|
572
|
+
});
|
|
573
|
+
return Promise.resolve(resizeImage(imageSrc, 450, 450)).then(function (imageResized) {
|
|
574
|
+
var img = imageResized.split(',')[1];
|
|
575
|
+
var mimeString = imageSrc.split(',')[0].split(':')[1].split(';')[0];
|
|
576
|
+
return Promise.resolve(resizeImage(imageSrc, 224, 224)).then(function (imgStr) {
|
|
577
|
+
var img2 = imgStr.split(',')[1];
|
|
578
|
+
clearInterval(interval);
|
|
579
|
+
return Promise.resolve(callLiveness(url, appId, userId, referenceId, captureType, eyesCheck, storeId, whiteBackground, expiryIn, img, img2, mimeString)).then(function (response) {
|
|
580
|
+
response.livenessImage = img2;
|
|
581
|
+
response.livenessImageType = mimeString;
|
|
582
|
+
getLivenessResponse(response);
|
|
583
|
+
setLoading(false);
|
|
584
|
+
response.status === 'success' && setDisabled(true);
|
|
585
|
+
});
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
} catch (e) {
|
|
589
|
+
return Promise.reject(e);
|
|
590
|
+
}
|
|
591
|
+
}, [webcamRef]);
|
|
592
|
+
useEffect(function () {
|
|
593
|
+
return function () {
|
|
594
|
+
clearInterval(interval);
|
|
595
|
+
stopFaceDetection = true;
|
|
596
|
+
console.log('came here return');
|
|
597
|
+
if (!videoStream) {
|
|
598
|
+
videoStream.getTracks().forEach(function (track) {
|
|
599
|
+
track.stop();
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
}, []);
|
|
604
|
+
useEffect(function () {
|
|
605
|
+
setTimeout(function () {
|
|
606
|
+
var initModels = function initModels() {
|
|
607
|
+
try {
|
|
608
|
+
return Promise.resolve(nets.tinyFaceDetector.loadFromUri('https://www.rocksetta.com/tensorflowjs/saved-models/face-api-js/')).then(function () {
|
|
609
|
+
return Promise.resolve(nets.faceLandmark68TinyNet.loadFromUri('https://www.rocksetta.com/tensorflowjs/saved-models/face-api-js/')).then(function () {});
|
|
610
|
+
});
|
|
611
|
+
} catch (e) {
|
|
612
|
+
return Promise.reject(e);
|
|
613
|
+
}
|
|
614
|
+
};
|
|
615
|
+
if (isMobile) {
|
|
616
|
+
startCamera();
|
|
617
|
+
} else {
|
|
618
|
+
initModels();
|
|
619
|
+
}
|
|
620
|
+
}, 500);
|
|
621
|
+
}, []);
|
|
622
|
+
function stopCamera() {
|
|
623
|
+
clearInterval(interval);
|
|
624
|
+
stopFaceDetection = true;
|
|
625
|
+
var videoElement = webcamRef.current;
|
|
626
|
+
videoElement.pause();
|
|
627
|
+
videoStream.getTracks().forEach(function (track) {
|
|
628
|
+
track.stop();
|
|
629
|
+
});
|
|
630
|
+
}
|
|
631
|
+
function handleSuccess(stream) {
|
|
632
|
+
var videoElement = webcamRef.current;
|
|
633
|
+
var elementInterval = setInterval(function () {
|
|
634
|
+
if (videoElement === null || videoElement === undefined) {
|
|
635
|
+
console.log('rendering element');
|
|
636
|
+
} else {
|
|
637
|
+
console.log('element rendered');
|
|
638
|
+
videoElement.srcObject = stream;
|
|
639
|
+
setTimeout(function () {
|
|
640
|
+
videoElement.play();
|
|
641
|
+
init();
|
|
642
|
+
}, 500);
|
|
643
|
+
clearInterval(elementInterval);
|
|
644
|
+
}
|
|
645
|
+
}, 100);
|
|
646
|
+
}
|
|
647
|
+
function trimCanvas(c) {
|
|
648
|
+
var ctx = c.getContext('2d');
|
|
649
|
+
var copy = document.createElement('canvas').getContext('2d');
|
|
650
|
+
var pixels = ctx.getImageData(0, 0, c.width, c.height);
|
|
651
|
+
var l = pixels.data.length;
|
|
652
|
+
var i;
|
|
653
|
+
var bound = {
|
|
654
|
+
top: null,
|
|
655
|
+
left: null,
|
|
656
|
+
right: null,
|
|
657
|
+
bottom: null
|
|
658
|
+
};
|
|
659
|
+
var x;
|
|
660
|
+
var y;
|
|
661
|
+
for (i = 0; i < l; i += 4) {
|
|
662
|
+
if (pixels.data[i + 3] !== 0) {
|
|
663
|
+
x = i / 4 % c.width;
|
|
664
|
+
y = ~~(i / 4 / c.width);
|
|
665
|
+
if (bound.top === null) {
|
|
666
|
+
bound.top = y;
|
|
667
|
+
}
|
|
668
|
+
if (bound.left === null) {
|
|
669
|
+
bound.left = x;
|
|
670
|
+
} else if (x < bound.left) {
|
|
671
|
+
bound.left = x;
|
|
672
|
+
}
|
|
673
|
+
if (bound.right === null) {
|
|
674
|
+
bound.right = x;
|
|
675
|
+
} else if (bound.right < x) {
|
|
676
|
+
bound.right = x;
|
|
677
|
+
}
|
|
678
|
+
if (bound.bottom === null) {
|
|
679
|
+
bound.bottom = y;
|
|
680
|
+
} else if (bound.bottom < y) {
|
|
681
|
+
bound.bottom = y;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
var trimHeight = bound.bottom - bound.top;
|
|
686
|
+
var trimWidth = bound.right - bound.left;
|
|
687
|
+
var trimmed = ctx.getImageData(bound.left, bound.top, trimWidth, trimHeight);
|
|
688
|
+
copy.canvas.width = trimWidth;
|
|
689
|
+
copy.canvas.height = trimHeight;
|
|
690
|
+
copy.putImageData(trimmed, 0, 0);
|
|
691
|
+
return copy.canvas;
|
|
692
|
+
}
|
|
693
|
+
function captureSnapshot() {
|
|
694
|
+
var videoElement = webcamRef.current;
|
|
695
|
+
if (videoElement != null) {
|
|
696
|
+
var hiddenCanvas = document.getElementById('hidden-canvas');
|
|
697
|
+
hiddenCanvas.setAttribute('width', videoElement.offsetWidth);
|
|
698
|
+
hiddenCanvas.setAttribute('height', videoElement.videoHeight / (videoElement.videoWidth / videoElement.offsetWidth));
|
|
699
|
+
var ctx = hiddenCanvas.getContext('2d');
|
|
700
|
+
var destWidth = 450;
|
|
701
|
+
var destHeight = 450;
|
|
702
|
+
var sourceWidth = videoElement.videoWidth;
|
|
703
|
+
var sourceHeight = videoElement.videoHeight;
|
|
704
|
+
var ratio = sourceWidth / destWidth;
|
|
705
|
+
ctx.canvas.width = destWidth;
|
|
706
|
+
ctx.canvas.height = destHeight;
|
|
707
|
+
ctx.translate(ctx.canvas.width, 0);
|
|
708
|
+
ctx.scale(-1, 1);
|
|
709
|
+
ctx.drawImage(videoElement, sourceWidth / 2 - destWidth / 2 * ratio, sourceHeight / 2 - destHeight / 2 * ratio, destWidth * ratio, destHeight * ratio, 0, 0, destWidth, destHeight);
|
|
710
|
+
var trimmedCanvas = trimCanvas(hiddenCanvas);
|
|
711
|
+
var imageData = trimmedCanvas.toDataURL('image/png');
|
|
712
|
+
stopCamera();
|
|
713
|
+
return imageData;
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
return /*#__PURE__*/React__default.createElement(Fragment, null, loading ? /*#__PURE__*/React__default.createElement(LoadingContainer, null, /*#__PURE__*/React__default.createElement(SvgLoading, {
|
|
717
|
+
style: {
|
|
718
|
+
width: '50%',
|
|
719
|
+
margin: 'auto'
|
|
720
|
+
}
|
|
721
|
+
}), /*#__PURE__*/React__default.createElement(Text, {
|
|
722
|
+
style: {
|
|
723
|
+
width: '75%',
|
|
724
|
+
fontSize: '1rem',
|
|
725
|
+
marginTop: isMobile ? '-100%' : '-25%',
|
|
726
|
+
marginBottom: '0',
|
|
727
|
+
fontWeight: '400',
|
|
728
|
+
color: '#0e0e0e'
|
|
729
|
+
}
|
|
730
|
+
}, loadingText)) : /*#__PURE__*/React__default.createElement(Fragment, null, /*#__PURE__*/React__default.createElement(BrowserView, null, /*#__PURE__*/React__default.createElement(Container, null, /*#__PURE__*/React__default.createElement("h1", {
|
|
731
|
+
style: {
|
|
732
|
+
margin: '4% 0 0 0',
|
|
733
|
+
fontSize: '2em',
|
|
734
|
+
textAlign: 'center'
|
|
735
|
+
}
|
|
736
|
+
}, "Face Capture"), /*#__PURE__*/React__default.createElement(Webcam, {
|
|
737
|
+
id: "webcam",
|
|
738
|
+
mirrored: true,
|
|
739
|
+
audio: false,
|
|
740
|
+
ref: webcamRef,
|
|
741
|
+
forceScreenshotSourceSize: true,
|
|
742
|
+
screenshotQuality: "1",
|
|
743
|
+
screenshotFormat: "image/jpeg",
|
|
744
|
+
videoConstraints: videoConstraints,
|
|
745
|
+
style: {
|
|
746
|
+
margin: '5% 0',
|
|
747
|
+
borderRadius: '50%',
|
|
748
|
+
objectFit: 'cover',
|
|
749
|
+
width: '25%',
|
|
750
|
+
height: '85%',
|
|
751
|
+
border: "3px solid " + (frontal ? 'green' : 'red')
|
|
752
|
+
}
|
|
753
|
+
}), /*#__PURE__*/React__default.createElement(Text, {
|
|
754
|
+
style: {
|
|
755
|
+
width: '75%',
|
|
756
|
+
fontSize: '1rem',
|
|
757
|
+
marginTop: '5%',
|
|
758
|
+
marginBottom: '0',
|
|
759
|
+
fontWeight: '400'
|
|
760
|
+
}
|
|
761
|
+
}, loadingText), /*#__PURE__*/React__default.createElement(Button, {
|
|
762
|
+
disabled: disabled || !frontal,
|
|
763
|
+
onClick: capture
|
|
764
|
+
}, disabled || frontal ? /*#__PURE__*/React__default.createElement(SvgEnabled, {
|
|
765
|
+
style: {
|
|
766
|
+
width: '80px',
|
|
767
|
+
height: '80px',
|
|
768
|
+
pointerEvents: 'auto'
|
|
769
|
+
}
|
|
770
|
+
}) : /*#__PURE__*/React__default.createElement(SvgDisabled, {
|
|
771
|
+
style: {
|
|
772
|
+
width: '80px',
|
|
773
|
+
height: '80px',
|
|
774
|
+
pointerEvents: 'none'
|
|
775
|
+
}
|
|
776
|
+
})))), /*#__PURE__*/React__default.createElement(MobileView, null, /*#__PURE__*/React__default.createElement(MobileContainer, null, /*#__PURE__*/React__default.createElement("h1", {
|
|
777
|
+
style: {
|
|
778
|
+
margin: '10% 0 0 0',
|
|
779
|
+
fontSize: '1.8rem',
|
|
780
|
+
textAlign: 'center'
|
|
781
|
+
}
|
|
782
|
+
}, "Face Capture"), /*#__PURE__*/React__default.createElement("video", {
|
|
783
|
+
id: "webcam",
|
|
784
|
+
playsInline: true,
|
|
785
|
+
autoPlay: true,
|
|
786
|
+
ref: webcamRef,
|
|
787
|
+
style: {
|
|
788
|
+
margin: '5% 0%',
|
|
789
|
+
borderRadius: '50%',
|
|
790
|
+
objectFit: 'cover',
|
|
791
|
+
height: window.screen.height * 0.37,
|
|
792
|
+
width: window.screen.width * 0.8,
|
|
793
|
+
transform: 'scaleX(-1)',
|
|
794
|
+
border: "3px solid " + (frontal ? 'green' : 'red')
|
|
795
|
+
}
|
|
796
|
+
}), /*#__PURE__*/React__default.createElement("canvas", {
|
|
797
|
+
id: "hidden-canvas",
|
|
798
|
+
style: {
|
|
799
|
+
display: 'none'
|
|
800
|
+
}
|
|
801
|
+
}), /*#__PURE__*/React__default.createElement(Text, {
|
|
802
|
+
style: {
|
|
803
|
+
width: '75%',
|
|
804
|
+
fontSize: '1rem',
|
|
805
|
+
marginTop: '2%',
|
|
806
|
+
marginBottom: '0',
|
|
807
|
+
fontWeight: '400'
|
|
808
|
+
}
|
|
809
|
+
}, loadingText), cameraAvailable ? /*#__PURE__*/React__default.createElement("div", null) : /*#__PURE__*/React__default.createElement(Text, {
|
|
810
|
+
style: {
|
|
811
|
+
width: '75%',
|
|
812
|
+
fontSize: '1rem',
|
|
813
|
+
marginTop: '0',
|
|
814
|
+
marginBottom: '0',
|
|
815
|
+
fontWeight: '400',
|
|
816
|
+
color: '#0e0e0e'
|
|
817
|
+
}
|
|
818
|
+
}, "Accessing camera.. Please wait.."), /*#__PURE__*/React__default.createElement(Button, {
|
|
819
|
+
disabled: disabled || !frontal,
|
|
820
|
+
onClick: capture
|
|
821
|
+
}, disabled || frontal ? /*#__PURE__*/React__default.createElement(SvgEnabled, {
|
|
822
|
+
style: {
|
|
823
|
+
width: '80px',
|
|
824
|
+
height: '80px',
|
|
825
|
+
pointerEvents: 'auto'
|
|
826
|
+
}
|
|
827
|
+
}) : /*#__PURE__*/React__default.createElement(SvgDisabled, {
|
|
828
|
+
style: {
|
|
829
|
+
width: '80px',
|
|
830
|
+
height: '80px',
|
|
831
|
+
pointerEvents: 'none'
|
|
832
|
+
}
|
|
833
|
+
}))))));
|
|
834
|
+
}
|
|
835
|
+
var Container = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n display: grid;\n place-items: center;\n"])));
|
|
836
|
+
var MobileContainer = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n display: grid;\n place-items: center;\n"])));
|
|
837
|
+
var Button = styled.button(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n padding: 10px;\n margin: 10px;\n background-color: inherit;\n border: none;\n cursor: pointer;\n"])));
|
|
838
|
+
var LoadingContainer = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n display: grid;\n place-items: center;\n height: 100vh;\n"])));
|
|
839
|
+
var Text = styled.h6(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n line-height: 1.5em;\n // height: 5em;\n overflow: hidden;\n text-align: center;\n"])));
|
|
840
|
+
function dataURItoBlob(dataURI, imageType) {
|
|
841
|
+
var byteString = atob(dataURI);
|
|
842
|
+
var ab = new ArrayBuffer(byteString.length);
|
|
843
|
+
var ia = new Uint8Array(ab);
|
|
844
|
+
for (var i = 0; i < byteString.length; i++) {
|
|
845
|
+
ia[i] = byteString.charCodeAt(i);
|
|
846
|
+
}
|
|
847
|
+
var bb = new Blob([ab], {
|
|
848
|
+
type: imageType
|
|
849
|
+
});
|
|
850
|
+
return bb;
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
// A type of promise-like that resolves synchronously and supports only one observer
|
|
854
|
+
|
|
855
|
+
const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator"))) : "@@iterator";
|
|
856
|
+
|
|
857
|
+
const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator"))) : "@@asyncIterator";
|
|
858
|
+
|
|
859
|
+
// Asynchronously call a function and send errors to recovery continuation
|
|
860
|
+
function _catch(body, recover) {
|
|
861
|
+
try {
|
|
862
|
+
var result = body();
|
|
863
|
+
} catch(e) {
|
|
864
|
+
return recover(e);
|
|
865
|
+
}
|
|
866
|
+
if (result && result.then) {
|
|
867
|
+
return result.then(void 0, recover);
|
|
868
|
+
}
|
|
869
|
+
return result;
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
var _path$1, _path2$1;
|
|
873
|
+
function _extends$4() {
|
|
874
|
+
_extends$4 = Object.assign ? Object.assign.bind() : function (target) {
|
|
875
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
876
|
+
var source = arguments[i];
|
|
877
|
+
for (var key in source) {
|
|
878
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
879
|
+
target[key] = source[key];
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
return target;
|
|
884
|
+
};
|
|
885
|
+
return _extends$4.apply(this, arguments);
|
|
886
|
+
}
|
|
887
|
+
function SvgCam(props) {
|
|
888
|
+
return /*#__PURE__*/createElement("svg", _extends$4({
|
|
889
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
890
|
+
width: 266.667,
|
|
891
|
+
height: 266.667,
|
|
892
|
+
viewBox: "0 0 200 200"
|
|
893
|
+
}, props), _path$1 || (_path$1 = /*#__PURE__*/createElement("path", {
|
|
894
|
+
d: "M73.3 40c-3.5 1.5-5.4 3.6-10 10.7-3.1 4.8-6.2 9.1-6.7 9.5-.6.4-8.5.8-17.6.8-18.5 0-21.5.8-25.7 7L11 71.3v91.2l2.4 3.6c4.9 7.3.5 6.9 87.1 6.9 87.1 0 82.2.4 87.3-7.3l2.7-4.1v-44.5c0-49.5.1-48.4-6.7-53.3-3.1-2.2-4.5-2.3-21.5-2.8-10-.3-18.3-.7-18.6-1-.2-.3-2.9-4.5-6-9.3C129.5 38 129.5 38 100.5 38c-20.6 0-23.4.2-27.2 2zm52.7 6c1 .5 4.4 5 7.5 10 3.1 5 6.5 9.5 7.5 10 1 .6 9.3 1 18.4 1 18 0 20.8.6 23.2 5.1 1.9 3.7 2.1 85.3.2 89.4-2.6 5.7-.2 5.5-82.3 5.5s-79.7.2-82.3-5.5c-1.7-3.7-1.7-85.3 0-89 2.2-4.8 5.2-5.5 23.3-5.5 9.2 0 17.5-.4 18.5-1 1-.5 4.4-5 7.5-10 3.1-4.9 6.4-9.4 7.3-10 2.2-1.3 48.8-1.3 51.2 0z"
|
|
895
|
+
})), _path2$1 || (_path2$1 = /*#__PURE__*/createElement("path", {
|
|
896
|
+
d: "M94 71.3c-6.1 1.4-13.3 4.8-16.8 8L75 81.4l3.1 3.2 3.2 3.3 3.7-2.5c4.8-3.2 12-5.4 17.6-5.4 6.2 0 15.1 3.6 20 8.2 5 4.6 9.4 12.8 9.4 17.4 0 3.2-.1 3.3-5.1 3.6l-5.1.3 7.6 9.5c4.2 5.2 7.9 9.3 8.3 9.1.5-.3 4.1-4.5 8-9.5l7.3-9.1-5.4-.3-5.4-.3-.6-4.7c-.8-5.7-4.5-14-8.7-19.3C124.3 74 107.8 68.3 94 71.3zM58.8 102.8l-7.8 9.7 5.3.3 5.3.3 1.8 7c5.2 20.4 25.2 33.7 45.1 30 6.2-1.2 14.4-4.7 18.5-8l2.5-2-3.4-3.5c-3-3.1-3.7-3.4-5-2.2-4.9 4.3-10.6 6.1-19.1 6.1-9.4 0-13.6-1.6-20.6-7.7-3.9-3.4-9.4-13.7-9.4-17.6 0-2 .5-2.2 5-2.2 2.8 0 5-.2 5-.5C82 112 67 93 66.6 93c0 0-3.6 4.4-7.8 9.8z"
|
|
897
|
+
})));
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
var _templateObject$1, _templateObject2$1, _templateObject3$1, _templateObject4$1, _templateObject5$1, _templateObject6;
|
|
901
|
+
var readDocumentCall = function readDocumentCall(url, appId, referenceId, userId, decision, isBack, expiryIn, docType, documentType, img, img2, type) {
|
|
902
|
+
try {
|
|
903
|
+
var formData = new FormData();
|
|
904
|
+
formData.append('app_id', appId);
|
|
905
|
+
formData.append('referenceId', referenceId);
|
|
906
|
+
formData.append('user_id', userId);
|
|
907
|
+
formData.append('decision', decision);
|
|
908
|
+
formData.append('journey', getJourney(docType));
|
|
909
|
+
formData.append('doc_type', getDocType(docType));
|
|
910
|
+
formData.append('document', documentType);
|
|
911
|
+
formData.append('is_back', isBack);
|
|
912
|
+
formData.append('image', dataURItoBlob$1(img, type));
|
|
913
|
+
formData.append('image2', dataURItoBlob$1(img2, type));
|
|
914
|
+
console.log('Performing Token API call');
|
|
915
|
+
return Promise.resolve(requestToken(url + '/get_auth_token', expiryIn)).then(function (token) {
|
|
916
|
+
console.log('Performing Read Document API call');
|
|
917
|
+
return Promise.resolve(request(url + '/read_document', formData, 'POST', token));
|
|
918
|
+
});
|
|
919
|
+
} catch (e) {
|
|
920
|
+
return Promise.reject(e);
|
|
921
|
+
}
|
|
922
|
+
};
|
|
923
|
+
var aspectRatios = {
|
|
924
|
+
addhar: 0.625,
|
|
925
|
+
pan: 0.625,
|
|
926
|
+
passport: 0.67,
|
|
927
|
+
voter: 1.2,
|
|
928
|
+
pwd: 1.414,
|
|
929
|
+
others: 1.414
|
|
930
|
+
};
|
|
931
|
+
var FACING_MODE_USER = 'user';
|
|
932
|
+
var FACING_MODE_ENVIRONMENT = 'environment';
|
|
933
|
+
(function polyfillGetUserMedia() {
|
|
934
|
+
if (typeof window === 'undefined') {
|
|
935
|
+
return;
|
|
936
|
+
}
|
|
937
|
+
if (navigator.mediaDevices === undefined) {
|
|
938
|
+
navigator.mediaDevices = {};
|
|
939
|
+
}
|
|
940
|
+
if (navigator.mediaDevices.getUserMedia === undefined) {
|
|
941
|
+
navigator.mediaDevices.getUserMedia = function (constraints) {
|
|
942
|
+
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.mediaDevices.getUserMedia || navigator.mediaDevices.webkitGetUserMedia || navigator.mediaDevices.mozGetUserMedia || navigator.mediaDevices.msGetUserMedia;
|
|
943
|
+
if (!getUserMedia) {
|
|
944
|
+
return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
|
|
945
|
+
}
|
|
946
|
+
return new Promise(function (resolve, reject) {
|
|
947
|
+
getUserMedia.call(navigator, constraints, resolve, reject);
|
|
948
|
+
});
|
|
949
|
+
};
|
|
950
|
+
}
|
|
951
|
+
})();
|
|
952
|
+
function ReadDocument(_ref) {
|
|
953
|
+
var resizeImage = function resizeImage(base64, height, width) {
|
|
954
|
+
try {
|
|
955
|
+
return Promise.resolve(new Promise(function (resolve, reject) {
|
|
956
|
+
var canvas = document.createElement('canvas');
|
|
957
|
+
var ctx = canvas.getContext('2d');
|
|
958
|
+
var canvasCopy = document.createElement('canvas');
|
|
959
|
+
var copyContext = canvasCopy.getContext('2d');
|
|
960
|
+
var img = new Image();
|
|
961
|
+
img.src = base64;
|
|
962
|
+
img.onload = function () {
|
|
963
|
+
canvasCopy.width = img.width;
|
|
964
|
+
canvasCopy.height = img.height;
|
|
965
|
+
copyContext.drawImage(img, 0, 0);
|
|
966
|
+
canvas.width = width;
|
|
967
|
+
canvas.height = height;
|
|
968
|
+
ctx.drawImage(canvasCopy, 0, 0, canvasCopy.width, canvasCopy.height, 0, 0, canvas.width, canvas.height);
|
|
969
|
+
resolve(canvas.toDataURL());
|
|
970
|
+
};
|
|
971
|
+
}));
|
|
972
|
+
} catch (e) {
|
|
973
|
+
return Promise.reject(e);
|
|
974
|
+
}
|
|
975
|
+
};
|
|
976
|
+
var captureSnapshot = function captureSnapshot() {
|
|
977
|
+
try {
|
|
978
|
+
var videoElement = webcamRef.current;
|
|
979
|
+
return Promise.resolve(function () {
|
|
980
|
+
if (videoElement != null) {
|
|
981
|
+
var _temp4 = function _temp4() {
|
|
982
|
+
stopCamera();
|
|
983
|
+
return _imageStr;
|
|
984
|
+
};
|
|
985
|
+
window.removeEventListener('deviceorientation', handleOrientation, true);
|
|
986
|
+
var videoHeight = videoElement.offsetWidth * aspectRatios[docType];
|
|
987
|
+
var hiddenCanvas = document.getElementById('hidden-canvas');
|
|
988
|
+
hiddenCanvas.setAttribute('width', videoElement.offsetWidth);
|
|
989
|
+
hiddenCanvas.setAttribute('height', videoHeight);
|
|
990
|
+
var ctx = hiddenCanvas.getContext('2d');
|
|
991
|
+
var destWidth = videoElement.videoWidth;
|
|
992
|
+
var destHeight = videoElement.videoWidth * aspectRatios[docType];
|
|
993
|
+
var sourceWidth = videoElement.videoWidth;
|
|
994
|
+
var sourceHeight = videoElement.videoHeight;
|
|
995
|
+
var ratio = sourceWidth / destWidth;
|
|
996
|
+
ctx.canvas.width = destWidth;
|
|
997
|
+
ctx.canvas.height = destHeight;
|
|
998
|
+
if (facingMode === FACING_MODE_USER) {
|
|
999
|
+
ctx.translate(ctx.canvas.width, 0);
|
|
1000
|
+
ctx.scale(-1, 1);
|
|
1001
|
+
}
|
|
1002
|
+
if (docType === 'pwd' || docType === 'others') {
|
|
1003
|
+
destWidth = destWidth * 0.5;
|
|
1004
|
+
destHeight = destWidth * aspectRatios[docType];
|
|
1005
|
+
ctx.canvas.width = destWidth;
|
|
1006
|
+
ctx.canvas.height = destHeight;
|
|
1007
|
+
ctx.drawImage(videoElement, 0, 0, sourceWidth, sourceHeight, 0, 0, destWidth, destHeight);
|
|
1008
|
+
} else {
|
|
1009
|
+
ctx.drawImage(videoElement, sourceWidth / 2 - destWidth / 2 * ratio, sourceHeight / 2 - destHeight / 2 * ratio, destWidth * ratio, destHeight * ratio, 0, 0, destWidth, destHeight);
|
|
1010
|
+
}
|
|
1011
|
+
var imageData = hiddenCanvas.toDataURL('image/png');
|
|
1012
|
+
var _imageStr;
|
|
1013
|
+
var _temp3 = function () {
|
|
1014
|
+
if (docType === 'pwd' || docType === 'others') {
|
|
1015
|
+
return Promise.resolve(resizeImage(imageData, destHeight, destWidth)).then(function (_resizeImage) {
|
|
1016
|
+
_imageStr = _resizeImage;
|
|
1017
|
+
});
|
|
1018
|
+
} else {
|
|
1019
|
+
_imageStr = imageData;
|
|
1020
|
+
}
|
|
1021
|
+
}();
|
|
1022
|
+
return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
|
|
1023
|
+
}
|
|
1024
|
+
}());
|
|
1025
|
+
} catch (e) {
|
|
1026
|
+
return Promise.reject(e);
|
|
1027
|
+
}
|
|
1028
|
+
};
|
|
1029
|
+
var url = _ref.url,
|
|
1030
|
+
appId = _ref.appId,
|
|
1031
|
+
referenceId = _ref.referenceId,
|
|
1032
|
+
userId = _ref.userId,
|
|
1033
|
+
decision = _ref.decision,
|
|
1034
|
+
isBack = _ref.isBack,
|
|
1035
|
+
expiryIn = _ref.expiryIn,
|
|
1036
|
+
docType = _ref.docType,
|
|
1037
|
+
documentType = _ref.documentType,
|
|
1038
|
+
getReadDocumentImage = _ref.getReadDocumentImage;
|
|
1039
|
+
var webcamRef = useRef();
|
|
1040
|
+
var _React$useState = React__default.useState(FACING_MODE_ENVIRONMENT),
|
|
1041
|
+
facingMode = _React$useState[0],
|
|
1042
|
+
setFacingMode = _React$useState[1];
|
|
1043
|
+
var _React$useState2 = React__default.useState(false),
|
|
1044
|
+
loading = _React$useState2[0],
|
|
1045
|
+
setLoading = _React$useState2[1];
|
|
1046
|
+
var _React$useState3 = React__default.useState(false),
|
|
1047
|
+
enableCapture = _React$useState3[0],
|
|
1048
|
+
setEnableCapture = _React$useState3[1];
|
|
1049
|
+
var _React$useState4 = React__default.useState(false),
|
|
1050
|
+
cameraAvailable = _React$useState4[0],
|
|
1051
|
+
setCameraAvailable = _React$useState4[1];
|
|
1052
|
+
var _React$useState5 = React__default.useState(true),
|
|
1053
|
+
isOriented = _React$useState5[0],
|
|
1054
|
+
setIsOriented = _React$useState5[1];
|
|
1055
|
+
var videoConstraints = {
|
|
1056
|
+
audio: false,
|
|
1057
|
+
video: {
|
|
1058
|
+
facingMode: facingMode
|
|
1059
|
+
}
|
|
1060
|
+
};
|
|
1061
|
+
var videoStream = null;
|
|
1062
|
+
var camFacingMode = FACING_MODE_ENVIRONMENT;
|
|
1063
|
+
var isCameraOpened = false;
|
|
1064
|
+
var handleClick = React__default.useCallback(function () {
|
|
1065
|
+
try {
|
|
1066
|
+
var videoElement = webcamRef.current;
|
|
1067
|
+
if (camFacingMode === FACING_MODE_ENVIRONMENT) {
|
|
1068
|
+
camFacingMode = FACING_MODE_USER;
|
|
1069
|
+
} else {
|
|
1070
|
+
camFacingMode = FACING_MODE_ENVIRONMENT;
|
|
1071
|
+
}
|
|
1072
|
+
setFacingMode(camFacingMode);
|
|
1073
|
+
console.log(facingMode);
|
|
1074
|
+
var videoTracks = videoStream.getVideoTracks();
|
|
1075
|
+
if (videoTracks.length === 0) {
|
|
1076
|
+
return Promise.resolve();
|
|
1077
|
+
}
|
|
1078
|
+
videoTracks.forEach(function (track) {
|
|
1079
|
+
track.stop();
|
|
1080
|
+
});
|
|
1081
|
+
var _temp = _catch(function () {
|
|
1082
|
+
return Promise.resolve(navigator.mediaDevices.getUserMedia(videoConstraints)).then(function (_navigator$mediaDevic) {
|
|
1083
|
+
videoStream = _navigator$mediaDevic;
|
|
1084
|
+
videoElement.srcObject = videoStream;
|
|
1085
|
+
});
|
|
1086
|
+
}, function (err) {
|
|
1087
|
+
console.log(err);
|
|
1088
|
+
alert(err.toString());
|
|
1089
|
+
});
|
|
1090
|
+
return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
|
|
1091
|
+
} catch (e) {
|
|
1092
|
+
return Promise.reject(e);
|
|
1093
|
+
}
|
|
1094
|
+
}, []);
|
|
1095
|
+
var capture = useCallback(function () {
|
|
1096
|
+
try {
|
|
1097
|
+
var _temp2 = function _temp2(imgStr) {
|
|
1098
|
+
var img = imgStr.split(',')[1];
|
|
1099
|
+
var mimeString = imgStr.split(',')[0].split(':')[1].split(';')[0];
|
|
1100
|
+
return Promise.resolve(resizeImage(imgStr, 224, 224)).then(function (img2Str) {
|
|
1101
|
+
var img2 = img2Str.split(',')[1];
|
|
1102
|
+
return Promise.resolve(readDocumentCall(url, appId, referenceId, userId, decision, isBack, expiryIn, docType, documentType, img, img2, mimeString)).then(function (response) {
|
|
1103
|
+
response.image = img;
|
|
1104
|
+
response.type = mimeString;
|
|
1105
|
+
getReadDocumentImage(response);
|
|
1106
|
+
setLoading(false);
|
|
1107
|
+
});
|
|
1108
|
+
});
|
|
1109
|
+
};
|
|
1110
|
+
setLoading(true);
|
|
1111
|
+
return Promise.resolve(isMobile ? Promise.resolve(captureSnapshot()).then(_temp2) : _temp2(webcamRef.current.getScreenshot()));
|
|
1112
|
+
} catch (e) {
|
|
1113
|
+
return Promise.reject(e);
|
|
1114
|
+
}
|
|
1115
|
+
}, [webcamRef]);
|
|
1116
|
+
useEffect(function () {
|
|
1117
|
+
console.log('Vishwam SDK initialized');
|
|
1118
|
+
if (typeof DeviceMotionEvent.requestPermission === 'function') {
|
|
1119
|
+
DeviceOrientationEvent.requestPermission().then(function (response) {
|
|
1120
|
+
console.log(response);
|
|
1121
|
+
if (response === 'granted') {
|
|
1122
|
+
window.addEventListener('deviceorientation', handleOrientation, true);
|
|
1123
|
+
setIsOriented(true);
|
|
1124
|
+
initUIandCamera();
|
|
1125
|
+
}
|
|
1126
|
+
})["catch"](function (err) {
|
|
1127
|
+
console.log(err);
|
|
1128
|
+
setIsOriented(false);
|
|
1129
|
+
});
|
|
1130
|
+
} else {
|
|
1131
|
+
setIsOriented(true);
|
|
1132
|
+
initUIandCamera();
|
|
1133
|
+
if (typeof DeviceOrientationEvent !== 'undefined') {
|
|
1134
|
+
window.addEventListener('deviceorientation', handleOrientation, true);
|
|
1135
|
+
} else {
|
|
1136
|
+
window.addEventListener('orientationchange', handleOrientationIos, true);
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
}, [webcamRef]);
|
|
1140
|
+
function startCamera() {
|
|
1141
|
+
if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
|
|
1142
|
+
console.log('enumerateDevices() not supported.');
|
|
1143
|
+
}
|
|
1144
|
+
navigator.mediaDevices.enumerateDevices().then(function (devices) {
|
|
1145
|
+
devices.forEach(function (device) {
|
|
1146
|
+
console.log(device.kind + ': ' + device.label + ' id = ' + device.deviceId);
|
|
1147
|
+
});
|
|
1148
|
+
})["catch"](function (err) {
|
|
1149
|
+
console.log(err);
|
|
1150
|
+
});
|
|
1151
|
+
var supportedConstraints = navigator.mediaDevices.getSupportedConstraints();
|
|
1152
|
+
console.log('supported constraints: ', supportedConstraints);
|
|
1153
|
+
navigator.mediaDevices.getUserMedia({
|
|
1154
|
+
audio: false,
|
|
1155
|
+
video: {
|
|
1156
|
+
facingMode: facingMode
|
|
1157
|
+
}
|
|
1158
|
+
}).then(function (stream) {
|
|
1159
|
+
webcamRef.current.srcObject = stream;
|
|
1160
|
+
videoStream = stream;
|
|
1161
|
+
setCameraAvailable(true);
|
|
1162
|
+
isCameraOpened = true;
|
|
1163
|
+
webcamRef.current.play();
|
|
1164
|
+
})["catch"](function (err) {
|
|
1165
|
+
console.log(err);
|
|
1166
|
+
console.log(err.name);
|
|
1167
|
+
var errString = err.toString();
|
|
1168
|
+
setCameraAvailable(false);
|
|
1169
|
+
isCameraOpened = false;
|
|
1170
|
+
if (errString.includes('NotReadableError')) {
|
|
1171
|
+
setTimeout(function () {
|
|
1172
|
+
startCamera();
|
|
1173
|
+
}, 1000);
|
|
1174
|
+
} else if (err.name === 'NotAllowedError') {
|
|
1175
|
+
console.log('Camera Permission denied');
|
|
1176
|
+
var errObj = {
|
|
1177
|
+
status: 'failed',
|
|
1178
|
+
error: err.name,
|
|
1179
|
+
message: 'Camera Permission Denied'
|
|
1180
|
+
};
|
|
1181
|
+
getReadDocumentImage(errObj);
|
|
1182
|
+
} else {
|
|
1183
|
+
alert("getUserMedia error: " + err.toString());
|
|
1184
|
+
}
|
|
1185
|
+
});
|
|
1186
|
+
}
|
|
1187
|
+
function initUIandCamera() {
|
|
1188
|
+
setTimeout(function () {
|
|
1189
|
+
if (isMobile) {
|
|
1190
|
+
var videoElement = webcamRef.current;
|
|
1191
|
+
videoElement.style.height = aspectRatios[docType] * videoElement.offsetWidth + 'px';
|
|
1192
|
+
videoElement.style.minHeight = aspectRatios[docType] * videoElement.offsetWidth + 'px';
|
|
1193
|
+
startCamera();
|
|
1194
|
+
}
|
|
1195
|
+
}, 500);
|
|
1196
|
+
}
|
|
1197
|
+
function detectPhoneTilt() {
|
|
1198
|
+
console.log('type of DeviceOrientationEvent', typeof DeviceOrientationEvent);
|
|
1199
|
+
if (typeof DeviceMotionEvent.requestPermission === 'function') {
|
|
1200
|
+
console.log('Requesting device orientation');
|
|
1201
|
+
DeviceOrientationEvent.requestPermission().then(function (response) {
|
|
1202
|
+
console.log('Device orientation request response', response);
|
|
1203
|
+
if (response === 'granted') {
|
|
1204
|
+
window.addEventListener('deviceorientation', handleOrientation, true);
|
|
1205
|
+
setIsOriented(true);
|
|
1206
|
+
initUIandCamera();
|
|
1207
|
+
} else {
|
|
1208
|
+
alert('Device motion detection rejected');
|
|
1209
|
+
var errObj = {
|
|
1210
|
+
status: 'Failed',
|
|
1211
|
+
error: 'Device motion detection access rejected'
|
|
1212
|
+
};
|
|
1213
|
+
getReadDocumentImage(errObj);
|
|
1214
|
+
}
|
|
1215
|
+
})["catch"](function (err) {
|
|
1216
|
+
console.log('Device orientation request error', err);
|
|
1217
|
+
getReadDocumentImage(err);
|
|
1218
|
+
});
|
|
1219
|
+
} else {
|
|
1220
|
+
setIsOriented(true);
|
|
1221
|
+
initUIandCamera();
|
|
1222
|
+
if (typeof DeviceOrientationEvent !== 'undefined') {
|
|
1223
|
+
window.addEventListener('deviceorientation', handleOrientation, true);
|
|
1224
|
+
} else {
|
|
1225
|
+
window.addEventListener('orientationchange', handleOrientationIos, true);
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
function handleOrientation(event) {
|
|
1230
|
+
var beta = event.beta;
|
|
1231
|
+
var gamma = event.gamma;
|
|
1232
|
+
var pitch = 10;
|
|
1233
|
+
var roll = 10;
|
|
1234
|
+
if (camFacingMode === FACING_MODE_ENVIRONMENT) {
|
|
1235
|
+
if (beta > 0 - pitch && beta < pitch && gamma > 0 - roll && gamma < roll) {
|
|
1236
|
+
enableDocCapture();
|
|
1237
|
+
} else {
|
|
1238
|
+
disableDocCapture();
|
|
1239
|
+
}
|
|
1240
|
+
} else {
|
|
1241
|
+
enableDocCapture();
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
function handleOrientationIos(event) {
|
|
1245
|
+
console.log('Orientation Ios', event);
|
|
1246
|
+
}
|
|
1247
|
+
function enableDocCapture() {
|
|
1248
|
+
console.log('is camera available - ', isCameraOpened);
|
|
1249
|
+
if (isCameraOpened) {
|
|
1250
|
+
setEnableCapture(true);
|
|
1251
|
+
} else {
|
|
1252
|
+
setEnableCapture(false);
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
function disableDocCapture() {
|
|
1256
|
+
setEnableCapture(false);
|
|
1257
|
+
}
|
|
1258
|
+
function stopCamera() {
|
|
1259
|
+
var videoElement = webcamRef.current;
|
|
1260
|
+
if (videoElement) {
|
|
1261
|
+
videoElement.pause();
|
|
1262
|
+
}
|
|
1263
|
+
if (videoStream) {
|
|
1264
|
+
videoStream.getTracks().forEach(function (track) {
|
|
1265
|
+
track.stop();
|
|
1266
|
+
});
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
return /*#__PURE__*/React__default.createElement(Fragment, null, loading ? /*#__PURE__*/React__default.createElement(LoadingContainer$1, null, /*#__PURE__*/React__default.createElement(SvgLoading, {
|
|
1270
|
+
style: {
|
|
1271
|
+
width: '50%',
|
|
1272
|
+
margin: 'auto'
|
|
1273
|
+
}
|
|
1274
|
+
}), /*#__PURE__*/React__default.createElement(Text$1, {
|
|
1275
|
+
style: {
|
|
1276
|
+
width: '50%',
|
|
1277
|
+
fontSize: '1rem',
|
|
1278
|
+
marginTop: isMobile ? '-100%' : '-25%',
|
|
1279
|
+
marginBottom: '0',
|
|
1280
|
+
fontWeight: '400',
|
|
1281
|
+
color: '#0e0e0e'
|
|
1282
|
+
}
|
|
1283
|
+
}, "Please wait while we process the image")) : /*#__PURE__*/React__default.createElement(Fragment, null, /*#__PURE__*/React__default.createElement(BrowserView, null, /*#__PURE__*/React__default.createElement(Container$1, null, /*#__PURE__*/React__default.createElement("h1", {
|
|
1284
|
+
style: {
|
|
1285
|
+
margin: '4% 0 4% 0',
|
|
1286
|
+
fontSize: '2em',
|
|
1287
|
+
textAlign: 'center'
|
|
1288
|
+
}
|
|
1289
|
+
}, ' ', "Capture Document", ' '), /*#__PURE__*/React__default.createElement(Webcam, {
|
|
1290
|
+
id: "video",
|
|
1291
|
+
forceScreenshotSourceSize: true,
|
|
1292
|
+
audio: false,
|
|
1293
|
+
ref: webcamRef,
|
|
1294
|
+
width: isMobile ? screen.width : screen.width / 3,
|
|
1295
|
+
screenshotQuality: "1",
|
|
1296
|
+
screenshotFormat: "image/jpeg",
|
|
1297
|
+
videoConstraints: _extends({}, videoConstraints, {
|
|
1298
|
+
facingMode: facingMode
|
|
1299
|
+
})
|
|
1300
|
+
}), /*#__PURE__*/React__default.createElement(Text$1, {
|
|
1301
|
+
style: {
|
|
1302
|
+
width: '75%',
|
|
1303
|
+
fontSize: '1rem',
|
|
1304
|
+
marginTop: '5%',
|
|
1305
|
+
marginBottom: '0',
|
|
1306
|
+
fontWeight: '400',
|
|
1307
|
+
color: "" + (enableCapture ? '#0e0e0e' : '#FF422C')
|
|
1308
|
+
}
|
|
1309
|
+
}, enableCapture ? 'Make sure your document is without any glare and is fully inside' : 'Hold the phone flat while capturing. Do not tilt the phone while capturing.'), /*#__PURE__*/React__default.createElement(Flex, {
|
|
1310
|
+
style: {
|
|
1311
|
+
marginTop: '-4%'
|
|
1312
|
+
}
|
|
1313
|
+
}, /*#__PURE__*/React__default.createElement(Button$1, {
|
|
1314
|
+
onClick: capture
|
|
1315
|
+
}, /*#__PURE__*/React__default.createElement(SvgEnabled, {
|
|
1316
|
+
style: {
|
|
1317
|
+
width: '80px',
|
|
1318
|
+
height: '80px',
|
|
1319
|
+
pointerEvents: 'auto'
|
|
1320
|
+
}
|
|
1321
|
+
})), /*#__PURE__*/React__default.createElement(Button$1, {
|
|
1322
|
+
onClick: handleClick
|
|
1323
|
+
}, /*#__PURE__*/React__default.createElement(SvgCam, {
|
|
1324
|
+
style: {
|
|
1325
|
+
width: '100%',
|
|
1326
|
+
height: '80%',
|
|
1327
|
+
objectFit: 'cover'
|
|
1328
|
+
}
|
|
1329
|
+
}))))), /*#__PURE__*/React__default.createElement(MobileView, null, isOriented ? /*#__PURE__*/React__default.createElement(MobileContainer$1, {
|
|
1330
|
+
style: {
|
|
1331
|
+
width: '100%'
|
|
1332
|
+
}
|
|
1333
|
+
}, /*#__PURE__*/React__default.createElement("h1", {
|
|
1334
|
+
style: {
|
|
1335
|
+
margin: '5% 0 0 0',
|
|
1336
|
+
fontSize: '1.8rem',
|
|
1337
|
+
textAlign: 'center'
|
|
1338
|
+
}
|
|
1339
|
+
}, ' ', "Capture Document", ' '), /*#__PURE__*/React__default.createElement("video", {
|
|
1340
|
+
style: {
|
|
1341
|
+
margin: '5% 0 5% 0',
|
|
1342
|
+
objectFit: 'cover',
|
|
1343
|
+
transform: "" + (facingMode === FACING_MODE_USER ? 'scaleX(-1)' : 'none')
|
|
1344
|
+
},
|
|
1345
|
+
id: "video",
|
|
1346
|
+
ref: webcamRef,
|
|
1347
|
+
playsInline: true,
|
|
1348
|
+
autoPlay: true,
|
|
1349
|
+
width: isMobile ? screen.width * 0.85 : screen.width / 3
|
|
1350
|
+
}), /*#__PURE__*/React__default.createElement("canvas", {
|
|
1351
|
+
id: "hidden-canvas",
|
|
1352
|
+
style: {
|
|
1353
|
+
display: 'none'
|
|
1354
|
+
}
|
|
1355
|
+
}), /*#__PURE__*/React__default.createElement(Text$1, {
|
|
1356
|
+
style: {
|
|
1357
|
+
width: '75%',
|
|
1358
|
+
fontSize: '1rem',
|
|
1359
|
+
marginTop: '2%',
|
|
1360
|
+
marginBottom: '0',
|
|
1361
|
+
fontWeight: '400',
|
|
1362
|
+
color: "" + (enableCapture ? '#0e0e0e' : '#FF422C')
|
|
1363
|
+
}
|
|
1364
|
+
}, enableCapture ? 'Make sure your document is without any glare and is fully inside' : 'Hold the phone flat while capturing. Do not tilt the phone while capturing.'), cameraAvailable ? /*#__PURE__*/React__default.createElement("div", null) : /*#__PURE__*/React__default.createElement(Text$1, {
|
|
1365
|
+
style: {
|
|
1366
|
+
width: '75%',
|
|
1367
|
+
fontSize: '1rem',
|
|
1368
|
+
marginTop: '0',
|
|
1369
|
+
marginBottom: '0',
|
|
1370
|
+
fontWeight: '400',
|
|
1371
|
+
color: '#0e0e0e'
|
|
1372
|
+
}
|
|
1373
|
+
}, "Accessing camera.. Please wait.."), /*#__PURE__*/React__default.createElement("div", {
|
|
1374
|
+
id: "capture-container",
|
|
1375
|
+
style: {
|
|
1376
|
+
display: 'flex',
|
|
1377
|
+
alignItems: 'center',
|
|
1378
|
+
justifyContent: 'center'
|
|
1379
|
+
}
|
|
1380
|
+
}, /*#__PURE__*/React__default.createElement(Button$1, {
|
|
1381
|
+
onClick: capture,
|
|
1382
|
+
disabled: !enableCapture
|
|
1383
|
+
}, enableCapture ? /*#__PURE__*/React__default.createElement(SvgEnabled, {
|
|
1384
|
+
style: {
|
|
1385
|
+
width: '70px',
|
|
1386
|
+
height: '70px',
|
|
1387
|
+
pointerEvents: 'auto'
|
|
1388
|
+
}
|
|
1389
|
+
}) : /*#__PURE__*/React__default.createElement(SvgDisabled, {
|
|
1390
|
+
style: {
|
|
1391
|
+
width: '70px',
|
|
1392
|
+
height: '70px',
|
|
1393
|
+
pointerEvents: 'none'
|
|
1394
|
+
}
|
|
1395
|
+
})))) : /*#__PURE__*/React__default.createElement(Fragment, null, /*#__PURE__*/React__default.createElement("div", {
|
|
1396
|
+
style: {
|
|
1397
|
+
margin: '40% auto 0',
|
|
1398
|
+
textAlign: 'center'
|
|
1399
|
+
}
|
|
1400
|
+
}, /*#__PURE__*/React__default.createElement("h3", null, "Please allow device motion detection to capture document"), /*#__PURE__*/React__default.createElement("button", {
|
|
1401
|
+
style: {
|
|
1402
|
+
margin: '5% auto 0',
|
|
1403
|
+
backgroundColor: '#4a6eff',
|
|
1404
|
+
borderColor: '#4a6eff',
|
|
1405
|
+
color: '#fff',
|
|
1406
|
+
borderRadius: '15px',
|
|
1407
|
+
padding: '10px 15px'
|
|
1408
|
+
},
|
|
1409
|
+
onClick: detectPhoneTilt
|
|
1410
|
+
}, "Allow device motion"))))));
|
|
1411
|
+
}
|
|
1412
|
+
var Container$1 = styled.div(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteralLoose(["\n display: grid;\n place-items: center;\n"])));
|
|
1413
|
+
var MobileContainer$1 = styled.div(_templateObject2$1 || (_templateObject2$1 = _taggedTemplateLiteralLoose(["\n display: grid;\n place-items: center;\n"])));
|
|
1414
|
+
var Text$1 = styled.h6(_templateObject3$1 || (_templateObject3$1 = _taggedTemplateLiteralLoose(["\n line-height: 1.5em;\n height: 5em;\n overflow: hidden;\n text-align: center;\n"])));
|
|
1415
|
+
var Flex = styled.div(_templateObject4$1 || (_templateObject4$1 = _taggedTemplateLiteralLoose(["\n display: flex;\n width: 20%;\n"])));
|
|
1416
|
+
var Button$1 = styled.button(_templateObject5$1 || (_templateObject5$1 = _taggedTemplateLiteralLoose(["\n padding: 5px;\n margin: 5px;\n background-color: inherit;\n border: none;\n cursor: pointer;\n"])));
|
|
1417
|
+
var LoadingContainer$1 = styled.div(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n display: grid;\n place-items: center;\n height: 100vh;\n"])));
|
|
1418
|
+
function dataURItoBlob$1(dataURI, imageType) {
|
|
1419
|
+
var byteString = atob(dataURI);
|
|
1420
|
+
var ab = new ArrayBuffer(byteString.length);
|
|
1421
|
+
var ia = new Uint8Array(ab);
|
|
1422
|
+
for (var i = 0; i < byteString.length; i++) {
|
|
1423
|
+
ia[i] = byteString.charCodeAt(i);
|
|
1424
|
+
}
|
|
1425
|
+
var bb = new Blob([ab], {
|
|
1426
|
+
type: imageType
|
|
1427
|
+
});
|
|
1428
|
+
return bb;
|
|
1429
|
+
}
|
|
1430
|
+
function getDocType(docType) {
|
|
1431
|
+
switch (docType) {
|
|
1432
|
+
case 'addhar':
|
|
1433
|
+
return '1';
|
|
1434
|
+
case 'pan':
|
|
1435
|
+
return '2';
|
|
1436
|
+
case 'voter':
|
|
1437
|
+
return '4';
|
|
1438
|
+
case 'passport':
|
|
1439
|
+
return '3';
|
|
1440
|
+
case 'pwd':
|
|
1441
|
+
return 'pwd';
|
|
1442
|
+
case 'others':
|
|
1443
|
+
return 'others';
|
|
1444
|
+
default:
|
|
1445
|
+
return '1';
|
|
1446
|
+
}
|
|
1447
|
+
}
|
|
1448
|
+
function getJourney(docType) {
|
|
1449
|
+
return 'na';
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1452
|
+
function prepareFaceDetector() {
|
|
1453
|
+
console.log('loading models');
|
|
1454
|
+
Promise.all([nets.tinyFaceDetector.loadFromUri('https://www.rocksetta.com/tensorflowjs/saved-models/face-api-js/'), nets.faceLandmark68TinyNet.loadFromUri('https://www.rocksetta.com/tensorflowjs/saved-models/face-api-js/')]).then(function (data) {
|
|
1455
|
+
console.log('loaded models');
|
|
1456
|
+
var baseImage = new Image();
|
|
1457
|
+
baseImage.src = "data:image/png;base64,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";
|
|
1458
|
+
baseImage.onload = function () {
|
|
1459
|
+
try {
|
|
1460
|
+
console.log('loaded base image');
|
|
1461
|
+
var options = new TinyFaceDetectorOptions();
|
|
1462
|
+
var useTinyModel = true;
|
|
1463
|
+
console.log('calling face detector');
|
|
1464
|
+
var detection = null;
|
|
1465
|
+
var startTime = new Date();
|
|
1466
|
+
return Promise.resolve(detectSingleFace(baseImage, options).withFaceLandmarks(useTinyModel)).then(function (_faceapi$detectSingle) {
|
|
1467
|
+
detection = _faceapi$detectSingle;
|
|
1468
|
+
var timeTaken = new Date() - startTime;
|
|
1469
|
+
console.log('Time taken for first detection', timeTaken);
|
|
1470
|
+
});
|
|
1471
|
+
} catch (e) {
|
|
1472
|
+
return Promise.reject(e);
|
|
1473
|
+
}
|
|
1474
|
+
};
|
|
1475
|
+
});
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
var faceMatch = function faceMatch(url, referenceId, userId, appId, matchType, image, image2, imageType) {
|
|
1479
|
+
try {
|
|
1480
|
+
var formData = new FormData();
|
|
1481
|
+
formData.append('referenceId', referenceId);
|
|
1482
|
+
formData.append('user_id', userId);
|
|
1483
|
+
formData.append('app_id', appId);
|
|
1484
|
+
formData.append('match_type', matchType);
|
|
1485
|
+
formData.append('image', dataURItoBlob$2(image, imageType));
|
|
1486
|
+
formData.append('image2', dataURItoBlob$2(image2, imageType));
|
|
1487
|
+
return Promise.resolve(requestToken(url + '/v2/get_auth_token', '1h')).then(function (token) {
|
|
1488
|
+
return Promise.resolve(request(url + '/v1/face_match', formData, 'POST', token));
|
|
1489
|
+
});
|
|
1490
|
+
} catch (e) {
|
|
1491
|
+
return Promise.reject(e);
|
|
1492
|
+
}
|
|
1493
|
+
};
|
|
1494
|
+
function dataURItoBlob$2(dataURI, imageType) {
|
|
1495
|
+
var byteString = atob(dataURI);
|
|
1496
|
+
var ab = new ArrayBuffer(byteString.length);
|
|
1497
|
+
var ia = new Uint8Array(ab);
|
|
1498
|
+
for (var i = 0; i < byteString.length; i++) {
|
|
1499
|
+
ia[i] = byteString.charCodeAt(i);
|
|
1500
|
+
}
|
|
1501
|
+
var bb = new Blob([ab], {
|
|
1502
|
+
type: imageType
|
|
1503
|
+
});
|
|
1504
|
+
return bb;
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1507
|
+
export { CheckLiveness, prepareFaceDetector as Init, ReadDocument, faceMatch };
|
|
1508
|
+
//# sourceMappingURL=index.modern.js.map
|