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.
@@ -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