UNPKG

enface-auth-node1

Version:

Enface biometric authorization library for Node.js (Express) environment

1 lines 51.9 kB
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.EnfaceAuth=t():e.EnfaceAuth=t()}(this,function(){return function(e){var t={};function s(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,s),r.l=!0,r.exports}return s.m=e,s.c=t,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)s.d(n,r,function(t){return e[t]}.bind(null,r));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=16)}([function(e,t,s){"use strict";e.exports={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),EMPTY_BUFFER:Buffer.alloc(0),NOOP:()=>{}}},function(e,t){e.exports=require("crypto")},function(e,t,s){"use strict";const n=s(25),r=s(26),i=s(3),{kStatusCode:o,NOOP:a}=s(0),c=Buffer.from([0,0,255,255]),l=Buffer.from([0]),h=Symbol("permessage-deflate"),u=Symbol("total-length"),f=Symbol("callback"),d=Symbol("buffers"),p=Symbol("error");let _;function m(e){this[d].push(e),this[u]+=e.length}function v(e){this[u]+=e.length,this[h]._maxPayload<1||this[u]<=this[h]._maxPayload?this[d].push(e):(this[p]=new RangeError("Max payload size exceeded"),this[p][o]=1009,this.removeListener("data",v),this.reset())}function g(e){this[h]._inflate=null,e[o]=1007,this[f](e)}e.exports=class{constructor(e,t,s){if(this._maxPayload=0|s,this._options=e||{},this._threshold=void 0!==this._options.threshold?this._options.threshold:1024,this._isServer=!!t,this._deflate=null,this._inflate=null,this.params=null,!_){const e=void 0!==this._options.concurrencyLimit?this._options.concurrencyLimit:10;_=new n({concurrency:e})}}static get extensionName(){return"permessage-deflate"}offer(){const e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:null==this._options.clientMaxWindowBits&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate&&(this._deflate[f]&&this._deflate[f](),this._deflate.close(),this._deflate=null)}acceptAsServer(e){const t=this._options,s=e.find(e=>!(!1===t.serverNoContextTakeover&&e.server_no_context_takeover||e.server_max_window_bits&&(!1===t.serverMaxWindowBits||"number"==typeof t.serverMaxWindowBits&&t.serverMaxWindowBits>e.server_max_window_bits)||"number"==typeof t.clientMaxWindowBits&&!e.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(s.server_no_context_takeover=!0),t.clientNoContextTakeover&&(s.client_no_context_takeover=!0),"number"==typeof t.serverMaxWindowBits&&(s.server_max_window_bits=t.serverMaxWindowBits),"number"==typeof t.clientMaxWindowBits?s.client_max_window_bits=t.clientMaxWindowBits:!0!==s.client_max_window_bits&&!1!==t.clientMaxWindowBits||delete s.client_max_window_bits,s}acceptAsClient(e){const t=e[0];if(!1===this._options.clientNoContextTakeover&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(t.client_max_window_bits){if(!1===this._options.clientMaxWindowBits||"number"==typeof this._options.clientMaxWindowBits&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"')}else"number"==typeof this._options.clientMaxWindowBits&&(t.client_max_window_bits=this._options.clientMaxWindowBits);return t}normalizeParams(e){return e.forEach(e=>{Object.keys(e).forEach(t=>{let s=e[t];if(s.length>1)throw new Error(`Parameter "${t}" must have only a single value`);if(s=s[0],"client_max_window_bits"===t){if(!0!==s){const e=+s;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${s}`);s=e}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}else if("server_max_window_bits"===t){const e=+s;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${s}`);s=e}else{if("client_no_context_takeover"!==t&&"server_no_context_takeover"!==t)throw new Error(`Unknown parameter "${t}"`);if(!0!==s)throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}e[t]=s})}),e}decompress(e,t,s){_.push(n=>{this._decompress(e,t,(e,t)=>{n(),s(e,t)})})}compress(e,t,s){_.push(n=>{this._compress(e,t,(e,t)=>{n(),(e||t)&&s(e,t)})})}_decompress(e,t,s){const n=this._isServer?"client":"server";if(!this._inflate){const e=`${n}_max_window_bits`,t="number"!=typeof this.params[e]?r.Z_DEFAULT_WINDOWBITS:this.params[e];this._inflate=r.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t}),this._inflate[h]=this,this._inflate[u]=0,this._inflate[d]=[],this._inflate.on("error",g),this._inflate.on("data",v)}this._inflate[f]=s,this._inflate.write(e),t&&this._inflate.write(c),this._inflate.flush(()=>{const e=this._inflate[p];if(e)return this._inflate.close(),this._inflate=null,void s(e);const r=i.concat(this._inflate[d],this._inflate[u]);t&&this.params[`${n}_no_context_takeover`]?(this._inflate.close(),this._inflate=null):(this._inflate[u]=0,this._inflate[d]=[]),s(null,r)})}_compress(e,t,s){if(!e||0===e.length)return void process.nextTick(s,null,l);const n=this._isServer?"server":"client";if(!this._deflate){const e=`${n}_max_window_bits`,t="number"!=typeof this.params[e]?r.Z_DEFAULT_WINDOWBITS:this.params[e];this._deflate=r.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t}),this._deflate[u]=0,this._deflate[d]=[],this._deflate.on("error",a),this._deflate.on("data",m)}this._deflate[f]=s,this._deflate.write(e),this._deflate.flush(r.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let e=i.concat(this._deflate[d],this._deflate[u]);t&&(e=e.slice(0,e.length-4)),this._deflate[f]=null,t&&this.params[`${n}_no_context_takeover`]?(this._deflate.close(),this._deflate=null):(this._deflate[u]=0,this._deflate[d]=[]),s(null,e)})}}},function(e,t,s){"use strict";const{EMPTY_BUFFER:n}=s(0);function r(e,t){if(0===e.length)return n;if(1===e.length)return e[0];const s=Buffer.allocUnsafe(t);let r=0;for(let t=0;t<e.length;t++){const n=e[t];n.copy(s,r),r+=n.length}return s}function i(e,t,s,n,r){for(let i=0;i<r;i++)s[n+i]=e[i]^t[3&i]}function o(e,t){const s=e.length;for(let n=0;n<s;n++)e[n]^=t[3&n]}function a(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function c(e){if(c.readOnly=!0,Buffer.isBuffer(e))return e;let t;return e instanceof ArrayBuffer?t=Buffer.from(e):ArrayBuffer.isView(e)?t=function(e){const t=Buffer.from(e.buffer);if(e.byteLength!==e.buffer.byteLength)return t.slice(e.byteOffset,e.byteOffset+e.byteLength);return t}(e):(t=Buffer.from(e),c.readOnly=!1),t}try{const t=s(27),n=t.BufferUtil||t;e.exports={concat:r,mask(e,t,s,r,o){o<48?i(e,t,s,r,o):n.mask(e,t,s,r,o)},toArrayBuffer:a,toBuffer:c,unmask(e,t){e.length<32?o(e,t):n.unmask(e,t)}}}catch(t){e.exports={concat:r,mask:i,toArrayBuffer:a,toBuffer:c,unmask:o}}},function(e,t,s){var n=s(1);e.exports=function(){return n.randomBytes(16)}},function(e,t){for(var s=[],n=0;n<256;++n)s[n]=(n+256).toString(16).substr(1);e.exports=function(e,t){var n=t||0,r=s;return[r[e[n++]],r[e[n++]],r[e[n++]],r[e[n++]],"-",r[e[n++]],r[e[n++]],"-",r[e[n++]],r[e[n++]],"-",r[e[n++]],r[e[n++]],"-",r[e[n++]],r[e[n++]],r[e[n++]],r[e[n++]],r[e[n++]],r[e[n++]]].join("")}},function(e,t,s){"use strict";const n=s(7),r=s(21),i=s(8),o=s(22),a=s(23),{randomBytes:c,createHash:l}=s(1),{URL:h}=s(24),u=s(2),f=s(10),d=s(13),{BINARY_TYPES:p,EMPTY_BUFFER:_,GUID:m,kStatusCode:v,kWebSocket:g,NOOP:y}=s(0),{addEventListener:b,removeEventListener:w}=s(34),{format:S,parse:x}=s(14),{toBuffer:k}=s(3),E=["CONNECTING","OPEN","CLOSING","CLOSED"],C=[8,13],O=3e4;class N extends n{constructor(e,t,s){super(),this.readyState=N.CONNECTING,this.protocol="",this._binaryType=p[0],this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage="",this._closeTimer=null,this._closeCode=1006,this._extensions={},this._receiver=null,this._sender=null,this._socket=null,null!==e?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Array.isArray(t)?t=t.join(", "):"object"==typeof t&&null!==t&&(s=t,t=void 0),function e(t,s,n,o){const a={protocolVersion:C[1],maxPayload:104857600,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...o,createConnection:void 0,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:void 0,auth:void 0,host:void 0,path:void 0,port:void 0};if(!C.includes(a.protocolVersion))throw new RangeError(`Unsupported protocol version: ${a.protocolVersion} `+`(supported versions: ${C.join(", ")})`);let f;s instanceof h?(f=s,t.url=s.href):(f=new h(s),t.url=s);const d="ws+unix:"===f.protocol;if(!(f.host||d&&f.pathname))throw new Error(`Invalid URL: ${t.url}`);const p="wss:"===f.protocol||"https:"===f.protocol;const _=p?443:80;const v=c(16).toString("base64");const g=p?r.get:i.get;let y;a.createConnection=p?A:I;a.defaultPort=a.defaultPort||_;a.port=f.port||_;a.host=f.hostname.startsWith("[")?f.hostname.slice(1,-1):f.hostname;a.headers={"Sec-WebSocket-Version":a.protocolVersion,"Sec-WebSocket-Key":v,Connection:"Upgrade",Upgrade:"websocket",...a.headers};a.path=f.pathname+f.search;a.timeout=a.handshakeTimeout;a.perMessageDeflate&&(y=new u(!0!==a.perMessageDeflate?a.perMessageDeflate:{},!1,a.maxPayload),a.headers["Sec-WebSocket-Extensions"]=S({[u.extensionName]:y.offer()}));n&&(a.headers["Sec-WebSocket-Protocol"]=n);a.origin&&(a.protocolVersion<13?a.headers["Sec-WebSocket-Origin"]=a.origin:a.headers.Origin=a.origin);(f.username||f.password)&&(a.auth=`${f.username}:${f.password}`);if(d){const e=a.path.split(":");a.socketPath=e[0],a.path=e[1]}let b=t._req=g(a);a.timeout&&b.on("timeout",()=>{T(t,b,"Opening handshake has timed out")});b.on("error",e=>{t._req.aborted||(b=t._req=null,t.readyState=N.CLOSING,t.emit("error",e),t.emitClose())});b.on("response",r=>{const i=r.headers.location,c=r.statusCode;if(i&&a.followRedirects&&c>=300&&c<400){if(++t._redirects>a.maxRedirects)return void T(t,b,"Maximum redirects exceeded");b.abort();const r=new h(i,s);e(t,r,n,o)}else t.emit("unexpected-response",b,r)||T(t,b,`Unexpected server response: ${r.statusCode}`)});b.on("upgrade",(e,s,r)=>{if(t.emit("upgrade",e),t.readyState!==N.CONNECTING)return;b=t._req=null;const i=l("sha1").update(v+m).digest("base64");if(e.headers["sec-websocket-accept"]!==i)return void T(t,s,"Invalid Sec-WebSocket-Accept header");const o=e.headers["sec-websocket-protocol"],c=(n||"").split(/, */);let h;if(!n&&o?h="Server sent a subprotocol but none was requested":n&&!o?h="Server sent no subprotocol":o&&!c.includes(o)&&(h="Server sent an invalid subprotocol"),h)T(t,s,h);else{if(o&&(t.protocol=o),y)try{const n=x(e.headers["sec-websocket-extensions"]);n[u.extensionName]&&(y.accept(n[u.extensionName]),t._extensions[u.extensionName]=y)}catch(e){return void T(t,s,"Invalid Sec-WebSocket-Extensions header")}t.setSocket(s,r,a.maxPayload)}})}(this,e,t,s)):this._isServer=!0}get CONNECTING(){return N.CONNECTING}get CLOSING(){return N.CLOSING}get CLOSED(){return N.CLOSED}get OPEN(){return N.OPEN}get binaryType(){return this._binaryType}set binaryType(e){p.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?(this._socket.bufferSize||0)+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}setSocket(e,t,s){const n=new f(this._binaryType,this._extensions,s);this._sender=new d(e,this._extensions),this._receiver=n,this._socket=e,n[g]=this,e[g]=this,n.on("conclude",M),n.on("drain",R),n.on("error",U),n.on("message",P),n.on("ping",D),n.on("pong",j),e.setTimeout(0),e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",W),e.on("data",F),e.on("end",$),e.on("error",q),this.readyState=N.OPEN,this.emit("open")}emitClose(){this.readyState=N.CLOSED,this._socket?(this._extensions[u.extensionName]&&this._extensions[u.extensionName].cleanup(),this._receiver.removeAllListeners(),this.emit("close",this._closeCode,this._closeMessage)):this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==N.CLOSED){if(this.readyState===N.CONNECTING){const e="WebSocket was closed before the connection was established";return T(this,this._req,e)}this.readyState!==N.CLOSING?(this.readyState=N.CLOSING,this._sender.close(e,t,!this._isServer,e=>{e||(this._closeFrameSent=!0,this._closeFrameReceived&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),O)):this._closeFrameSent&&this._closeFrameReceived&&this._socket.end()}}ping(e,t,s){if(this.readyState===N.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(s=e,e=t=void 0):"function"==typeof t&&(s=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===N.OPEN?(void 0===t&&(t=!this._isServer),this._sender.ping(e||_,t,s)):B(this,e,s)}pong(e,t,s){if(this.readyState===N.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(s=e,e=t=void 0):"function"==typeof t&&(s=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===N.OPEN?(void 0===t&&(t=!this._isServer),this._sender.pong(e||_,t,s)):B(this,e,s)}send(e,t,s){if(this.readyState===N.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if("function"==typeof t&&(s=t,t={}),"number"==typeof e&&(e=e.toString()),this.readyState!==N.OPEN)return void B(this,e,s);const n={binary:"string"!=typeof e,mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[u.extensionName]||(n.compress=!1),this._sender.send(e||_,n,s)}terminate(){if(this.readyState!==N.CLOSED){if(this.readyState===N.CONNECTING){const e="WebSocket was closed before the connection was established";return T(this,this._req,e)}this._socket&&(this.readyState=N.CLOSING,this._socket.destroy())}}}function I(e){return e.path=e.socketPath,o.connect(e)}function A(e){return e.path=void 0,e.servername||""===e.servername||(e.servername=e.host),a.connect(e)}function T(e,t,s){e.readyState=N.CLOSING;const n=new Error(s);Error.captureStackTrace(n,T),t.setHeader?(t.abort(),t.once("abort",e.emitClose.bind(e)),e.emit("error",n)):(t.destroy(n),t.once("error",e.emit.bind(e,"error")),t.once("close",e.emitClose.bind(e)))}function B(e,t,s){if(t){const s=k(t).length;e._socket?e._sender._bufferedBytes+=s:e._bufferedAmount+=s}if(s){s(new Error(`WebSocket is not open: readyState ${e.readyState} `+`(${E[e.readyState]})`))}}function M(e,t){const s=this[g];s._socket.removeListener("data",F),s._socket.resume(),s._closeFrameReceived=!0,s._closeMessage=t,s._closeCode=e,1005===e?s.close():s.close(e,t)}function R(){this[g]._socket.resume()}function U(e){const t=this[g];t._socket.removeListener("data",F),t.readyState=N.CLOSING,t._closeCode=e[v],t.emit("error",e),t._socket.destroy()}function L(){this[g].emitClose()}function P(e){this[g].emit("message",e)}function D(e){const t=this[g];t.pong(e,!t._isServer,y),t.emit("ping",e)}function j(e){this[g].emit("pong",e)}function W(){const e=this[g];this.removeListener("close",W),this.removeListener("end",$),e.readyState=N.CLOSING,e._socket.read(),e._receiver.end(),this.removeListener("data",F),this[g]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on("error",L),e._receiver.on("finish",L))}function F(e){this[g]._receiver.write(e)||this.pause()}function $(){const e=this[g];e.readyState=N.CLOSING,e._receiver.end(),this.end()}function q(){const e=this[g];this.removeListener("error",q),this.on("error",y),e&&(e.readyState=N.CLOSING,this.destroy())}E.forEach((e,t)=>{N[e]=t}),["open","error","close","message"].forEach(e=>{Object.defineProperty(N.prototype,`on${e}`,{get(){const t=this.listeners(e);for(let e=0;e<t.length;e++)if(t[e]._listener)return t[e]._listener},set(t){const s=this.listeners(e);for(let t=0;t<s.length;t++)s[t]._listener&&this.removeListener(e,s[t]);this.addEventListener(e,t)}})}),N.prototype.addEventListener=b,N.prototype.removeEventListener=w,e.exports=N},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("http")},function(e,t,s){var n=s(28),r=s(29),i=s(30),o=require,a=process.versions.modules,c=!(!process.versions||!process.versions.electron)||!!Object({NODE_ENV:"production"}).ELECTRON_RUN_AS_NODE||"undefined"!=typeof window&&window.process&&"renderer"===window.process.type?"electron":"node",l=i.arch(),h=i.platform();function u(e){return o(u.path(e))}function f(e,t){try{var s=n.readdirSync(e).filter(t);return s[0]&&r.join(e,s[0])}catch(e){return null}}function d(e){return e===c+"-napi.node"}function p(e){return"node-napi.node"===e}function _(e){var t=e.split("-");return t[0]===c&&t[1]===a+".node"}function m(e){return/\.node$/.test(e)}e.exports=u,u.path=function(e){e=r.resolve(e||".");try{var t=o(r.join(e,"package.json")).name.toUpperCase().replace(/-/g,"_");Object({NODE_ENV:"production"})[t+"_PREBUILD"]&&(e=Object({NODE_ENV:"production"})[t+"_PREBUILD"])}catch(e){}var s=f(r.join(e,"build/Release"),m);if(s)return s;var n=f(r.join(e,"build/Debug"),m);if(n)return n;var i=f(r.join(e,"prebuilds/"+h+"-"+l),_);if(i)return i;var u=f(r.join(e,"prebuilds/"+h+"-"+l),d);if(u)return u;var v=f(r.join(e,"prebuilds/"+h+"-"+l),p);if(v)return v;throw new Error("No native build was found for runtime="+c+" abi="+a+" platform="+h+" arch="+l)}},function(e,t,s){"use strict";const{Writable:n}=s(11),r=s(2),{BINARY_TYPES:i,EMPTY_BUFFER:o,kStatusCode:a,kWebSocket:c}=s(0),{concat:l,toArrayBuffer:h,unmask:u}=s(3),{isValidStatusCode:f,isValidUTF8:d}=s(12),p=0,_=1,m=2,v=3,g=4,y=5;function b(e,t,s,n){const r=new e(s?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(r,b),r[a]=n,r}e.exports=class extends n{constructor(e,t,s){super(),this._binaryType=e||i[0],this[c]=void 0,this._extensions=t||{},this._maxPayload=0|s,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._state=p,this._loop=!1}_write(e,t,s){if(8===this._opcode&&this._state==p)return s();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){const t=this._buffers[0];return this._buffers[0]=t.slice(e),t.slice(0,e)}const t=Buffer.allocUnsafe(e);do{const s=this._buffers[0];e>=s.length?this._buffers.shift().copy(t,t.length-e):(s.copy(t,t.length-e,0,e),this._buffers[0]=s.slice(e)),e-=s.length}while(e>0);return t}startLoop(e){let t;this._loop=!0;do{switch(this._state){case p:t=this.getInfo();break;case _:t=this.getPayloadLength16();break;case m:t=this.getPayloadLength64();break;case v:this.getMask();break;case g:t=this.getData(e);break;default:return void(this._loop=!1)}}while(this._loop);e(t)}getInfo(){if(this._bufferedBytes<2)return void(this._loop=!1);const e=this.consume(2);if(0!=(48&e[0]))return this._loop=!1,b(RangeError,"RSV2 and RSV3 must be clear",!0,1002);const t=64==(64&e[0]);if(t&&!this._extensions[r.extensionName])return this._loop=!1,b(RangeError,"RSV1 must be clear",!0,1002);if(this._fin=128==(128&e[0]),this._opcode=15&e[0],this._payloadLength=127&e[1],0===this._opcode){if(t)return this._loop=!1,b(RangeError,"RSV1 must be clear",!0,1002);if(!this._fragmented)return this._loop=!1,b(RangeError,"invalid opcode 0",!0,1002);this._opcode=this._fragmented}else if(1===this._opcode||2===this._opcode){if(this._fragmented)return this._loop=!1,b(RangeError,`invalid opcode ${this._opcode}`,!0,1002);this._compressed=t}else{if(!(this._opcode>7&&this._opcode<11))return this._loop=!1,b(RangeError,`invalid opcode ${this._opcode}`,!0,1002);if(!this._fin)return this._loop=!1,b(RangeError,"FIN must be set",!0,1002);if(t)return this._loop=!1,b(RangeError,"RSV1 must be clear",!0,1002);if(this._payloadLength>125)return this._loop=!1,b(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002)}if(this._fin||this._fragmented||(this._fragmented=this._opcode),this._masked=128==(128&e[1]),126===this._payloadLength)this._state=_;else{if(127!==this._payloadLength)return this.haveLength();this._state=m}}getPayloadLength16(){if(!(this._bufferedBytes<2))return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength();this._loop=!1}getPayloadLength64(){if(this._bufferedBytes<8)return void(this._loop=!1);const e=this.consume(8),t=e.readUInt32BE(0);return t>Math.pow(2,21)-1?(this._loop=!1,b(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009)):(this._payloadLength=t*Math.pow(2,32)+e.readUInt32BE(4),this.haveLength())}haveLength(){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0))return this._loop=!1,b(RangeError,"Max payload size exceeded",!1,1009);this._masked?this._state=v:this._state=g}getMask(){this._bufferedBytes<4?this._loop=!1:(this._mask=this.consume(4),this._state=g)}getData(e){let t=o;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength)return void(this._loop=!1);t=this.consume(this._payloadLength),this._masked&&u(t,this._mask)}return this._opcode>7?this.controlMessage(t):this._compressed?(this._state=y,void this.decompress(t,e)):(t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage())}decompress(e,t){this._extensions[r.extensionName].decompress(e,this._fin,(e,s)=>{if(e)return t(e);if(s.length){if(this._messageLength+=s.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return t(b(RangeError,"Max payload size exceeded",!1,1009));this._fragments.push(s)}const n=this.dataMessage();if(n)return t(n);this.startLoop(t)})}dataMessage(){if(this._fin){const e=this._messageLength,t=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],2===this._opcode){let s;s="nodebuffer"===this._binaryType?l(t,e):"arraybuffer"===this._binaryType?h(l(t,e)):t,this.emit("message",s)}else{const s=l(t,e);if(!d(s))return this._loop=!1,b(Error,"invalid UTF-8 sequence",!0,1007);this.emit("message",s.toString())}}this._state=p}controlMessage(e){if(8===this._opcode)if(this._loop=!1,0===e.length)this.emit("conclude",1005,""),this.end();else{if(1===e.length)return b(RangeError,"invalid payload length 1",!0,1002);{const t=e.readUInt16BE(0);if(!f(t))return b(RangeError,`invalid status code ${t}`,!0,1002);const s=e.slice(2);if(!d(s))return b(Error,"invalid UTF-8 sequence",!0,1007);this.emit("conclude",t,s.toString()),this.end()}}else 9===this._opcode?this.emit("ping",e):this.emit("pong",e);this._state=p}}},function(e,t){e.exports=require("stream")},function(e,t,s){"use strict";try{const e=s(32);t.isValidUTF8="object"==typeof e?e.Validation.isValidUTF8:e}catch(e){t.isValidUTF8=()=>!0}t.isValidStatusCode=e=>e>=1e3&&e<=1013&&1004!==e&&1005!==e&&1006!==e||e>=3e3&&e<=4999},function(e,t,s){"use strict";const{randomFillSync:n}=s(1),r=s(2),{EMPTY_BUFFER:i}=s(0),{isValidStatusCode:o}=s(12),{mask:a,toBuffer:c}=s(3),l=Buffer.alloc(4);class h{constructor(e,t){this._extensions=t||{},this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(e,t){const s=t.mask&&t.readOnly;let r=t.mask?6:2,i=e.length;e.length>=65536?(r+=8,i=127):e.length>125&&(r+=2,i=126);const o=Buffer.allocUnsafe(s?e.length+r:r);return o[0]=t.fin?128|t.opcode:t.opcode,t.rsv1&&(o[0]|=64),o[1]=i,126===i?o.writeUInt16BE(e.length,2):127===i&&(o.writeUInt32BE(0,2),o.writeUInt32BE(e.length,6)),t.mask?(n(l,0,4),o[1]|=128,o[r-4]=l[0],o[r-3]=l[1],o[r-2]=l[2],o[r-1]=l[3],s?(a(e,l,o,r,e.length),[o]):(a(e,l,e,0,e.length),[o,e])):[o,e]}close(e,t,s,n){let r;if(void 0===e)r=i;else{if("number"!=typeof e||!o(e))throw new TypeError("First argument must be a valid error code number");void 0===t||""===t?(r=Buffer.allocUnsafe(2)).writeUInt16BE(e,0):((r=Buffer.allocUnsafe(2+Buffer.byteLength(t))).writeUInt16BE(e,0),r.write(t,2))}this._deflating?this.enqueue([this.doClose,r,s,n]):this.doClose(r,s,n)}doClose(e,t,s){this.sendFrame(h.frame(e,{fin:!0,rsv1:!1,opcode:8,mask:t,readOnly:!1}),s)}ping(e,t,s){const n=c(e);this._deflating?this.enqueue([this.doPing,n,t,c.readOnly,s]):this.doPing(n,t,c.readOnly,s)}doPing(e,t,s,n){this.sendFrame(h.frame(e,{fin:!0,rsv1:!1,opcode:9,mask:t,readOnly:s}),n)}pong(e,t,s){const n=c(e);this._deflating?this.enqueue([this.doPong,n,t,c.readOnly,s]):this.doPong(n,t,c.readOnly,s)}doPong(e,t,s,n){this.sendFrame(h.frame(e,{fin:!0,rsv1:!1,opcode:10,mask:t,readOnly:s}),n)}send(e,t,s){const n=c(e),i=this._extensions[r.extensionName];let o=t.binary?2:1,a=t.compress;if(this._firstFragment?(this._firstFragment=!1,a&&i&&(a=n.length>=i._threshold),this._compress=a):(a=!1,o=0),t.fin&&(this._firstFragment=!0),i){const e={fin:t.fin,rsv1:a,opcode:o,mask:t.mask,readOnly:c.readOnly};this._deflating?this.enqueue([this.dispatch,n,this._compress,e,s]):this.dispatch(n,this._compress,e,s)}else this.sendFrame(h.frame(n,{fin:t.fin,rsv1:!1,opcode:o,mask:t.mask,readOnly:c.readOnly}),s)}dispatch(e,t,s,n){if(!t)return void this.sendFrame(h.frame(e,s),n);const i=this._extensions[r.extensionName];this._deflating=!0,i.compress(e,s.fin,(e,t)=>{this._deflating=!1,s.readOnly=!1,this.sendFrame(h.frame(t,s),n),this.dequeue()})}dequeue(){for(;!this._deflating&&this._queue.length;){const e=this._queue.shift();this._bufferedBytes-=e[1].length,Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[1].length,this._queue.push(e)}sendFrame(e,t){2===e.length?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}}e.exports=h},function(e,t,s){"use strict";const n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function r(e,t,s){void 0===e[t]?e[t]=[s]:e[t].push(s)}e.exports={format:function(e){return Object.keys(e).map(t=>{let s=e[t];return Array.isArray(s)||(s=[s]),s.map(e=>[t].concat(Object.keys(e).map(t=>{let s=e[t];return Array.isArray(s)||(s=[s]),s.map(e=>!0===e?t:`${t}=${e}`).join("; ")})).join("; ")).join(", ")}).join(", ")},parse:function(e){const t=Object.create(null);if(void 0===e||""===e)return t;let s,i,o=Object.create(null),a=!1,c=!1,l=!1,h=-1,u=-1,f=0;for(;f<e.length;f++){const d=e.charCodeAt(f);if(void 0===s)if(-1===u&&1===n[d])-1===h&&(h=f);else if(32===d||9===d)-1===u&&-1!==h&&(u=f);else{if(59!==d&&44!==d)throw new SyntaxError(`Unexpected character at index ${f}`);{if(-1===h)throw new SyntaxError(`Unexpected character at index ${f}`);-1===u&&(u=f);const n=e.slice(h,u);44===d?(r(t,n,o),o=Object.create(null)):s=n,h=u=-1}}else if(void 0===i)if(-1===u&&1===n[d])-1===h&&(h=f);else if(32===d||9===d)-1===u&&-1!==h&&(u=f);else if(59===d||44===d){if(-1===h)throw new SyntaxError(`Unexpected character at index ${f}`);-1===u&&(u=f),r(o,e.slice(h,u),!0),44===d&&(r(t,s,o),o=Object.create(null),s=void 0),h=u=-1}else{if(61!==d||-1===h||-1!==u)throw new SyntaxError(`Unexpected character at index ${f}`);i=e.slice(h,f),h=u=-1}else if(c){if(1!==n[d])throw new SyntaxError(`Unexpected character at index ${f}`);-1===h?h=f:a||(a=!0),c=!1}else if(l)if(1===n[d])-1===h&&(h=f);else if(34===d&&-1!==h)l=!1,u=f;else{if(92!==d)throw new SyntaxError(`Unexpected character at index ${f}`);c=!0}else if(34===d&&61===e.charCodeAt(f-1))l=!0;else if(-1===u&&1===n[d])-1===h&&(h=f);else if(-1===h||32!==d&&9!==d){if(59!==d&&44!==d)throw new SyntaxError(`Unexpected character at index ${f}`);{if(-1===h)throw new SyntaxError(`Unexpected character at index ${f}`);-1===u&&(u=f);let n=e.slice(h,u);a&&(n=n.replace(/\\/g,""),a=!1),r(o,i,n),44===d&&(r(t,s,o),o=Object.create(null),s=void 0),i=void 0,h=u=-1}}else-1===u&&(u=f)}if(-1===h||l)throw new SyntaxError("Unexpected end of input");-1===u&&(u=f);const d=e.slice(h,u);return void 0===s?r(t,d,o):(void 0===i?r(o,d,!0):r(o,i,a?d.replace(/\\/g,""):d),r(t,s,o)),t}}},function(e,t){t.COMMAND_ENABLE="enable",t.COMMAND_BIO_ENABLE="bio",t.COMMAND_BIO_AUTH="bioauth",t.COMMAND_CHECK="check",t.COMMAND_READY="ready",t.COMMAND_SUCCESS="success",t.COMMAND_STATUS="status",t.COMMAND_AUTH="auth",t.COMMAND_TOKEN="token",t.COMMAND_FAILED="failed",t.COMMAND_ERROR="error",t.HTTP_URI="/enfaceauth",t.AES_CIPHER="aes-256-cbc",t.NEXT_REQUEST_TIME_FRAME=5e3,t.AUTHORIZATION_TIME_FRAME=6e5},function(e,t,s){"use strict";function n(e,t,s,n,r,i,o){try{var a=e[i](o),c=a.value}catch(e){return void s(e)}a.done?t(c):Promise.resolve(c).then(n,r)}function r(e){return function(){var t=this,s=arguments;return new Promise(function(r,i){var o=e.apply(t,s);function a(e){n(o,r,i,a,c,"next",e)}function c(e){n(o,r,i,a,c,"throw",e)}a(void 0)})}}function i(e,t){for(var s=0;s<t.length;s++){var n=t[s];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}s.r(t),s.d(t,"EnfaceAuth",function(){return h});var o=s(17),a=s(20),c=s(15),l=s(37),h=function(){function e(t){var s=this,n=t.debug,i=t.httpServer,o=t.port,h=t.projectId,u=t.secretCode,f=t.callbackUrl,d=t.onCheckCurrentStatus,p=t.onUserValidate,_=t.onActivate,m=t.onUserTokenByBioId;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._DEBUG=!!n,this.projectId=h,this.secretCode=Buffer.from(u,"base64"),this.callbackUrl=f,this.callbackUrl.endsWith("/")&&(this.callbackUrl=this.callbackUrl.substring(0,this.callbackUrl.length-1)),this.onUserValidate=p,this.onCheckCurrentStatus=d,this.onActivate=_,this.onUserTokenByBioId=m,this.wsServer=null,this.sessions={},i){if(o)return void console.error('[EnfaceAuth constructor error]: \n Please specify "server" for http(s) mode either "port" for ws(s) mode');this.callbackUrl+=c.HTTP_URI,this.log("[EnfaceAuth constructor] Using HTTP/S server"),i.post(c.HTTP_URI,function(e,t){if(s.log("[EnfaceAuth] POST REQUEST', ".concat(e.path,", ").concat(e.body)),s.newClient({client:t}),l.enfaceCors(t),e.body instanceof Object)s.request({client:t,data:JSON.stringify(e.body)});else{var n="";e.on("data",function(e){n+=e.toString()}),e.on("end",function(){s.request({client:t,data:n})})}}).options(function(){var e=r(regeneratorRuntime.mark(function e(t,s){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:l.enfaceCors(s),s.end();case 2:case"end":return e.stop()}},e)}));return function(t,s){return e.apply(this,arguments)}}())}else this.log("[EnfaceAuth] Using sockets on port ".concat(o)),this.wsServer=new a.Server({port:o}),this.wsServer.on("connection",function(e){s.newClient({client:e}),e.on("message",function(t){s.request({client:e,data:t})}),e.on("close",function(t){s.log("[EnfaceAuth] socket ".concat(e.clientId," closed with code: ").concat(t)),e.isAlive=!1}),e.isAlive=!0,e.on("pong",function(){e.isAlive=!0})}),setInterval(function(){s.wsServer.clients.forEach(function(e){!1!==e.isAlive?(e.isAlive=!1,e.ping(l.noop)):e.terminate()})},3e4)}var t,s,n,h,u,f,d,p,_;return t=e,(s=[{key:"log",value:function(e){this._DEBUG&&console.log(e)}},{key:"logError",value:function(e){this._DEBUG&&console.error(e)}},{key:"request",value:(_=r(regeneratorRuntime.mark(function e(t){var s,n,r,i,o;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return s=t.client,n=t.data,this.log("[EnfaceAuth.request], ".concat(n)),e.prev=2,e.next=5,this.readMessage({client:s,data:n});case 5:r=e.sent,i=r.response,o=r.closeConnection,this.send({client:s,data:i}),o&&this.finalizeSession(s),e.next=17;break;case 12:e.prev=12,e.t0=e.catch(2),this.logError("[EnfaceAuth.request]', ".concat(e.t0.message)),this.errorResponse({client:s,message:e.t0}),this.finalizeSession(s);case 17:case"end":return e.stop()}},e,this,[[2,12]])})),function(e){return _.apply(this,arguments)})},{key:"send",value:function(e){var t=e.client,s=e.data;this.log("[EnfaceAuth.send], ".concat(JSON.stringify(s))),this.wsServer?t.send(JSON.stringify(s)):t.end(JSON.stringify(s))}},{key:"readMessage",value:function(e){var t=this,s=e.client,n=e.data;return new Promise(function(e){t.log("[EnfaceAuth.readMessage] data, ".concat(JSON.stringify(n),", client.clientId, ").concat(s.clientId)),t.sessions[s.clientId].resolver=e;try{n=JSON.parse(n)}catch(e){return t.logError("[EnfaceAuth.readMessage], ".concat(e.message)),t.errorResponse({client:s,message:"Wrong data received ".concat(n)})}switch(n._){case c.COMMAND_STATUS:return t.responseStatus({client:s,userData:n.userData});case c.COMMAND_ENABLE:case c.COMMAND_AUTH:return t.responseInit({client:s,data:n});case c.COMMAND_CHECK:return t.responseCheck({client:s,sessionId:n.sessionId});case c.COMMAND_BIO_ENABLE:return t.responseBioEnable({client:s,data:n});case c.COMMAND_BIO_AUTH:return t.responseBioAuth({client:s,data:n});default:return t.errorResponse({client:s,message:"Unknown command ".concat(n._)})}})}},{key:"newClient",value:function(e){var t=this,s=e.client;this.log("[EnfaceAuth.newClient]");var n=o();this.sessions[n]={client:s,sessionId:o(),activated:!1,userId:null,resolver:null},s.clientId=n,setTimeout(function(){t.finalizeSession({clientId:n})},c.AUTHORIZATION_TIME_FRAME)}},{key:"switchSession",value:function(e){var t=e.client,s=e.clientId;return this.log("[EnfaceAuth.switchSession] to clientId, ".concat(s)),this.sessions[s]?(this.sessions[t.clientId]&&delete this.sessions[t.clientId].client,this.sessions[s].resolver=this.sessions[t.clientId].resolver,this.finalizeSession({clientId:t.clientId}),t.clientId=s,!0):this.errorResponse({client:t,message:"Failed to get session params for client ".concat(s)})}},{key:"responseInit",value:(p=r(regeneratorRuntime.mark(function e(t){var s,n,r;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(s=t.client,n=t.data,this.log("[EnfaceAuth.responseInit] data, ".concat(n)),this.wsServer||!n.clientId){e.next=4;break}return e.abrupt("return",this.switchSession({client:s,clientId:n.clientId}));case 4:if(n._!==c.COMMAND_ENABLE){e.next=10;break}return e.next=7,this.linkSessionToUser({client:s,userData:n.userData});case 7:e.t0=e.sent,e.next=11;break;case 10:e.t0=!0;case 11:if(e.t0){e.next=14;break}return e.abrupt("return",this.errorResponse({client:s,message:"Failed to identify user with token: ".concat(n.userData)}));case 14:return r=this.wsServer?void 0:s.clientId,e.abrupt("return",this.resolve({client:s,data:{_:n._,token:l.encrypt([this.sessions[s.clientId].sessionId,this.callbackUrl,n._].join("|"),this.secretCode),id:this.projectId,clientId:r}}));case 16:case"end":return e.stop()}},e,this)})),function(e){return p.apply(this,arguments)})},{key:"responseStatus",value:(d=r(regeneratorRuntime.mark(function e(t){var s,n,r,i;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return s=t.client,n=t.userData,e.prev=1,this.log("[EnfaceAuth.responseStatus] userData, ".concat(n)),e.next=5,this.onUserValidate(n);case 5:return r=e.sent,this.log("[EnfaceAuth.responseStatus] user validated, userId: ".concat(r)),e.next=9,this.onCheckCurrentStatus(r);case 9:return i=e.sent,e.abrupt("return",this.finalResponse({client:s,data:{_:c.COMMAND_STATUS,check:!0,isActive:i}}));case 13:return e.prev=13,e.t0=e.catch(1),this.logError("[EnfaceAuth.responseStatus] error",e.t0),e.abrupt("return",this.errorResponse({client:s,message:"Failed to validate user. Received token: ".concat(n)}));case 17:case"end":return e.stop()}},e,this,[[1,13]])})),function(e){return d.apply(this,arguments)})},{key:"responseCheck",value:function(e){var t=e.client,s=e.sessionId;this.log("[EnfaceAuth.responseCheck], sessionId, ".concat(s));var n=this.findSessionById(s);return n?n.activated?this.errorResponse({client:t,message:"Client already activated"}):(n.activated=!0,this.resolve({client:t,data:{_:c.COMMAND_READY}})):this.errorResponse({client:t,message:"Client not found"})}},{key:"responseBioEnable",value:(f=r(regeneratorRuntime.mark(function e(t){var s,n,r,i,o=this;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(s=t.client,n=t.data,this.log("[EnfaceAuth.responseBioEnable] sessionId, bioId, ".concat(n.sessionId,", ").concat(n.bioId)),r=this.findSessionById(n.sessionId)){e.next=5;break}return e.abrupt("return",this.errorResponse({client:s,message:"Client not found"}));case 5:if(r.userId){e.next=7;break}return e.abrupt("return",[r.client,s].forEach(function(e){o.errorResponse({client:e,message:"User id is not assigned."})}));case 7:if(n.bioId&&l.isUuid(n.bioId)){e.next=9;break}return e.abrupt("return",[r.client,s].forEach(function(e){return o.errorResponse({client:e,message:"Bad biometric id."})}));case 9:return e.next=11,this.onActivate(r.userId,n.bioId);case 11:return i=e.sent,this.log("finalResponse responseBioEnable activated, ".concat(i)),e.abrupt("return",[r.client,s].forEach(function(e){o.finalResponse({client:e,data:{_:c.COMMAND_STATUS,isActive:i}})}));case 14:case"end":return e.stop()}},e,this)})),function(e){return f.apply(this,arguments)})},{key:"responseBioAuth",value:(u=r(regeneratorRuntime.mark(function e(t){var s,n,r,i,o=this;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(s=t.client,n=t.data,this.log("[EnfaceAuth.responseBioAuth] sessionId, bioId, ".concat(n.sessionId,", ").concat(n.bioId)),r=this.findSessionById(n.sessionId)){e.next=5;break}return e.abrupt("return",this.errorResponse({client:s,message:"Client not found."}));case 5:if(!r.userId){e.next=7;break}return e.abrupt("return",[r.client,s].forEach(function(e){return o.errorResponse({client:e,message:"Client has wrong parameters."})}));case 7:if(n.bioId&&l.isUuid(n.bioId)){e.next=9;break}return e.abrupt("return",[r.client,s].forEach(function(e){return o.errorResponse({client:e,message:"Bad biometric id."})}));case 9:return e.next=11,this.onUserTokenByBioId(n.bioId);case 11:i=e.sent,this.log("finalResponse responseBioAuth, ".concat(i)),this.finalResponse({client:s,data:{_:c.COMMAND_BIO_AUTH,result:!!i}}),this.finalResponse({client:r.client,data:{_:c.COMMAND_TOKEN,token:i}});case 15:case"end":return e.stop()}},e,this)})),function(e){return u.apply(this,arguments)})},{key:"linkSessionToUser",value:(h=r(regeneratorRuntime.mark(function e(t){var s,n,r;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return s=t.client,n=t.userData,this.log("[linkSessionToUser]",this),e.prev=2,e.next=5,this.onUserValidate(n);case 5:return r=e.sent,this.log("[linkSessionToUser] userId, ".concat(r)),this.sessions[s.clientId].userId=r,e.abrupt("return",!0);case 11:return e.prev=11,e.t0=e.catch(2),e.abrupt("return",!1);case 14:case"end":return e.stop()}},e,this,[[2,11]])})),function(e){return h.apply(this,arguments)})},{key:"errorResponse",value:function(e){var t=e.client,s=e.message;return this.logError("[EnfaceAuth.errorResponse], ".concat(s)),this.finalResponse({client:t,data:{_:c.COMMAND_ERROR,message:s}}),!1}},{key:"finalResponse",value:function(e){var t=e.client,s=e.data;this.log("[EnfaceAuth.finalResponse], ".concat(s)),this.resolve({client:t,data:s,closeConnection:!0})}},{key:"resolve",value:function(e){var t=e.client,s=e.data,n=e.closeConnection;this.log("[EnfaceAuth.resolve] client.clientId, data, ".concat(t.clientId,", ").concat(s));var r=this.sessions[t.clientId];r&&r.resolver?(r.resolver({response:s,closeConnection:!!n}),delete r.resolver):this.wsServer&&(this.send({client:r.client,data:s}),n&&this.closeClient({client:r.client}))}},{key:"finalizeSession",value:function(e){var t=e.clientId;this.log("[EnfaceAuth.finalizeSession] clientId ".concat(t)),this.sessions[t]&&this.closeClient({client:this.sessions[t].client}),delete this.sessions[t]}},{key:"closeClient",value:function(e){var t=e.client;if(this.log("[EnfaceAuth.closeClient] client, ".concat(!!t)),t)if(this.wsServer)t.terminate();else try{t.end("timeout")}catch(e){this.logError("[closeClient.error], ".concat(e.message))}}},{key:"findSessionById",value:function(e){for(var t=0,s=Object.values(this.sessions);t<s.length;t++){var n=s[t];if(n.sessionId===e)return n}return null}}])&&i(t.prototype,s),n&&i(t,n),e}()},function(e,t,s){var n=s(18),r=s(19),i=r;i.v1=n,i.v4=r,e.exports=i},function(e,t,s){var n,r,i=s(4),o=s(5),a=0,c=0;e.exports=function(e,t,s){var l=t&&s||0,h=t||[],u=(e=e||{}).node||n,f=void 0!==e.clockseq?e.clockseq:r;if(null==u||null==f){var d=i();null==u&&(u=n=[1|d[0],d[1],d[2],d[3],d[4],d[5]]),null==f&&(f=r=16383&(d[6]<<8|d[7]))}var p=void 0!==e.msecs?e.msecs:(new Date).getTime(),_=void 0!==e.nsecs?e.nsecs:c+1,m=p-a+(_-c)/1e4;if(m<0&&void 0===e.clockseq&&(f=f+1&16383),(m<0||p>a)&&void 0===e.nsecs&&(_=0),_>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");a=p,c=_,r=f;var v=(1e4*(268435455&(p+=122192928e5))+_)%4294967296;h[l++]=v>>>24&255,h[l++]=v>>>16&255,h[l++]=v>>>8&255,h[l++]=255&v;var g=p/4294967296*1e4&268435455;h[l++]=g>>>8&255,h[l++]=255&g,h[l++]=g>>>24&15|16,h[l++]=g>>>16&255,h[l++]=f>>>8|128,h[l++]=255&f;for(var y=0;y<6;++y)h[l+y]=u[y];return t||o(h)}},function(e,t,s){var n=s(4),r=s(5);e.exports=function(e,t,s){var i=t&&s||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var o=(e=e||{}).random||(e.rng||n)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t)for(var a=0;a<16;++a)t[i+a]=o[a];return t||r(o)}},function(e,t,s){"use strict";const n=s(6);n.createWebSocketStream=s(35),n.Server=s(36),n.Receiver=s(10),n.Sender=s(13),e.exports=n},function(e,t){e.exports=require("https")},function(e,t){e.exports=require("net")},function(e,t){e.exports=require("tls")},function(e,t){e.exports=require("url")},function(e,t,s){"use strict";function n(e){if(!(this instanceof n))return new n(e);e=e||{},this.concurrency=e.concurrency||1/0,this.pending=0,this.jobs=[],this.cbs=[],this._done=function(){this.pending--,this._run()}.bind(this)}["push","unshift","splice"].forEach(function(e){n.prototype[e]=function(){var t=Array.prototype[e].apply(this.jobs,arguments);return this._run(),t}}),Object.defineProperty(n.prototype,"length",{get:function(){return this.pending+this.jobs.length}}),n.prototype._run=function(){if(this.pending!==this.concurrency){if(this.jobs.length){var e=this.jobs.shift();this.pending++,e(this._done),this._run()}if(0===this.pending)for(;0!==this.cbs.length;){var t=this.cbs.pop();process.nextTick(t)}}},n.prototype.onDone=function(e){"function"==typeof e&&(this.cbs.push(e),this._run())},e.exports=n},function(e,t){e.exports=require("zlib")},function(e,t,s){"use strict";(function(t){try{e.exports=s(9)(t)}catch(t){e.exports=s(31)}}).call(this,"/")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("os")},function(e,t,s){"use strict";e.exports={mask:(e,t,s,n,r)=>{for(var i=0;i<r;i++)s[n+i]=e[i]^t[3&i]},unmask:(e,t)=>{const s=e.length;for(var n=0;n<s;n++)e[n]^=t[3&n]}}},function(e,t,s){"use strict";(function(t){try{e.exports=s(9)(t)}catch(t){e.exports=s(33)}}).call(this,"/")},function(e,t,s){"use strict";e.exports=e=>{for(var t=e.length,s=0;s<t;)if(e[s]<128)s++;else if(192==(224&e[s])){if(s+1===t||128!=(192&e[s+1])||192==(254&e[s]))return!1;s+=2}else if(224==(240&e[s])){if(s+2>=t||128!=(192&e[s+1])||128!=(192&e[s+2])||224===e[s]&&128==(224&e[s+1])||237===e[s]&&160==(224&e[s+1]))return!1;s+=3}else{if(240!=(248&e[s]))return!1;if(s+3>=t||128!=(192&e[s+1])||128!=(192&e[s+2])||128!=(192&e[s+3])||240===e[s]&&128==(240&e[s+1])||244===e[s]&&e[s+1]>143||e[s]>244)return!1;s+=4}return!0}},function(e,t,s){"use strict";class n{constructor(e,t){this.target=t,this.type=e}}class r extends n{constructor(e,t){super("message",t),this.data=e}}class i extends n{constructor(e,t,s){super("close",s),this.wasClean=s._closeFrameReceived&&s._closeFrameSent,this.reason=t,this.code=e}}class o extends n{constructor(e){super("open",e)}}class a extends n{constructor(e,t){super("error",t),this.message=e.message,this.error=e}}const c={addEventListener(e,t){function s(e){t.call(this,new r(e,this))}function n(e,s){t.call(this,new i(e,s,this))}function c(e){t.call(this,new a(e,this))}function l(){t.call(this,new o(this))}"function"==typeof t&&("message"===e?(s._listener=t,this.on(e,s)):"close"===e?(n._listener=t,this.on(e,n)):"error"===e?(c._listener=t,this.on(e,c)):"open"===e?(l._listener=t,this.on(e,l)):this.on(e,t))},removeEventListener(e,t){const s=this.listeners(e);for(let n=0;n<s.length;n++)s[n]!==t&&s[n]._listener!==t||this.removeListener(e,s[n])}};e.exports=c},function(e,t,s){"use strict";const{Duplex:n}=s(11);function r(e){e.emit("close")}function i(){!this.destroyed&&this._writableState.finished&&this.destroy()}function o(e){this.removeListener("error",o),this.destroy(),0===this.listenerCount("error")&&this.emit("error",e)}e.exports=function(e,t){let s=!0;function a(){s&&e._socket.resume()}e.readyState===e.CONNECTING?e.once("open",function(){e._receiver.removeAllListeners("drain"),e._receiver.on("drain",a)}):(e._receiver.removeAllListeners("drain"),e._receiver.on("drain",a));const c=new n({...t,autoDestroy:!1,emitClose:!1,objectMode:!1,readableObjectMode:!1,writableObjectMode:!1});return e.on("message",function(t){c.push(t)||(s=!1,e._socket.pause())}),e.once("error",function(e){c.destroy(e)}),e.once("close",function(){c.destroyed||c.push(null)}),c._destroy=function(t,s){if(e.readyState===e.CLOSED)return s(t),void process.nextTick(r,c);e.once("close",function(){s(t),process.nextTick(r,c)}),e.terminate()},c._final=function(t){e.readyState!==e.CONNECTING?e._socket._writableState.finished?(c._readableState.endEmitted&&c.destroy(),t()):(e._socket.once("finish",function(){t()}),e.close()):e.once("open",function(){c._final(t)})},c._read=function(){e.readyState!==e.OPEN||s||(s=!0,e._receiver._writableState.needDrain||e._socket.resume())},c._write=function(t,s,n){e.readyState!==e.CONNECTING?e.send(t,n):e.once("open",function(){c._write(t,s,n)})},c.on("end",i),c.on("error",o),c}},function(e,t,s){"use strict";const n=s(7),{createHash:r}=s(1),{createServer:i,STATUS_CODES:o}=s(8),a=s(2),c=s(6),{format:l,parse:h}=s(14),{GUID:u}=s(0),f=/^[+\/0-9A-Za-z]{22}==$/,d=Symbol("kUsedByWebSocketServer");function p(e){e.emit("close")}function _(){this.destroy()}function m(e,t,s,n){e.writable&&(s=s||o[t],n={Connection:"close","Content-type":"text/html","Content-Length":Buffer.byteLength(s),...n},e.write(`HTTP/1.1 ${t} ${o[t]}\r\n`+Object.keys(n).map(e=>`${e}: ${n[e]}`).join("\r\n")+"\r\n\r\n"+s)),e.removeListener("error",_),e.destroy()}e.exports=class extends n{constructor(e,t){if(super(),null==(e={maxPayload:104857600,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,...e}).port&&!e.server&&!e.noServer)throw new TypeError('One of the "port", "server", or "noServer" options must be specified');if(null!=e.port)this._server=i((e,t)=>{const s=o[426];t.writeHead(426,{"Content-Length":s.length,"Content-Type":"text/plain"}),t.end(s)}),this._server.listen(e.port,e.host,e.backlog,t);else if(e.server){if(e.server[d])throw new Error("The HTTP/S server is already being used by another WebSocket server");e.server[d]=!0,this._server=e.server}this._server&&(this._removeListeners=function(e,t){for(const s of Object.keys(t))e.on(s,t[s]);return function(){for(const s of Object.keys(t))e.removeListener(s,t[s])}}(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(e,t,s)=>{this.handleUpgrade(e,t,s,t=>{this.emit("connection",t,e)})}})),!0===e.perMessageDeflate&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set),this.options=e}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(e&&this.once("close",e),this.clients)for(const e of this.clients)e.terminate();const t=this._server;if(t){if(this._removeListeners(),this._removeListeners=this._server=null,null!=this.options.port)return void t.close(()=>this.emit("close"));delete t[d]}process.nextTick(p,this)}shouldHandle(e){if(this.options.path){const t=e.url.indexOf("?");if((-1!==t?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,s,n){t.on("error",_);const r=void 0!==e.headers["sec-websocket-key"]&&e.headers["sec-websocket-key"].trim(),i=+e.headers["sec-websocket-version"],o={};if("GET"!==e.method||"websocket"!==e.headers.upgrade.toLowerCase()||!r||!f.test(r)||8!==i&&13!==i||!this.shouldHandle(e))return m(t,400);if(this.options.perMessageDeflate){const s=new a(this.options.perMessageDeflate,!0,this.options.maxPayload);try{const n=h(e.headers["sec-websocket-extensions"]);n[a.extensionName]&&(s.accept(n[a.extensionName]),o[a.extensionName]=s)}catch(e){return m(t,400)}}if(this.options.verifyClient){const a={origin:e.headers[`${8===i?"sec-websocket-origin":"origin"}`],secure:!(!e.connect