oidc-lib
Version:
A library for creating OIDC Service Providers
2 lines (1 loc) • 27.4 kB
JavaScript
!function e(t,r,n){function a(o,s){if(!r[o]){if(!t[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(i)return i(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var u=r[o]={exports:{}};t[o][0].call(u.exports,(function(e){return a(t[o][1][e]||e)}),u,u.exports,e,t,r,n)}return r[o].exports}for(var i="function"==typeof require&&require,o=0;o<n.length;o++)a(n[o]);return a}({1:[function(e,t,r){t.exports={email:{input:"fieldset",content:{email:{label:"Email address",input:"email"},email_verified:{label:"Verified",input:"radio",values:["true","false"],default:"false",editable:!1}}},phone:{input:"fieldset",content:{phone_number:{label:"Phone",input:"text"},phone_number_verified:{input:"radio",label:"Verified",values:["true","false"],default:"false",editable:!1}}},address:{input:"fieldset",legend:"Postal Address",object:"address",content:{street_address:{label:"Address",input:"text"},street_address_1:{label:"Apt or Unit",input:"text"},locality:{label:"City",input:"text"},region:{label:"State",input:"text"},postal_code:{label:"Zip",input:"text"},country:{label:"Country",input:"text"},address:{input:"object",note:'contains all claims with object of "address"'}}},profile:{input:"fieldset",legend:"Profile",content:{name:{label:"Name",input:"text"},given_name:{label:"First Name",input:"text"},family_name:{label:"Family Name",input:"text"},middle_name:{label:"Middle Name",input:"text"},nickname:{label:"Nickname",input:"text"},preferred_username:{label:"Username",input:"text"},profile:{label:"Profile",input:"text"},picture:{label:"Picture",input:"photo"},website:{label:"Web Site",input:"text"},gender:{label:"Gender",input:"radio",values:["male","female","alternative"],default:"female"},birthdate:{label:"Date of Birth",input:"text",template:"YYYY-MM-DD"},zoneinfo:{label:"Zone Info",input:"text"},locale:{label:"Locale",input:"text"},updated_at:{input:"text",format:"date"}}}}},{}],2:[function(e,t,r){function n(e,t){var r;for(var a in t)"fieldset"===(r=t[a]).input?n(e,r.content):e[a]=r}function a(e,t,r){var n,u,d,p,_,f="";for(var g in e){var v="",m=e[g];if(void 0!==t[g]||"suppress!"!==m.default){switch(m.input){case"text":case"email":u=c(m,g),v=void 0===m.type||"string"===m.type?u+'<input type="text" id="'+g+'" name="'+g+'" class="form-control"/>\r\n':u+'<textarea rows="2" cols="60" wrap="hard" id="'+g+'" name="'+g+'" style="height: auto;"></textarea>\r\n',v+="</div>";break;case"radio":i(g,m);var b="radio_"+g;v=(u=c(m,b))+'<div id="'+b+'">';for(var y=0;y<m.values.length;y++)v+='<label class="radio-inline"><input type="radio" name="'+g+'" id="'+(_=g+"_"+(p=m.values[y]))+'" />'+p+"</label>";v+="</div></div>";break;case"select":i(g,m),v=(n=o(m,g))+'<select id="'+g+'" name="'+g+'" >\r\n';for(y=0;y<m.values.length;y++)v+='<option value="'+(p=m.values[y])+'">'+p+"</option>\r\n";v+="</select>\r\n";break;case"checkboxes":i(g,m),v=(d=s(m,g))+'<div class="form-group form-check">\r\n';for(y=0;y<m.values.length;y++)v+='<label class="form-check-label"><input class="form-check-input" id="'+(_=g+"_"+(p=m.values[y]))+'" name="'+g+'" type="checkbox">'+p+"</label>\r\n";v+=l(d);break;case"checkbox":v='<label class="form-check-label"><input class="form-check-input" id="'+g+'" name="'+g+'" type="checkbox">'+(n=o(m,g))+"</label>\r\n";break;case"boolean":d=s(m,g);var k=["true","false"];for(y=0;y<k.length;y++)v+='<input type="radio" name="'+g+'" id="'+(_=g+"_"+(p=k[y]))+'" />\r\n<label for="'+_+'" class="inline">'+p+" </label>\r\n";v+=l(d);break;case"fieldset":if(void 0!==r&&void 0!==m.scope&&r.indexOf(m.scope)<0){v="";break}(v=a(m.content,t)).length>0&&void 0!==m.legend&&(v=(d=s(m,g))+v+l(d));break;case"button":n="Submit",void 0!==m.label&&(n=m.label),v='<div class="col_3"><input type="button" value="'+n+'" onclick="'+m.method+'" /></div>\r\n';break;case"hidden":v='<input type="hidden" id="'+g+'" name="'+g+'"/>'}f+=v}}return f}function i(e,t){if(void 0===t.values)throw alert("formTemplate "+t.input+' "values" for "'+e+'" is not defined'),"error: values missing"}function o(e,t){var r=t;void 0!==e.label&&(r=e.label);var n="";return void 0!==e.label_class&&(n=' class="'+e.label_class+'"'),'<label for="'+t+'"'+n+">"+r+"</label>\r\n"}function s(e,t){var r="";return void 0!==e.legend&&(r='<div class="panel panel-default">\r\n<div class="panel-heading">'+e.legend+'</div>\r\n<div class="panel-body">'),r}function l(e){var t="";return""!==e&&(t="</div>\r\n</div>\r\n"),t}function c(e,t){return'<div class="form-group">'+o(e,t)}function u(e){var t=document.getElementById("warning_text"),r=document.getElementById("warning_div");void 0!==t&&(t.innerHTML=""),void 0!==r&&(r.style.visibility="hidden")}t.exports={loadFormValues:function e(t,r){for(var n in u(),t){var a,i=t[n],o="",s="";if(void 0===r[n]){if("suppress!"===i.default)continue;void 0!==i.default&&(o=i.default)}else o=r[n];if(void 0!==o)switch(i.input){case"text":if(a=document.getElementById(n),"string"==typeof o)a.value=o;else if(Array.isArray(o)){if(void 0===o.length)continue;var l=" ";"array"===i.type&&(l="\n");for(var c="",d="",p=0;p<o.length;p++){var _=o[p].trim();_.length>0&&(c+=d+_,d=l)}a.value=c}else a.value=JSON.stringify(o);break;case"select":(a=document.getElementById(n)).value=o;break;case"boolean":case"radio":o&&(s=n+"_"+o,(a=document.getElementById(s)).checked=!0);break;case"checkboxes":if(o&&o.length>0)for(p=0;p<o.length;p++)s=n+"_"+o[p],(a=document.getElementById(s)).checked=!0;break;case"checkbox":o&&((a=document.getElementById(n)).checked=!0);break;case"fieldset":e(i.content,r);break;case"hidden":(a=document.getElementById(n)).value=o}}},formToJson:function(e,t){var r={};n(r,t);for(var a=document.getElementById(e),i=a.getElementsByTagName("input"),o=a.getElementsByTagName("textarea"),s=a.getElementsByTagName("select"),l={},c=0;c<i.length;c++){var u=i[c],d=u.name;if(void 0!==(f=r[d]))switch(u.type){case"hidden":case"text":case"select":0!==u.value.length&&(l[d]=u.value);break;case"boolean":case"radio":if(u.checked){var p=d+"_";value=u.id.substring(p.length),l[d]=value}break;case"checkbox":if(u.checked){p=d+"_";u.id.startsWith(p)?(void 0===l[d]&&(l[d]=[]),value=u.id.substring(p.length),l[d].push(value)):l[d]=!0}}}for(c=0;c<s.length;c++){var _=s[c];d=_.name;void 0!==(f=r[d])&&(0!==_.value.length&&(l[d]=_.value))}for(c=0;c<o.length;c++){var f,g=o[c];d=g.name;if(void 0!==(f=r[d])&&0!==g.value.length)if("array"===f.type){for(var v=[],m=g.value.split("\n"),b=0;b<m.length;b++)0!==m[b].length&&v.push(m[b]);l[d]=v}else l[d]=g.value}return l},createInputDiv:function(e,t,r,n){form_html=a(t,r),document.getElementById(e).innerHTML=form_html},displayError:function(e){var t=document.getElementById("warning_text"),r=document.getElementById("warning_div");void 0!==t&&(t.innerHTML=e);void 0!==r&&(r.style.visibility="visible")},clearError:u,postJsonData:function(e,t,r){var n=new XMLHttpRequest;e.url;if(n.open(e.method,e.url,!0),void 0!==e.headers)for(var a=0;a<e.headers.length;a++){var i=e.headers[a];n.setRequestHeader(i.name,i.value)}n.onreadystatechange=function(){if(4===n.readyState&&200===n.status){var e=JSON.parse(n.responseText);r(e)}};var o=JSON.stringify(t);n.send(o)}}},{}],3:[function(e,t,r){const n="\\wallet\\views\\";t.exports={registerEndpoints:function(e){a=n,(i=e).app.post("/wallet/auth_useragent_response",(function(e,t){processAuthUserAgentResponse(i,e,t)})),i.app.post("/wallet/consent_useragent_response",(function(e,t){!async function(e,t,r){e.util.log_debug("--- WALLET: PROCESS CONSENT USER AGENT RESPONSE ---");var n=t.body;e.util.log_detail("params",n);var a=e.ptools.getPersona("kind","natural").data.options;if(a.startup_pin&&a.startup_pin!==n.holder_credential)return void e.pmanager.managerNotification("Invalid Wallet PIN","alert-danger",!0);var i=JSON.parse(e.base64url.decode(n.content_module_state));if(n.error)i.error=n.error;else{i.scope_claim_map=n.scope_claim_map;for(var o=e.base64url.decode(n.scope_info),s=JSON.parse(o),l=0;l<n.scopes_and_creds.length;l++){var c=n.scopes_and_creds[l];s.scopeArray.includes(c)||s.scopeArray.push(c)}if(!1===n.accepted){var u=s.scopeArray.indexOf("openid");u>-1&&s.scopeArray.splice(u,1)}void 0!==n.currentPersona&&(s.currentPersona=n.currentPersona),void 0!==n.credentialIssuerId&&(s.credentialIssuerId=n.credentialIssuerId),n.claims.sub=s.currentPersona,i.newIdTokenContent=n.claims,i.consentInfo=s}e.sts.applyConsentResponse(r,n.encoded_sts_state_bundle,i)}(i,e,t)})),i.app.post("/wallet/process_ajax_request",(function(e,t){!function(e,t,r){e.util.log_debug("--- WALLET: PROCESS AJAX REQUEST ---");var n=t.body;if(e.util.log_detail("params",n),!0!==l(r,n.startup_identifier,n.startup_pin))return;switch(n.op){case"check_credentials":!function(e){var t={kind:"submit"};e.json(t)}(r);break;default:u(r,"unknown_op",n.op)}}(i,e,t)})),i.app.get("/wallet/manager",(function(e,t){i.pmanager.manager(i,e,t)})),i.app.get("/wallet/oauth_error",(function(e,t){i.pmanager.oauth_error(i,e,t)})),i.app.get("/wallet/pickup_uri",(function(e,t){!function(e,t,r){var n=t.query.pickup_uri;if(!n)return r.statusCode=400,void r.end();var a=e.util.operator_profile.wallet_config_group.credential_pickup,i="";if(a)for(var o in a)if(n.startsWith(o)){i=a[o];break}if(!i)return r.statusCode=400,void r.end();var s=t.originalUrl.indexOf("pickup_uri=");n=t.originalUrl.substr(s+11),n=encodeURIComponent(n);var l=e.sts.selfIssuedIssuerIdentifier(),c={id_token:{shc:{value:n}}},u=JSON.stringify(c),d=l+"?req_cred="+i+"&claims="+u+"&next_step="+l+"%3Fpage%3Dpersonas";window.location=d}(i,e,t)})),i.app.get("/wallet/entry_point",(function(e,t){return async function(e,t,r){if(t.query.iss&&t.query.login_hint)return async function(e,t,r){try{var n,a,i="Error getting oidc_initiate_login params",o=t.query.iss,s=t.query.login_hint;if(!n){i="Error getting credential issuer metadata";var l=await e.token.requestOPMetadata(o);i="Unable to parse credential_issuer metadata";var c=JSON.parse(l).registration_endpoint;if(!c)throw i="Unable to retrieve credential_issuer registration endpoint","No registration endpoint";var u={url:c,method:"POST",parseJsonResponse:!0,headers:[{name:"Accept",value:"application/json"},{name:"Content-type",value:"application/json"}],postData:{redirect_uris:[e.sts.selfIssuedIssuerIdentifier()]}};(a=await e.util.jsonHttpData(u)).pkce=await e.simple_crypto.createB64Code(48)}var p=await e.ptools.locate_or_add_credential_persona(o,a);if(!p)throw"no persona_id located or added in create_persona_with_credential";await d(p,s,o)}catch(e){console.log("ERROR in oidc_initiate_login - "+i,e)}}(e,t)}(i,e)})),i.app.get("/wallet/oauth_error",(function(e,t){i.pmanager.oauth_error(i,e,t)}))},invokeAuthUserAgent:function(e,t,r,n){i.util.log_debug("--- WALLET: INVOKE AUTH USERAGENT ---");return i.util.log_debug("WARNING: login_hint has been disabled..."),void i.sts.applyAuthResponse(t,n,{})},invokeConsentUserAgent:async function(e,t,r,n,o){if(i.util.log_debug("--- WALLET: INVOKE CONSENT USERAGENT ---"),await s(e,t,n,o))return;var l="clms_0",c="clms_0";if(null!==r){l="clms_1";var u=r.client_uri;void 0===u&&(u=r.redirect_uri);var d=r.client_name;void 0===d&&(d=u);var p=r.company_logo;void 0===p&&(p="https://undefined.logo.uri");var _,f=!1,g=i.util.url(r.redirect_uri);void 0!==r.client_uri&&(_=i.util.url(r.client_uri)),void 0!==_&&_.hostname===g.hostname||(u=r.redirect_uri,f=!0)}var v=JSON.stringify(t),m=i.base64url.encode(v),b=o.consentInfo;void 0===b&&(b={});var y=JSON.stringify(b),k=i.base64url.encode(y),w=i.ptools.getPersona("kind","natural").data.options,h=w.startup_identifier?"clms_1":"clms_0",E=w.startup_pin?"clms_1":"clms_0";f&&(c="clms_1");var S=i.base64url.encode(JSON.stringify(o));e.render(a+"get_consent",{title:"Getting Consent",client_name:d,client_uri:u,client_redirect_uri:r.redirect_uri,cardset_blurb:"Select an ID",company_logo:p,danger:c,client_info_class:l,identifier_class:h,pin_class:E,scope_info:m,consent_info:k,content_module_state:S,encoded_sts_state_bundle:n})},generateUserinfo:function(e,t,r,n){i.util.log_debug("--- WALLET: GENERATE USERINFO ---"),i.util.log_debug("Generating userInfo in wallet\r\n"),i.util.log_detail("sub",n.sub);c(n.sub);i.sts.submitUserinfoResponse(e,"wallet",t,r,content_module_state.consentInfo.tokenContent)},processVerifiedIdToken:function(e,t,r){if(i.util.log_debug("--- WALLET: PROCESS VERIFIED ID TOKEN ---"),!1===c(t.sub))return;content_module_state={},content_module_state.sub=t.sub,i.sts.sendAuthResponse(e,r,content_module_state)},token_presentation_options:async function(e){switch(e.option){case"share_consented_claims":return i.ptools.getPersona("natural").data.options.share_consented_claims;case"tokenSigningKey":return await async function(e){try{var t=e.sub;if(void 0===t)throw"tokenSigningKey requested but no sub specified";return(await i.key_management.loadSingleKey({dictionary:{did:t}})).keyObject}catch(e){throw e}}(e);case"imposeFormPostResponseMode":case"vcFormat":if(!e.value)return o[e.option];o[e.option]=e.value}},setConsentMode:function(e){if(e){var t=document.getElementById("content_module_state").value,r=JSON.parse(i.base64url.decode(t));if(r.login_hint){var n=i.ptools.getPersona("id",r.login_hint);if(n&&"credential"===n.kind)return void i.ptools.output_card(!0)}}i.util.setElementVisibility("new_consent",!e),i.util.setElementVisibility("existing_consent",e)},VIEWPATH:n};var a=null,i=null,o={imposeFormPostResponseMode:!1,vcFormat:"verifiablePresentation"};async function s(e,t,r,n){var a,o=i.ptools.getPersona("natural").data.options;if(!n.explicitConsent&&o.share_consented_claims&&n.consentInfo&&n.consentInfo.idTokenContent&&i.sts.isScopeConsented(n)){var s=n.consentInfo.credentialIssuerId;a=i.ptools.getPersona("id",s)}if(!a)return!1;var l=n.consentInfo.idTokenContent;n.consentInfo=t,n.consentInfo.currentPersona=n.sub;var c={sub:n.sub},u=await i.token.retrieveVerifiableCredential(a,c);if(a.vc_constants&&u)if("verifiablePresentation"===await i.feature_modules.wallet.code.token_presentation_options({option:"vcFormat"})){var d={"@options":a.vc_constants["@options"],type:["VerifiablePresentation"],verifiableCredential:[u.JWT]};l.vp=d}else{l._claim_names={},l._claim_sources={};var p=a.vc_constants.type[a.vc_constants.type.length-1];l._claim_names[p]="vc1",l._claim_sources.vc1=u}n.scope_claim_map=a.scope_claim_map;for(var _=0;_<a.scopes_and_creds.length;_++){var f=a.scopes_and_creds[_];n.consentInfo.scopeArray.includes(f)||n.consentInfo.scopeArray.push(f)}return n.consentInfo.credentialIssuerId=a.id,l.sub=n.consentInfo.currentPersona,n.newIdTokenContent=l,i.sts.applyConsentResponse(e,r,n),!0}function l(e,t,r){var n=i.ptools.getPersona("kind","natural").options;if(n.startup_identifier){if(!t)return u(e,"invalid_authorization_parameters");if(t=t.toLowerCase(),n.startup_identifier.toLowerCase()!==t)return u(e,"incorrect startup id")}if(n.startup_pin){if(!r)return u(e,"invalid_authorization_parameters");if(n.startup_pin!==r)return i.util.log_detail("startup id entered",t),i.util.log_detail("startup pin entered",r),u(e,"invalid_pin")}return!0}function c(e){for(var t in userAccounts)if(userAccounts[t].sub===e)return userAccounts[t]}function u(e,t,r){i.util.log_detail("SENDING AJAX ERROR",t);var n={kind:"error",detail:{error:t,error_description:r}};return e.json(n),!1}async function d(e,t,r,n,a){try{error_message="Unable to connect to the credential_issuer";var o=await i.token.requestOPMetadata(r);error_message="Unable to parse credential_issuer metadata";var s=JSON.parse(o);if(error_message="Error getting or creating credential_issuer claims",!await async function(e,t){try{var r=t,n=await i.dbs.wallet.provider.getDocument(i.dbs.wallet,"credential_issuer_claims",r)}catch(r){var a={issuer:e,id:t};n=await i.dbs.wallet.provider.createOrUpdateDocument(i.dbs.wallet,"credential_issuer_claims",a)}return n}(r,e))throw alert("Error populating credential_issuer object"),"no credential_issuer claims in request_credential";var l=s.authorization_endpoint,c=i.sts.selfIssuedIssuerIdentifier(),u=await i.simple_crypto.randomString(),d={nonce:u,persona_id:e};i.nonceCache.set("cred_request_nonce_info",JSON.stringify(d));"code";var p={tok_ept:s.token_endpoint,cred_ept:s.credential_endpoint,sub:e};n&&(p.next_step=n);var _=i.util.createParameterString(p).substring(1),f=i.ptools.getPersona("id",e),g={client_id:f.client_id,redirect_uri:c,response_type:"code",nonce:u,state:_,scope:"openid openid_credential",login_hint:t,code_challenge:await i.simple_crypto.digestSha256(f.data.pkce),code_challenge_method:"S256"};a&&(g.claims=a);var v=i.util.createParameterString(g);window.location=l+v}catch(e){error_message;error_message?i.pmanager.managerNotification(error_message,"alert-warning",!0):i.pmanager.managerNotification(removeNotification)}}},{}],4:[function(e,t,r){var n=!1,a=!1;function i(e){var t=pk.base64url.encode(JSON.stringify(e));return new Promise((function(e,r){if(null===navigator.serviceWorker.controller)r("serviceworker-not-ready");else{var n=new MessageChannel;n.port1.onmessage=function(t){t.data.error?r(t.data.error):e(JSON.parse(pk.base64url.decode(t.data)))},navigator.serviceWorker.controller.postMessage(t,[n.port2])}}))}pk.util.log_debug("[Main] Registering Service Worker"),navigator.serviceWorker.register("/wallet/service-worker.js",{scope:"/wallet/"}).then((e=>{pk.util.log_debug("[Main] Service Worker Registration Succeeded"),!n&&a&&pk.util.log_debug("NOT beginning Startup due to delayed Registration")}),(e=>{pk.util.log_debug("[Main] Service Worker Registration failed",e)})),navigator.serviceWorker.addEventListener("message",(function(e){switch(e.data.action){case"install":n?pk.util.log_debug("[Main] Ignoring INSTALL message from ServiceWorker because startup begun."):(pk.util.log_debug("[Main] Received INSTALL message from Service Worker and invoking startup."),f());break;case"managerNotification":case"masterNotification":_(e.data)}})),function(){var e,t='<div class="center-block" style="padding: 20%">\t<img style="height: 100%; width: 100%; object-fit: contain" src=\'/wallet/images/icons/{{splash}}\'/></div>';window.location.search.startsWith("?req_cred=")?e="blue-setup.png":window.location.search||(e="blue-512x512.png");if(e){t=t.replace("{{splash}}",e),document.getElementById("render").innerHTML=t}}();var o={key_management:pk.key_management,did_management:pk.did_management,sts:pk.sts,token:pk.token,pmanager:pk.pmanager,pexchange:pk.pexchange,serialize64:pk.serialize64,claimer_crypto:pk.claimer_crypto,simple_crypto:pk.simple_crypto},s=pk.util.createDbScaffold(),l=e("../wallet/jsonForm"),c={wallet:{code:e("../wallet/wallet"),response_types:pk.util.config.content_modules.wallet.responseTypes,resources:{scope_claim_map:e("../wallet/data/scope_claim_map_auto")}},sts:{resources:{scope_claim_map:e("../wallet/data/scope_claim_map_auto")}}};for(var u in pk.util.config.content_modules)pk.app.registerCookie(pk.sts.cookie_identifier+u);if(void 0!==pk.util.config.sts.httpsServerUrl)var d=pk.util.url(pk.util.config.sts.httpsServerUrl);var p={};function _(e){"managerNotification"===e.action?elementName="manager_notifications":elementName="notification";var t=e.message,r=e.className,n=e.dismissible,a=document.getElementById(elementName);if(a||(a=document.getElementById("notification")),a)if("object"==typeof t)t.stack&&(t=t.stack);else{if("string"==typeof t){void 0===r&&(r="alert-success");var i=document.createElement("div");i.classList.add("alert",r),n&&i.classList.add("alert-dismissible");var o="";return n&&(o+='<button type="button" class="close" data-dismiss="alert">×</button>'),o+=t,i.innerHTML=o,a.appendChild(i),i}!1===t||void 0===t?a.innerHTML="":t.parentElement&&t.parentElement.removeChild(t)}}async function f(){if(!n){n=!0;var e="";try{if(pk.util.operator_profile=await async function(){var e={url:window.location.origin+"/wallet/operator_profile.json",method:"GET",headers:[{name:"Accept",value:"application/json"}]},t={};try{var r=await pk.util.jsonHttpData(e);t=JSON.parse(r)}catch{}return t}(),pk.app.entryPointUrlFunction=b,!("indexedDB"in window))throw"This browser doesn't support IndexedDB";for(var t in e="Error initializing databases",dbResult=await async function(e){var t="Error with initialize databases - ";try{for(var r in e){var n=e[r];if(void 0!==n){var a=await n.initialize(pk,r,n);pk.dbs[a.contentModuleName]=a}}}catch(e){throw t+e}}(s),pk.dbs)"sts"!==t.contentModuleName&&(t.flockMembership=pk.dbs.sts.flockMembership);for(var r in pk.feature_modules)try{pk.feature_modules[r].code&&pk.feature_modules[r].code.registerEndpoints(pk)}catch(e){claimer_config.logging>1?(console.error(chalk.red("Unable to register Endpoints for content module "+r)),console.error(e)):(console.error(chalk.red("Unable to register Endpoints for content module "+r)),console.error(chalk.red(e.message)))}for(var a in o)o[a].registerEndpoints(pk);console.log("checkIncognito"),e="Error checking incognito";var l=await new Promise(((e,t)=>{var r=function(e,t){e(t)},n=window.RequestFileSystem||window.webkitRequestFileSystem;if(n)n(window.TEMPORARY,100,r.bind(void 0,e,!1),r.bind(void 0,e,!0));else{var a=window.sessionStorage;try{a.setItem("safari_private","false"),a.removeItem("safari_private")}catch(t){t.code===DOMException.QUOTA_EXCEEDED_ERR&&0===a.length&&e(!0)}e(!1)}}));console.log("queryPwaServerForStartupMode");var c;await async function(){var e=pk.util.operator_profile.wallet_config_group.wallet_startup,t=await pk.util.queryPwaApi("/wallet/wallet_id_request",{});if(t){var r,n,a=t.wallet_id;try{n=r=await pk.dbs.wallet.provider.getDocument(pk.dbs.wallet,"pwa",t.wallet_id)}catch(e){404!==e.code&&pk.util.log_error("queryPwaServerForStartupMode",e)}}else try{n=r=await pk.dbs.wallet.provider.queryCollection(pk.dbs.wallet,"pwa",{})}catch(e){if(404===e.code)throw pk.util.log_error("queryPwaServerForStartupMode",e),"Pwa unable to start up."}var o=await i({action:"get_w_key"}),s=!0,l="";for(;s;){var c={};try{if(o&&o.length>0)break;var u=await m(l),d=u.pin,p=u.pii;if(d.length<e.pin_length)throw error="Pin must be at least "+e.pin_length+" characters long",error;var _=forge.md.sha256.create();_.update(d+p);var f=_.digest(),b=(await i({action:"set_w_key",data:pk.base64url.encode(f.bytes())}),await pk.simple_crypto.digestSha256(f.bytes()+a));if(r)c={w_id:b};else{var y,k=forge.util.createBuffer(forge.random.getBytesSync(16)),w=pk.pmanager.wallet_encrypt("AES-CBC",f,k);c={w_id:b,c_encrypted:y=JSON.stringify(w)}}switch((t=await pk.util.queryPwaApi("/wallet/register_request",c)).status){case"ERROR":throw pk.util.log_debug("queryPwaServerForStartupMode: "+t.error),t.error;case"RESTORE":await v(t);break;case"OK":if(r||(r={}),r.id=a,r.w_id=b,r.pii=p,y&&(r.c_encrypted=y),r.c_encrypted){w=JSON.parse(r.c_encrypted);k=pk.pmanager.wallet_decrypt("AES-CBC",f,w);await i({action:"set_c_key",data:pk.base64url.encode(k.bytes())})}g(r,n)&&await pk.dbs.wallet.provider.createOrUpdateDocument(pk.dbs.wallet,"pwa",r);break;default:throw pk.util.log_error("queryPwaServerForStartupMode","unexpected status: "+t.status),"Unexpected status: "+t.status}s=!1}catch(e){l=e}}return t}();if(console.log("dbScaffold wallet"),s.wallet)try{var u=await i({action:"get_w_key"});if(u&&u.length>0){var d=forge.util.createBuffer(pk.base64url.decode(u)),p=(await pk.dbs.wallet.provider.queryCollection(pk.dbs.wallet,"pwa",{}))[0],_=JSON.parse(p.c_encrypted);c=pk.pmanager.wallet_decrypt("AES-CBC",d,_)}if(!c)throw"Pwa unable to start up.";for(var f in s)!1===pk.util.operator_profile.wallet_config_group.encrypted?pk.dbs[f].c_key=!1:(pk.dbs[f].c_key=c,console.log("c_key set in dbs["+f+"]"))}catch(e){throw pk.util.log_error("queryPwaServerForStartupMode: Pwa unable to start up.",e),"c_key error - startup not possible."}e="Error initializing Personas",await pk.ptools.initializePersonas();await pk.ptools.loadPersonas(l);e="Error loading or creating keys",await pk.key_management.loadOrCreateKeys(),console.log("invokeEntryPoint"),pk.app.invokeEntryPoint(),console.log("pexchange.exchange temporarily disabled");var y=await i({action:"version"});if(y){pk.util.claimer_version=y,payload={action:"serviceUrl",serviceUrl:window.location.origin};var k=i(payload)}if(k)return!0}catch(t){pk.util.log_debug("[Main] *******************************"),pk.util.log_debug(e+t),pk.util.log_debug("[Main] *******************************")}}}function g(e,t){if(!t)return!0;for(var r in e)if(e[r]!==t[r])return!0;for(var r in t)if(t[r]!==e[r])return!0;return!1}async function v(e){try{if(!e.device_wallet)return void alert("unexpected input in process_restore: "+JSON.stringify(e));var t=e.device_wallet;if("1.0"!==t.version)return void alert("Could not restore wallet version: "+t.version);if("fullSync"!==t.type)return void alert("Could not process wallet restore of type: "+t.type);for(var r in t.databases){var n=t.databases[r];for(var a in n)for(var i=n[a],o=0;o<i.length;o++){var s=i[o],l=await pk.key_management.keyObjectImportKey(r,a,s);await pk.dbs[r].provider.createOrUpdateDocument(pk.dbs[r],a,l||s)}}}catch(e){alert("Error in process_restore: "+e)}}async function m(e){return new Promise(((t,r)=>{var n=pk.app.module_views.viewCollection["\\wallet\\views\\get_pin"],a=pk.base64url.decode(n);(p.resolve=t,p.reject=r,document.getElementById("render").innerHTML=a,e)&&(document.getElementById("pin_alert_div").innerHTML=e,pk.util.setElementVisibility("pin_alert_div",!0));document.getElementById("get_pin_save").setAttribute("onclick","pk.util.submitPin()")}))}function b(e){if(pk.util.log_debug("**** REMOVE query.id_token from entryPointUrlFunction1! ****"),"GET"===e.method){if(e.query.redirect_uri)return"/wallet/auth";if(e.query.req_cred)return"/wallet/req_cred";if(e.hash)return"/wallet/process_credential_issuer_response";if(e.query.code)return"/wallet/process_code";if(e.query.id_token)return"/wallet/process_credential_issuer_response";if(e.query.page)return"/wallet/manager";if(e.query.error)return"/wallet/oauth_error";if(e.query.w_id)return alert("wallet configuration complete"),"/wallet/manager";if(e.query.pickup_uri)return"/wallet/pickup_uri";if(e.query.entry_point)return"/wallet/entry_point";var t=!1;for(var r in e.query){t=!0;break}if(!t)return"/wallet/manager";alert("Invalid entry point: "+e.originalUrl)}else alert("post entrypoints not implemented")}pk.feature_modules=c,pk.dbs={},pk.util.content_module_signing_key=pk.key_management.contentModuleSigningKey,pk.util.cookieKeys=["abcdef123","defhij234"],pk.util.httpsServerUrl=d,pk.util.jsonForm=l,pk.util.masterNotification=_,pk.util.send_message_to_serviceWorker=i,pk.util.swMessages={},pk.util.sync_info=new function(){const e="hub-last-sync";var t=0;Object.defineProperty(this,"last_sync_time",{get:function(){return t},set:function(r){t=r,localStorage.setItem(e,r)},enumerable:!0}),Object.defineProperty(this,"remove_sync_time",{value:function(){return new Promise(((r,n)=>{t=0,localStorage.remove(e).then((e=>{e&&r()}),(e=>{n(e)}))}))}}),Object.defineProperty(this,"load_sync_time",{value:function(){return new Promise(((r,n)=>{var a=localStorage.getItem(e);t=a,r(a)}))}})},pk.util.sync_info.load_sync_time(),pk.util.submitPin=function(){var e={pin:document.getElementById("pin").value,pii:"foobar"};document.getElementById("render").innerHTML="",p.resolve(e)},a=!0,null===navigator.serviceWorker.controller?pk.util.log_debug("[Main] Controller not yet present."):(pk.util.log_debug("[Main] Controller exists."),f())},{"../wallet/data/scope_claim_map_auto":1,"../wallet/jsonForm":2,"../wallet/wallet":3}]},{},[4]);