vishwam-react-ent-sdk 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +148 -1
- package/dist/index.js +2 -12
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +2 -12
- package/dist/index.modern.js.map +1 -1
- package/package.json +2 -2
- package/dist/6-dots-rotate-white-36~GzbzADco.svg +0 -1
- package/dist/bouncing-circles~bhjNpXkl.svg +0 -1
- package/dist/disabled~jGBIdXqZ.svg +0 -73
- package/dist/enabled~bhrMcaug.svg +0 -27
- package/dist/fade-stagger-squares~ZuauTkHT.svg +0 -1
- package/dist/gears-spinner~ViTwyWPY.svg +0 -1
- package/dist/infinite-spinner~bblPQPhI.svg +0 -1
- package/dist/loading~GzbzADco.svg +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/request.js","../src/components/CheckLiveness.js","../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/components/ReadDocument.js","../src/components/Init.js","../src/components/FaceMatch.js"],"sourcesContent":["/* eslint-disable no-undef */\nexport async function request(url, payload, method, token) {\n console.log(url, payload, method, token)\n const response = await fetch(url, {\n body: payload,\n method: method,\n // eslint-disable-next-line no-undef\n headers: new Headers({\n Authorization: 'Bearer ' + token\n })\n })\n const string = await response.text()\n const json = string === '' ? {} : JSON.parse(string)\n return json\n}\n\nexport async function requestToken(url, expiry) {\n // eslint-disable-next-line no-undef\n const formData = new FormData()\n formData.append('expiry_at', expiry)\n formData.append('app_id', 'jio_re-vef')\n formData.append('app_key', 'dmlzaHdhbS1zZWxma3lj')\n formData.append('send_token', '1')\n\n const response = await fetch(url, { body: formData, method: 'POST' })\n const json = await response.json()\n return json.token\n}\n","/* eslint-disable no-undef */\nimport React, {\n Fragment,\n useRef,\n useCallback,\n useState,\n useEffect\n} from 'react'\nimport Webcam from 'react-webcam'\nimport styled from 'styled-components'\nimport { BrowserView, MobileView, isMobile } from 'react-device-detect'\nimport { request, requestToken } from '../request'\nimport * as faceapi from 'face-api.js'\nimport { ReactComponent as EnableCapture } from './../enabled.svg'\nimport { ReactComponent as DisabledCapture } from './../disabled.svg'\nimport { ReactComponent as Loader } from './../loading.svg'\n\nconst videoConstraints = {\n audio: false,\n video: {\n facingMode: 'user'\n }\n}\n\nfunction frontalFaceCheck(landmarks) {\n if (!landmarks || landmarks.length < 68) {\n return false\n }\n\n const leftEyeCenter = {\n x: (landmarks[36].x + landmarks[39].x) / 2,\n y: (landmarks[36].y + landmarks[39].y) / 2\n }\n\n const rightEyeCenter = {\n x: (landmarks[42].x + landmarks[45].x) / 2,\n y: (landmarks[42].y + landmarks[45].y) / 2\n }\n\n const faceMiddlePoint = {\n x: (leftEyeCenter.x + rightEyeCenter.x) / 2,\n y: (leftEyeCenter.y + rightEyeCenter.y) / 2\n }\n\n const ratio = {\n x:\n (rightEyeCenter.x - landmarks[30].x) /\n (landmarks[30].x - leftEyeCenter.x),\n y:\n (landmarks[66].y - landmarks[30].y) /\n (landmarks[30].y - faceMiddlePoint.y)\n }\n\n if (ratio.x > 0.75 && ratio.x < 1.33 && ratio.y > 0.56 && ratio.y < 1.56) {\n return true\n }\n\n return false\n}\n\nasync function callLiveness(\n url,\n appId,\n userId,\n referenceId,\n captureType,\n eyesCheck,\n storeId,\n whiteBackground,\n expiryIn,\n img,\n img2,\n imageType\n) {\n const formData = new FormData()\n formData.append('image', dataURItoBlob(img2, imageType))\n formData.append('image2', dataURItoBlob(img, imageType))\n formData.append('app_id', appId)\n formData.append('user_id', userId)\n formData.append('referenceId', referenceId)\n formData.append('capture_type', captureType)\n formData.append('eyesCheck', eyesCheck)\n formData.append('store_id', storeId)\n formData.append('whiteBackground', whiteBackground)\n\n console.log('Performing Token API call')\n\n const token = await requestToken(url + '/get_auth_token', expiryIn)\n\n console.log('Performing Read Document API call')\n\n const response = await request(\n url + '/check_liveness',\n formData,\n 'POST',\n token\n )\n return response\n}\n\n// polyfill based on https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n;(function polyfillGetUserMedia() {\n if (typeof window === 'undefined') {\n return\n }\n\n // Older browsers might not implement mediaDevices at all, so we set an empty object first\n if (navigator.mediaDevices === undefined) {\n navigator.mediaDevices = {}\n }\n\n // Some browsers partially implement mediaDevices. We can't just assign an object\n // with getUserMedia as it would overwrite existing properties.\n // Here, we will just add the getUserMedia property if it's missing.\n if (navigator.mediaDevices.getUserMedia === undefined) {\n navigator.mediaDevices.getUserMedia = function (constraints) {\n // First get ahold of the legacy getUserMedia, if present\n const getUserMedia =\n navigator.getUserMedia ||\n navigator.webkitGetUserMedia ||\n navigator.mozGetUserMedia ||\n navigator.msGetUserMedia\n\n // Some browsers just don't implement it - return a rejected promise with an error\n // to keep a consistent interface\n if (!getUserMedia) {\n return Promise.reject(\n new Error('getUserMedia is not implemented in this browser')\n )\n }\n\n // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise\n return new Promise(function (resolve, reject) {\n getUserMedia.call(navigator, constraints, resolve, reject)\n })\n }\n }\n})()\n\nfunction CheckLiveness({\n url,\n appId,\n userId,\n referenceId,\n captureType,\n eyesCheck,\n storeId,\n whiteBackground,\n expiryIn,\n getLivenessResponse\n}) {\n const webcamRef = useRef()\n const [disabled, setDisabled] = useState(false)\n const [frontal, setFrontal] = useState(false)\n const [loading, setLoading] = useState(false)\n const [cameraAvailable, setCameraAvailable] = React.useState(false)\n const [loadingText, setLoadingText] = useState(\n 'Please wait, while the face detector is initializing'\n )\n\n let interval\n\n const faceDetectionTimeout = null\n\n let videoStream = null\n\n let stopFaceDetection = false\n\n const capture = useCallback(async () => {\n setLoadingText('Please wait while we process the image')\n setLoading(true)\n\n stopFaceDetection = true\n\n const imageSrc = isMobile\n ? captureSnapshot()\n : webcamRef.current.getScreenshot({\n width: 450,\n height: 450\n })\n const imageResized = await resizeImage(imageSrc, 450, 450)\n const img = imageResized.split(',')[1]\n const mimeString = imageSrc.split(',')[0].split(':')[1].split(';')[0]\n const imgStr = await resizeImage(imageSrc, 224, 224)\n const img2 = imgStr.split(',')[1]\n clearInterval(interval)\n\n const response = await callLiveness(\n url,\n appId,\n userId,\n referenceId,\n captureType,\n eyesCheck,\n storeId,\n whiteBackground,\n expiryIn,\n img,\n img2,\n mimeString\n )\n response.livenessImage = img2\n response.livenessImageType = mimeString\n getLivenessResponse(response)\n setLoading(false)\n response.status === 'success' && setDisabled(true)\n }, [webcamRef])\n\n useEffect(() => {\n return () => {\n clearInterval(interval)\n stopFaceDetection = true\n if (faceDetectionTimeout) {\n clearTimeout(faceDetectionTimeout)\n }\n console.log('came here return')\n if(!videoStream) {\n videoStream.getTracks().forEach(function (track) {\n track.stop()\n })\n }\n }\n }, [])\n\n async function detectFace() {\n const videoEl = document.getElementById('webcam')\n const options = new faceapi.TinyFaceDetectorOptions()\n const result = await faceapi\n .detectSingleFace(videoEl, options)\n .withFaceLandmarks(true)\n return result\n }\n\n useEffect(() => {\n // init()\n\n setTimeout(() => {\n async function initModels() {\n await faceapi.nets.tinyFaceDetector.loadFromUri(\n 'https://skyc-cdn-prod.vishwamcorp.com/apis/models/'\n )\n await faceapi.nets.faceLandmark68TinyNet.loadFromUri(\n 'https://skyc-cdn-prod.vishwamcorp.com/apis/models/'\n )\n }\n\n if (isMobile) {\n startCamera()\n } else {\n initModels()\n }\n\n // init()\n }, 500)\n }, [])\n\n async function startCamera() {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n console.log('enumerateDevices() not supported.')\n }\n\n // List cameras and microphones.\n\n navigator.mediaDevices\n .enumerateDevices()\n .then(function (devices) {\n devices.forEach(function (device) {\n console.log(\n device.kind + ': ' + device.label + ' id = ' + device.deviceId\n )\n })\n })\n .catch(function (err) {\n console.log(err.name + ': ' + err.message)\n })\n\n navigator.mediaDevices\n .getUserMedia(videoConstraints)\n .then((stream) => {\n videoStream = stream\n setCameraAvailable(true)\n handleSuccess(stream)\n })\n .catch((err) => {\n console.log(err)\n const errString = err.toString()\n if (errString.includes('NotReadableError')) {\n setTimeout(() => {\n startCamera()\n }, 1000)\n } else if (err.name === 'NotAllowedError') {\n console.log('Camera Permission denied')\n const errObj = {\n status: 'failed',\n error: err.name,\n message: 'Camera Permission Denied'\n }\n getLivenessResponse(errObj)\n } else {\n alert(`getUserMedia error: ${err.toString()}`)\n }\n })\n }\n\n function stopCamera() {\n // const videoElement = document.getElementById('webcam')\n clearInterval(interval)\n stopFaceDetection = true\n const videoElement = webcamRef.current\n videoElement.pause()\n videoStream.getTracks().forEach(function (track) {\n track.stop()\n })\n }\n\n function handleSuccess(stream) {\n const videoElement = webcamRef.current\n\n // eslint-disable-next-line no-unused-vars\n let elementRendered = false\n\n const elementInterval = setInterval(() => {\n if (videoElement === null || videoElement === undefined) {\n console.log('rendering element')\n } else {\n console.log('element rendered')\n elementRendered = true\n videoElement.srcObject = stream\n setTimeout(() => {\n videoElement.play()\n init()\n }, 500)\n clearInterval(elementInterval)\n }\n }, 100)\n }\n\n async function init() {\n let isFaceDetectorLoaded = false\n\n // faceDetectionTimeout = setTimeout(() => {\n // faceDetectionTimeout = null\n // if (!isFaceDetectorLoaded) {\n // clearInterval(interval)\n // stopFaceDetection = true\n // setFrontal(true)\n // setLoading(false)\n // setLoadingText('')\n // }\n // }, 1000 * 10)\n\n await faceapi.nets.tinyFaceDetector.loadFromUri(\n 'https://skyc-cdn-prod.vishwamcorp.com/apis/models/'\n )\n await faceapi.nets.faceLandmark68TinyNet.loadFromUri(\n 'https://skyc-cdn-prod.vishwamcorp.com/apis/models/'\n )\n\n isFaceDetectorLoaded = true\n\n setTimeout(runFaceDetection, 500)\n\n setLoading(false)\n setLoadingText('')\n }\n\n async function runFaceDetection() {\n if (!stopFaceDetection) {\n const detection = await detectFace()\n if (detection) {\n const isFrontal = frontalFaceCheck(detection.landmarks.positions)\n if (isFrontal) {\n setFrontal(true)\n } else {\n setFrontal(false)\n }\n } else {\n setFrontal(false)\n }\n }\n\n if (!stopFaceDetection) {\n setTimeout(runFaceDetection, 100)\n }\n }\n\n function trimCanvas(c) {\n var ctx = c.getContext('2d')\n var copy = document.createElement('canvas').getContext('2d')\n var pixels = ctx.getImageData(0, 0, c.width, c.height)\n var l = pixels.data.length\n var i\n var bound = {\n top: null,\n left: null,\n right: null,\n bottom: null\n }\n var x\n var y\n\n // Iterate over every pixel to find the highest\n // and where it ends on every axis ()\n for (i = 0; i < l; i += 4) {\n if (pixels.data[i + 3] !== 0) {\n x = (i / 4) % c.width\n y = ~~(i / 4 / c.width)\n\n if (bound.top === null) {\n bound.top = y\n }\n\n if (bound.left === null) {\n bound.left = x\n } else if (x < bound.left) {\n bound.left = x\n }\n\n if (bound.right === null) {\n bound.right = x\n } else if (bound.right < x) {\n bound.right = x\n }\n\n if (bound.bottom === null) {\n bound.bottom = y\n } else if (bound.bottom < y) {\n bound.bottom = y\n }\n }\n }\n\n // Calculate the height and width of the content\n var trimHeight = bound.bottom - bound.top\n var trimWidth = bound.right - bound.left\n var trimmed = ctx.getImageData(bound.left, bound.top, trimWidth, trimHeight)\n\n copy.canvas.width = trimWidth\n copy.canvas.height = trimHeight\n copy.putImageData(trimmed, 0, 0)\n\n // Return trimmed canvas\n return copy.canvas\n }\n\n function captureSnapshot() {\n const videoElement = webcamRef.current\n if (videoElement != null) {\n const hiddenCanvas = document.getElementById('hidden-canvas')\n hiddenCanvas.setAttribute('width', videoElement.offsetWidth)\n hiddenCanvas.setAttribute(\n 'height',\n videoElement.videoHeight /\n (videoElement.videoWidth / videoElement.offsetWidth)\n )\n const ctx = hiddenCanvas.getContext('2d')\n const destWidth = 450\n const destHeight = 450\n var sourceWidth = videoElement.videoWidth\n var sourceHeight = videoElement.videoHeight\n\n var ratio = sourceWidth / destWidth\n\n ctx.canvas.width = destWidth\n ctx.canvas.height = destHeight\n\n ctx.translate(ctx.canvas.width, 0)\n ctx.scale(-1, 1)\n\n ctx.drawImage(\n videoElement,\n sourceWidth / 2 - (destWidth / 2) * ratio,\n sourceHeight / 2 - (destHeight / 2) * ratio,\n destWidth * ratio,\n destHeight * ratio,\n 0,\n 0,\n destWidth,\n destHeight\n )\n\n var trimmedCanvas = trimCanvas(hiddenCanvas)\n\n var imageData = trimmedCanvas.toDataURL('image/png')\n\n stopCamera()\n\n return imageData\n }\n }\n\n async function resizeImage(base64, height, width) {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n const canvasCopy = document.createElement('canvas')\n const copyContext = canvasCopy.getContext('2d')\n\n const img = new Image()\n img.src = base64\n\n img.onload = () => {\n canvasCopy.width = img.width\n canvasCopy.height = img.height\n copyContext.drawImage(img, 0, 0)\n\n canvas.width = width\n canvas.height = height\n ctx.drawImage(\n canvasCopy,\n 0,\n 0,\n canvasCopy.width,\n canvasCopy.height,\n 0,\n 0,\n canvas.width,\n canvas.height\n )\n\n resolve(canvas.toDataURL())\n }\n })\n }\n\n return (\n <Fragment>\n {loading ? (\n <LoadingContainer>\n <Loader\n style={{\n width: '50%',\n margin: 'auto'\n }}\n />\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: isMobile ? '-100%' : '-25%',\n marginBottom: '0',\n fontWeight: '400',\n color: '#0e0e0e'\n }}\n >\n {loadingText}\n </Text>\n </LoadingContainer>\n ) : (\n <Fragment>\n <BrowserView>\n <Container>\n <h1\n style={{\n margin: '4% 0 0 0',\n fontSize: '2em',\n textAlign: 'center'\n }}\n >\n Face Capture\n </h1>\n <Webcam\n id='webcam'\n mirrored\n audio={false}\n ref={webcamRef}\n forceScreenshotSourceSize\n screenshotQuality='1'\n screenshotFormat='image/jpeg'\n videoConstraints={videoConstraints}\n style={{\n margin: '5% 0',\n borderRadius: '50%',\n objectFit: 'cover',\n width: '25%',\n height: '85%',\n border: `3px solid ${frontal ? 'green' : 'red'}`\n }}\n />\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '5%',\n marginBottom: '0',\n fontWeight: '400'\n }}\n >\n {loadingText}\n </Text>\n <Button disabled={disabled || !frontal} onClick={capture}>\n {disabled || frontal ? (\n <EnableCapture\n style={{\n width: '80px',\n height: '80px',\n pointerEvents: 'auto'\n }}\n />\n ) : (\n <DisabledCapture\n style={{\n width: '80px',\n height: '80px',\n pointerEvents: 'none'\n }}\n />\n )}\n </Button>\n </Container>\n </BrowserView>\n <MobileView>\n <MobileContainer>\n <h1\n style={{\n margin: '10% 0 0 0',\n fontSize: '1.8rem',\n textAlign: 'center'\n }}\n >\n Face Capture\n </h1>\n <video\n id='webcam'\n playsInline\n autoPlay\n ref={webcamRef}\n style={{\n margin: '5% 0%',\n borderRadius: '50%',\n objectFit: 'cover',\n height: window.screen.height * 0.37,\n width: window.screen.width * 0.8,\n transform: 'scaleX(-1)',\n border: `3px solid ${frontal ? 'green' : 'red'}`\n }}\n />\n <canvas\n id='hidden-canvas'\n style={{\n display: 'none'\n }}\n />\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '2%',\n marginBottom: '0',\n fontWeight: '400'\n }}\n >\n {loadingText}\n </Text>\n {cameraAvailable ? (\n <div />\n ) : (\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '0',\n marginBottom: '0',\n fontWeight: '400',\n color: '#0e0e0e'\n }}\n >\n Accessing camera.. Please wait..\n </Text>\n )}\n <Button disabled={disabled || !frontal} onClick={capture}>\n {disabled || frontal ? (\n <EnableCapture\n style={{\n width: '80px',\n height: '80px',\n pointerEvents: 'auto'\n }}\n />\n ) : (\n <DisabledCapture\n style={{\n width: '80px',\n height: '80px',\n pointerEvents: 'none'\n }}\n />\n )}\n </Button>\n </MobileContainer>\n </MobileView>\n </Fragment>\n )}\n </Fragment>\n )\n}\n\nconst Container = styled.div`\n display: grid;\n place-items: center;\n`\n\nconst MobileContainer = styled.div`\n display: grid;\n place-items: center;\n`\n\nconst Button = styled.button`\n padding: 10px;\n margin: 10px;\n background-color: inherit;\n border: none;\n cursor: pointer;\n`\n\nconst LoadingContainer = styled.div`\n display: grid;\n place-items: center;\n height: 100vh;\n`\n\nconst Text = styled.h6`\n line-height: 1.5em;\n // height: 5em;\n overflow: hidden;\n text-align: center;\n`\n\nfunction dataURItoBlob(dataURI, imageType) {\n var byteString = atob(dataURI)\n\n var ab = new ArrayBuffer(byteString.length)\n var ia = new Uint8Array(ab)\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i)\n }\n\n var bb = new Blob([ab], { type: imageType })\n return bb\n}\n\nexport { CheckLiveness, callLiveness }\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","/* eslint-disable no-undef */\nimport React, { Fragment, useRef, useCallback, useEffect } from 'react'\nimport Webcam from 'react-webcam'\nimport styled from 'styled-components'\nimport { BrowserView, MobileView, isMobile } from 'react-device-detect'\nimport { ReactComponent as EnableCapture } from './../enabled.svg'\nimport { ReactComponent as DisabledCapture } from './../disabled.svg'\nimport { ReactComponent as Cam } from './../cam.svg'\nimport { request, requestToken } from '../request'\nimport { ReactComponent as Loader } from './../loading.svg'\n\nconst aspectRatios = {\n addhar: 0.625,\n pan: 0.625,\n passport: 0.67,\n voter: 1.2,\n dl: 0.625,\n pwd: 1.414,\n others: 1.414\n}\n\nconst FACING_MODE_USER = 'user'\nconst FACING_MODE_ENVIRONMENT = 'environment'\n\nasync function readDocumentCall(\n url,\n appId,\n referenceId,\n userId,\n decision,\n isBack,\n expiryIn,\n docType,\n documentType,\n img,\n img2,\n type\n) {\n console.log('Initiating API calls')\n const formData = new FormData()\n formData.append('app_id', appId)\n formData.append('referenceId', referenceId)\n formData.append('user_id', userId)\n formData.append('decision', decision)\n formData.append('journey', getJourney(docType))\n formData.append('doc_type', getDocType(docType))\n formData.append('document', documentType)\n formData.append('is_back', isBack)\n formData.append('image', dataURItoBlob(img, type))\n formData.append('image2', dataURItoBlob(img2, type))\n console.log('Performing Token API call')\n const token = await requestToken(url + '/get_auth_token', expiryIn)\n console.log('Performing Read Document API call')\n const resp = await request(url + '/read_document', formData, 'POST', token)\n return resp\n}\n\n// polyfill based on https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n;(function polyfillGetUserMedia() {\n if (typeof window === 'undefined') {\n return\n }\n\n // Older browsers might not implement mediaDevices at all, so we set an empty object first\n if (navigator.mediaDevices === undefined) {\n navigator.mediaDevices = {}\n }\n\n // Some browsers partially implement mediaDevices. We can't just assign an object\n // with getUserMedia as it would overwrite existing properties.\n // Here, we will just add the getUserMedia property if it's missing.\n if (navigator.mediaDevices.getUserMedia === undefined) {\n navigator.mediaDevices.getUserMedia = function (constraints) {\n // First get ahold of the legacy getUserMedia, if present\n const getUserMedia =\n navigator.getUserMedia ||\n navigator.webkitGetUserMedia ||\n navigator.mozGetUserMedia ||\n navigator.msGetUserMedia ||\n navigator.mediaDevices.getUserMedia ||\n navigator.mediaDevices.webkitGetUserMedia ||\n navigator.mediaDevices.mozGetUserMedia ||\n navigator.mediaDevices.msGetUserMedia\n\n // Some browsers just don't implement it - return a rejected promise with an error\n // to keep a consistent interface\n if (!getUserMedia) {\n return Promise.reject(\n new Error('getUserMedia is not implemented in this browser')\n )\n }\n\n // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise\n return new Promise(function (resolve, reject) {\n getUserMedia.call(navigator, constraints, resolve, reject)\n })\n }\n }\n})()\n\nfunction ReadDocument({\n url,\n appId,\n referenceId,\n userId,\n decision,\n isBack,\n expiryIn,\n docType,\n documentType,\n getReadDocumentImage\n}) {\n const webcamRef = useRef()\n\n const [facingMode, setFacingMode] = React.useState(FACING_MODE_ENVIRONMENT)\n const [loading, setLoading] = React.useState(false)\n const [enableCapture, setEnableCapture] = React.useState(true)\n const [cameraAvailable, setCameraAvailable] = React.useState(false)\n const [isOriented, setIsOriented] = React.useState(true)\n\n const videoConstraints = {\n audio: false,\n video: {\n facingMode: facingMode\n },\n advanced:[\n {\n width: {\n exact:1920\n }\n }\n ]\n }\n\n // useEffect(() => {\n // return () => {\n // // clearInterval(interval)\n // window.removeEventListener('deviceorientation', handleOrientation, true)\n // videoStream.getTracks().forEach(function (track) {\n // track.stop()\n // })\n // }\n // }, [])\n\n let videoStream = null\n let camFacingMode = FACING_MODE_ENVIRONMENT\n\n let isCameraOpened = false\n\n const handleClick = React.useCallback(async () => {\n const videoElement = webcamRef.current\n\n if (camFacingMode === FACING_MODE_ENVIRONMENT) {\n camFacingMode = FACING_MODE_USER\n // videoElement.style.transform = 'scaleX(-1)'\n } else {\n camFacingMode = FACING_MODE_ENVIRONMENT\n // videoElement.style.transform = 'none'\n }\n\n setFacingMode(camFacingMode)\n\n console.log(facingMode)\n\n const videoTracks = videoStream.getVideoTracks()\n if (videoTracks.length === 0) {\n return\n }\n\n videoTracks.forEach(function (track: { stop: () => void }) {\n track.stop()\n })\n\n try {\n videoStream = await navigator.mediaDevices.getUserMedia(videoConstraints)\n videoElement.srcObject = videoStream\n } catch (err) {\n console.log(err)\n alert(err.toString())\n }\n }, [])\n\n const capture = useCallback(async () => {\n console.log('Capture clicked')\n setLoading(true)\n // const imgStr = webcamRef.current.getScreenshot()\n const imgStr = isMobile\n ? await captureSnapshot()\n : webcamRef.current.getScreenshot()\n\n console.log('Image capture succeeded')\n const img = imgStr.split(',')[1]\n const mimeString = imgStr.split(',')[0].split(':')[1].split(';')[0]\n const img2Str = await resizeImage(imgStr, 224, 224)\n const img2 = img2Str.split(',')[1]\n const response = await readDocumentCall(\n url,\n appId,\n referenceId,\n userId,\n decision,\n isBack,\n expiryIn,\n docType,\n documentType,\n img,\n img2,\n mimeString\n )\n response.image = img\n response.type = mimeString\n getReadDocumentImage(response)\n setLoading(false)\n }, [webcamRef])\n\n useEffect(() => {\n console.log('Vishwam SDK initialized')\n // prepareFaceDetector()\n\n if (typeof DeviceMotionEvent.requestPermission === 'function') {\n DeviceOrientationEvent.requestPermission()\n .then((response) => {\n console.log(response)\n if (response === 'granted') {\n window.addEventListener(\n 'deviceorientation',\n handleOrientation,\n true\n )\n setIsOriented(true)\n initUIandCamera()\n } else {\n }\n })\n .catch((err) => {\n console.log(err)\n setIsOriented(false)\n })\n } else {\n setIsOriented(true)\n initUIandCamera()\n if (typeof DeviceOrientationEvent !== 'undefined') {\n window.addEventListener('deviceorientation', handleOrientation, true)\n } else {\n window.addEventListener('orientationchange', handleOrientationIos, true)\n }\n }\n\n // if (isMobile) {\n // const videoElement = webcamRef.current\n // videoElement.style.height =\n // aspectRatios[docType] * videoElement.offsetWidth + 'px'\n // videoElement.style.minHeight =\n // aspectRatios[docType] * videoElement.offsetWidth + 'px'\n // startCamera()\n // }\n }, [webcamRef])\n\n function startCamera() {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n console.log('enumerateDevices() not supported.')\n }\n\n // List cameras and microphones.\n\n navigator.mediaDevices\n .enumerateDevices()\n .then(function (devices) {\n devices.forEach(function (device) {\n console.log(\n device.kind + ': ' + device.label + ' id = ' + device.deviceId\n )\n })\n })\n .catch(function (err) {\n console.log(err)\n })\n\n const supportedConstraints =\n navigator.mediaDevices.getSupportedConstraints()\n\n console.log('supported constraints: ', supportedConstraints)\n\n navigator.mediaDevices\n .getUserMedia({\n audio: false,\n video: {\n facingMode: facingMode\n }\n })\n .then((stream) => {\n webcamRef.current.srcObject = stream\n videoStream = stream\n setCameraAvailable(true)\n isCameraOpened = true\n webcamRef.current.play()\n // detectPhoneTilt()\n })\n .catch((err) => {\n console.log(err)\n console.log(err.name)\n const errString = err.toString()\n setCameraAvailable(false)\n isCameraOpened = false\n\n if (errString.includes('NotReadableError')) {\n setTimeout(() => {\n startCamera()\n }, 1000)\n } else if (err.name === 'NotAllowedError') {\n console.log('Camera Permission denied')\n const errObj = {\n status: 'failed',\n error: err.name,\n message: 'Camera Permission Denied'\n }\n getReadDocumentImage(errObj)\n } else {\n alert(`getUserMedia error: ${err.toString()}`)\n }\n })\n }\n\n function initUIandCamera() {\n setTimeout(() => {\n if (isMobile) {\n const videoElement = webcamRef.current\n videoElement.style.height =\n aspectRatios[docType] * videoElement.offsetWidth + 'px'\n videoElement.style.minHeight =\n aspectRatios[docType] * videoElement.offsetWidth + 'px'\n startCamera()\n }\n }, 500)\n }\n\n function detectPhoneTilt() {\n // setIsOriented(true)\n // initUIandCamera()\n // window.addEventListener('deviceorientation', handleOrientation, true)\n // return\n console.log('type of DeviceOrientationEvent', typeof DeviceOrientationEvent)\n\n if (typeof DeviceMotionEvent.requestPermission === 'function') {\n console.log('Requesting device orientation')\n DeviceOrientationEvent.requestPermission()\n .then((response) => {\n console.log('Device orientation request response', response)\n if (response === 'granted') {\n window.addEventListener(\n 'deviceorientation',\n handleOrientation,\n true\n )\n setIsOriented(true)\n initUIandCamera()\n } else {\n alert('Device motion detection rejected')\n const errObj = {\n status: 'Failed',\n error: 'Device motion detection access rejected'\n }\n getReadDocumentImage(errObj)\n }\n })\n .catch((err) => {\n console.log('Device orientation request error', err)\n getReadDocumentImage(err)\n })\n } else {\n setIsOriented(true)\n initUIandCamera()\n if (typeof DeviceOrientationEvent !== 'undefined') {\n window.addEventListener('deviceorientation', handleOrientation, true)\n } else {\n window.addEventListener('orientationchange', handleOrientationIos, true)\n }\n }\n }\n\n function handleOrientation(event) {\n const beta = event.beta // vertical angle\n const gamma = event.gamma // horizontal angle\n\n const pitch = 10\n const roll = 10\n\n if (camFacingMode === FACING_MODE_ENVIRONMENT) {\n if (\n beta > 0 - pitch &&\n beta < pitch &&\n gamma > 0 - roll &&\n gamma < roll\n ) {\n enableDocCapture()\n } else {\n disableDocCapture()\n }\n } else {\n enableDocCapture()\n }\n }\n\n function handleOrientationIos(event) {\n console.log('Orientation Ios', event)\n }\n\n function enableDocCapture() {\n console.log('is camera available - ', isCameraOpened)\n if (isCameraOpened) {\n setEnableCapture(true)\n } else {\n setEnableCapture(false)\n }\n }\n\n function disableDocCapture() {\n setEnableCapture(false)\n }\n\n async function captureSnapshot() {\n const videoElement = webcamRef.current\n if (videoElement != null) {\n console.log('Initiating capture')\n window.removeEventListener('deviceorientation', handleOrientation, true)\n const videoHeight = videoElement.offsetWidth * aspectRatios[docType]\n const hiddenCanvas = document.getElementById('hidden-canvas')\n hiddenCanvas.setAttribute('width', videoElement.offsetWidth)\n hiddenCanvas.setAttribute('height', videoHeight)\n const ctx = hiddenCanvas.getContext('2d')\n let destWidth = videoElement.videoWidth\n let destHeight = videoElement.videoWidth * aspectRatios[docType]\n var sourceWidth = videoElement.videoWidth\n var sourceHeight = videoElement.videoHeight\n\n var ratio = sourceWidth / destWidth\n ctx.canvas.width = destWidth\n ctx.canvas.height = destHeight\n\n if (facingMode === FACING_MODE_USER) {\n ctx.translate(ctx.canvas.width, 0)\n ctx.scale(-1, 1)\n }\n\n console.log('Capturing the document with aspect ratio')\n\n if (docType === 'pwd' || docType === 'others') {\n destWidth = destWidth * 0.5\n destHeight = destWidth * aspectRatios[docType]\n ctx.canvas.width = destWidth\n ctx.canvas.height = destHeight\n ctx.drawImage(\n videoElement,\n 0,\n 0,\n sourceWidth,\n sourceHeight,\n 0,\n 0,\n destWidth,\n destHeight\n )\n } else {\n ctx.drawImage(\n videoElement,\n sourceWidth / 2 - (destWidth / 2) * ratio,\n sourceHeight / 2 - (destHeight / 2) * ratio,\n destWidth * ratio,\n destHeight * ratio,\n 0,\n 0,\n destWidth,\n destHeight\n )\n }\n\n var imageData = hiddenCanvas.toDataURL('image/png')\n\n let imageStr\n\n if (docType === 'pwd' || docType === 'others') {\n imageStr = await resizeImage(imageData, destHeight, destWidth)\n } else {\n imageStr = imageData\n }\n\n console.log('Returing captured image: ' + imageStr)\n\n stopCamera()\n\n return imageStr\n }\n }\n\n function stopCamera() {\n const videoElement = webcamRef.current\n if (videoElement) {\n videoElement.pause()\n }\n if (videoStream) {\n videoStream.getTracks().forEach(function (track) {\n track.stop()\n })\n }\n }\n\n async function resizeImage(base64, height, width) {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n const canvasCopy = document.createElement('canvas')\n const copyContext = canvasCopy.getContext('2d')\n\n const img = new Image()\n img.src = base64\n\n img.onload = () => {\n canvasCopy.width = img.width\n canvasCopy.height = img.height\n copyContext.drawImage(img, 0, 0)\n\n canvas.width = width\n canvas.height = height\n ctx.drawImage(\n canvasCopy,\n 0,\n 0,\n canvasCopy.width,\n canvasCopy.height,\n 0,\n 0,\n canvas.width,\n canvas.height\n )\n\n resolve(canvas.toDataURL())\n }\n })\n }\n\n return (\n <Fragment>\n {loading ? (\n <LoadingContainer>\n <Loader\n style={{\n width: '50%',\n margin: 'auto'\n }}\n />\n <Text\n style={{\n width: '50%',\n fontSize: '1rem',\n marginTop: isMobile ? '-100%' : '-25%',\n marginBottom: '0',\n fontWeight: '400',\n color: '#0e0e0e'\n }}\n >\n Please wait while we process the image\n </Text>\n </LoadingContainer>\n ) : (\n <Fragment>\n <BrowserView>\n <Container>\n <h1\n style={{\n margin: '4% 0 4% 0',\n fontSize: '2em',\n textAlign: 'center'\n }}\n >\n {' '}\n Capture Document{' '}\n </h1>\n <Webcam\n id='video'\n forceScreenshotSourceSize\n audio={false}\n ref={webcamRef}\n width={isMobile ? screen.width : screen.width / 3}\n screenshotQuality='1'\n screenshotFormat='image/jpeg'\n videoConstraints={{\n ...videoConstraints,\n facingMode\n }}\n />\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '5%',\n marginBottom: '0',\n fontWeight: '400',\n color: `${enableCapture ? '#0e0e0e' : '#FF422C'}`\n }}\n >\n {enableCapture\n ? 'Make sure your document is without any glare and is fully inside'\n : 'Hold the phone flat while capturing. Do not tilt the phone while capturing.'}\n </Text>\n <Flex style={{ marginTop: '-4%' }}>\n <Button onClick={capture}>\n <EnableCapture\n style={{\n width: '80px',\n height: '80px',\n pointerEvents: 'auto'\n }}\n />\n </Button>\n <Button onClick={handleClick}>\n <Cam\n style={{ width: '100%', height: '80%', objectFit: 'cover' }}\n />\n </Button>\n </Flex>\n </Container>\n </BrowserView>\n <MobileView>\n {isOriented ? (\n <MobileContainer style={{ width: '100%' }}>\n <h1\n style={{\n margin: '5% 0 0 0',\n fontSize: '1.8rem',\n textAlign: 'center'\n }}\n >\n {' '}\n Capture Document{' '}\n </h1>\n <video\n style={{\n margin: '5% 0 5% 0',\n objectFit: 'cover',\n transform: `${\n facingMode === FACING_MODE_USER ? 'scaleX(-1)' : 'none'\n }`\n }}\n id='video'\n ref={webcamRef}\n playsInline\n autoPlay\n width={isMobile ? screen.width * 0.85 : screen.width / 3}\n />\n <canvas\n id='hidden-canvas'\n style={{\n display: 'none'\n }}\n />\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '2%',\n marginBottom: '0',\n fontWeight: '400',\n color: `${enableCapture ? '#0e0e0e' : '#FF422C'}`\n }}\n >\n {enableCapture\n ? 'Make sure your document is without any glare and is fully inside'\n : 'Hold the phone flat while capturing. Do not tilt the phone while capturing.'}\n </Text>\n {cameraAvailable ? (\n <div />\n ) : (\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '0',\n marginBottom: '0',\n fontWeight: '400',\n color: '#0e0e0e'\n }}\n >\n Accessing camera.. Please wait..\n </Text>\n )}\n <div\n id='capture-container'\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n {/* <div> */}\n {/* <Cam */}\n {/* style={{ */}\n {/* width: '25%', */}\n {/* height: '25%', */}\n {/* visibility: 'hidden', */}\n {/* pointerEvents: 'none', */}\n {/* objectFit: 'cover' */}\n {/* }} */}\n {/* /> */}\n {/* </div> */}\n <Button onClick={capture} disabled={!enableCapture}>\n {enableCapture ? (\n <EnableCapture\n style={{\n width: '70px',\n height: '70px',\n pointerEvents: 'auto'\n }}\n />\n ) : (\n <DisabledCapture\n style={{\n width: '70px',\n height: '70px',\n pointerEvents: 'none'\n }}\n />\n )}\n </Button>\n {/* <Button onClick={handleClick}> */}\n {/* <Cam */}\n {/* style={{ */}\n {/* width: '40%', */}\n {/* height: '40%', */}\n {/* objectFit: 'cover' */}\n {/* }} */}\n {/* /> */}\n {/* </Button> */}\n </div>\n </MobileContainer>\n ) : (\n <Fragment>\n <div\n style={{\n margin: '40% auto 0',\n textAlign: 'center'\n }}\n >\n <h3>\n Please allow device motion detection to capture document\n </h3>\n <button\n style={{\n margin: '5% auto 0',\n backgroundColor: '#4a6eff',\n borderColor: '#4a6eff',\n color: '#fff',\n borderRadius: '15px',\n padding: '10px 15px'\n }}\n onClick={detectPhoneTilt}\n >\n Allow device motion\n </button>\n </div>\n </Fragment>\n )}\n </MobileView>\n </Fragment>\n )}\n </Fragment>\n )\n}\n\nconst Container = styled.div`\n display: grid;\n place-items: center;\n`\n\nconst MobileContainer = styled.div`\n display: grid;\n place-items: center;\n`\n\nconst Text = styled.h6`\n line-height: 1.5em;\n height: 5em;\n overflow: hidden;\n text-align: center;\n`\n\nconst Flex = styled.div`\n display: flex;\n width: 20%;\n`\n\nconst Button = styled.button`\n padding: 5px;\n margin: 5px;\n background-color: inherit;\n border: none;\n cursor: pointer;\n`\n\nconst LoadingContainer = styled.div`\n display: grid;\n place-items: center;\n height: 100vh;\n`\n\nfunction dataURItoBlob(dataURI, imageType) {\n var byteString = atob(dataURI)\n\n var ab = new ArrayBuffer(byteString.length)\n var ia = new Uint8Array(ab)\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i)\n }\n\n var bb = new Blob([ab], { type: imageType })\n return bb\n}\n\nfunction getDocType(docType) {\n switch (docType) {\n case 'addhar':\n return '1'\n case 'pan':\n return '2'\n case 'voter':\n return '4'\n case 'passport':\n return '3'\n case 'pwd':\n return 'pwd'\n case 'dl':\n return '5'\n case 'others':\n return 'others'\n default:\n return '1'\n }\n}\n\nfunction getJourney(docType) {\n return 'na'\n}\nexport { ReadDocument }\n","import * as faceapi from 'face-api.js'\n\nexport function prepareFaceDetector() {\n console.log('loading models')\n Promise.all([\n faceapi.nets.tinyFaceDetector.loadFromUri(\n 'https://skyc-cdn-prod.vishwamcorp.com/apis/models/'\n ),\n // faceapi.nets.faceLandmark68Net.loadFromUri('../models'),\n faceapi.nets.faceLandmark68TinyNet.loadFromUri(\n 'https://skyc-cdn-prod.vishwamcorp.com/apis/models/'\n )\n ]).then((data) => {\n console.log('loaded models')\n const baseImage = new Image()\n baseImage.src = `data:image/png;base64,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`\n baseImage.onload = async function () {\n console.log('loaded base image')\n const options = new faceapi.TinyFaceDetectorOptions()\n const useTinyModel = true\n\n console.log('calling face detector')\n\n let detection = null\n\n const startTime = new Date()\n\n detection = await faceapi\n .detectSingleFace(baseImage, options)\n .withFaceLandmarks(useTinyModel)\n\n const timeTaken = new Date() - startTime\n\n console.log('Time taken for first detection', timeTaken)\n }\n })\n}\n","import { request, requestToken } from '../request'\n\nexport async function faceMatch(\n url,\n referenceId,\n userId,\n appId,\n matchType,\n image,\n image2,\n imageType\n) {\n // eslint-disable-next-line no-undef\n const formData = new FormData()\n\n formData.append('referenceId', referenceId)\n formData.append('user_id', userId)\n formData.append('app_id', appId)\n formData.append('match_type', matchType)\n formData.append('image', dataURItoBlob(image, imageType))\n formData.append('image2', dataURItoBlob(image2, imageType))\n const token = await requestToken(url + '/get_auth_token', '1h')\n const resp = await request(url + '/face_match', formData, 'POST', token)\n return resp\n}\n\nfunction dataURItoBlob(dataURI, imageType) {\n var byteString = atob(dataURI)\n\n var ab = new ArrayBuffer(byteString.length)\n var ia = new Uint8Array(ab)\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i)\n }\n\n var bb = new Blob([ab], { type: imageType })\n return bb\n}\n"],"names":["requestToken","url","expiry","formData","FormData","append","fetch","body","method","response","json","token","request","payload","console","log","headers","Headers","Authorization","text","string","JSON","parse","callLiveness","appId","userId","referenceId","captureType","eyesCheck","storeId","whiteBackground","expiryIn","img","img2","imageType","dataURItoBlob","videoConstraints","audio","video","facingMode","frontalFaceCheck","landmarks","length","leftEyeCenter","x","y","rightEyeCenter","faceMiddlePoint","ratio","polyfillGetUserMedia","window","navigator","mediaDevices","undefined","getUserMedia","constraints","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","Promise","reject","Error","resolve","call","CheckLiveness","resizeImage","base64","height","width","canvas","document","createElement","ctx","getContext","canvasCopy","copyContext","Image","src","onload","drawImage","toDataURL","runFaceDetection","stopFaceDetection","setTimeout","detectFace","detection","isFrontal","positions","setFrontal","init","isFaceDetectorLoaded","faceapi","tinyFaceDetector","loadFromUri","faceLandmark68TinyNet","setLoading","setLoadingText","startCamera","enumerateDevices","then","devices","forEach","device","kind","label","deviceId","err","name","message","stream","videoStream","setCameraAvailable","handleSuccess","errString","toString","includes","errObj","status","error","getLivenessResponse","alert","videoEl","getElementById","options","withFaceLandmarks","webcamRef","useRef","useState","disabled","setDisabled","frontal","loading","React","cameraAvailable","loadingText","interval","capture","useCallback","imageSrc","isMobile","captureSnapshot","current","getScreenshot","imageResized","split","mimeString","imgStr","clearInterval","livenessImage","livenessImageType","useEffect","getTracks","track","stop","initModels","stopCamera","videoElement","pause","elementInterval","setInterval","elementRendered","srcObject","play","trimCanvas","c","copy","pixels","getImageData","l","data","i","bound","top","left","right","bottom","trimHeight","trimWidth","trimmed","putImageData","hiddenCanvas","setAttribute","offsetWidth","videoHeight","videoWidth","destWidth","destHeight","sourceWidth","sourceHeight","translate","scale","trimmedCanvas","imageData","Fragment","Loader","margin","fontSize","marginTop","marginBottom","fontWeight","color","BrowserView","textAlign","borderRadius","objectFit","border","EnableCapture","pointerEvents","DisabledCapture","MobileView","screen","transform","display","Container","styled","div","MobileContainer","Button","button","LoadingContainer","Text","h6","dataURI","byteString","atob","ab","ArrayBuffer","ia","Uint8Array","charCodeAt","bb","Blob","type","readDocumentCall","decision","isBack","docType","documentType","getJourney","getDocType","aspectRatios","addhar","pan","passport","voter","dl","pwd","others","FACING_MODE_USER","FACING_MODE_ENVIRONMENT","ReadDocument","imageStr","removeEventListener","handleOrientation","getReadDocumentImage","setFacingMode","enableCapture","setEnableCapture","isOriented","setIsOriented","advanced","exact","camFacingMode","isCameraOpened","handleClick","videoTracks","getVideoTracks","img2Str","image","DeviceMotionEvent","requestPermission","DeviceOrientationEvent","addEventListener","initUIandCamera","handleOrientationIos","supportedConstraints","getSupportedConstraints","style","minHeight","detectPhoneTilt","event","beta","gamma","pitch","roll","enableDocCapture","disableDocCapture","Cam","alignItems","justifyContent","backgroundColor","borderColor","padding","Flex","prepareFaceDetector","all","baseImage","useTinyModel","startTime","Date","timeTaken","faceMatch","matchType","image2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/request.js","../src/components/CheckLiveness.js","../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/components/ReadDocument.js","../src/components/Init.js","../src/components/FaceMatch.js"],"sourcesContent":["/* eslint-disable no-undef */\nexport async function request(url, payload, method, token) {\n console.log(url, payload, method, token)\n const response = await fetch(url, {\n body: payload,\n method: method,\n // eslint-disable-next-line no-undef\n headers: new Headers({\n Authorization: 'Bearer ' + token\n })\n })\n const string = await response.text()\n const json = string === '' ? {} : JSON.parse(string)\n return json\n}\n\nexport async function requestToken(url, expiry) {\n // eslint-disable-next-line no-undef\n const formData = new FormData()\n formData.append('expiry_at', expiry)\n formData.append('app_id', 'jio_re-vef')\n formData.append('app_key', 'dmlzaHdhbS1zZWxma3lj')\n formData.append('send_token', '1')\n\n const response = await fetch(url, { body: formData, method: 'POST' })\n const json = await response.json()\n return json.token\n}\n","/* eslint-disable no-undef */\nimport React, {\n Fragment,\n useRef,\n useCallback,\n useState,\n useEffect\n} from 'react'\nimport Webcam from 'react-webcam'\nimport styled from 'styled-components'\nimport { BrowserView, MobileView, isMobile } from 'react-device-detect'\nimport { request, requestToken } from '../request'\nimport * as faceapi from 'face-api.js'\nimport { ReactComponent as EnableCapture } from './../enabled.svg'\nimport { ReactComponent as DisabledCapture } from './../disabled.svg'\nimport { ReactComponent as Loader } from './../loading.svg'\n\nconst videoConstraints = {\n audio: false,\n video: {\n facingMode: 'user'\n }\n}\n\nfunction frontalFaceCheck(landmarks) {\n if (!landmarks || landmarks.length < 68) {\n return false\n }\n\n const leftEyeCenter = {\n x: (landmarks[36].x + landmarks[39].x) / 2,\n y: (landmarks[36].y + landmarks[39].y) / 2\n }\n\n const rightEyeCenter = {\n x: (landmarks[42].x + landmarks[45].x) / 2,\n y: (landmarks[42].y + landmarks[45].y) / 2\n }\n\n const faceMiddlePoint = {\n x: (leftEyeCenter.x + rightEyeCenter.x) / 2,\n y: (leftEyeCenter.y + rightEyeCenter.y) / 2\n }\n\n const ratio = {\n x:\n (rightEyeCenter.x - landmarks[30].x) /\n (landmarks[30].x - leftEyeCenter.x),\n y:\n (landmarks[66].y - landmarks[30].y) /\n (landmarks[30].y - faceMiddlePoint.y)\n }\n\n if (ratio.x > 0.75 && ratio.x < 1.33 && ratio.y > 0.56 && ratio.y < 1.56) {\n return true\n }\n\n return false\n}\n\nasync function callLiveness(\n url,\n appId,\n userId,\n referenceId,\n captureType,\n eyesCheck,\n storeId,\n whiteBackground,\n expiryIn,\n img,\n img2,\n imageType\n) {\n const formData = new FormData()\n formData.append('image', dataURItoBlob(img2, imageType))\n formData.append('image2', dataURItoBlob(img, imageType))\n formData.append('app_id', appId)\n formData.append('user_id', userId)\n formData.append('referenceId', referenceId)\n formData.append('capture_type', captureType)\n formData.append('eyesCheck', eyesCheck)\n formData.append('store_id', storeId)\n formData.append('whiteBackground', whiteBackground)\n\n console.log('Performing Token API call')\n\n const token = await requestToken(url + '/get_auth_token', expiryIn)\n\n console.log('Performing Read Document API call')\n\n const response = await request(\n url + '/check_liveness',\n formData,\n 'POST',\n token\n )\n return response\n}\n\n// polyfill based on https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n;(function polyfillGetUserMedia() {\n if (typeof window === 'undefined') {\n return\n }\n\n // Older browsers might not implement mediaDevices at all, so we set an empty object first\n if (navigator.mediaDevices === undefined) {\n navigator.mediaDevices = {}\n }\n\n // Some browsers partially implement mediaDevices. We can't just assign an object\n // with getUserMedia as it would overwrite existing properties.\n // Here, we will just add the getUserMedia property if it's missing.\n if (navigator.mediaDevices.getUserMedia === undefined) {\n navigator.mediaDevices.getUserMedia = function (constraints) {\n // First get ahold of the legacy getUserMedia, if present\n const getUserMedia =\n navigator.getUserMedia ||\n navigator.webkitGetUserMedia ||\n navigator.mozGetUserMedia ||\n navigator.msGetUserMedia\n\n // Some browsers just don't implement it - return a rejected promise with an error\n // to keep a consistent interface\n if (!getUserMedia) {\n return Promise.reject(\n new Error('getUserMedia is not implemented in this browser')\n )\n }\n\n // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise\n return new Promise(function (resolve, reject) {\n getUserMedia.call(navigator, constraints, resolve, reject)\n })\n }\n }\n})()\n\nfunction CheckLiveness({\n url,\n appId,\n userId,\n referenceId,\n captureType,\n eyesCheck,\n storeId,\n whiteBackground,\n expiryIn,\n getLivenessResponse\n}) {\n const webcamRef = useRef()\n const [disabled, setDisabled] = useState(false)\n const [frontal, setFrontal] = useState(false)\n const [loading, setLoading] = useState(false)\n const [cameraAvailable, setCameraAvailable] = React.useState(false)\n const [loadingText, setLoadingText] = useState(\n 'Please wait, while the face detector is initializing'\n )\n\n let interval\n\n const faceDetectionTimeout = null\n\n let videoStream = null\n\n let stopFaceDetection = false\n\n const capture = useCallback(async () => {\n setLoadingText('Please wait while we process the image')\n setLoading(true)\n\n stopFaceDetection = true\n\n const imageSrc = isMobile\n ? captureSnapshot()\n : webcamRef.current.getScreenshot({\n width: 450,\n height: 450\n })\n const imageResized = await resizeImage(imageSrc, 450, 450)\n const img = imageResized.split(',')[1]\n const mimeString = imageSrc.split(',')[0].split(':')[1].split(';')[0]\n const imgStr = await resizeImage(imageSrc, 224, 224)\n const img2 = imgStr.split(',')[1]\n clearInterval(interval)\n\n const response = await callLiveness(\n url,\n appId,\n userId,\n referenceId,\n captureType,\n eyesCheck,\n storeId,\n whiteBackground,\n expiryIn,\n img,\n img2,\n mimeString\n )\n response.livenessImage = img\n response.livenessImageType = mimeString\n getLivenessResponse(response)\n setLoading(false)\n response.status === 'success' && setDisabled(true)\n }, [webcamRef])\n\n useEffect(() => {\n return () => {\n clearInterval(interval)\n stopFaceDetection = true\n if (faceDetectionTimeout) {\n clearTimeout(faceDetectionTimeout)\n }\n console.log('came here return')\n if(!videoStream) {\n videoStream.getTracks().forEach(function (track) {\n track.stop()\n })\n }\n }\n }, [])\n\n async function detectFace() {\n const videoEl = document.getElementById('webcam')\n const options = new faceapi.TinyFaceDetectorOptions()\n const result = await faceapi\n .detectSingleFace(videoEl, options)\n .withFaceLandmarks(true)\n return result\n }\n\n useEffect(() => {\n setTimeout(() => {\n if (isMobile) {\n startCamera()\n } else {\n init()\n }\n }, 500)\n }, [])\n\n async function startCamera() {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n console.log('enumerateDevices() not supported.')\n }\n\n // List cameras and microphones.\n\n navigator.mediaDevices\n .enumerateDevices()\n .then(function (devices) {\n devices.forEach(function (device) {\n console.log(\n device.kind + ': ' + device.label + ' id = ' + device.deviceId\n )\n })\n })\n .catch(function (err) {\n console.log(err.name + ': ' + err.message)\n })\n\n navigator.mediaDevices\n .getUserMedia(videoConstraints)\n .then((stream) => {\n videoStream = stream\n setCameraAvailable(true)\n handleSuccess(stream)\n })\n .catch((err) => {\n console.log(err)\n const errString = err.toString()\n if (errString.includes('NotReadableError')) {\n setTimeout(() => {\n startCamera()\n }, 1000)\n } else if (err.name === 'NotAllowedError') {\n console.log('Camera Permission denied')\n const errObj = {\n status: 'failed',\n error: err.name,\n message: 'Camera Permission Denied'\n }\n getLivenessResponse(errObj)\n } else {\n alert(`getUserMedia error: ${err.toString()}`)\n }\n })\n }\n\n function stopCamera() {\n // const videoElement = document.getElementById('webcam')\n clearInterval(interval)\n stopFaceDetection = true\n const videoElement = webcamRef.current\n videoElement.pause()\n videoStream.getTracks().forEach(function (track) {\n track.stop()\n })\n }\n\n function handleSuccess(stream) {\n const videoElement = webcamRef.current\n\n // eslint-disable-next-line no-unused-vars\n let elementRendered = false\n\n const elementInterval = setInterval(() => {\n if (videoElement === null || videoElement === undefined) {\n console.log('rendering element')\n } else {\n console.log('element rendered')\n elementRendered = true\n videoElement.srcObject = stream\n setTimeout(() => {\n videoElement.play()\n init()\n }, 500)\n clearInterval(elementInterval)\n }\n }, 100)\n }\n\n async function init() {\n let isFaceDetectorLoaded = false\n\n // faceDetectionTimeout = setTimeout(() => {\n // faceDetectionTimeout = null\n // if (!isFaceDetectorLoaded) {\n // clearInterval(interval)\n // stopFaceDetection = true\n // setFrontal(true)\n // setLoading(false)\n // setLoadingText('')\n // }\n // }, 1000 * 10)\n\n await faceapi.nets.tinyFaceDetector.loadFromUri(\n 'https://skyc-cdn-prod.vishwamcorp.com/apis/models/'\n )\n await faceapi.nets.faceLandmark68TinyNet.loadFromUri(\n 'https://skyc-cdn-prod.vishwamcorp.com/apis/models/'\n )\n\n isFaceDetectorLoaded = true\n\n setTimeout(runFaceDetection, 500)\n\n setLoading(false)\n setLoadingText('')\n }\n\n async function runFaceDetection() {\n if (!stopFaceDetection) {\n const detection = await detectFace()\n if (detection) {\n const isFrontal = frontalFaceCheck(detection.landmarks.positions)\n if (isFrontal) {\n setFrontal(true)\n } else {\n setFrontal(false)\n }\n } else {\n setFrontal(false)\n }\n }\n\n if (!stopFaceDetection) {\n setTimeout(runFaceDetection, 100)\n }\n }\n\n function trimCanvas(c) {\n var ctx = c.getContext('2d')\n var copy = document.createElement('canvas').getContext('2d')\n var pixels = ctx.getImageData(0, 0, c.width, c.height)\n var l = pixels.data.length\n var i\n var bound = {\n top: null,\n left: null,\n right: null,\n bottom: null\n }\n var x\n var y\n\n // Iterate over every pixel to find the highest\n // and where it ends on every axis ()\n for (i = 0; i < l; i += 4) {\n if (pixels.data[i + 3] !== 0) {\n x = (i / 4) % c.width\n y = ~~(i / 4 / c.width)\n\n if (bound.top === null) {\n bound.top = y\n }\n\n if (bound.left === null) {\n bound.left = x\n } else if (x < bound.left) {\n bound.left = x\n }\n\n if (bound.right === null) {\n bound.right = x\n } else if (bound.right < x) {\n bound.right = x\n }\n\n if (bound.bottom === null) {\n bound.bottom = y\n } else if (bound.bottom < y) {\n bound.bottom = y\n }\n }\n }\n\n // Calculate the height and width of the content\n var trimHeight = bound.bottom - bound.top\n var trimWidth = bound.right - bound.left\n var trimmed = ctx.getImageData(bound.left, bound.top, trimWidth, trimHeight)\n\n copy.canvas.width = trimWidth\n copy.canvas.height = trimHeight\n copy.putImageData(trimmed, 0, 0)\n\n // Return trimmed canvas\n return copy.canvas\n }\n\n function captureSnapshot() {\n const videoElement = webcamRef.current\n if (videoElement != null) {\n const hiddenCanvas = document.getElementById('hidden-canvas')\n hiddenCanvas.setAttribute('width', videoElement.offsetWidth)\n hiddenCanvas.setAttribute(\n 'height',\n videoElement.videoHeight /\n (videoElement.videoWidth / videoElement.offsetWidth)\n )\n const ctx = hiddenCanvas.getContext('2d')\n const destWidth = 450\n const destHeight = 450\n var sourceWidth = videoElement.videoWidth\n var sourceHeight = videoElement.videoHeight\n\n var ratio = sourceWidth / destWidth\n\n ctx.canvas.width = destWidth\n ctx.canvas.height = destHeight\n\n ctx.translate(ctx.canvas.width, 0)\n ctx.scale(-1, 1)\n\n ctx.drawImage(\n videoElement,\n sourceWidth / 2 - (destWidth / 2) * ratio,\n sourceHeight / 2 - (destHeight / 2) * ratio,\n destWidth * ratio,\n destHeight * ratio,\n 0,\n 0,\n destWidth,\n destHeight\n )\n\n var trimmedCanvas = trimCanvas(hiddenCanvas)\n\n var imageData = trimmedCanvas.toDataURL('image/png')\n\n stopCamera()\n\n return imageData\n }\n }\n\n async function resizeImage(base64, height, width) {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n const canvasCopy = document.createElement('canvas')\n const copyContext = canvasCopy.getContext('2d')\n\n const img = new Image()\n img.src = base64\n\n img.onload = () => {\n canvasCopy.width = img.width\n canvasCopy.height = img.height\n copyContext.drawImage(img, 0, 0)\n\n canvas.width = width\n canvas.height = height\n ctx.drawImage(\n canvasCopy,\n 0,\n 0,\n canvasCopy.width,\n canvasCopy.height,\n 0,\n 0,\n canvas.width,\n canvas.height\n )\n\n resolve(canvas.toDataURL())\n }\n })\n }\n\n return (\n <Fragment>\n {loading ? (\n <LoadingContainer>\n <Loader\n style={{\n width: '50%',\n margin: 'auto'\n }}\n />\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: isMobile ? '-100%' : '-25%',\n marginBottom: '0',\n fontWeight: '400',\n color: '#0e0e0e'\n }}\n >\n {loadingText}\n </Text>\n </LoadingContainer>\n ) : (\n <Fragment>\n <BrowserView>\n <Container>\n <h1\n style={{\n margin: '4% 0 0 0',\n fontSize: '2em',\n textAlign: 'center'\n }}\n >\n Face Capture\n </h1>\n <Webcam\n id='webcam'\n mirrored\n audio={false}\n ref={webcamRef}\n forceScreenshotSourceSize\n screenshotQuality='1'\n screenshotFormat='image/jpeg'\n videoConstraints={videoConstraints}\n style={{\n margin: '5% 0',\n borderRadius: '50%',\n objectFit: 'cover',\n width: '25%',\n height: '85%',\n border: `3px solid ${frontal ? 'green' : 'red'}`\n }}\n />\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '5%',\n marginBottom: '0',\n fontWeight: '400'\n }}\n >\n {loadingText}\n </Text>\n <Button disabled={disabled || !frontal} onClick={capture}>\n {disabled || frontal ? (\n <EnableCapture\n style={{\n width: '80px',\n height: '80px',\n pointerEvents: 'auto'\n }}\n />\n ) : (\n <DisabledCapture\n style={{\n width: '80px',\n height: '80px',\n pointerEvents: 'none'\n }}\n />\n )}\n </Button>\n </Container>\n </BrowserView>\n <MobileView>\n <MobileContainer>\n <h1\n style={{\n margin: '10% 0 0 0',\n fontSize: '1.8rem',\n textAlign: 'center'\n }}\n >\n Face Capture\n </h1>\n <video\n id='webcam'\n playsInline\n autoPlay\n ref={webcamRef}\n style={{\n margin: '5% 0%',\n borderRadius: '50%',\n objectFit: 'cover',\n height: window.screen.height * 0.37,\n width: window.screen.width * 0.8,\n transform: 'scaleX(-1)',\n border: `3px solid ${frontal ? 'green' : 'red'}`\n }}\n />\n <canvas\n id='hidden-canvas'\n style={{\n display: 'none'\n }}\n />\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '2%',\n marginBottom: '0',\n fontWeight: '400'\n }}\n >\n {loadingText}\n </Text>\n {cameraAvailable ? (\n <div />\n ) : (\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '0',\n marginBottom: '0',\n fontWeight: '400',\n color: '#0e0e0e'\n }}\n >\n Accessing camera.. Please wait..\n </Text>\n )}\n <Button disabled={disabled || !frontal} onClick={capture}>\n {disabled || frontal ? (\n <EnableCapture\n style={{\n width: '80px',\n height: '80px',\n pointerEvents: 'auto'\n }}\n />\n ) : (\n <DisabledCapture\n style={{\n width: '80px',\n height: '80px',\n pointerEvents: 'none'\n }}\n />\n )}\n </Button>\n </MobileContainer>\n </MobileView>\n </Fragment>\n )}\n </Fragment>\n )\n}\n\nconst Container = styled.div`\n display: grid;\n place-items: center;\n`\n\nconst MobileContainer = styled.div`\n display: grid;\n place-items: center;\n`\n\nconst Button = styled.button`\n padding: 10px;\n margin: 10px;\n background-color: inherit;\n border: none;\n cursor: pointer;\n`\n\nconst LoadingContainer = styled.div`\n display: grid;\n place-items: center;\n height: 100vh;\n`\n\nconst Text = styled.h6`\n line-height: 1.5em;\n // height: 5em;\n overflow: hidden;\n text-align: center;\n`\n\nfunction dataURItoBlob(dataURI, imageType) {\n var byteString = atob(dataURI)\n\n var ab = new ArrayBuffer(byteString.length)\n var ia = new Uint8Array(ab)\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i)\n }\n\n var bb = new Blob([ab], { type: imageType })\n return bb\n}\n\nexport { CheckLiveness, callLiveness }\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","/* eslint-disable no-undef */\nimport React, { Fragment, useRef, useCallback, useEffect } from 'react'\nimport Webcam from 'react-webcam'\nimport styled from 'styled-components'\nimport { BrowserView, MobileView, isMobile } from 'react-device-detect'\nimport { ReactComponent as EnableCapture } from './../enabled.svg'\nimport { ReactComponent as DisabledCapture } from './../disabled.svg'\nimport { ReactComponent as Cam } from './../cam.svg'\nimport { request, requestToken } from '../request'\nimport { ReactComponent as Loader } from './../loading.svg'\n\nconst aspectRatios = {\n addhar: 0.625,\n pan: 0.625,\n passport: 0.67,\n voter: 1.2,\n dl: 0.625,\n pwd: 1.414,\n others: 1.414\n}\n\nconst FACING_MODE_USER = 'user'\nconst FACING_MODE_ENVIRONMENT = 'environment'\n\nasync function readDocumentCall(\n url,\n appId,\n referenceId,\n userId,\n decision,\n isBack,\n expiryIn,\n docType,\n documentType,\n img,\n img2,\n type\n) {\n console.log('Initiating API calls')\n const formData = new FormData()\n formData.append('app_id', appId)\n formData.append('referenceId', referenceId)\n formData.append('user_id', userId)\n formData.append('decision', decision)\n formData.append('journey', getJourney(docType))\n formData.append('doc_type', getDocType(docType))\n formData.append('document', documentType)\n formData.append('is_back', isBack)\n formData.append('image', dataURItoBlob(img, type))\n formData.append('image2', dataURItoBlob(img2, type))\n console.log('Performing Token API call')\n const token = await requestToken(url + '/get_auth_token', expiryIn)\n console.log('Performing Read Document API call')\n const resp = await request(url + '/read_document', formData, 'POST', token)\n return resp\n}\n\n// polyfill based on https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n;(function polyfillGetUserMedia() {\n if (typeof window === 'undefined') {\n return\n }\n\n // Older browsers might not implement mediaDevices at all, so we set an empty object first\n if (navigator.mediaDevices === undefined) {\n navigator.mediaDevices = {}\n }\n\n // Some browsers partially implement mediaDevices. We can't just assign an object\n // with getUserMedia as it would overwrite existing properties.\n // Here, we will just add the getUserMedia property if it's missing.\n if (navigator.mediaDevices.getUserMedia === undefined) {\n navigator.mediaDevices.getUserMedia = function (constraints) {\n // First get ahold of the legacy getUserMedia, if present\n const getUserMedia =\n navigator.getUserMedia ||\n navigator.webkitGetUserMedia ||\n navigator.mozGetUserMedia ||\n navigator.msGetUserMedia ||\n navigator.mediaDevices.getUserMedia ||\n navigator.mediaDevices.webkitGetUserMedia ||\n navigator.mediaDevices.mozGetUserMedia ||\n navigator.mediaDevices.msGetUserMedia\n\n // Some browsers just don't implement it - return a rejected promise with an error\n // to keep a consistent interface\n if (!getUserMedia) {\n return Promise.reject(\n new Error('getUserMedia is not implemented in this browser')\n )\n }\n\n // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise\n return new Promise(function (resolve, reject) {\n getUserMedia.call(navigator, constraints, resolve, reject)\n })\n }\n }\n})()\n\nfunction ReadDocument({\n url,\n appId,\n referenceId,\n userId,\n decision,\n isBack,\n expiryIn,\n docType,\n documentType,\n getReadDocumentImage\n}) {\n const webcamRef = useRef()\n\n const [facingMode, setFacingMode] = React.useState(FACING_MODE_ENVIRONMENT)\n const [loading, setLoading] = React.useState(false)\n const [enableCapture, setEnableCapture] = React.useState(true)\n const [cameraAvailable, setCameraAvailable] = React.useState(false)\n const [isOriented, setIsOriented] = React.useState(true)\n\n const videoConstraints = {\n audio: false,\n video: {\n facingMode: facingMode\n },\n advanced:[\n {\n width: {\n exact:1920\n }\n }\n ]\n }\n\n // useEffect(() => {\n // return () => {\n // // clearInterval(interval)\n // window.removeEventListener('deviceorientation', handleOrientation, true)\n // videoStream.getTracks().forEach(function (track) {\n // track.stop()\n // })\n // }\n // }, [])\n\n let videoStream = null\n let camFacingMode = FACING_MODE_ENVIRONMENT\n\n let isCameraOpened = false\n\n const handleClick = React.useCallback(async () => {\n const videoElement = webcamRef.current\n\n if (camFacingMode === FACING_MODE_ENVIRONMENT) {\n camFacingMode = FACING_MODE_USER\n // videoElement.style.transform = 'scaleX(-1)'\n } else {\n camFacingMode = FACING_MODE_ENVIRONMENT\n // videoElement.style.transform = 'none'\n }\n\n setFacingMode(camFacingMode)\n\n console.log(facingMode)\n\n const videoTracks = videoStream.getVideoTracks()\n if (videoTracks.length === 0) {\n return\n }\n\n videoTracks.forEach(function (track: { stop: () => void }) {\n track.stop()\n })\n\n try {\n videoStream = await navigator.mediaDevices.getUserMedia(videoConstraints)\n videoElement.srcObject = videoStream\n } catch (err) {\n console.log(err)\n alert(err.toString())\n }\n }, [])\n\n const capture = useCallback(async () => {\n console.log('Capture clicked')\n setLoading(true)\n // const imgStr = webcamRef.current.getScreenshot()\n const imgStr = isMobile\n ? await captureSnapshot()\n : webcamRef.current.getScreenshot()\n\n console.log('Image capture succeeded')\n const img = imgStr.split(',')[1]\n const mimeString = imgStr.split(',')[0].split(':')[1].split(';')[0]\n const img2Str = await resizeImage(imgStr, 224, 224)\n const img2 = img2Str.split(',')[1]\n const response = await readDocumentCall(\n url,\n appId,\n referenceId,\n userId,\n decision,\n isBack,\n expiryIn,\n docType,\n documentType,\n img,\n img2,\n mimeString\n )\n response.image = img\n response.type = mimeString\n getReadDocumentImage(response)\n setLoading(false)\n }, [webcamRef])\n\n useEffect(() => {\n console.log('Vishwam SDK initialized')\n // prepareFaceDetector()\n\n if (typeof DeviceMotionEvent.requestPermission === 'function') {\n DeviceOrientationEvent.requestPermission()\n .then((response) => {\n console.log(response)\n if (response === 'granted') {\n window.addEventListener(\n 'deviceorientation',\n handleOrientation,\n true\n )\n setIsOriented(true)\n initUIandCamera()\n } else {\n }\n })\n .catch((err) => {\n console.log(err)\n setIsOriented(false)\n })\n } else {\n setIsOriented(true)\n initUIandCamera()\n if (typeof DeviceOrientationEvent !== 'undefined') {\n window.addEventListener('deviceorientation', handleOrientation, true)\n } else {\n window.addEventListener('orientationchange', handleOrientationIos, true)\n }\n }\n\n // if (isMobile) {\n // const videoElement = webcamRef.current\n // videoElement.style.height =\n // aspectRatios[docType] * videoElement.offsetWidth + 'px'\n // videoElement.style.minHeight =\n // aspectRatios[docType] * videoElement.offsetWidth + 'px'\n // startCamera()\n // }\n }, [webcamRef])\n\n function startCamera() {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n console.log('enumerateDevices() not supported.')\n }\n\n // List cameras and microphones.\n\n navigator.mediaDevices\n .enumerateDevices()\n .then(function (devices) {\n devices.forEach(function (device) {\n console.log(\n device.kind + ': ' + device.label + ' id = ' + device.deviceId\n )\n })\n })\n .catch(function (err) {\n console.log(err)\n })\n\n const supportedConstraints =\n navigator.mediaDevices.getSupportedConstraints()\n\n console.log('supported constraints: ', supportedConstraints)\n\n navigator.mediaDevices\n .getUserMedia({\n audio: false,\n video: {\n facingMode: facingMode\n }\n })\n .then((stream) => {\n webcamRef.current.srcObject = stream\n videoStream = stream\n setCameraAvailable(true)\n isCameraOpened = true\n webcamRef.current.play()\n // detectPhoneTilt()\n })\n .catch((err) => {\n console.log(err)\n console.log(err.name)\n const errString = err.toString()\n setCameraAvailable(false)\n isCameraOpened = false\n\n if (errString.includes('NotReadableError')) {\n setTimeout(() => {\n startCamera()\n }, 1000)\n } else if (err.name === 'NotAllowedError') {\n console.log('Camera Permission denied')\n const errObj = {\n status: 'failed',\n error: err.name,\n message: 'Camera Permission Denied'\n }\n getReadDocumentImage(errObj)\n } else {\n alert(`getUserMedia error: ${err.toString()}`)\n }\n })\n }\n\n function initUIandCamera() {\n setTimeout(() => {\n if (isMobile) {\n const videoElement = webcamRef.current\n videoElement.style.height =\n aspectRatios[docType] * videoElement.offsetWidth + 'px'\n videoElement.style.minHeight =\n aspectRatios[docType] * videoElement.offsetWidth + 'px'\n startCamera()\n }\n }, 500)\n }\n\n function detectPhoneTilt() {\n // setIsOriented(true)\n // initUIandCamera()\n // window.addEventListener('deviceorientation', handleOrientation, true)\n // return\n console.log('type of DeviceOrientationEvent', typeof DeviceOrientationEvent)\n\n if (typeof DeviceMotionEvent.requestPermission === 'function') {\n console.log('Requesting device orientation')\n DeviceOrientationEvent.requestPermission()\n .then((response) => {\n console.log('Device orientation request response', response)\n if (response === 'granted') {\n window.addEventListener(\n 'deviceorientation',\n handleOrientation,\n true\n )\n setIsOriented(true)\n initUIandCamera()\n } else {\n alert('Device motion detection rejected')\n const errObj = {\n status: 'Failed',\n error: 'Device motion detection access rejected'\n }\n getReadDocumentImage(errObj)\n }\n })\n .catch((err) => {\n console.log('Device orientation request error', err)\n getReadDocumentImage(err)\n })\n } else {\n setIsOriented(true)\n initUIandCamera()\n if (typeof DeviceOrientationEvent !== 'undefined') {\n window.addEventListener('deviceorientation', handleOrientation, true)\n } else {\n window.addEventListener('orientationchange', handleOrientationIos, true)\n }\n }\n }\n\n function handleOrientation(event) {\n const beta = event.beta // vertical angle\n const gamma = event.gamma // horizontal angle\n\n const pitch = 10\n const roll = 10\n\n if (camFacingMode === FACING_MODE_ENVIRONMENT) {\n if (\n beta > 0 - pitch &&\n beta < pitch &&\n gamma > 0 - roll &&\n gamma < roll\n ) {\n enableDocCapture()\n } else {\n disableDocCapture()\n }\n } else {\n enableDocCapture()\n }\n }\n\n function handleOrientationIos(event) {\n console.log('Orientation Ios', event)\n }\n\n function enableDocCapture() {\n console.log('is camera available - ', isCameraOpened)\n if (isCameraOpened) {\n setEnableCapture(true)\n } else {\n setEnableCapture(false)\n }\n }\n\n function disableDocCapture() {\n setEnableCapture(false)\n }\n\n async function captureSnapshot() {\n const videoElement = webcamRef.current\n if (videoElement != null) {\n console.log('Initiating capture')\n window.removeEventListener('deviceorientation', handleOrientation, true)\n const videoHeight = videoElement.offsetWidth * aspectRatios[docType]\n const hiddenCanvas = document.getElementById('hidden-canvas')\n hiddenCanvas.setAttribute('width', videoElement.offsetWidth)\n hiddenCanvas.setAttribute('height', videoHeight)\n const ctx = hiddenCanvas.getContext('2d')\n let destWidth = videoElement.videoWidth\n let destHeight = videoElement.videoWidth * aspectRatios[docType]\n var sourceWidth = videoElement.videoWidth\n var sourceHeight = videoElement.videoHeight\n\n var ratio = sourceWidth / destWidth\n ctx.canvas.width = destWidth\n ctx.canvas.height = destHeight\n\n if (facingMode === FACING_MODE_USER) {\n ctx.translate(ctx.canvas.width, 0)\n ctx.scale(-1, 1)\n }\n\n console.log('Capturing the document with aspect ratio')\n\n if (docType === 'pwd' || docType === 'others') {\n destWidth = destWidth * 0.5\n destHeight = destWidth * aspectRatios[docType]\n ctx.canvas.width = destWidth\n ctx.canvas.height = destHeight\n ctx.drawImage(\n videoElement,\n 0,\n 0,\n sourceWidth,\n sourceHeight,\n 0,\n 0,\n destWidth,\n destHeight\n )\n } else {\n ctx.drawImage(\n videoElement,\n sourceWidth / 2 - (destWidth / 2) * ratio,\n sourceHeight / 2 - (destHeight / 2) * ratio,\n destWidth * ratio,\n destHeight * ratio,\n 0,\n 0,\n destWidth,\n destHeight\n )\n }\n\n var imageData = hiddenCanvas.toDataURL('image/png')\n\n let imageStr\n\n if (docType === 'pwd' || docType === 'others') {\n imageStr = await resizeImage(imageData, destHeight, destWidth)\n } else {\n imageStr = imageData\n }\n\n console.log('Returing captured image: ' + imageStr)\n\n stopCamera()\n\n return imageStr\n }\n }\n\n function stopCamera() {\n const videoElement = webcamRef.current\n if (videoElement) {\n videoElement.pause()\n }\n if (videoStream) {\n videoStream.getTracks().forEach(function (track) {\n track.stop()\n })\n }\n }\n\n async function resizeImage(base64, height, width) {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n const canvasCopy = document.createElement('canvas')\n const copyContext = canvasCopy.getContext('2d')\n\n const img = new Image()\n img.src = base64\n\n img.onload = () => {\n canvasCopy.width = img.width\n canvasCopy.height = img.height\n copyContext.drawImage(img, 0, 0)\n\n canvas.width = width\n canvas.height = height\n ctx.drawImage(\n canvasCopy,\n 0,\n 0,\n canvasCopy.width,\n canvasCopy.height,\n 0,\n 0,\n canvas.width,\n canvas.height\n )\n\n resolve(canvas.toDataURL())\n }\n })\n }\n\n return (\n <Fragment>\n {loading ? (\n <LoadingContainer>\n <Loader\n style={{\n width: '50%',\n margin: 'auto'\n }}\n />\n <Text\n style={{\n width: '50%',\n fontSize: '1rem',\n marginTop: isMobile ? '-100%' : '-25%',\n marginBottom: '0',\n fontWeight: '400',\n color: '#0e0e0e'\n }}\n >\n Please wait while we process the image\n </Text>\n </LoadingContainer>\n ) : (\n <Fragment>\n <BrowserView>\n <Container>\n <h1\n style={{\n margin: '4% 0 4% 0',\n fontSize: '2em',\n textAlign: 'center'\n }}\n >\n {' '}\n Capture Document{' '}\n </h1>\n <Webcam\n id='video'\n forceScreenshotSourceSize\n audio={false}\n ref={webcamRef}\n width={isMobile ? screen.width : screen.width / 3}\n screenshotQuality='1'\n screenshotFormat='image/jpeg'\n videoConstraints={{\n ...videoConstraints,\n facingMode\n }}\n />\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '5%',\n marginBottom: '0',\n fontWeight: '400',\n color: `${enableCapture ? '#0e0e0e' : '#FF422C'}`\n }}\n >\n {enableCapture\n ? 'Make sure your document is without any glare and is fully inside'\n : 'Hold the phone flat while capturing. Do not tilt the phone while capturing.'}\n </Text>\n <Flex style={{ marginTop: '-4%' }}>\n <Button onClick={capture}>\n <EnableCapture\n style={{\n width: '80px',\n height: '80px',\n pointerEvents: 'auto'\n }}\n />\n </Button>\n <Button onClick={handleClick}>\n <Cam\n style={{ width: '100%', height: '80%', objectFit: 'cover' }}\n />\n </Button>\n </Flex>\n </Container>\n </BrowserView>\n <MobileView>\n {isOriented ? (\n <MobileContainer style={{ width: '100%' }}>\n <h1\n style={{\n margin: '5% 0 0 0',\n fontSize: '1.8rem',\n textAlign: 'center'\n }}\n >\n {' '}\n Capture Document{' '}\n </h1>\n <video\n style={{\n margin: '5% 0 5% 0',\n objectFit: 'cover',\n transform: `${\n facingMode === FACING_MODE_USER ? 'scaleX(-1)' : 'none'\n }`\n }}\n id='video'\n ref={webcamRef}\n playsInline\n autoPlay\n width={isMobile ? screen.width * 0.85 : screen.width / 3}\n />\n <canvas\n id='hidden-canvas'\n style={{\n display: 'none'\n }}\n />\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '2%',\n marginBottom: '0',\n fontWeight: '400',\n color: `${enableCapture ? '#0e0e0e' : '#FF422C'}`\n }}\n >\n {enableCapture\n ? 'Make sure your document is without any glare and is fully inside'\n : 'Hold the phone flat while capturing. Do not tilt the phone while capturing.'}\n </Text>\n {cameraAvailable ? (\n <div />\n ) : (\n <Text\n style={{\n width: '75%',\n fontSize: '1rem',\n marginTop: '0',\n marginBottom: '0',\n fontWeight: '400',\n color: '#0e0e0e'\n }}\n >\n Accessing camera.. Please wait..\n </Text>\n )}\n <div\n id='capture-container'\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n >\n {/* <div> */}\n {/* <Cam */}\n {/* style={{ */}\n {/* width: '25%', */}\n {/* height: '25%', */}\n {/* visibility: 'hidden', */}\n {/* pointerEvents: 'none', */}\n {/* objectFit: 'cover' */}\n {/* }} */}\n {/* /> */}\n {/* </div> */}\n <Button onClick={capture} disabled={!enableCapture}>\n {enableCapture ? (\n <EnableCapture\n style={{\n width: '70px',\n height: '70px',\n pointerEvents: 'auto'\n }}\n />\n ) : (\n <DisabledCapture\n style={{\n width: '70px',\n height: '70px',\n pointerEvents: 'none'\n }}\n />\n )}\n </Button>\n {/* <Button onClick={handleClick}> */}\n {/* <Cam */}\n {/* style={{ */}\n {/* width: '40%', */}\n {/* height: '40%', */}\n {/* objectFit: 'cover' */}\n {/* }} */}\n {/* /> */}\n {/* </Button> */}\n </div>\n </MobileContainer>\n ) : (\n <Fragment>\n <div\n style={{\n margin: '40% auto 0',\n textAlign: 'center'\n }}\n >\n <h3>\n Please allow device motion detection to capture document\n </h3>\n <button\n style={{\n margin: '5% auto 0',\n backgroundColor: '#4a6eff',\n borderColor: '#4a6eff',\n color: '#fff',\n borderRadius: '15px',\n padding: '10px 15px'\n }}\n onClick={detectPhoneTilt}\n >\n Allow device motion\n </button>\n </div>\n </Fragment>\n )}\n </MobileView>\n </Fragment>\n )}\n </Fragment>\n )\n}\n\nconst Container = styled.div`\n display: grid;\n place-items: center;\n`\n\nconst MobileContainer = styled.div`\n display: grid;\n place-items: center;\n`\n\nconst Text = styled.h6`\n line-height: 1.5em;\n height: 5em;\n overflow: hidden;\n text-align: center;\n`\n\nconst Flex = styled.div`\n display: flex;\n width: 20%;\n`\n\nconst Button = styled.button`\n padding: 5px;\n margin: 5px;\n background-color: inherit;\n border: none;\n cursor: pointer;\n`\n\nconst LoadingContainer = styled.div`\n display: grid;\n place-items: center;\n height: 100vh;\n`\n\nfunction dataURItoBlob(dataURI, imageType) {\n var byteString = atob(dataURI)\n\n var ab = new ArrayBuffer(byteString.length)\n var ia = new Uint8Array(ab)\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i)\n }\n\n var bb = new Blob([ab], { type: imageType })\n return bb\n}\n\nfunction getDocType(docType) {\n switch (docType) {\n case 'addhar':\n return '1'\n case 'pan':\n return '2'\n case 'voter':\n return '4'\n case 'passport':\n return '3'\n case 'pwd':\n return 'pwd'\n case 'dl':\n return '5'\n case 'others':\n return 'others'\n default:\n return '1'\n }\n}\n\nfunction getJourney(docType) {\n return 'na'\n}\nexport { ReadDocument }\n","import * as faceapi from 'face-api.js'\n\nexport function prepareFaceDetector() {\n console.log('loading models')\n Promise.all([\n faceapi.nets.tinyFaceDetector.loadFromUri(\n 'https://skyc-cdn-prod.vishwamcorp.com/apis/models/'\n ),\n // faceapi.nets.faceLandmark68Net.loadFromUri('../models'),\n faceapi.nets.faceLandmark68TinyNet.loadFromUri(\n 'https://skyc-cdn-prod.vishwamcorp.com/apis/models/'\n )\n ]).then((data) => {\n console.log('loaded models')\n const baseImage = new Image()\n baseImage.src = `data:image/png;base64,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`\n baseImage.onload = async function () {\n console.log('loaded base image')\n const options = new faceapi.TinyFaceDetectorOptions()\n const useTinyModel = true\n\n console.log('calling face detector')\n\n let detection = null\n\n const startTime = new Date()\n\n detection = await faceapi\n .detectSingleFace(baseImage, options)\n .withFaceLandmarks(useTinyModel)\n\n const timeTaken = new Date() - startTime\n\n console.log('Time taken for first detection', timeTaken)\n }\n })\n}\n","import { request, requestToken } from '../request'\n\nexport async function faceMatch(\n url,\n referenceId,\n userId,\n appId,\n matchType,\n image,\n image2,\n imageType\n) {\n // eslint-disable-next-line no-undef\n const formData = new FormData()\n\n formData.append('referenceId', referenceId)\n formData.append('user_id', userId)\n formData.append('app_id', appId)\n formData.append('match_type', matchType)\n formData.append('image', dataURItoBlob(image, imageType))\n formData.append('image2', dataURItoBlob(image2, imageType))\n const token = await requestToken(url + '/get_auth_token', '1h')\n const resp = await request(url + '/face_match', formData, 'POST', token)\n return resp\n}\n\nfunction dataURItoBlob(dataURI, imageType) {\n var byteString = atob(dataURI)\n\n var ab = new ArrayBuffer(byteString.length)\n var ia = new Uint8Array(ab)\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i)\n }\n\n var bb = new Blob([ab], { type: imageType })\n return bb\n}\n"],"names":["requestToken","url","expiry","formData","FormData","append","fetch","body","method","response","json","token","request","payload","console","log","headers","Headers","Authorization","text","string","JSON","parse","callLiveness","appId","userId","referenceId","captureType","eyesCheck","storeId","whiteBackground","expiryIn","img","img2","imageType","dataURItoBlob","videoConstraints","audio","video","facingMode","frontalFaceCheck","landmarks","length","leftEyeCenter","x","y","rightEyeCenter","faceMiddlePoint","ratio","polyfillGetUserMedia","window","navigator","mediaDevices","undefined","getUserMedia","constraints","webkitGetUserMedia","mozGetUserMedia","msGetUserMedia","Promise","reject","Error","resolve","call","CheckLiveness","resizeImage","base64","height","width","canvas","document","createElement","ctx","getContext","canvasCopy","copyContext","Image","src","onload","drawImage","toDataURL","runFaceDetection","stopFaceDetection","setTimeout","detectFace","detection","isFrontal","positions","setFrontal","init","isFaceDetectorLoaded","faceapi","tinyFaceDetector","loadFromUri","faceLandmark68TinyNet","setLoading","setLoadingText","startCamera","enumerateDevices","then","devices","forEach","device","kind","label","deviceId","err","name","message","stream","videoStream","setCameraAvailable","handleSuccess","errString","toString","includes","errObj","status","error","getLivenessResponse","alert","videoEl","getElementById","options","withFaceLandmarks","webcamRef","useRef","useState","disabled","setDisabled","frontal","loading","React","cameraAvailable","loadingText","interval","capture","useCallback","imageSrc","isMobile","captureSnapshot","current","getScreenshot","imageResized","split","mimeString","imgStr","clearInterval","livenessImage","livenessImageType","useEffect","getTracks","track","stop","stopCamera","videoElement","pause","elementInterval","setInterval","elementRendered","srcObject","play","trimCanvas","c","copy","pixels","getImageData","l","data","i","bound","top","left","right","bottom","trimHeight","trimWidth","trimmed","putImageData","hiddenCanvas","setAttribute","offsetWidth","videoHeight","videoWidth","destWidth","destHeight","sourceWidth","sourceHeight","translate","scale","trimmedCanvas","imageData","Fragment","Loader","margin","fontSize","marginTop","marginBottom","fontWeight","color","BrowserView","textAlign","borderRadius","objectFit","border","EnableCapture","pointerEvents","DisabledCapture","MobileView","screen","transform","display","Container","styled","div","MobileContainer","Button","button","LoadingContainer","Text","h6","dataURI","byteString","atob","ab","ArrayBuffer","ia","Uint8Array","charCodeAt","bb","Blob","type","readDocumentCall","decision","isBack","docType","documentType","getJourney","getDocType","aspectRatios","addhar","pan","passport","voter","dl","pwd","others","FACING_MODE_USER","FACING_MODE_ENVIRONMENT","ReadDocument","imageStr","removeEventListener","handleOrientation","getReadDocumentImage","setFacingMode","enableCapture","setEnableCapture","isOriented","setIsOriented","advanced","exact","camFacingMode","isCameraOpened","handleClick","videoTracks","getVideoTracks","img2Str","image","DeviceMotionEvent","requestPermission","DeviceOrientationEvent","addEventListener","initUIandCamera","handleOrientationIos","supportedConstraints","getSupportedConstraints","style","minHeight","detectPhoneTilt","event","beta","gamma","pitch","roll","enableDocCapture","disableDocCapture","Cam","alignItems","justifyContent","backgroundColor","borderColor","padding","Flex","prepareFaceDetector","all","baseImage","useTinyModel","startTime","Date","timeTaken","faceMatch","matchType","image2"],"mappings":"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"}
|