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