@ideem/zsm-react-native
Version:
ZSM makes 2FA easy and invisible for everyone, all the time, using advanced cryptography like MPC to establish cryptographic proof of the origin of any transaction or login attempt, while eliminating opportunities for social engineering. ZSM has no relian
1 lines • 34.6 kB
JavaScript
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports["default"]=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _classPrivateFieldLooseBase2=_interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldLooseBase"));var _classPrivateFieldLooseKey2=_interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldLooseKey"));var _relyingParty2=_interopRequireDefault(require("./relying-party"));var _zsmLogger=_interopRequireDefault(require("./zsm-logger"));var _package=require("../package.json");var _config=(0,_classPrivateFieldLooseKey2["default"])("config");var _relyingParty=(0,_classPrivateFieldLooseKey2["default"])("relyingParty");var _zsmApi=(0,_classPrivateFieldLooseKey2["default"])("zsmApi");var _identityId=(0,_classPrivateFieldLooseKey2["default"])("identityId");var _useIdentityIdForMpc=(0,_classPrivateFieldLooseKey2["default"])("useIdentityIdForMpc");var _getMpcConsumerId=(0,_classPrivateFieldLooseKey2["default"])("getMpcConsumerId");var _getMpcConfig=(0,_classPrivateFieldLooseKey2["default"])("getMpcConfig");var WebAuthnClientBase=function(){function WebAuthnClientBase(config){var _window,_this=this;Object.defineProperty(this,_getMpcConfig,{value:_getMpcConfig2});Object.defineProperty(this,_getMpcConsumerId,{value:_getMpcConsumerId2});Object.defineProperty(this,_config,{writable:true,value:{"application_id":"","api_key":"","host_url":"https://zsm-authenticator-demo.useideem.com/","application_environment":"TEST","installation_description":typeof window!=='undefined'?(_window=window)==null||(_window=_window.navigator)==null?void 0:_window.userAgent:'',"log_level":'Error',"request_timeout_ms":30000,"retry_count":0,"consumer_id":""}});Object.defineProperty(this,_relyingParty,{writable:true,value:undefined});Object.defineProperty(this,_zsmApi,{writable:true,value:undefined});Object.defineProperty(this,_identityId,{writable:true,value:undefined});Object.defineProperty(this,_useIdentityIdForMpc,{writable:true,value:false});this.initializeZsm=function(){var _ref=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(userIdentifier){var traceId,storedIdentityId,rawAPI;return _regenerator["default"].wrap(function(_context){while(1)switch(_context.prev=_context.next){case 0:if(userIdentifier===void 0){userIdentifier=_this.userIdentifier;}traceId=_zsmLogger["default"].generateTraceId();_zsmLogger["default"].trace("initializeZsm called with userIdentifier: "+userIdentifier,traceId);_zsmLogger["default"].trace("[INIT-BEFORE] userIdentifier: "+_this.userIdentifier,traceId);_zsmLogger["default"].trace("[INIT-BEFORE] relyingParty.customerDefinedIdentifier: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].customerDefinedIdentifier,traceId);(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].consumer_id=_this.userIdentifier=userIdentifier;_context.next=1;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].lookupIdentityMapping(userIdentifier);case 1:storedIdentityId=_context.sent;if(storedIdentityId!==userIdentifier){(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId]=storedIdentityId;_zsmLogger["default"].trace("[INIT-USER-SWITCH] Found stored identity_id: "+storedIdentityId+" for user: "+userIdentifier,traceId);}else{(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId]=undefined;_zsmLogger["default"].trace("[INIT-USER-SWITCH] No stored identity_id for user: "+userIdentifier+", cleared cache",traceId);}_zsmLogger["default"].trace("[INIT-AFTER] userIdentifier: "+_this.userIdentifier,traceId);_zsmLogger["default"].trace("[INIT-AFTER] relyingParty.customerDefinedIdentifier: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].customerDefinedIdentifier,traceId);_zsmLogger["default"].trace("[INIT-AFTER] MPC consumer_id will be: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_getMpcConsumerId)[_getMpcConsumerId](),traceId);_zsmLogger["default"].trace("[INIT-AFTER] Identity ID is: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId],traceId);_zsmLogger["default"].trace("[INIT-AFTER] Storage consumer_id (preserved): "+(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].consumer_id,traceId);if(typeof zsmAppConfig!=='undefined')zsmAppConfig=(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config];if(!(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi]){_context.next=3;break;}_context.next=2;return(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi].configure((0,_classPrivateFieldLooseBase2["default"])(_this,_getMpcConfig)[_getMpcConfig]());case 2:return _context.abrupt("return",Promise.resolve((0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi]));case 3:_this.status="ZSM_INITIALIZING";_context.next=4;return _this.getZsmApi((0,_classPrivateFieldLooseBase2["default"])(_this,_getMpcConfig)[_getMpcConfig]());case 4:rawAPI=_context.sent;return _context.abrupt("return",Promise.resolve((0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi]=rawAPI));case 5:case"end":return _context.stop();}},_callee);}));return function(_x){return _ref.apply(this,arguments);};}();this.getZsmApi=function(){var _ref2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(config){return _regenerator["default"].wrap(function(_context2){while(1)switch(_context2.prev=_context2.next){case 0:Promise.reject(new Error('Method not implemented'));case 1:case"end":return _context2.stop();}},_callee2);}));return function(_x2){return _ref2.apply(this,arguments);};}();this.healthCheck=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3(){var traceId,results,zsmHealthUrl,zsmResponse,zsmHealthData,responseText,testResult,allChecks,failedChecks,errorResult,_t,_t2,_t3,_t4;return _regenerator["default"].wrap(function(_context3){while(1)switch(_context3.prev=_context3.next){case 0:traceId=_zsmLogger["default"].generateTraceId();_context3.prev=1;_zsmLogger["default"].info('Starting comprehensive health check...',traceId);results={timestamp:new Date().toISOString(),version:_this.version,configuration:{zsm_host_url:(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].host_url,authenticator_host_url:(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].authenticator_host_url,application_id:(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].application_id||'NOT_SET',api_key:(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].api_key?'***configured***':'NOT_SET',application_environment:(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].application_environment},health_checks:{}};_zsmLogger["default"].trace('Checking authenticator host...',traceId);_context3.next=2;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].healthCheck();case 2:results.health_checks.authenticator=_context3.sent;_zsmLogger["default"].trace('Checking main ZSM host...',traceId);_context3.prev=3;zsmHealthUrl=((0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].host_url.endsWith('/')?(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].host_url.slice(0,-1):(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].host_url)+"/api/health";_context3.next=4;return fetch(zsmHealthUrl,{method:'GET',headers:{'Content-Type':'application/json'}});case 4:zsmResponse=_context3.sent;_context3.prev=5;_context3.next=6;return zsmResponse.text();case 6:responseText=_context3.sent;if(!responseText||responseText.trim()===''){zsmHealthData={error:'Empty response from ZSM health endpoint'};}else{zsmHealthData=JSON.parse(responseText);}_context3.next=8;break;case 7:_context3.prev=7;_t=_context3["catch"](5);_zsmLogger["default"].error("Failed to parse ZSM health response: "+_t.message);zsmHealthData={error:"Failed to parse response: "+_t.message};case 8:results.health_checks.zsm_main={host:(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].host_url,healthEndpoint:zsmHealthUrl,healthStatus:zsmResponse.ok?'OK':'FAILED',healthResponse:zsmHealthData,httpStatus:zsmResponse.status,timestamp:new Date().toISOString()};_context3.next=10;break;case 9:_context3.prev=9;_t2=_context3["catch"](3);results.health_checks.zsm_main={host:(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].host_url,healthStatus:'ERROR',error:_t2.message,timestamp:new Date().toISOString()};case 10:_zsmLogger["default"].trace('Testing API credentials...',traceId);_context3.prev=11;_context3.next=12;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].checkServerSideIdentity(false);case 12:testResult=_context3.sent;results.health_checks.api_credentials={status:'OK',test_endpoint:'api/umfa/check-identity',response:testResult};_context3.next=14;break;case 13:_context3.prev=13;_t3=_context3["catch"](11);results.health_checks.api_credentials={status:'FAILED',test_endpoint:'api/umfa/check-identity',error:_t3.message};case 14:allChecks=Object.values(results.health_checks);failedChecks=allChecks.filter(function(check){return check.healthStatus==='FAILED'||check.healthStatus==='ERROR'||check.status==='FAILED';});results.overall_status=failedChecks.length===0?'HEALTHY':'UNHEALTHY';results.failed_checks=failedChecks.length;results.total_checks=allChecks.length;_zsmLogger["default"].info("Health check complete: "+results.overall_status,traceId);_zsmLogger["default"].trace("Full health check results: "+JSON.stringify(results),traceId);return _context3.abrupt("return",results);case 15:_context3.prev=15;_t4=_context3["catch"](1);errorResult={timestamp:new Date().toISOString(),overall_status:'ERROR',error:_t4.message,configuration:{zsm_host_url:(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].host_url,authenticator_host_url:(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].authenticator_host_url}};_zsmLogger["default"].error("Health check failed: "+_t4.message);return _context3.abrupt("return",errorResult);case 16:case"end":return _context3.stop();}},_callee3,null,[[1,15],[3,9],[5,7],[11,13]]);}));this.toObject=function(inp){var traceId=_zsmLogger["default"].generateTraceId();if(inp instanceof Map){var obj={};inp.forEach(function(v,k){return obj[k]=_this.toObject(v);});return obj;}else if(Array.isArray(inp)){return inp.map(_this.toObject.bind(_this));}else if(inp instanceof Object){var _obj={};for(var k in inp)_obj[k]=_this.toObject(inp[k]);return _obj;}else{return inp;}};this.checkIdentity=function(){var _ref4=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4(userIdentifier,createNewIdentity){var resultOfCheck,identityID,traceId,_t5;return _regenerator["default"].wrap(function(_context4){while(1)switch(_context4.prev=_context4.next){case 0:if(createNewIdentity===void 0){createNewIdentity=false;}_context4.prev=1;_this.status='CHECKING_IDENTITY_STARTING';_context4.next=2;return _this.initializeZsm(userIdentifier);case 2:_context4.next=3;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].checkServerSideIdentity(createNewIdentity);case 3:resultOfCheck=_context4.sent;if(resultOfCheck){_context4.next=4;break;}throw new Error('Unable to communicate with identity server!');case 4:identityID=resultOfCheck.identity_id;if(identityID){_context4.next=5;break;}throw new Error('Unable to acquire identity_id!');case 5:(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId]=identityID;_context4.next=6;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].handleServerIdentityResponse(resultOfCheck,userIdentifier);case 6:traceId=_zsmLogger["default"].generateTraceId();_zsmLogger["default"].trace("[CHECK-IDENTITY] Stored identity_id: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId],traceId);_zsmLogger["default"].trace("[CHECK-IDENTITY] MPC config will use consumer_id: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_getMpcConsumerId)[_getMpcConsumerId](),traceId);_zsmLogger["default"].trace("[CHECK-IDENTITY] Storage config preserves consumer_id: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].consumer_id,traceId);if(!(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi]){_context4.next=8;break;}_context4.next=7;return(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi].configure((0,_classPrivateFieldLooseBase2["default"])(_this,_getMpcConfig)[_getMpcConfig]());case 7:_zsmLogger["default"].trace("[CHECK-IDENTITY] ZSM API reconfigured with identity_id",traceId);case 8:return _context4.abrupt("return",identityID);case 9:_context4.prev=9;_t5=_context4["catch"](1);_this.status='CHECKING_IDENTITY_FAILED';return _context4.abrupt("return",Promise.reject(_t5));case 10:case"end":return _context4.stop();}},_callee4,null,[[1,9]]);}));return function(_x3,_x4){return _ref4.apply(this,arguments);};}();this.webauthnCreate=function(){var _ref5=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee5(userIdentifier,traceId){var _createResponse,_createResponse2;var actualTraceId,publicKey,createResponse,credential,registrationResult;return _regenerator["default"].wrap(function(_context5){while(1)switch(_context5.prev=_context5.next){case 0:if(traceId===void 0){traceId=null;}_this.status='ENROLLMENT_STARTING';_context5.next=1;return _this.initializeZsm(userIdentifier);case 1:actualTraceId=traceId||_zsmLogger["default"].generateTraceId();_zsmLogger["default"].debug("Ensuring identity exists for user: "+userIdentifier,actualTraceId);_context5.next=2;return _this.checkIdentity(userIdentifier,true);case 2:_context5.next=3;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].registrationStart(actualTraceId);case 3:publicKey=_context5.sent;if(publicKey){_context5.next=4;break;}throw new Error('[registration_start] webauthnCreate failed :: Unable to retrieve public key from Relying Party Server!');case 4:_zsmLogger["default"].trace('About to call #zsmApi.webauthn_create...',actualTraceId);_zsmLogger["default"].trace("publicKey: "+JSON.stringify(publicKey),actualTraceId);_zsmLogger["default"].trace("traceId: "+actualTraceId,actualTraceId);_context5.next=5;return(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi].webauthn_create(publicKey,actualTraceId);case 5:createResponse=_context5.sent;_zsmLogger["default"].trace('Raw ZSM API response received',actualTraceId);_zsmLogger["default"].trace("Raw response type: "+typeof createResponse,actualTraceId);_zsmLogger["default"].trace("Raw response: "+JSON.stringify(createResponse),actualTraceId);if(createResponse){_context5.next=6;break;}throw new Error('[mpc_round] webauthnCreate failed :: Unable to obtain response from Crypto Server!');case 6:_zsmLogger["default"].trace('About to call toObject with createResponse...',actualTraceId);createResponse=_this.toObject(createResponse);_zsmLogger["default"].trace("toObject result: "+JSON.stringify(createResponse),actualTraceId);if((_createResponse=createResponse)!=null&&_createResponse.result){_context5.next=7;break;}throw new Error('[mpc_round] webauthnCreate failed :: Unable to obtain credential from Crypto Server!');case 7:if((_createResponse2=createResponse)!=null&&(_createResponse2=_createResponse2.result)!=null&&_createResponse2.response){_context5.next=8;break;}throw new Error('[mpc_round] webauthnCreate failed :: Unable to acquire attestation object!');case 8:credential=createResponse.result;_context5.next=9;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].registrationFinish(credential,actualTraceId);case 9:registrationResult=_context5.sent;if(registrationResult){_context5.next=10;break;}throw new Error('[registration_finish] webauthnCreate failed :: Unable to verify credential Relying Party Server!');case 10:return _context5.abrupt("return",registrationResult);case 11:case"end":return _context5.stop();}},_callee5);}));return function(_x5,_x6){return _ref5.apply(this,arguments);};}();this.webauthnGet=function(){var _ref6=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee6(userIdentifier,traceId){var actualTraceId,authStartResponse,pubKey,response,credential,authFinishResponse,_t6,_t7;return _regenerator["default"].wrap(function(_context6){while(1)switch(_context6.prev=_context6.next){case 0:if(traceId===void 0){traceId=null;}_this.status='AUTHENTICATION_STARTING';if(_this.userIdentifier!==userIdentifier){_this.userIdentifier=userIdentifier;}actualTraceId=traceId||_zsmLogger["default"].generateTraceId();_zsmLogger["default"].debug("webauthnGet called for user: "+userIdentifier,actualTraceId);_context6.next=1;return _this.webauthnRetrieve(userIdentifier,true,actualTraceId);case 1:if(_this.isEnrolled){_context6.next=2;break;}throw new Error("Credential is missing for "+userIdentifier);case 2:_context6.next=3;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].authenticationStart(_this.credentialID,actualTraceId);case 3:authStartResponse=_context6.sent;if(authStartResponse){_context6.next=4;break;}throw new Error('[authentication_start] webauthnGet failed :: Unable to start authentication with Relying Party Server!');case 4:pubKey=authStartResponse.rcr.publicKey;if(!(!pubKey||!pubKey.challenge)){_context6.next=5;break;}throw new Error('[authentication_start] webauthnGet failed :: Unable to acquire challenge from public key!');case 5:_t6=_this;_context6.next=6;return(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi].webauthn_get(pubKey,actualTraceId);case 6:_t7=_context6.sent;response=_t6.toObject.call(_t6,_t7);if(response!=null&&response.result){_context6.next=7;break;}throw new Error('[mpc_round] webauthnGet failed :: Unable to obtain credential from Crypto Server!');case 7:credential=response.result;_context6.next=8;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].authenticationFinish(credential,actualTraceId);case 8:authFinishResponse=_context6.sent;if(authFinishResponse){_context6.next=9;break;}throw new Error('[authentication_finish] webauthnGet failed :: Unable to verify credential Relying Party Server!');case 9:if(!(!authFinishResponse.user_id||!authFinishResponse.token)){_context6.next=10;break;}throw new Error('[authentication_finish] webauthnGet failed :: User ID or token is missing from response body!');case 10:return _context6.abrupt("return",{signature:credential.response.signature,signedChallenge:credential.response.clientDataJSON,user_id:authFinishResponse.user_id,token:authFinishResponse.token,challenge:pubKey.challenge,credential:credential});case 11:case"end":return _context6.stop();}},_callee6);}));return function(_x7,_x8){return _ref6.apply(this,arguments);};}();this.webauthnRetrieve=function(){var _ref7=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee7(userIdentifier,silent,traceId){var _response$result,actualTraceId,currentConsumerId,response,_actualTraceId,_t8,_t9,_t0;return _regenerator["default"].wrap(function(_context7){while(1)switch(_context7.prev=_context7.next){case 0:if(silent===void 0){silent=false;}if(traceId===void 0){traceId=null;}_this.credentialID=null;if(!silent){_this.status='CREDENTIAL_RETRIEVING';}_context7.prev=1;if(_this.userIdentifier!==userIdentifier){_this.userIdentifier=userIdentifier;}actualTraceId=traceId||_zsmLogger["default"].generateTraceId();currentConsumerId=(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].consumer_id;_zsmLogger["default"].trace("[RETRIEVE] Using current consumerId for storage retrieval: "+currentConsumerId,actualTraceId);_zsmLogger["default"].trace("[RETRIEVE] userIdentifier parameter: "+userIdentifier,actualTraceId);_zsmLogger["default"].trace("[RETRIEVE] Current identity_id (for MPC only): "+(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId],actualTraceId);_t8=_this;_context7.next=2;return(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi].webauthn_retrieve(currentConsumerId,actualTraceId);case 2:_t9=_context7.sent;response=_t8.toObject.call(_t8,_t9);if(!(response.error||!(response!=null&&(_response$result=response.result)!=null&&_response$result.rawId))){_context7.next=3;break;}_zsmLogger["default"].debug("No credential found for userIdentifier: "+userIdentifier,actualTraceId);return _context7.abrupt("return",false);case 3:_this.credentialID=response.result.rawId;_zsmLogger["default"].debug("Found credential with rawId: "+_this.credentialID,actualTraceId);if(!silent){_this.status='CREDENTIAL_RETRIEVED';}return _context7.abrupt("return",_this.credentialID);case 4:_context7.prev=4;_t0=_context7["catch"](1);_actualTraceId=traceId||_zsmLogger["default"].generateTraceId();_zsmLogger["default"].error("webauthnRetrieve error: "+_t0.message,_actualTraceId);if(!silent){_this.status='CREDENTIAL_RETRIEVAL_FAILED';}throw _t0;case 5:case"end":return _context7.stop();}},_callee7,null,[[1,4]]);}));return function(_x9,_x0,_x1){return _ref7.apply(this,arguments);};}();this.webauthnCreateThenPartialGet=function(){var _ref8=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee8(userIdentifier,traceId){var _createResponse3,_regFinishAuthStartRe,_regFinishAuthStartRe2,_getResponse;var actualTraceId,returnObj,publicKey,identity_id,createResponse,createCredential,regFinishAuthStartResponse,getChallenge,getResponse,getCredential;return _regenerator["default"].wrap(function(_context8){while(1)switch(_context8.prev=_context8.next){case 0:if(traceId===void 0){traceId=null;}_this.status='ENROLLMENT_STARTING';_context8.next=1;return _this.initializeZsm(userIdentifier);case 1:actualTraceId=traceId||_zsmLogger["default"].generateTraceId();_zsmLogger["default"].debug("[OPTIMIZED-FLOW] Starting webauthnCreateThenPartialGet for user: "+userIdentifier,actualTraceId);_context8.next=2;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].createIdentityThenRegistrationStart(actualTraceId);case 2:returnObj=_context8.sent;if(returnObj){_context8.next=3;break;}throw new Error('[createIdentityThenRegistrationStart] webauthnCreateThenPartialGet failed :: Unable to retrieve public key from Relying Party Server!');case 3:publicKey=returnObj.publicKey,identity_id=returnObj.identity_id;_zsmLogger["default"].debug("[OPTIMIZED-FLOW] Received identity_id: "+identity_id,actualTraceId);(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId]=identity_id;_zsmLogger["default"].trace("[OPTIMIZED-FLOW] Storage consumer_id (preserved): "+(0,_classPrivateFieldLooseBase2["default"])(_this,_config)[_config].consumer_id,actualTraceId);_zsmLogger["default"].trace("[OPTIMIZED-FLOW] MPC consumer_id will be: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_getMpcConsumerId)[_getMpcConsumerId](),actualTraceId);if(!(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi]){_context8.next=5;break;}_context8.next=4;return(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi].configure((0,_classPrivateFieldLooseBase2["default"])(_this,_getMpcConfig)[_getMpcConfig]());case 4:_zsmLogger["default"].trace("[OPTIMIZED-FLOW] ZSM API configured with identity_id: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId],actualTraceId);case 5:_zsmLogger["default"].trace('[OPTIMIZED-FLOW] About to call #zsmApi.webauthn_create...',actualTraceId);_zsmLogger["default"].trace("[OPTIMIZED-FLOW] publicKey: "+JSON.stringify(publicKey),actualTraceId);_context8.next=6;return(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi].webauthn_create(publicKey,actualTraceId);case 6:createResponse=_context8.sent;_zsmLogger["default"].trace('[OPTIMIZED-FLOW] Raw ZSM API response received',actualTraceId);if(createResponse){_context8.next=7;break;}throw new Error('[mpc_round] webauthnCreateThenPartialGet failed :: Unable to obtain response from Crypto Server!');case 7:createResponse=_this.toObject(createResponse);if((_createResponse3=createResponse)!=null&&_createResponse3.result){_context8.next=8;break;}throw new Error('[mpc_round] webauthnCreateThenPartialGet failed :: Unable to obtain credential from Crypto Server!');case 8:createCredential=createResponse.result;_context8.next=9;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].registrationFinishAuthenticationStart(createCredential,actualTraceId);case 9:regFinishAuthStartResponse=_context8.sent;if(regFinishAuthStartResponse){_context8.next=10;break;}throw new Error('[registrationFinishAuthenticationStart] webauthnCreateThenPartialGet failed :: Unable to retrieve response from Relying Party Server!');case 10:regFinishAuthStartResponse=_this.toObject(regFinishAuthStartResponse);if(!(!((_regFinishAuthStartRe=regFinishAuthStartResponse)!=null&&_regFinishAuthStartRe.rcr)||!((_regFinishAuthStartRe2=regFinishAuthStartResponse)!=null&&(_regFinishAuthStartRe2=_regFinishAuthStartRe2.rcr)!=null&&_regFinishAuthStartRe2.publicKey))){_context8.next=11;break;}throw new Error('[registrationFinishAuthenticationStart] webauthnCreateThenPartialGet failed :: Unable to retrieve public key from Relying Party Server!');case 11:getChallenge=regFinishAuthStartResponse.rcr.publicKey;_this.credentialID=createCredential.rawId||createCredential.id;_zsmLogger["default"].trace('[OPTIMIZED-FLOW] About to call #zsmApi.webauthn_get...',actualTraceId);_context8.next=12;return(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi].webauthn_get(getChallenge,actualTraceId);case 12:getResponse=_context8.sent;if(getResponse){_context8.next=13;break;}throw new Error('[mpc_round] webauthnGet failed :: Unable to obtain response from Crypto Server!');case 13:getResponse=_this.toObject(getResponse);if((_getResponse=getResponse)!=null&&_getResponse.result){_context8.next=14;break;}throw new Error('[mpc_round] webauthnGet failed :: Unable to obtain credential from Crypto Server!');case 14:getCredential=getResponse.result;return _context8.abrupt("return",{registrationResult:createCredential,credential:{signature:getCredential.response.signature,signedChallenge:getCredential.response.clientDataJSON,user_id:userIdentifier,challenge:getChallenge.challenge,credential:getCredential}});case 15:case"end":return _context8.stop();}},_callee8);}));return function(_x10,_x11){return _ref8.apply(this,arguments);};}();this.webauthnPartialGet=function(){var _ref9=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee9(userIdentifier,traceId){var actualTraceId,getChallenge,pubKey,getResponse,getCredential,_t1,_t10;return _regenerator["default"].wrap(function(_context9){while(1)switch(_context9.prev=_context9.next){case 0:if(traceId===void 0){traceId=null;}_this.status='AUTHENTICATION_STARTING';if(_this.userIdentifier!==userIdentifier){_this.userIdentifier=userIdentifier;}actualTraceId=traceId||_zsmLogger["default"].generateTraceId();_zsmLogger["default"].debug("[OPTIMIZED-AUTH] webauthnPartialGet called for user: "+userIdentifier,actualTraceId);_zsmLogger["default"].trace("[OPTIMIZED-AUTH] Current identity_id: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId],actualTraceId);_zsmLogger["default"].trace("[OPTIMIZED-AUTH] MPC consumer_id will be: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_getMpcConsumerId)[_getMpcConsumerId](),actualTraceId);if(!((0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi]&&(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId])){_context9.next=2;break;}_context9.next=1;return(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi].configure((0,_classPrivateFieldLooseBase2["default"])(_this,_getMpcConfig)[_getMpcConfig]());case 1:_zsmLogger["default"].trace("[OPTIMIZED-AUTH] ZSM API configured with identity_id: "+(0,_classPrivateFieldLooseBase2["default"])(_this,_identityId)[_identityId],actualTraceId);case 2:if(_this.isEnrolled){_context9.next=3;break;}throw new Error("Credential is missing for "+userIdentifier);case 3:_context9.next=4;return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].authenticationStart(_this.credentialID,actualTraceId);case 4:getChallenge=_context9.sent;if(getChallenge){_context9.next=5;break;}throw new Error('[authentication_start] webauthnPartialGet failed :: Unable to start authentication with Relying Party Server!');case 5:pubKey=getChallenge.rcr.publicKey;if(!(!pubKey||!pubKey.challenge)){_context9.next=6;break;}throw new Error('[authentication_start] webauthnPartialGet failed :: Unable to retrieve public key from Relying Party Server!');case 6:_zsmLogger["default"].trace('[OPTIMIZED-AUTH] About to call #zsmApi.webauthn_get...',actualTraceId);_t1=_this;_context9.next=7;return(0,_classPrivateFieldLooseBase2["default"])(_this,_zsmApi)[_zsmApi].webauthn_get(pubKey,actualTraceId);case 7:_t10=_context9.sent;getResponse=_t1.toObject.call(_t1,_t10);if(getResponse!=null&&getResponse.result){_context9.next=8;break;}throw new Error('[mpc_round] webauthnPartialGet failed :: Unable to obtain credential from Crypto Server!');case 8:getCredential=getResponse.result;return _context9.abrupt("return",{signature:getCredential.response.signature,signedChallenge:getCredential.response.clientDataJSON,user_id:userIdentifier,challenge:getChallenge.challenge,credential:getCredential});case 9:case"end":return _context9.stop();}},_callee9);}));return function(_x12,_x13){return _ref9.apply(this,arguments);};}();this.webauthnReset=function(){return(0,_classPrivateFieldLooseBase2["default"])(_this,_relyingParty)[_relyingParty].resetAll();};this.resetDevice=this.webauthnReset;if(!(config!=null&&config.authenticator_host_url)){config.authenticator_host_url=config.authentication_host||config.host_url;}if(!(config!=null&&config.zsm_host_url)){config.zsm_host_url=config.host_url.replace("-authenticator","");}config.host_url=config.zsm_host_url;(0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config]=Object.assign((0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config],config);_zsmLogger["default"].setLogLevel((0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config].log_level);_zsmLogger["default"].info("ZSM JavaScript client v"+_zsmLogger["default"].version+" initialized successfully");_zsmLogger["default"].info("ZSM JavaScript client configured with log level: "+(0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config].log_level);if(typeof zsmAppConfig!=='undefined')zsmAppConfig=(0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config];(0,_classPrivateFieldLooseBase2["default"])(this,_relyingParty)[_relyingParty]=new _relyingParty2["default"]((0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config].authenticator_host_url,(0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config].api_key,(0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config].application_id);(0,_classPrivateFieldLooseBase2["default"])(this,_zsmApi)[_zsmApi];this.initializationMutex=false;if((0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config].health_check===true){_zsmLogger["default"].info('Automatic health check enabled, running on initialization...');this.healthCheck().then(function(result){if(result.overall_status!=='HEALTHY'){_zsmLogger["default"].warn("Health check failed during initialization: "+JSON.stringify(result));}else{_zsmLogger["default"].info('Initialization health check passed');}})["catch"](function(error){_zsmLogger["default"].error("Health check error during initialization: "+error.message);});}}return(0,_createClass2["default"])(WebAuthnClientBase,[{key:"userIdentifier",get:function get(){return(0,_classPrivateFieldLooseBase2["default"])(this,_relyingParty)[_relyingParty].customerDefinedIdentifier;},set:function set(v){return(0,_classPrivateFieldLooseBase2["default"])(this,_relyingParty)[_relyingParty].customerDefinedIdentifier=v;}},{key:"customerDefinedIdentifier",get:function get(){return(0,_classPrivateFieldLooseBase2["default"])(this,_relyingParty)[_relyingParty].customerDefinedIdentifier;},set:function set(v){return(0,_classPrivateFieldLooseBase2["default"])(this,_relyingParty)[_relyingParty].customerDefinedIdentifier=v;}},{key:"username",get:function get(){return this.userIdentifier;},set:function set(v){return this.userIdentifier=v;}},{key:"userID",get:function get(){return this.userIdentifier;}},{key:"token",get:function get(){return(0,_classPrivateFieldLooseBase2["default"])(this,_relyingParty)[_relyingParty].token;}},{key:"credentialID",get:function get(){return(0,_classPrivateFieldLooseBase2["default"])(this,_relyingParty)[_relyingParty].credentialID;},set:function set(v){return(0,_classPrivateFieldLooseBase2["default"])(this,_relyingParty)[_relyingParty].credentialID=v;}},{key:"identityId",get:function get(){return(0,_classPrivateFieldLooseBase2["default"])(this,_identityId)[_identityId];}},{key:"_relyingParty",get:function get(){return(0,_classPrivateFieldLooseBase2["default"])(this,_relyingParty)[_relyingParty];}},{key:"isEnrolled",get:function get(){return!!this.credentialID;}}],[{key:"version",get:function get(){return _package.version;}}]);}();function _getMpcConsumerId2(){var result=(0,_classPrivateFieldLooseBase2["default"])(this,_identityId)[_identityId]||(0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config].consumer_id;_zsmLogger["default"].trace("[MPC-CONSUMER-ID] identity_id: "+(0,_classPrivateFieldLooseBase2["default"])(this,_identityId)[_identityId]+", consumer_id: "+(0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config].consumer_id+", returning: "+result+" (using identity_id for MPC when available)");return result;}function _getMpcConfig2(){return(0,_extends2["default"])({},(0,_classPrivateFieldLooseBase2["default"])(this,_config)[_config],{consumer_id:(0,_classPrivateFieldLooseBase2["default"])(this,_getMpcConsumerId)[_getMpcConsumerId]()});}var _default=exports["default"]=WebAuthnClientBase;