@criipto/verify-react 0.1.2 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AuthMethodSelector/AuthMethodSelector.d.ts +1 -0
- package/dist/components/AuthMethodSelector/AuthMethodSelector.stories.d.ts +0 -1
- package/dist/components/SEBankIDSameDeviceButton/SEBankIDSameDeviceButton.d.ts +1 -0
- package/dist/context.d.ts +8 -2
- package/dist/criipto-verify-react.cjs.js +1 -1
- package/dist/criipto-verify-react.cjs.js.map +1 -1
- package/dist/criipto-verify-react.css +165 -50
- package/dist/criipto-verify-react.esm.js +1 -1
- package/dist/criipto-verify-react.esm.js.map +1 -1
- package/dist/provider.d.ts +7 -6
- package/dist/use-criipto-verify.d.ts +1 -1
- package/dist/utils.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{AuthMethodButton:()=>U,AuthMethodSelector:()=>Q,CriiptoVerifyProvider:()=>u,useCriiptoVerify:()=>k});const n=require("react/jsx-runtime"),i=require("react");var r=e.n(i);const A=require("@criipto/auth-js");var o=e.n(A);const s=()=>{throw new Error("You forgot to wrap your component in <CriiptoVerifyProvider>.")},c={loginWithRedirect:s,fetchOpenIDConfiguration:s,buildAuthorizeUrl:s,generatePKCE:s,handleResponse:s,responseType:"token",completionStrategy:"client",result:null,domain:""},a=(0,i.createContext)(c);var l=function(e,t,n,i){return new(n||(n=Promise))((function(r,A){function o(e){try{c(i.next(e))}catch(e){A(e)}}function s(e){try{c(i.throw(e))}catch(e){A(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}c((i=i.apply(e,t||[])).next())}))};const u=e=>{const[t]=(0,i.useState)((()=>new(o())({domain:e.domain,clientID:e.clientID,store:sessionStorage,redirectUri:e.redirectUri}))),[r,s]=(0,i.useState)(null),{redirectUri:c}=e,u=e.response||"token",d=e.completionStrategy||"client",g=(0,i.useMemo)((()=>({loginWithRedirect:()=>t.redirect.authorize({redirectUri:window.location.origin}),fetchOpenIDConfiguration:()=>t.fetchOpenIDConfiguration(),buildAuthorizeUrl:n=>l(void 0,void 0,void 0,(function*(){return yield t.buildAuthorizeUrl(t.buildAuthorizeParams(Object.assign({pkce:e.pkce,state:e.state,prompt:e.prompt},n||{})))})),generatePKCE:()=>l(void 0,void 0,void 0,(function*(){if("token"===u&&"client"===d)return yield(0,A.generatePKCE)()})),handleResponse:(e,n)=>l(void 0,void 0,void 0,(function*(){if(n.pkce&&"token"===u){let i=n.redirectUri||c;if(!i)throw new Error("redirectUri must be configured globally or per authentication component");yield t.processResponse(e,{code_verifier:n.pkce.code_verifier,redirect_uri:i}).then((e=>{(null==e?void 0:e.code)?s({code:e.code}):(null==e?void 0:e.id_token)?s({id_token:e.id_token}):s(null)})).catch((e=>{s(e)}))}else(null==e?void 0:e.code)?s({code:e.code}):(null==e?void 0:e.error)?s(new A.OAuth2Error(e.error,e.error_description)):s(null)})),responseType:u,completionStrategy:d,result:r,domain:t.domain,redirectUri:c})),[t,c,u,d,r]);return(0,n.jsx)(a.Provider,Object.assign({value:g},{children:e.children}))};function d(e){return e.split(/:|-/).map((e=>2===(e=e.replace(/id(\s|$)/,"ID")).length?e.toUpperCase():e.substr(0,1).toUpperCase()+e.substr(1))).join(" ")}function g(e,t){if((t=t.replace("urn:grn:authn:","")).startsWith("be:eid"))return{title:d(t).replace("BEEID","Belgian eID")};if(t.startsWith("nl:digid"))return{title:d(t).replace("NL ","")};if(t.startsWith("dk:mitid"))return{title:"MitID"};if(t.startsWith("dk:nemid")){let n,i=t.replace("dk:nemid:","");return"poces"===i&&("en"===e&&(n="Personal"),"da"===e&&(n="Personlig"),"sv"===e&&(n="Personlig"),"nb"===e&&(n="Personlig")),"moces"===i&&("en"===e&&(n="Employee key card"),"da"===e&&(n="Medarbejder nøglekort"),"sv"===e&&(n="Anställd nyckelkort"),"nb"===e&&(n="Ansatt nøkkelkort")),"moces:codefile"===i&&("en"===e&&(n="Employee key file"),"da"===e&&(n="Medarbejder nøglefil"),"sv"===e&&(n="Anställd nyckelfil"),"nb"===e&&(n="Ansatt nøkkelfil")),{title:"NemID",subtitle:n}}if(t.startsWith("fi"))return{title:d(t).replace("FI","FTN")};if(t.startsWith("itsme"))return{title:d(t).replace("me","ME")};if(t.startsWith("se:bankid")){let n,i=t.replace("se:bankid:","");return"same-device"===i&&("en"===e&&(n="On this device"),"da"===e&&(n="På denne enhed"),"sv"===e&&(n="På denna enheten"),"nb"===e&&(n="På denne enheten")),"another-device"===i&&("en"===e&&(n="With your SSN"),"da"===e&&(n="Med dit personnummer"),"sv"===e&&(n="Med ditt personnummer"),"nb"===e&&(n="Med personnummeret ditt")),"another-device:qr"===i&&("en"===e&&(n="With QR Code"),"da"===e&&(n="Med QR-kode"),"sv"===e&&(n="Med QR-kod"),"nb"===e&&(n="Med QR-kode")),{title:"BankID",subtitle:n}}if(t.startsWith("de:sofort"))return{title:d(t).replace("DE ","")};if(t.startsWith("no:bankid")){let n;return t.endsWith(":substantial")&&("en"===e&&(n="Biometrics"),"da"===e&&(n="Biometri "),"sv"===e&&(n="Biometri"),"nb"===e&&(n="Biometri")),{title:d(t).replace("NO ",""),subtitle:n}}return t.startsWith("no:vipps")?{title:d(t).replace("NO ","")}:{title:d(t)}}function h(e){return e.test(navigator.userAgent)}function f(e){const{links:t,onError:n,onComplete:A,onInitiate:o}=e,[s,c]=(0,i.useState)(!1),{domain:l}=(0,i.useContext)(a);return(0,i.useEffect)((()=>{if(!s)return;const e=()=>{return i=this,r=void 0,s=function*(){const i=yield fetch(t.pollUrl);if(202!==i.status){if(!(i.status>=400)){const{targetUrl:e}=yield i.json();return void(yield A(`https://${l}${e}`))}{const e=yield i.text();n(e)}}else setTimeout(e,1e3)},new((o=void 0)||(o=Promise))((function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function A(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o((function(e){e(i)}))).then(n,A)}c((s=s.apply(i,r||[])).next())}));var i,r,o,s};return setTimeout(e,1e3),()=>{}}),[s]),r().cloneElement(e.children,Object.assign(Object.assign({},e.children.props),{onClick:()=>{o(),c(!0)}}))}function E(e){const{links:t,onError:n,onComplete:A,onInitiate:o,onLog:s}=e,[c,a]=(0,i.useState)(!1);return function(e,t=[]){const n=(0,i.useRef)(document.visibilityState),[r,A]=(0,i.useState)(n.current);(0,i.useEffect)((()=>(document.addEventListener("visibilitychange",o),()=>{document.removeEventListener("visibilitychange",o)})),t);const o=()=>{const t=document.visibilityState;"hidden"===n.current&&"visible"===t&&e&&e(),n.current=t,A(n.current)}}((()=>{return e=this,n=void 0,r=function*(){s("android","onForeground",c.toString()),c&&A(t.completeUrl)},new((i=void 0)||(i=Promise))((function(t,A){function o(e){try{c(r.next(e))}catch(e){A(e)}}function s(e){try{c(r.throw(e))}catch(e){A(e)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i((function(e){e(n)}))).then(o,s)}c((r=r.apply(e,n||[])).next())}));var e,n,i,r}),[t,c]),r().cloneElement(e.children,Object.assign(Object.assign({},e.children.props),{onClick:()=>{s("android","handleInitiate"),o(),a(!0)}}))}const v="@criipto/verify-react:sebankid:state",C=function(){const e=sessionStorage.getItem(v);if(e)return JSON.parse(e)}();function m(e){const{links:t,onError:n,onComplete:A,onInitiate:o,onLog:s,pkce:c,redirectUri:a}=e;return(0,i.useEffect)((()=>{C&&(sessionStorage.removeItem(v),A(C.links.completeUrl))}),[]),r().cloneElement(e.children,Object.assign(Object.assign({},e.children.props),{onClick:()=>{var e;s("iOS","handleInitiate"),e={links:t,redirectUri:a,pkce:c},sessionStorage.setItem(v,JSON.stringify(e)),o()}}))}var p=function(e,t,n,i){return new(n||(n=Promise))((function(r,A){function o(e){try{c(i.next(e))}catch(e){A(e)}}function s(e){try{c(i.throw(e))}catch(e){A(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}c((i=i.apply(e,t||[])).next())}))};const B=h(/iPad|iPhone|iPod/)&&!window.MSStream?"ios":h(/Android/)?"android":null;function j(e){var t,A;const[o,s]=(0,i.useState)(e.href),[c,l]=(0,i.useState)(null!==(t=null==C?void 0:C.links)&&void 0!==t?t:null),[u,d]=(0,i.useState)(null!==(A=null==C?void 0:C.pkce)&&void 0!==A?A:void 0),[g,h]=(0,i.useState)(null),[v,j]=(0,i.useState)([]),[S,D]=(0,i.useState)(!!C),{buildAuthorizeUrl:U,completionStrategy:I,generatePKCE:Q,domain:k,handleResponse:w,redirectUri:b}=(0,i.useContext)(a),O=e.redirectUri||b,P=(...e)=>{console.log(e),j((t=>t.concat([e])))},y=(0,i.useCallback)((t=>p(this,void 0,void 0,(function*(){const n={pkce:u};d(void 0),l(null),s(e.href);const i=yield fetch(t);if(i.status>=400)return void h(yield i.text());const{location:r}=yield i.json();if("openidprovider"===I)return void(window.location.href=r);const A=new URL(r),o=(c=A.searchParams,Array.from(c.keys()).reduce(((e,t)=>(e[t]=c.get(t),e)),{}));var c;yield w(o,{pkce:n.pkce,redirectUri:O})}))),[I,u]),T=(0,i.useCallback)((()=>p(this,void 0,void 0,(function*(){P("SEBankID: Refresh authorize url");const e=yield Q();U({acrValues:"urn:grn:authn:se:bankid:same-device",loginHint:"appswitch:browser",responseMode:"json",pkce:e,redirectUri:O}).then((e=>fetch(e).then((e=>e.json())))).then((t=>{d(e||void 0),l(t);const n="ios"===B?encodeURIComponent(window.location.href):"null",i=`${B?t.launchLinks.universalLink:t.launchLinks.customFileHandlerUrl}&redirect=${n}`;P(window.location.href),P(i),s(i)})).catch(console.error)}))),[U,O]);(0,i.useEffect)((()=>{S||T()}),[T,S]),(0,i.useEffect)((()=>{const e=setInterval((()=>{S||T()}),25e3);return()=>clearInterval(e)}),[T,S]);const H=()=>{P("Initiated"),D(!0),h(null)},N=(0,n.jsx)("a",Object.assign({className:`criipto-verify-button ${e.className}`,href:o,onClick:H},{children:e.children}));return(0,n.jsxs)(r().Fragment,{children:[c?(0,n.jsx)(r().Fragment,{children:null===B?(0,n.jsx)(f,Object.assign({links:c,onError:h,onComplete:y,onInitiate:H,onLog:P},{children:N})):"android"===B?(0,n.jsx)(E,Object.assign({links:c,onError:h,onComplete:y,onInitiate:H,onLog:P},{children:N})):"ios"===B?(0,n.jsx)(m,Object.assign({links:c,onError:h,onComplete:y,onInitiate:H,onLog:P,redirectUri:O,pkce:u},{children:N})):N}):N,g&&(0,n.jsx)("p",{children:g})]})}function S(e){return(0,n.jsx)("a",Object.assign({className:`criipto-verify-button ${e.className}`,href:e.href,onClick:e.onClick},{children:e.children}))}function D(e){return(0,n.jsx)("button",Object.assign({className:`criipto-verify-button ${e.className}`,type:"button",onClick:e.onClick},{children:e.children}))}function U(e){const{acrValue:t}=e,r=(0,i.useContext)(a),A=`criipto-verify-button-eid ${c=t,(c=c.replace("urn:grn:authn:","")).split(":").reduce(((e,t)=>e.length?e.concat([`${e[e.length-1]}-${t}`]):e.concat([t])),[]).map((e=>`criipto-verify-button-${e}`)).join(" ")}${e.className?` ${e.className}`:""}`,[o,s]=(0,i.useState)(e.href);var c;return(0,i.useEffect)((()=>{e.href||r.buildAuthorizeUrl({redirectUri:e.redirectUri,acrValues:t}).then(s).catch(console.error)}),[e.href,t]),"urn:grn:authn:se:bankid:same-device"===t?(0,n.jsxs)(j,Object.assign({redirectUri:e.redirectUri,href:o,className:A},{children:[I(t)?(0,n.jsx)("img",{src:I(t),alt:""}):null,(0,n.jsx)("span",{children:e.children})]})):o?(0,n.jsxs)(S,Object.assign({},e,{href:o,className:A},{children:[I(t)?(0,n.jsx)("img",{src:I(t),alt:""}):null,(0,n.jsx)("span",{children:e.children})]})):(0,n.jsxs)(D,Object.assign({},e,{className:A},{children:[I(t)?(0,n.jsx)("img",{src:I(t),alt:""}):null,(0,n.jsx)("span",{children:e.children})]}))}function I(e){return e.startsWith("urn:grn:authn:be:eid")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:nl:digid")?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAqCAYAAABFsP5IAAAGBklEQVR4Ae1bXZLaOBCeI8wJoAeTYPI0N0huEG4wuUH2BuQGk6rdscnWVrE34AgcYY7AEXhJFTB5YOsTktIWUssyBk8NS5XKsq2fVn/9p5a5uengNyT6NCB6HBDNM6IHIqIOyLBTbsr8067M5ygvP/IH++IaKkOib1mf9rwM+rTqCpRtOf6+LfO9U1b7Od12gseAaJpSMqIvkPAmxOZExIFw6ssmY57SZ1PmXxwgLDAvs9EjH3tT5rQr82lSKd5Pfj69u+fjROsOUyqSG3m3hslJAQfAS2Pe3d31owS32GA3Gy1CgGyL0ZpPBbMWbHusYRZY3WcFcwhQ+ZjeusSghHfLOiYHfkMak4g+eok808NtmS8lJvNpTwTEAhQFRmJQ6rthj77xRbj1IdFnaUyiy9rt3Y98GgSkGD9z+tsCxGjM5s/cb/YlBjV5FwNl0Kdn37iDHk05Ay5R38/vb7dlvvKBsiveTzgNLQOiNMYb0fmYc+ozCRTl2Hs0Z3OsBz36yhd/yTrsumO6Vi4YoOccgEAQjuZijPE59HXWpxUrvjbeZzFnD/N0aScuAY0wd//POBhU1AAEmnYoxXjt0zrvs2K0rjh7CRBERXwRYCLC3pDZccZaX9oncFrbrscA+VXklYAETN48qbDaaxIdcH6H/A4TK9LuAsIXOST6Q+qLd134BU5jm/VUQPjcYvCgQ2br5CWmSoBgQmiL1D/rU0VLjIapfujLSszEYT60USmXQ2AAcwoBwnWJFIxhQkY04WPzOtdaI8WQ5KNSVqOgUwABXS+z8aOjFTYU1s8PWiIxNAaIAqXqoCsahrE5o7FXEeb7rbaGs/qqAgGipdDXzKv2Q9rnmWeVK/dbESZX6Im03bsmy1mCut3Nxs8SKCpdIy2yDiDviO7FMXpkUxBNAAGgWgsqjA3Nqf2b0Z6jPl0Csp2Nv0qAvBT5w01oYXheBxBAL0kkGGSkJRWQGNgS7aF3XQKi9z2uqbL3Kn8WIjwJEKTRnQwuu7c5oRRAdCISIfeRlJ/yrEtAIJihjajSnGK0aEVDYjmqJhriS9MHgABoQRPl9ukakIgfWb5aQCQzCCYPevTIIyaCLyNauAC4910D4mQFrLmykZZLML+v7UNkRiSbLBW2CqZK2t9kPfqXr8Gtdw6ItItvy2RFpNmGj3V9iGQCcbpoTKDvqvY6ggnrEhCdN3O1wt634tR1WBp0vDAthnF1AZFMTx2tzYQ9S8eABE8oYbJ2f334fLIPkRYPc8EPnRIACW4CBxTPDGdC1NcVIFo7xLzWyRvDWCTkmpcEQILOmWuc0Tz3KglJV4Bsi3H4uBjaUeZztQ7X6fH7kHnQOanvvK23zvJLmCwBEHFfw6MrF4zIhxT7SwMCzdjNRmLKBOYK7eoAgtDS/hD9aIcbjftd7UgERExaYvfvA6XOZvJcgCDtAabacki9i2f2OtTdV75w8Uq2EHLWbI8s79EXFngm9OfR2K3QTgUQABwZXhVUEE20+YwKyrkAMcxtcK1+AxZbeKP3jqkyZqUuIGifRbLIjejq09lMVgMgEO6urKkyTGq6sGC/ABgpJgtttfmJSnyQjoCWvyINOQZDSWKA8NSFwoQgO2uA9l1TNETRFj8AC+5/QvS/EkCWR5phGBYiPOE5vhqZ+pysmcNcUwHRoExSkocIi6XMQaeAFOO1OvMwDPFdExjPpRGmZIlNWh0gzLxNAEFfZb7iPmVtjnElQDi9kVNAG2SAhkhbm/448iXIXRXjRZ0TRcUn7KRTCpcww+i6VzBDmEs0d5hDAYOvXnqHvzLg22LUeTYA7SSN4rTiwOjX3/lHX/n59KFCj9Q21F/6rIjT8abrOhjg2mzr/PTyTTOh7cUhOECWIFSk4CGSzlm0TetVjBfNIAf+4BPrZ3zMVTCx7UVKjtkGIkQLrUWPUkJRt/dmD9qm+82OFzs1tKDU3EdJp4xvloltLwzSn8p4X3tforNtWq9mvFNB0Znho0Tn1TDwHAutuTG04a3xGXUzCOeg+SrGNBtDnLlD8h3zhOzBSm0WEzMIV8G8/xfZjAP/AdqQmFNg5gDVAAAAAElFTkSuQmCC":e.startsWith("urn:grn:authn:dk:mitid")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:dk:nemid")?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAAYCAYAAAAiR3l8AAAEg0lEQVRoBe1a7W0bMQzNz+TkABkhI2SDdoRsUErX/80G7gbuBu4GHsEjeASP4BFcPFH0nWXq42z5UCAJYCinkyjyPZGipHt4+Pr7QkAQeCF6kf8/awkMHoleZ7N/QfTdkNsb6nfG9j+uHdhQv4UMrT+M4vfuaGjCL6HPguwfyOnI7Z+J3rUxS3UvRK+iE+S0mnwexwQO0OmZ+ndD7lDGod911G/ASXZCMHkA1e4hFISWjNfeAwwAob0LSh87svuO3LL2pyluiN7YeLsLOh+0dpoeUscTCpPW271F+UT9L3l/Swk8UzhALhPsJ986g8PGkPV6sY7cXrVTjOAZ6Q7XzsYcgQEwL1tVYgJiC/qJiAHvW4bo4T1xigcNHkzLsbwJaiSblgnkiZMUEL0wRCRkgpuLiCMEop8h+gjgbCI5xcccgeiMgRE6oMQtJMaAi86G3LqopLfRndkYy6uRkWvTmkAZi4nk0PtE7kPqH8YEorIjt0HdWaNT6/Q/JQLRM4S/m0jUAK/VOUQZH8rFYzV5aSvLb+5FIEaWKMmc0ZvXJiaQw51fDyetLTUEYsBbSdQAH+l8hHwN5mD83pA9s0uTp/WvrbsngdAhRDLkLFuvU0wgKmVtMWTVrFIzppZA9L2FxBTgMjtTa7h4qbH2LNNOydNsrKm7N4GMHyc4PuHUCORGbsXv3KpO8XQWqvUXEjml1r1G65cDPKwTw+wMAhbkfsOWjmgZy8zJi9vWPM9DoKMTNykCoSw8EO9rthZTPFCAYBI5XKdCn7SVsgS4IZ54IA19pH0qmsh7ZLUyxi3lHATykuEz8f1FEjNWfhyWSpljLYFB5gr7ISjCz0winsfja//XAC5pNzbBDKhNZr418jQ9UnVzEIixMQ6iV5ZAbshbi9OimdC8hkBDPoUPpxB2K5MCJD4RVW2kawAfTYpw8pMO0TXyEiar1TMTeCwSyCRyWMptLUoEDuuQ3T9a+021vqKyFnBJxEoTo1ZehWq+yX9JYE2aniPQEC+6OEoTr6sFJG7XGvDW8mYkEJGsHEIFwJA1Jo+t8gTioNsdbyUPurQGvLW8OQgMeQRn27ksVMiTcnRsdbG1yBPoD42r95Qynla2Bry1vDkIlIjm97RTCASgkuHFh6opAuF1U8fQiJO61oC3ljcTgf4mxUe0qeAG9/XxdxwSUwQy6V8eKBMQBANzeZ5aDslgOJSYSiAGvDiP856ZPokRr63drItR7B3nW4DWHtNa3j09cCDPDveu1xAIgOMTj5wHjgj3m3chKFee4rwc2obGrQFvLe8eBGIXMNxhRpn8tQSOtxa850p7IBNu/2Ks0n1gVtlPloVicgWvC4cftAI+ZxP/WgIhZLQehhOPcMVxNsLwIF7LY3rCl8HTCJ80dNSv+XCbP3UYr7EipbXHtJZX9kD5VMJ/Q4TviLQfzqADaQGL1OEHf1dCF9sCAaxUBhJxc7HSAI/7h/Zr+QaHyYSSXlFc9m5yJzXB83fxtVA8Tu1za3l8AZC+hmP7QSLOf9Ufvi3CpfoKNl54XGTYPxsuBZWRhTDMAAAAAElFTkSuQmCC":e.startsWith("urn:grn:authn:fi")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:itsme")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:se:bankid")?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAAwCAYAAAC13uL+AAAFjElEQVRoBe1a0Y3bOBB1CengdNIucJ/uIIuLZeQv/klW0s9uB6Z8BWQ72PwEB0gGnA72GrCIVOASVIJL2MOjNL4hLUoUJVx+1oAgkaLFeZzh48yQi8WMv9vPYhml+euEq44SIaN09xJm+fYmEXczijftU1EqNhOAdQ9Klp/DbHf45UDDRHydHRyzhDDN6yDLP01Tgee/YU4aOIz6vXiO0vyhBS6190zwMfVhunv2FNH+t7j4uV0V8gXXev/zwWwZpflF+DAVnQKgfgwQW9swzU/BRrwzZfAqx/vjt7isXvm1KqU24aMsP0MYmI+tkxlIh83N3Yutn1H1cVlJDiwuqvrubxnQR4JH8Y5GuQ/cTSoEtZvjHt4LQTJMuhPAdXF8uTtIzSTAZlzYm0Q8mZ1FX8SGtMvbTnw+z2KeH/ZyE5fVmWuMAGBdMoXkzBYl4tF8P1c5vM+3JIf3PS7kY1xWp64PXBFFlp+DRFzM9opJPZmyc0ASIbtkcq77eJDBel/VmHcf2VyjD4CeW7aUYSIOt5lY0jvc/0hEECXiQG3oHqbiNIepOpsm5hOYEBe0tSrlM8yREco5LuQBZkrtOBCf5yATyxY8Y0N3Vy74rA+mVYZVKb8yIBr9W+o7TdXaQc+LCXPzat3t7AaLtAVEJ9BVWU2zeUMKTw26gQNpjAMnO70RQ2bnoqcD7gyuU0M2wB/20u3DjvDAsp2s2M+wwzLEhVzaQFjri+q9o9xOzXzABWk+LINiSMOHtIJq25neihOCnkamt+OiRSe2jAu5HQJjvD/3yOn1qsvbGQDoJsO6WdOc59zcTInR4KHTAKhmTXT1UOJS6t7/gIligfdSj+VPypPpJ46rRd7ZtzQ8kWENFnK609oCbYHVTtpiA8B9WMuYLRYgBmM+OYCbhyl9gSFbZgXEX/gwZfxdag4y/57LM5jxKqJgWnHQ4vD6BkHi4oiQZlhbrI0LALNNy4ajzc8E2hfxm30uxjKlLba7+rBRMVds5zTXqO/RDnNx9ErQhFl+MrUwtoxUIcntdPdwmMd10EoxFojZHmk9J0C80dj55uMwT03tqazz2Hzl/+Uwe4YzauH2TsS2ma1RTOnjMPvuJ9gy2NzyrM8eqQU3Z9XocSxTKjN0CWeMfrTiaKb0TC24MiVAjWZEDRErjHaYPZcBk/mMco1dIafAk8k++Ig4DqY54tI2QQY7WCwW2E+ANi5Xk6V+ABjnvKNLR29t3kbgbQR+3QhEaf4jSnOEIPqFYxNfxGYuyaIk/6fpw74jir2J9V7WuCiFEZfyRHV0R92qPIpBR4KvPfAElBfRbgFHae61WHcNyGU3pyd65mEXmNshO9AfifO1hoSiDBQFhKBqFTETaJxUYKcKwmyHYxpK8zfZ7ql9fqU2+rZycxggyvJv9J/brNlA5Ovtqqw+admBoqrjonr/ZxNUX3ad0Ibk1u7cSwcQFfbTLmkDRIXxBJYPBJ7RHh+0vUcbJEx5olVZRjMVGoeYxWZaguq7XHKfd8UcB+4u4lkDRYU+Lx1gAV4Jn4gf5DlwQamOTA7/wXZxlIrLmRSAMxKt6tQDgPO0nGmC6NcAcUkjGvXd4NpRpBE8/J799Rs/caCZZZZvsWtKQEgrmsm1WuAOMoS0JIG0rWXNBNvtae7z8vjRNF9SlnbnQtAoGqZ6Umk3NcfyGhrgA4KPaZpsjy+RmVLUzMvt/GySq4xcukyQZwcATrXhZ2KKynrmRZsr0IoSPtVyHHS06RUHzEAsUfbfMagwEU/c5EwzpbziRdstGI2h27MkBlMqE9TmIMu6qayBcRZG0xoKasPdXN9QToS8aBL71U0bjLby3KmMDBRnSoBvzVQxJ7Rslpm2mzbtUSe1945DBfuqBlPiYAGeuy7MuaE17l8txYxCItgPEAAAAABJRU5ErkJggg==":e.startsWith("urn:grn:authn:de:sofort")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:no:bankid")?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAUCAYAAABGUvnzAAAE10lEQVRoBe1Z3XHcNhC+EjjAaSZvTgfRiyKCL7nHRATtGzdgd2B14HSgdKB0cCW4BJWgEljCZT6SS35YAjhSJ0eSk5vBAAR2F7v74WcXt9n8//vxPVAW+591earVWg6+T8naFftC+NA+Rf/S46LrEtteWtdNZfyDs/44L83jrtitcnZl/V9zOZ3s9uri5jJlbGlvPgtfaZr7FN1r6RddUa/Rqdz6XWn8165s/U54ry72l2O/jFPt7B/78qfTG0XkBbUz9SMrzO2y+P3k7mNhzjYH5uf2tb35wLTc/s8AbPxX8QkAFR+w/TIeq0vb3K8GGiCWtv6kiyua30SBpTVkVUXzYa0sNvCH3sFnAjyA3pb2/aelmLwKuhzAa+9kuR/PMezUnLy71syDXSu8yR1s6gfeINfGfymt/yZ8UueuvDU6jbQQWBZ+p8tIsNls+mBpTgMeptNtDTDkVFv/p7NNKwY567/ljidnmltn+bppWrdt7hBH9P0Yqx95bsiUgn4tozL1A+4/5unoKGaJjOGa6uTqnbYEYICpZeKbfTT4JEoX4z3Z52yzJ0cHAdm19QcRUNnmPkWXA1kpf0gHfv6onYa5na3/Ts07OHvUWXTt+abgMhMgHrXuPBfL6xdlLxOLg8fQPgfgjn87nQDQQeul51v8jeiPjQrapr4TQaVSgOl+LfwvQqfrEOBx17a4jyOBW8s7ubTNGIEP86X4OpB5btaPeSNHYrBbmE/kBXqY+jEWoJ4LME42PtVwfMv8Z9c46qri4ztdtGA9ju9T6VYIsD9Wtg5SJTiLDXO0qJxtOAs48FwzPpXWMFDO+oDXmeaOx9lO3Y8FR3q0MXDBfy7AkMGn21sISDu/KYCjDro277+MjjX9XapPlphj9amSAuqqCPP0frfQEV58fCe8ox7DgiFwj7E7W/ieA2CkSjL/IoCTSbYKxeFgKDgrT03AxWoVQCSDjAK7ZHI4diovjBRfdbG/ZD6adpPqFxoex0kU7Q8fd4KjXOilfg6AOaZYBHC4+iYHwjgxammQJYasrQOgMi9Z2uFL+JA2MR/rluoXGh4XX2CM+3U7F/g8D8DTlQR5omuy7u+aPoXgdIJ3RHeXdU+aEbolkyRn7wcYKKzQGHlsJz6VT+QzONLHNY9nAQ5eA9NPvOcCHARyOM2e8BjF9v1rbQVUy4GSKMEpiBtSELU7o3zB3Z0JsmQerhcBPETMfHQi/2Y50j4HYBXIHfHELHJffa0ARjoTRLSzYMpMUTZHlZoP8UUQfX8HgCWw6045epiJHdVLAMbildc41Hhgijz6HPHatQhYvN7gstbFbevbRQKIqA/YIrJM/6JEpEEzAvBxiA3kVWh8qHDWB1H2nLe7o2J82Tw4UGj4WLKDmc+Z+nbimR/ViwCmQHKSFcZGkMPzZtspIejXqUNWUB98zN5MRX5uxQUg4XkwuNOUcSq6h046Z5U5UbNT8c02MB33S5vHU3ew0EqdO6pZFwYpsD8PcJtLw0SHoEaeiIBqVtaskkEiou2ZnO5dtjnIURZMPnxUFv9A9TrgEQO0lanHfK8DCnIyQUXnJPpvG/LEGSIbNc+f6hcaHue4gPuFVmrozuP8pwB0nMZuPgsP2z+ND/7AX7CmvsvZLnLeZI2dw859k0a8oNL/AO3s/ku5hXTHAAAAAElFTkSuQmCC":e.startsWith("urn:grn:authn:no:vipps")?"data:image/png;base64,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":void 0}function Q(e){var t,A;const{fetchOpenIDConfiguration:o}=(0,i.useContext)(a),s=e.language||"en",[c,l]=(0,i.useState)(null);(0,i.useEffect)((()=>{e.acrValues||(()=>{var e,t,n,i;e=this,t=void 0,i=function*(){l(yield o())},new((n=void 0)||(n=Promise))((function(r,A){function o(e){try{c(i.next(e))}catch(e){A(e)}}function s(e){try{c(i.throw(e))}catch(e){A(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}c((i=i.apply(e,t||[])).next())}))})()}),[e.acrValues]);const u=function(e){let t=e.slice(),n=function(e){let t=null;return e.forEach((e=>{if(e.startsWith("urn:grn:authn:dk:mitid"))if(t){let n=e.replace("urn:grn:authn:dk:mitid",""),i=t.replace("urn:grn:authn:dk:mitid","");(":low"===n&&[":substantial",":high"].includes(i)||":substantial"===n&&":high"===i)&&(t=e)}else t=e})),t}(e);return n?e.filter((e=>!e.startsWith("urn:grn:authn:dk:mitid"))).concat([n]).sort(((e,n)=>t.indexOf(e)-t.indexOf(n))):e}(null!==(A=null!==(t=e.acrValues)&&void 0!==t?t:null==c?void 0:c.acr_values_supported)&&void 0!==A?A:[]);return(0,n.jsx)(r().Fragment,{children:u.map((t=>(0,n.jsxs)(U,Object.assign({acrValue:t,onClick:e.onSelect?()=>e.onSelect(t):void 0,redirectUri:e.redirectUri},{children:[g(s,t).title,(0,n.jsx)("br",{}),g(s,t).subtitle]}),t)))})}function k(){const{result:e}=(0,i.useContext)(a);return{result:e}}var w=t.AuthMethodButton,b=t.AuthMethodSelector,O=t.CriiptoVerifyProvider,P=t.useCriiptoVerify;export{w as AuthMethodButton,b as AuthMethodSelector,O as CriiptoVerifyProvider,P as useCriiptoVerify};
|
|
1
|
+
var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{AuthMethodButton:()=>j,AuthMethodSelector:()=>O,CriiptoVerifyProvider:()=>u,useCriiptoVerify:()=>X});const n=require("react/jsx-runtime"),i=require("react");var r=e.n(i);const A=require("@criipto/auth-js");var o=e.n(A);const s=()=>{throw new Error("You forgot to wrap your component in <CriiptoVerifyProvider>.")},a={loginWithRedirect:s,fetchOpenIDConfiguration:s,buildAuthorizeUrl:s,generatePKCE:s,handleResponse:s,responseType:"token",completionStrategy:"client",result:null,domain:"",action:"login"},c=(0,i.createContext)(a);var d=function(e,t,n,i){return new(n||(n=Promise))((function(r,A){function o(e){try{a(i.next(e))}catch(e){A(e)}}function s(e){try{a(i.throw(e))}catch(e){A(e)}}function a(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}a((i=i.apply(e,t||[])).next())}))};function l(e){const{options:t,action:n}=e;let i=(null==t?void 0:t.loginHint)?null==t?void 0:t.loginHint.split(" "):[];return n&&i.push(`action:${n}`),i.length?void 0:i.join(" ")}const u=e=>{const[t]=(0,i.useState)((()=>new(o())({domain:e.domain,clientID:e.clientID,store:sessionStorage,redirectUri:e.redirectUri}))),[r,s]=(0,i.useState)(null),{redirectUri:a}=e,u=e.response||"token",g=e.completionStrategy||"client",h=e.action||"login",f=(0,i.useMemo)((()=>({loginWithRedirect:()=>t.redirect.authorize({redirectUri:window.location.origin}),fetchOpenIDConfiguration:()=>t.fetchOpenIDConfiguration(),buildAuthorizeUrl:n=>d(void 0,void 0,void 0,(function*(){return yield t.buildAuthorizeUrl(t.buildAuthorizeParams(Object.assign(Object.assign({pkce:e.pkce,state:e.state,prompt:e.prompt},n||{}),{loginHint:l({options:n,action:h})})))})),generatePKCE:()=>d(void 0,void 0,void 0,(function*(){if("token"===u&&"client"===g)return yield(0,A.generatePKCE)()})),handleResponse:(e,n)=>d(void 0,void 0,void 0,(function*(){if(n.pkce&&"token"===u){let i=n.redirectUri||a;if(!i)throw new Error("redirectUri must be configured globally or per authentication component");yield t.processResponse(e,{code_verifier:n.pkce.code_verifier,redirect_uri:i}).then((e=>{(null==e?void 0:e.code)?s({code:e.code}):(null==e?void 0:e.id_token)?s({id_token:e.id_token}):s(null)})).catch((e=>{s(e)}))}else(null==e?void 0:e.code)?s({code:e.code}):(null==e?void 0:e.error)?s(new A.OAuth2Error(e.error,e.error_description)):s(null)})),responseType:u,completionStrategy:g,result:r,domain:t.domain,redirectUri:a,action:h})),[t,a,u,g,r,h]);return(0,n.jsx)(c.Provider,Object.assign({value:f},{children:e.children}))};function g(e){return e.split(/:|-/).map((e=>2===(e=e.replace(/id(\s|$)/,"ID")).length?e.toUpperCase():e.substr(0,1).toUpperCase()+e.substr(1))).join(" ")}function h(e,t){return"login"===t?"da"===e?"Login med":"sv"===e?"Logga in med":"nb"===e?"Logg inn med":"Login with":"approve"===t?"da"===e?"Godkend med":"sv"===e?"Godkänn med":"nb"===e?"Godkjenne med":"Approve with":"sign"===t?"da"===e||"sv"===e?"Signera med":"nb"===e?"Signer med":"Sign with":"confirm"===t?"da"===e?"Bekræft med":"sv"===e?"Bekräfta med":"nb"===e?"Bekreft med":"Confirm with":"accept"===t?"da"===e?"Acceptera med":"sv"===e?"Bekräfta med":"nb"===e?"Godta med":"Accept with":void function(e){throw new Error("Didn't expect to get here")}()}function f(e,t){if((t=t.replace("urn:grn:authn:","")).startsWith("be:eid"))return{title:g(t).replace("BEEID","Belgian eID")};if(t.startsWith("nl:digid"))return{title:g(t).replace("NL ","")};if(t.startsWith("dk:mitid"))return{title:"MitID"};if(t.startsWith("dk:nemid")){let n,i=t.replace("dk:nemid:","");return"poces"===i&&("en"===e&&(n="Personal"),"da"===e&&(n="Personlig"),"sv"===e&&(n="Personlig"),"nb"===e&&(n="Personlig")),"moces"===i&&("en"===e&&(n="Employee key card"),"da"===e&&(n="Medarbejder nøglekort"),"sv"===e&&(n="Anställd nyckelkort"),"nb"===e&&(n="Ansatt nøkkelkort")),"moces:codefile"===i&&("en"===e&&(n="Employee key file"),"da"===e&&(n="Medarbejder nøglefil"),"sv"===e&&(n="Anställd nyckelfil"),"nb"===e&&(n="Ansatt nøkkelfil")),{title:"NemID",subtitle:n}}if(t.startsWith("fi"))return{title:g(t).replace("FI","FTN")};if(t.startsWith("itsme"))return{title:g(t).replace("me","ME")};if(t.startsWith("se:bankid")){let n,i=t.replace("se:bankid:","");return"same-device"===i&&("en"===e&&(n="On this device"),"da"===e&&(n="På denne enhed"),"sv"===e&&(n="På denna enheten"),"nb"===e&&(n="På denne enheten")),"another-device"===i&&("en"===e&&(n="With your SSN"),"da"===e&&(n="Med dit personnummer"),"sv"===e&&(n="Med ditt personnummer"),"nb"===e&&(n="Med personnummeret ditt")),"another-device:qr"===i&&("en"===e&&(n="With QR Code"),"da"===e&&(n="Med QR-kode"),"sv"===e&&(n="Med QR-kod"),"nb"===e&&(n="Med QR-kode")),{title:"BankID",subtitle:n}}if(t.startsWith("de:sofort"))return{title:g(t).replace("DE ","")};if(t.startsWith("no:bankid")){let n;return t.endsWith(":substantial")&&("en"===e&&(n="Biometrics"),"da"===e&&(n="Biometri "),"sv"===e&&(n="Biometri"),"nb"===e&&(n="Biometri")),{title:n?"BankID":g(t).replace("NO ",""),subtitle:n}}return t.startsWith("no:vipps")?{title:g(t).replace("NO ","")}:{title:g(t)}}function w(e){return e.test(navigator.userAgent)}function v(e){const{links:t,onError:n,onComplete:A,onInitiate:o}=e,[s,a]=(0,i.useState)(!1),{domain:d}=(0,i.useContext)(c);return(0,i.useEffect)((()=>{if(!s)return;const e=()=>{return i=this,r=void 0,s=function*(){const i=yield fetch(t.pollUrl);if(202!==i.status){if(!(i.status>=400)){const{targetUrl:e}=yield i.json();return void(yield A(`https://${d}${e}`))}{const e=yield i.text();n(e)}}else setTimeout(e,1e3)},new((o=void 0)||(o=Promise))((function(e,t){function n(e){try{a(s.next(e))}catch(e){t(e)}}function A(e){try{a(s.throw(e))}catch(e){t(e)}}function a(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o((function(e){e(i)}))).then(n,A)}a((s=s.apply(i,r||[])).next())}));var i,r,o,s};return setTimeout(e,1e3),()=>{}}),[s]),r().cloneElement(e.children,Object.assign(Object.assign({},e.children.props),{onClick:()=>{o(),a(!0)}}))}function p(e){const{links:t,onError:n,onComplete:A,onInitiate:o,onLog:s}=e,[a,c]=(0,i.useState)(!1);return function(e,t=[]){const n=(0,i.useRef)(document.visibilityState),[r,A]=(0,i.useState)(n.current);(0,i.useEffect)((()=>(document.addEventListener("visibilitychange",o),()=>{document.removeEventListener("visibilitychange",o)})),t);const o=()=>{const t=document.visibilityState;"hidden"===n.current&&"visible"===t&&e&&e(),n.current=t,A(n.current)}}((()=>{return e=this,n=void 0,r=function*(){s("android","onForeground",a.toString()),a&&A(t.completeUrl)},new((i=void 0)||(i=Promise))((function(t,A){function o(e){try{a(r.next(e))}catch(e){A(e)}}function s(e){try{a(r.throw(e))}catch(e){A(e)}}function a(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i((function(e){e(n)}))).then(o,s)}a((r=r.apply(e,n||[])).next())}));var e,n,i,r}),[t,a]),r().cloneElement(e.children,Object.assign(Object.assign({},e.children.props),{onClick:()=>{s("android","handleInitiate"),o(),c(!0)}}))}const C="@criipto/verify-react:sebankid:state",m=function(){const e=sessionStorage.getItem(C);if(e)return JSON.parse(e)}();function B(e){const{links:t,onError:n,onComplete:A,onInitiate:o,onLog:s,pkce:a,redirectUri:c}=e;return(0,i.useEffect)((()=>{m&&(sessionStorage.removeItem(C),A(m.links.completeUrl))}),[]),r().cloneElement(e.children,Object.assign(Object.assign({},e.children.props),{onClick:()=>{var e;s("iOS","handleInitiate"),e={links:t,redirectUri:c,pkce:a},sessionStorage.setItem(C,JSON.stringify(e)),o()}}))}var U=function(e,t,n,i){return new(n||(n=Promise))((function(r,A){function o(e){try{a(i.next(e))}catch(e){A(e)}}function s(e){try{a(i.throw(e))}catch(e){A(e)}}function a(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}a((i=i.apply(e,t||[])).next())}))};const k=w(/iPad|iPhone|iPod/)&&!window.MSStream?"ios":w(/Android/)?"android":null;function Q(e){var t,A;const[o,s]=(0,i.useState)(e.href),[a,d]=(0,i.useState)(null!==(t=null==m?void 0:m.links)&&void 0!==t?t:null),[l,u]=(0,i.useState)(null!==(A=null==m?void 0:m.pkce)&&void 0!==A?A:void 0),[g,h]=(0,i.useState)(null),[f,w]=(0,i.useState)([]),[C,Q]=(0,i.useState)(!!m),{buildAuthorizeUrl:E,completionStrategy:S,generatePKCE:j,domain:b,handleResponse:O,redirectUri:X}=(0,i.useContext)(c),y=e.redirectUri||X,D=(...e)=>{console.log(e),w((t=>t.concat([e])))},I=(0,i.useCallback)((t=>U(this,void 0,void 0,(function*(){const n={pkce:l};u(void 0),d(null),s(e.href);const i=yield fetch(t);if(i.status>=400)return void h(yield i.text());const{location:r}=yield i.json();if("openidprovider"===S)return void(window.location.href=r);const A=new URL(r),o=(a=A.searchParams,Array.from(a.keys()).reduce(((e,t)=>(e[t]=a.get(t),e)),{}));var a;yield O(o,{pkce:n.pkce,redirectUri:y})}))),[S,l]),G=(0,i.useCallback)((()=>U(this,void 0,void 0,(function*(){D("SEBankID: Refresh authorize url");const e=yield j();E({acrValues:"urn:grn:authn:se:bankid:same-device",loginHint:"appswitch:browser",responseMode:"json",pkce:e,redirectUri:y}).then((e=>fetch(e).then((e=>e.json())))).then((t=>{u(e||void 0),d(t);const n="ios"===k?encodeURIComponent(window.location.href):"null",i=`${k?t.launchLinks.universalLink:t.launchLinks.customFileHandlerUrl}&redirect=${n}`;D(window.location.href),D(i),s(i)})).catch(console.error)}))),[E,y]);(0,i.useEffect)((()=>{C||G()}),[G,C]),(0,i.useEffect)((()=>{if(C)return;const e=setInterval((()=>{C||G()}),25e3);return()=>clearInterval(e)}),[G,C]);const W=()=>{D("Initiated"),Q(!0),h(null)},N=e=>{Q(!1),h(e)},R=(0,n.jsxs)("a",Object.assign({className:`${e.className} ${C?"criipto-eid-btn--disabled":""}`,href:o,onClick:W},{children:[(0,n.jsx)("div",Object.assign({className:"criipto-eid-logo"},{children:C?(0,n.jsx)("div",{className:"criipto-eid-loader"}):e.logo})),e.children]}));return(0,n.jsxs)(r().Fragment,{children:[a?(0,n.jsx)(r().Fragment,{children:null===k?(0,n.jsx)(v,Object.assign({links:a,onError:N,onComplete:I,onInitiate:W,onLog:D},{children:R})):"android"===k?(0,n.jsx)(p,Object.assign({links:a,onError:N,onComplete:I,onInitiate:W,onLog:D},{children:R})):"ios"===k?(0,n.jsx)(B,Object.assign({links:a,onError:N,onComplete:I,onInitiate:W,onLog:D,redirectUri:y,pkce:l},{children:R})):R}):R,g&&(0,n.jsx)("p",{children:g})]})}function E(e){return(0,n.jsx)("a",Object.assign({className:`criipto-verify-button ${e.className}`,href:e.href,onClick:e.onClick},{children:e.children}))}function S(e){return(0,n.jsx)("button",Object.assign({className:`criipto-verify-button ${e.className}`,type:"button",onClick:e.onClick},{children:e.children}))}function j(e){const{acrValue:t}=e,r=(0,i.useContext)(c),A=`criipto-eid-btn ${a=t,(a=a.replace("urn:grn:authn:","")).split(":").reduce(((e,t)=>e.length?e.concat([`${e[e.length-1]}-${t}`]):e.concat([t])),[]).map((e=>`criipto-eid-btn--${e}`)).join(" ")}${e.className?` ${e.className}`:""}`,[o,s]=(0,i.useState)(e.href);var a;return(0,i.useEffect)((()=>{e.href||r.buildAuthorizeUrl({redirectUri:e.redirectUri,acrValues:t}).then(s).catch(console.error)}),[e.href,t]),"urn:grn:authn:se:bankid:same-device"===t?(0,n.jsx)(Q,Object.assign({redirectUri:e.redirectUri,href:o,className:A,logo:(0,n.jsx)("img",{src:b(t),alt:""})},{children:e.children})):o?(0,n.jsxs)(E,Object.assign({},e,{href:o,className:A},{children:[b(t)?(0,n.jsx)("div",Object.assign({className:"criipto-eid-logo"},{children:(0,n.jsx)("img",{src:b(t),alt:""})})):null,e.children]})):(0,n.jsxs)(S,Object.assign({},e,{className:A},{children:[b(t)?(0,n.jsx)("div",Object.assign({className:"criipto-eid-logo"},{children:(0,n.jsx)("img",{src:b(t),alt:""})})):null,e.children]}))}function b(e){return e.startsWith("urn:grn:authn:be:eid")?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAAA8CAYAAAAe5VayAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUdSURBVHgB7Zzveds2EMZPffy9ygRBJrC9ATVB3AmsTOB4AjETSJ3A6gRNJjA9QdUJzEwQZQL0XvEgQZAIgCzo2CR/z4OQog6U9AZ/7g6EiXqE1nqhw/zg8g+Xv7nccclo5ECkiOd45vLARVELfqMRoLjMubQScxTxlDlVYuaxFUYR61lIN1chw1FEP4oLJqErn9EoYpgpVULe1hlMqEdI13sfMIMosMukTCmOLZfZZDLZ0MgBFn3KZS5jX6wrpNz7RLdEqZzR26fksuEWtbUvwsfkQx5Rv+C6M4oFwnFZipffN07GOV393ueIurcx4qGZr/QweNaWKDpOSDSqaaj1hW7SR3JHg1DvWxj7iSsgHx6pmr2GyJrHu0840VVi4tFju2Xbdzhx/cQhCwgwU3/GCQtU8OGrx3YqQh9ElOasaGShD27MfcD2I/7ZdWep9Ewjhq/cEv/ACWuD3pnV2JVs98G0xIxGbG70Yfb1dWlMQFMjYtjvGR5Gk28BO3UhJxk1Y0XH/0MFdQuiixs6/nxcyz110JIyqaeoObvMDXfXklvblupj7MsL3S4ljrDpybzge1DHbJ3Pw48q7Ws1oBXds/2cj/DrFMVj2/pE3M3OinoOi73mA+LdktpRet5TvcknOtEEoo0Hu5ehW/LhE3VAX5Oy6HpzqpKpylwUB7qgxPQ9sw0xH5xrXygxQ1geuNLHGZfkmelUIiLevKZqklJyjmtljT3co4zLO+5iiJo+UDVelZQeCLhfaJJk7JYSckEJ4C/2p3PpO5cNtwC4GEs6+Hg7f891TWTQX7M9xEWY5V1da4G77uJ1WZrSaXe2ZkTThWY+305ayf9xRepQ1CFJRERKSFfLCHArbp0ZEcIgmF/ZK2W6ypz/kJI79p24Il2RpDvTcfJyzgWh0kxaogmd9rOiiHZn1VkgCmG7ldgXgVDrVdFVd1bkuBbO6trHM3XcJEhBb4RULfEc6OJTd2lSWJ255tqVlI6ks7FLlyKCSy4nEwkL+1e4atIf7vqGihLStYg/z13kFgqX59JfNVmiuHQyQKndp05FLD3PrUDAnF6GtfM6uYhd+okrz3twzjsdpwTkPd1YOXkWP1ZECII1VoRnMbFnbkcxcGm09ZSBTDYIDQunHl7PqV18W1oFkc9n/pxr20CSsxklBt052CL4y5ilw634e787JhjjruRebtY7pyqrjLpPtu/Ih5kkB3C/n2Yml2sragBW3XzvSwCwoA6IEhGDsTW+4QcerQfwe4iRvzl1YJfTwanG60fbCZe65xIC3ykhsiC/oPbOu6/eNkpEBns+TJeGKFtZ/Ydw+wlEhEOLzMTO/XBF1UPlaz5+scW06i7oTJfTx/tNYDvV9XtQ8P57OuwKaCPexvnedZRm8d63QN0lu+5PhxTaa2IOfzbiwYbMTCwF/RrMsqai14cZ17OA3b9GxJdyOd4Ka2uo8blEuydudyLK4N5oNuw5O99Shx+x3o2btp+I1ljSSG61wpBLtD65oof7lKxhaWkxD9jWTzZ6uEIuG2rgDx919eD7Ug8DLE/cNBQw/llOueGD7mfLfNTVpvFpQwHBUStsshkI0QSigLah02sBnsjTmc1AsaHh/uH4EdoPW3f6pbalvQXkB6qAmYmrTeZp3CBpo9v/DYgYbuo+t+s1lj5w9tEXm1FEPyVVXbj0GY077+tBLuE6JCAYW+IpBZf7JhPIKGIFxr01VTupQjsSThiiiGZNp6AqlbVpI5zNf5XRuR7tdpDGAAAAAElFTkSuQmCC":e.startsWith("urn:grn:authn:nl:digid")?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAAuCAYAAADwZJ3MAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUlSURBVHgB7Zzvdds4DMCRe/f9fBOEneDSCSJPUHeCcyZIOoGVCZxOYN0E6U1gZYKkE1idIOkEOMCkn3WqJEAiacmxf++hckMwpAn+AUEqAGeOmgsYCYho6PGJZELy/eLi4huMCKpfQo+/wNbvieqXwxkLNU6Kv7JxRh26bhOSx5r6rTgNBmY7Al1FulbmjXrhG3jCxqPHoiG5oDI+wICwoegxb0j+RvX7XNE/fFu63tSHV5I1yZLkCnrgRlobCQwEzwAoc1nJs8D+rNG2ZaKt42/gB/e0hOSO5NkZ429tZrRTpBHUrmE4jEIngXAkYNtyrW1LXwNWMSQZ6tcv7yk4Mpr6FRAHA/u2bJzdQhuwXDiPyLs2JTfv59DOPzAcBbQbkdO/Q1wM2LZM6xJjGZDh6XXZVHCJL9DcSA9k5AIGwnWwLy0qDyEcOSWLxrbE/k6Mlta5HK2zsC7ps3N0CyOB6jIjeS7Vjz/PGnQXGJe0rtCVkIkbdOPkFbvDeUQvFe2e6xJGiqvfRNBZKNpiU5I+JNVCV0KGVU1Fr12+DepYwwmAsgHXNXmuSG47tCXrbTtS7zWQ5n4OJ93QxylJpsiSYIctxilB7fhC8tUFLVJFFkOyXWJ+B0+ck3FDxikUhXN6FK8S97FUfu6mOXYwXkj+PaCz4QXV856+yw/6uBJU70jv6/YT9phC68D/OyJNJJU8K0H/UigzUZS7QbelQXmKu+7ynWrqs8B2nkHXlkuUuQ29jbhR6HyCQNAXeKAHrymJoGrAbmmWMDzaOOk9yIGEWVADuuk0F9QS8AStN8g9uetWg0fhHI4AN+VngtpVjI28dI7XK+hdIfX4PQaOhychfRLDgD8kBfTY61HeOXQfecfKi6Tg7YXWENvbWyj1uB6F+xxi1I+SmLHQ4LjRZwS1giShNeRPko8s9H/eX2XwDolhQI2X9RP6IXmwBcmUgwzlH7Jz5YIOKRwXRlKIYUDpANbn+kAipKdtpxe8SQbZSx4TRlKIYcCZkC4uzHWgjbS0jW7uGJooz6huuwlIoceXoAZUrlEZ9EOamrUdQ/SSx4DrsImgFs6ArkCNhyjtbfpi4J2A9qRBc3qTBTGgMx4XaATVzOOEXVo3DeruaQYL5cWgZDwjqLJj9uRlQBfSSunjM+hGwD30xBleMmLrDOA62hxGCtpTfm5Lzb415X+0G3k2VAJ2HWL5wxUyA31wNg1wv4XXuaQlnY9YflI5aTUB7Y2ARxgBuD+RMdCvLbOdw6Y14Axk77KNwrnwvrAHmQg6C7QHxxnsHRaeNn3qHxIDuvWtiQJKM1mMUFpdgVMIA/e6FOSeauD4Nu0aeAmZlmey2KG0olqgD4prfu+ZAmraMqYBc5KPoe910u/L6PEApwWv/Wy8X/a6MQzIo2ROhU1j3UOh38ujsI8RCziuoDa3X+qC8kWdQkgD5mBPvD8oQ1peOCNygLpQZsnBrsWSvpR+CHikpWDbstX52zkx7K3loOetJL63vqSyG08u3HSauRAee57sjk8q9dw2xu6EAru/NNo1dtu1LZkC9nXNqa5HEe6LggsuXDad+ne9ZXZmZGD7qwGqK39j4hD7wGC4a4FSmOlz03SO9m5o2x6y63R5pgvKy66PdescG0+Rd9SB7jpG82dGNKCNIWrDUDlY52D3GrgUvRn8DyqcBMpR2IfzizeHAN2tbAzLSbz6NhqcEVcYBu4M2mOcMyGhhp9j/7dcmeXZeCPAGZK9T83r36/OcAbeAf8BIoccO1vtVLIAAAAASUVORK5CYII=":e.startsWith("urn:grn:authn:dk:mitid")?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAAjCAYAAABctgKLAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAS9SURBVHgB7Zv/VdswEMe/6ev/zQZ1J2g6Qc0EtBNgJgAmIEwQOkFgAmACzATABBET4E6g3iGlNUE/LMnBwuXznp5D9BPrfHc6XybIGCllSZev+s+ryWQikCG0zildSiqfqfBnQeWe1nuHd+Kgm3oqXzJHRvDGU1lSeZRmbrUQx47v4lGPf01lQeUgZq4JD2Cp4yfuFD1AcxzSZddQ1dAcPw3tK7oszaPhJ/W5xMDQGmd0uaBSdGh+QmueIxDeZYTTUOH7c05z1t7WHgkrkAiP4ZhjZelz6+hzgYHR/9OjDGOOQGQ6Kyp7rjlYA7ikrCYp2kECNPwtXWaWakHjfzH0YcEoELgm6vcDygab5qnRE571udgJWYdnb0I4g9JCwjiJhz1EQn0PPWPbNMC1o8/SMZ+t3zV6goVMxhO0DtkvK2nQ6B86rIOdsSkC0ZMdII4Ty/eNo+612EU8s5h72RMFletNIegiALzgJcI5RpyahFaT7ByK1tf83U4GR8EZ4uF7WWA4Cigh+CuEXQSAYbVXdmy79uIrJMCevvYPCi5s9zM5V6c+wZ8wLAXUw/lEVwFgll3Ul1Yxx+gJ2vQHLninTw7XpuBjQKcCamOPPO2iVf8aLWhGYWubAFe7DaYmByjSnNRI0273yAP2z45iPM3SNiLXyTBWEeN8T5jPO7ePxDmHPAVswnGMaYgJWLOUdlMQ4yy+KbSDKhDHIfKB93DXJQCN5fsChuOdVJGuAv8HfEJpAvvMSXhyUf9rZi4B4PcANq97LlUs/AnpdvzOoOzmaNCnkX10F4JT6jN0/MJE6TMB+466ReuzzbYJDB+42Qr6hdQ3KAG3IahU1NbnOA/F1HkKYEmnp5sXvzBUszPENs0V3GC1J2RvIe0X66vlc++eN8UUqKmRGJewzC/osk9rYCEvoXIX+H6whrij+hvkTeE9BvIrYfoHOfxZGqpZ7dscwjPqe44t044R0DqbLu22sAYBtybIlq6nAJu9s22+wEhV/9joFAjSapw3dIFuzHNN39oG2gxtBqWaN5AS1nSOBHpMQZtXUf1DIv/lAPL9sOUgQPs+NZRvkmNO411oIMh39BEYuerXji9HETkzqYI/FF1CHalXUuUPFsiHJkgAtAS7Nni0ql+qNDA+7rIZjH0jWFG51UKUA5fBoWCdKFobqkar+vVTy5tfIh0WnoXMI8P5JuZdALNpCgRGqvpbm1+gX44H1gScWymiBMBgCsbs9Se/3naNPaBP8JTyH6sB2qZgzKq/xBYiiC1i0+1S4WyrK/4QkhBiYh95YTuhzBBHb5lNDjikXvaZtu5BoJXUE60BGFb7mal+mwBM20cw7dEfuNSvrivxOqRkGody1N6zJAHIEFfkrYI6i3N0hs/xbMI+O9rHprTHUGH78MNRbf6sbmwC0GfCRYnXYyoTfkTaAQGVUv/CVxuVAGg7WqMfYv2GWL6if/ipn1P5ZnsvkeoE5gg7pknn9i0/jTb6FDjeeDZxv2jjnVlLoxMA/eaSfzzKHnyFOGJDvSkUiEdA+T81AhNR+NfB3y11D315+Dp/0PSLmN8m1aTfttlU4r1PqlvjFHieqbPGmbGj+7kcxG3w4l449uapPZXH1ESXPzSxXZJw46hxAAAAAElFTkSuQmCC":e.startsWith("urn:grn:authn:dk:nemid")?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJIAAAAeCAYAAADHCUctAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAU5SURBVHgB7Vvtdds6DEVy+v9lg+pNkHSCsBPUnaDOBHEmsDJB+iawO0GyQZQJ7DdB1AnaTsDimkBFq7KoD8qOE91zcGhZImHRIHgJkCfEsNYaLi5Z8pOTk28UCdxuwsWdtHsTeNZw8YX64Zb15LRbx5SLT3L5EPldDRfXLGcsy5htV+i64OKR3DtcBZ7F75mxnMtvCyEX+Z9lXdefZUWp3cazKO8NdK42GnhuauPguqWOGcV5z7SibUMDwXuX5wbPLmw/rFi+WOcUduIduVEEZCywdFSAF7mi/eG993nC8pM6gEfPU83tcylzlrXoueMOyrjemjrCOu8wl8uvLIZcP8K7ZnR4XEiJd0ypvm8TkQuvhCxxk98VHj+trOlZ3iXLxEYcrba5RzKe3pQGgDcyF3K90lFtO3pgjFKpvxm5VXqGgG3nkfT3zakl5P2mXhvaX0n52VP/gq3tgdyoAuY24M5igfVm5EaL6k1peHwm550SlnvqhoXUz6W9VwXwIxbwvX+p+H8SlpV44j84rah/S65jMErvbSS+FAL/WOhN5XJwYxISqdO3aatPnjdy+bkxKT1SyP8Dg8rJ2caj72hOKypgDsXoQunP/4PjAMaUcXHj6TNN6lm3+tN+mfXhWMcEGSwfydnGxtH8uenNfZd+JXAk756hDmjKkSrqzW1kzlTHXfi7pdz7EZrOS7zoro2eWNgXR6pp0+fSc/2y0pDk3n3TDt6hsJMhSd15TGMKGNKZ1+GY/892tOE/99xWTywc2pCk3Ue1DVyfBp4Hh8jJubHBOqYKMs0ph5lXjf6IuuCq1WXXTecpFeT6I71t3EqJwWVqDUk62CekUQJ4TYEVg6d/NuQol/n/xtO19a5yrTG36Wsn1yEIv9SY1KeQR9IKGhJAAM/QHlEypunAxrSk7fDHZolri1QPkAYCn28JmZQmaEiA5Mm00sIOHBIQLpLKPDzZszHpu2r4Q/NawFKm3BEOuZRnjQxJgD8SriyhYnRGh0whIJHgKYZcMlm9BXhJTh1TKC2g3DBhWVHBi25ohI9cyqSxIZUCeNPYfEm8EEY+jBTeALEZ4+8awDSLKGtoJ0FfyLv6keoNGRfOOKLAL/3QxiMNnUKBERn5DB7y4ZBcRIKMMNic5eqtk+sd+EfKn60MSbCVQqEIkDiR5m5mL4WH8O/4Kh7wgUZUIZEyb21I5RRKpPiObmgDmf2PRhwLdPDnXTySun31GrM+IQGsyqiw7HFFdCSQlbuRy4dOhgTA7VMRErjvwZd0w9l65CFHhYn3+amzIQl0T8/eUygjDg5NI4GO5L0MKVIKRZfUe9n3NKI/ZHGUyOWGjvT1SFUplIt2LWxOKwDJvtMvI9pD/iP1RqnSkd6GBJRSKG13VYK4q1e6po7QgGbdNpAR/WDdhj4N+Wyli6IYkqBTCkWmR/1BE9th75EYjgY0ExoRFTJIMeuAB+u5va1TRtEMqbQNo1UKpbQC3Ow9aroKFFeLfJgf0BxTGREgGxNTcrlPnS1mVYcy31FEILHKirGchxFtTtjKrSZ7mrEChNs0Uh/eKeMSJ1bXvnGIkeHE7ISKWAbuz4Y84XrkQH9+DzyDlEciYmh7AZRRXarIFrikCBA3uLLbaMx97N/nqHzs+n5hw3utF/osDQj78rbazm13PEv985AeeCRMK0msBKl4jg/WGWZC7tx/47Zluwg825Sc19FTn+SVOTkvl7F8aziVwVNhhA2dgkH7iegbCmsq3r8WIMTWeaImZ/9zcp4d5dOrpAjcGe8hNOJF4jf9Ajp09a6TmAAAAABJRU5ErkJggg==":e.startsWith("urn:grn:authn:fi:bank-id")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:fi")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:itsme")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:se:bankid")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:de:sofort")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:no:bankid")?"data:image/png;base64,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":e.startsWith("urn:grn:authn:no:vipps")?"data:image/png;base64,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":void 0}function O(e){var t,r;const{fetchOpenIDConfiguration:A,action:o}=(0,i.useContext)(c),s=e.language||"en",[a,d]=(0,i.useState)(null);(0,i.useEffect)((()=>{e.acrValues||(()=>{var e,t,n,i;e=this,t=void 0,i=function*(){d(yield A())},new((n=void 0)||(n=Promise))((function(r,A){function o(e){try{a(i.next(e))}catch(e){A(e)}}function s(e){try{a(i.throw(e))}catch(e){A(e)}}function a(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,s)}a((i=i.apply(e,t||[])).next())}))})()}),[e.acrValues]);const l=function(e){let t=e.slice(),n=function(e){let t=null;return e.forEach((e=>{if(e.startsWith("urn:grn:authn:dk:mitid"))if(t){let n=e.replace("urn:grn:authn:dk:mitid",""),i=t.replace("urn:grn:authn:dk:mitid","");(":low"===n&&[":substantial",":high"].includes(i)||":substantial"===n&&":high"===i)&&(t=e)}else t=e})),t}(e);return n?e.filter((e=>!e.startsWith("urn:grn:authn:dk:mitid"))).concat([n]).sort(((e,n)=>t.indexOf(e)-t.indexOf(n))):e}(null!==(r=null!==(t=e.acrValues)&&void 0!==t?t:null==a?void 0:a.acr_values_supported)&&void 0!==r?r:[]);return(0,n.jsx)("div",Object.assign({className:"criipto-eid-selector"},{children:l.map((t=>{return(0,n.jsxs)(j,Object.assign({acrValue:t,onClick:e.onSelect?()=>e.onSelect(t):void 0,redirectUri:e.redirectUri},{children:[h(s,o)?`${h(s,o)} `:"",f(s,t).title," ",(i=f(s,t).subtitle,i?i.substring(0,1).toLowerCase()+i.substr(1,i.length):i)]}),t);var i}))}))}function X(){const{result:e}=(0,i.useContext)(c);return{result:e}}var y=t.AuthMethodButton,D=t.AuthMethodSelector,I=t.CriiptoVerifyProvider,G=t.useCriiptoVerify;export{y as AuthMethodButton,D as AuthMethodSelector,I as CriiptoVerifyProvider,G as useCriiptoVerify};
|
|
2
2
|
//# sourceMappingURL=criipto-verify-react.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criipto-verify-react.esm.js","mappings":"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","sources":["webpack://@criipto/verify-react/webpack/bootstrap","webpack://@criipto/verify-react/webpack/runtime/compat get default export","webpack://@criipto/verify-react/webpack/runtime/define property getters","webpack://@criipto/verify-react/webpack/runtime/hasOwnProperty shorthand","webpack://@criipto/verify-react/external commonjs \"react/jsx-runtime\"","webpack://@criipto/verify-react/external commonjs \"react\"","webpack://@criipto/verify-react/external commonjs \"@criipto/auth-js\"","webpack://@criipto/verify-react/./src/context.ts","webpack://@criipto/verify-react/./src/provider.tsx","webpack://@criipto/verify-react/./src/utils.ts","webpack://@criipto/verify-react/./src/device.ts","webpack://@criipto/verify-react/./src/components/SEBankIDSameDeviceButton/Desktop.tsx","webpack://@criipto/verify-react/./src/components/SEBankIDSameDeviceButton/Android.tsx","webpack://@criipto/verify-react/./src/hooks/usePageVisibility.ts","webpack://@criipto/verify-react/./src/components/SEBankIDSameDeviceButton/shared.ts","webpack://@criipto/verify-react/./src/components/SEBankIDSameDeviceButton/iOS.tsx","webpack://@criipto/verify-react/./src/components/SEBankIDSameDeviceButton/SEBankIDSameDeviceButton.tsx","webpack://@criipto/verify-react/./src/components/AuthMethodButton/AuthMethodButton.tsx","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/beeid.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/digid.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/dkmitid.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/dknemid.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/ftnmobile.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/itsme.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/sebankid.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/sofort.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/nobankid.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/novipps.png","webpack://@criipto/verify-react/./src/components/AuthMethodSelector/AuthMethodSelector.tsx","webpack://@criipto/verify-react/./src/use-criipto-verify.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react/jsx-runtime\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@criipto/auth-js\");","import CriiptoAuth, {OpenIDConfiguration, AuthorizeUrlParamsOptional, PKCE, AuthorizeResponse} from '@criipto/auth-js';\nimport { createContext } from 'react';\nimport { Result } from './provider';\n\nexport interface CriiptoVerifyContextInterface {\n loginWithRedirect: () => Promise<void>,\n fetchOpenIDConfiguration: () => Promise<OpenIDConfiguration>,\n buildAuthorizeUrl: (options?: AuthorizeUrlParamsOptional) => Promise<string>,\n generatePKCE: () => Promise<PKCE | undefined>,\n handleResponse: (response: AuthorizeResponse, params: {pkce?: PKCE, redirectUri?: string}) => Promise<void>,\n responseType: 'token' | 'code'\n completionStrategy: 'client' | 'openidprovider',\n result: Result | null\n domain: string\n redirectUri?: string\n}\n\n/**\n * @ignore\n */\nconst stub = (): never => {\n throw new Error('You forgot to wrap your component in <CriiptoVerifyProvider>.');\n};\n\n/**\n * @ignore\n */\nconst initialContext = {\n loginWithRedirect: stub,\n fetchOpenIDConfiguration: stub,\n buildAuthorizeUrl: stub,\n generatePKCE: stub,\n handleResponse: stub,\n responseType: 'token' as 'token' | 'code',\n completionStrategy: 'client' as 'client' | 'openidprovider',\n result: null,\n domain: '' \n};\n\nconst CriiptoVerifyContext = createContext<CriiptoVerifyContextInterface>(initialContext);\n\nexport default CriiptoVerifyContext;","import React, {useMemo, useState} from 'react';\nimport CriiptoAuth, {AuthorizeUrlParamsOptional, generatePKCE, OAuth2Error, PKCEPublicPart, Prompt} from '@criipto/auth-js';\n\nimport CriiptoVerifyContext, {CriiptoVerifyContextInterface} from './context';\n\nexport interface CriiptoVerifyProviderOptions {\n domain: string\n clientID: string\n redirectUri?: string\n children: React.ReactNode\n pkce?: PKCEPublicPart\n state?: string\n prompt?: Prompt\n /**\n * Note: In most cases modifying this setting **is not needed**. Defaults will work with almost all React SPA cases.\n * By default @criipto/verify-react will do PKCE on your behalf and return a jwt token.\n * However if you wish you can disable this and get the raw `code` response by setting `response` to 'code'\n */\n response?: 'token' | 'code'\n /*\n * Note: In most cases modifying this setting **is not needed**. Defaults will work with almost all React SPA cases.\n * By default @criipto/verify-react will do as much as work on your behalf\n * by interpreting URL parameters and responses with `useCriiptoVerify()` via the default value 'client'.\n * If you wish to only render a UI and redirect to the Criipto IDP for server side code exchange, you can choose 'openidprovider'.\n */\n completionStrategy?: 'client' | 'openidprovider'\n}\n\nexport type Result = {id_token: string} | {code: string} | OAuth2Error;\n\nconst CriiptoVerifyProvider = (props: CriiptoVerifyProviderOptions) : JSX.Element => {\n const [client] = useState(\n () => new CriiptoAuth({\n domain: props.domain,\n clientID: props.clientID,\n store: sessionStorage,\n redirectUri: props.redirectUri\n })\n );\n\n const [result, setResult] = useState<Result | null>(null);\n const {redirectUri} = props;\n const responseType = props.response || 'token';\n const completionStrategy = props.completionStrategy || 'client';\n\n const context = useMemo<CriiptoVerifyContextInterface>(() => {\n return {\n loginWithRedirect: () => client.redirect.authorize({\n redirectUri: window.location.origin\n }),\n fetchOpenIDConfiguration: () => client.fetchOpenIDConfiguration(),\n buildAuthorizeUrl: async (options?: AuthorizeUrlParamsOptional) => {\n return await client.buildAuthorizeUrl(client.buildAuthorizeParams({\n pkce: props.pkce,\n state: props.state,\n prompt: props.prompt,\n ...options || {},\n }));\n },\n generatePKCE: async () => {\n if (responseType !== 'token' || completionStrategy !== 'client') return;\n return await generatePKCE();\n },\n handleResponse: async (response, params) => {\n if (params.pkce && responseType === 'token') {\n let _redirectUri = params.redirectUri || redirectUri;\n if (!_redirectUri) throw new Error('redirectUri must be configured globally or per authentication component');\n\n await client.processResponse(response, {code_verifier: params.pkce.code_verifier, redirect_uri: _redirectUri}).then(response => {\n if (response?.code) setResult({code: response.code});\n else if (response?.id_token) setResult({id_token: response.id_token});\n else setResult(null);\n }).catch((err: OAuth2Error) => {\n setResult(err);\n });\n } else {\n if (response?.code) setResult({code: response.code});\n else if (response?.error) setResult(new OAuth2Error(response.error, response.error_description));\n else setResult(null);\n }\n },\n responseType,\n completionStrategy,\n result,\n domain: client.domain,\n redirectUri\n }\n }, [\n client,\n redirectUri,\n responseType,\n completionStrategy,\n result\n ]);\n\n return (\n <CriiptoVerifyContext.Provider value={context}>\n {props.children}\n </CriiptoVerifyContext.Provider>\n );\n}\n\nexport default CriiptoVerifyProvider","export const DKMITID_PREFIX = 'urn:grn:authn:dk:mitid';\n\nexport function lowestMitIDValue(input: string[]) : string | null {\n let dkmitidMethod : string | null = null;\n\n input.forEach(s => {\n if (s.startsWith(DKMITID_PREFIX)) {\n if (!dkmitidMethod) {\n dkmitidMethod = s;\n } else {\n let newLevel = s.replace(DKMITID_PREFIX, '');\n let oldLevel = dkmitidMethod.replace(DKMITID_PREFIX, '');\n if (newLevel === ':low' && [':substantial', ':high'].includes(oldLevel)) {\n dkmitidMethod = s;\n }\n else if (newLevel === ':substantial' && oldLevel === ':high') {\n dkmitidMethod = s;\n }\n }\n }\n });\n\n return dkmitidMethod;\n}\n\nfunction autoTitleCase(input: string) {\n var segments = input.split(/:|-/).map(segment => {\n segment = segment.replace(/id(\\s|$)/, 'ID');\n if (segment.length === 2) return segment.toUpperCase();\n return segment.substr(0, 1).toUpperCase() + segment.substr(1);\n });\n return segments.join(' ');\n}\n\nexport type Language = 'en' | 'da' | 'sv' | 'nb';\n\nexport function acrValueToTitle(language: Language, value: string) : {title: string, subtitle?: string} {\n\tvalue = value.replace('urn:grn:authn:', '');\n\n if (value.startsWith('be:eid')) {\n return {title: autoTitleCase(value).replace('BEEID', 'Belgian eID')};\n }\n if (value.startsWith('nl:digid')) {\n return {title: autoTitleCase(value).replace('NL ', '')};\n }\n if (value.startsWith('dk:mitid')) {\n return {title: 'MitID'};\n }\n if (value.startsWith('dk:nemid')) {\n\t\tlet subtitle : string | undefined = undefined;\n\t\tlet suffix = value.replace('dk:nemid:', '');\n\t\t\n\t\tif (suffix === 'poces') {\n\t\t\tif (language === 'en') subtitle = 'Personal';\n\t\t\tif (language === 'da') subtitle = 'Personlig';\n\t\t\tif (language === 'sv') subtitle = 'Personlig';\n\t\t\tif (language === 'nb') subtitle = 'Personlig';\n\t\t}\n\t\tif (suffix === 'moces') {\n\t\t\tif (language === 'en') subtitle = 'Employee key card';\n\t\t\tif (language === 'da') subtitle = 'Medarbejder nøglekort';\n\t\t\tif (language === 'sv') subtitle = 'Anställd nyckelkort';\n\t\t\tif (language === 'nb') subtitle = 'Ansatt nøkkelkort';\n\t\t}\n\t\tif (suffix === 'moces:codefile') {\n\t\t\tif (language === 'en') subtitle = 'Employee key file';\n\t\t\tif (language === 'da') subtitle = 'Medarbejder nøglefil';\n\t\t\tif (language === 'sv') subtitle = 'Anställd nyckelfil';\n\t\t\tif (language === 'nb') subtitle = 'Ansatt nøkkelfil';\n\t\t}\n\n return {\n\t\t\ttitle: 'NemID',\n\t\t\tsubtitle\n\t\t}\n }\n if (value.startsWith('fi')) {\n return {title: autoTitleCase(value).replace('FI', 'FTN')};\n }\n if (value.startsWith('itsme')) {\n return {title: autoTitleCase(value).replace('me', 'ME')};\n }\n if (value.startsWith('se:bankid')) {\n\t\tlet subtitle : string | undefined = undefined;\n\t\tlet suffix = value.replace('se:bankid:', '');\n\n\t\tif (suffix === 'same-device') {\n\t\t\tif (language === 'en') subtitle = 'On this device';\n\t\t\tif (language === 'da') subtitle = 'På denne enhed';\n\t\t\tif (language === 'sv') subtitle = 'På denna enheten';\n\t\t\tif (language === 'nb') subtitle = 'På denne enheten';\n\t\t}\n\t\tif (suffix === 'another-device') {\n\t\t\tif (language === 'en') subtitle = 'With your SSN';\n\t\t\tif (language === 'da') subtitle = 'Med dit personnummer';\n\t\t\tif (language === 'sv') subtitle = 'Med ditt personnummer';\n\t\t\tif (language === 'nb') subtitle = 'Med personnummeret ditt';\n\t\t}\n\t\tif (suffix === 'another-device:qr') {\n\t\t\tif (language === 'en') subtitle = 'With QR Code';\n\t\t\tif (language === 'da') subtitle = 'Med QR-kode';\n\t\t\tif (language === 'sv') subtitle = 'Med QR-kod';\n\t\t\tif (language === 'nb') subtitle = 'Med QR-kode';\n\t\t}\n\n return {title: 'BankID', subtitle};\n }\n if (value.startsWith('de:sofort')) {\n return {title: autoTitleCase(value).replace('DE ', '')};\n }\n if (value.startsWith('no:bankid')) {\n let subtitle : string | undefined = undefined;\n if (value.endsWith(':substantial')) {\n if (language === 'en') subtitle = 'Biometrics';\n\t\t\tif (language === 'da') subtitle = 'Biometri ';\n\t\t\tif (language === 'sv') subtitle = 'Biometri';\n\t\t\tif (language === 'nb') subtitle = 'Biometri';\n }\n return {title: autoTitleCase(value).replace('NO ', ''), subtitle};\n }\n if (value.startsWith('no:vipps')) {\n return {title: autoTitleCase(value).replace('NO ', '')};\n }\n\n return {title: autoTitleCase(value)};\n}\n\nexport function filterAcrValues(input: string[]) {\n let original = input.slice();\n let dkmitidMethod : string | null = lowestMitIDValue(input);\n\n if (dkmitidMethod) {\n return input.filter(s => !s.startsWith(DKMITID_PREFIX)).concat([dkmitidMethod]).sort((a, b) => original.indexOf(a) - original.indexOf(b));\n }\n return input;\n}","function testUA(pattern: RegExp) {\n return pattern.test(navigator.userAgent);\n};\nexport function isiOS() {\n return testUA(/iPad|iPhone|iPod/) && !(window as any).MSStream;\n};\n\nexport function isiOSSafari() {\n return isiOS() && !testUA(/ CriOS\\/[.0-9]*/);\n};\n\nexport function isAndroid() { return testUA(/Android/); };\n\nexport type MobileOS = 'ios' | 'android';\n\nexport function getMobileOS() : MobileOS | null {\n if (isiOS()) return 'ios';\n if (isAndroid()) return 'android';\n\n return null;\n}","import React, { useContext, useEffect, useState } from 'react';\nimport CriiptoVerifyContext from '../../context';\nimport {Links} from './shared';\n\ninterface Props {\n children: React.ReactElement\n links: Links\n onError: (error: string) => void\n onComplete: (completeUrl: string) => Promise<void>\n onInitiate: () => void\n onLog: (...statements: string[]) => void\n}\n\n/*\n * Desktop: Polling scenario\n */\nexport default function SEBankIDSameDeviceDesktop(props: Props) {\n const {links, onError, onComplete, onInitiate} = props;\n const [initiated, setInitiated] = useState(false);\n const {domain} = useContext(CriiptoVerifyContext);\n\n useEffect(() => {\n if (!initiated) return;\n \n let timeout : string | undefined;\n const poll = async () => {\n const response = await fetch(links.pollUrl);\n\n if (response.status === 202) {\n setTimeout(poll, 1000);\n return;\n } else if (response.status >= 400) {\n const error = await response.text();\n onError(error);\n return;\n } else {\n const {targetUrl} = await response.json();\n await onComplete(`https://${domain}${targetUrl}`);\n return;\n }\n };\n\n setTimeout(poll, 1000);\n return () => {\n if (timeout) clearTimeout(timeout);\n };\n }, [initiated]);\n\n const handleInitiate = () => {\n onInitiate();\n setInitiated(true);\n };\n \n return React.cloneElement(props.children, {\n ...props.children.props,\n onClick: handleInitiate\n });\n}","import React, { useState } from 'react';\nimport usePageVisibility from '../../hooks/usePageVisibility';\nimport {Links} from './shared';\n\ninterface Props {\n children: React.ReactElement,\n links: Links,\n onError: (error: string) => void\n onComplete: (completeUrl: string) => Promise<void>\n onInitiate: () => void\n onLog: (...statements: string[]) => void\n}\n\n/*\n * Android: Background/Foreground scenario\n */\nexport default function SEBankIDSameDeviceAndroid(props: Props) {\n const {links, onError, onComplete, onInitiate, onLog} = props;\n const [initiated, setInitiated] = useState(false);\n\n usePageVisibility(async () => {\n onLog('android', 'onForeground', initiated.toString());\n if (!initiated) return;\n \n onComplete(links.completeUrl);\n }, [links, initiated]);\n\n const handleInitiate = () => {\n onLog('android', 'handleInitiate');\n onInitiate();\n setInitiated(true);\n };\n \n return React.cloneElement(props.children, {\n ...props.children.props,\n onClick: handleInitiate\n });\n}","import React, { useRef, useState, useEffect } from 'react';\n\nexport default function usePageVisibility(onVisible? : () => void, deps : React.DependencyList = []) {\n const visibilityState = useRef(document.visibilityState);\n const [state, setState] = useState(visibilityState.current);\n\n useEffect(() => {\n document.addEventListener('visibilitychange', _handleVisibilityChange);\n\n return () => {\n document.removeEventListener('visibilitychange', _handleVisibilityChange);\n };\n }, deps);\n\n const _handleVisibilityChange = () => {\n const nextState = document.visibilityState;\n if (\n visibilityState.current === 'hidden' &&\n nextState === 'visible'\n ) {\n if (onVisible) onVisible();\n }\n\n visibilityState.current = nextState;\n setState(visibilityState.current);\n };\n\n return state;\n}","import { PKCE } from \"@criipto/auth-js\"\n\nexport interface Links {\n cancelUrl: string\n completeUrl: string\n pollUrl: string\n launchLinks: {\n customFileHandlerUrl: string\n universalLink: string\n }\n};\n\nexport interface State {\n pkce: PKCE | undefined\n redirectUri: string\n links: Links\n}\n\nconst STATE_KEY = '@criipto/verify-react:sebankid:state';\n\nexport function hydrateState() : State | undefined {\n const rawState = sessionStorage.getItem(STATE_KEY);\n if (rawState) {\n return JSON.parse(rawState) as State;\n }\n\n return undefined;\n}\n\nexport const autoHydratedState = hydrateState();\n\nexport function clearState() {\n sessionStorage.removeItem(STATE_KEY);\n}\n\nexport function saveState(input: State) : void {\n sessionStorage.setItem(STATE_KEY, JSON.stringify(input));\n}","import { PKCE } from '@criipto/auth-js';\nimport React, { useEffect, useState } from 'react';\nimport {Links, saveState, autoHydratedState, clearState} from './shared';\n\ninterface Props {\n children: React.ReactElement,\n links: Links,\n onError: (error: string) => void\n onComplete: (completeUrl: string) => Promise<void>\n onInitiate: () => void\n onLog: (...statements: string[]) => void,\n pkce: PKCE | undefined,\n redirectUri: string\n}\n\n/*\n * iOS: Page reload on switch back scenario\n */\nexport default function SEBankIDSameDeviceIOS(props: Props) {\n const {links, onError, onComplete, onInitiate, onLog, pkce, redirectUri} = props;\n\n const handleInitiate = () => {\n onLog('iOS', 'handleInitiate');\n\n saveState({\n links,\n redirectUri,\n pkce\n });\n\n onInitiate();\n };\n\n useEffect(() => {\n if (!autoHydratedState) return;\n clearState();\n onComplete(autoHydratedState.links.completeUrl);\n }, []);\n \n return React.cloneElement(props.children, {\n ...props.children.props,\n onClick: handleInitiate\n });\n}","import { PKCE, AuthorizeResponse } from '@criipto/auth-js';\nimport React, {useCallback, useContext, useEffect, useState} from 'react';\nimport CriiptoVerifyContext from '../../context';\nimport { getMobileOS } from '../../device';\nimport usePageVisibility from '../../hooks/usePageVisibility';\n\nimport Desktop from './Desktop';\nimport Android from './Android';\nimport IOS from './iOS';\n\nimport {autoHydratedState, Links} from './shared';\n\ninterface Props {\n className: string\n children: React.ReactNode\n href?: string\n redirectUri?: string\n}\n\nconst mobileOS = getMobileOS();\n\nfunction searchParamsToPOJO(input: URLSearchParams) {\n return Array.from(input.keys()).reduce((memo : {[key: string]: string}, key) => {\n memo[key] = input.get(key)!;\n return memo;\n }, {});\n}\n\nexport default function SEBankIDSameDeviceButton(props: Props) {\n const [href, setHref] = useState(props.href);\n const [links, setLinks] = useState<Links | null>(autoHydratedState?.links ?? null);\n const [pkce, setPKCE] = useState<PKCE | undefined>(autoHydratedState?.pkce ?? undefined);\n const [error, setError] = useState<string | null>(null);\n const [log, setLog] = useState<(string | string[])[]>([]);\n const [initiated, setInitiated] = useState(autoHydratedState ? true : false);\n const {buildAuthorizeUrl, completionStrategy, generatePKCE, domain, handleResponse, redirectUri: defaultRedirectURi} = useContext(CriiptoVerifyContext);\n const redirectUri = props.redirectUri || defaultRedirectURi;\n\n const reset = () => {\n setPKCE(undefined);\n setLinks(null);\n setHref(props.href);\n };\n\n const handleLog = (...statements: string[]) => {\n console.log(statements);\n setLog(logs => logs.concat([statements]));\n }\n\n const handleComplete = useCallback(async (completeUrl: string) => {\n const required = {pkce};\n reset();\n\n const completeResponse = await fetch(completeUrl);\n if (completeResponse.status >= 400) {\n setError(await completeResponse.text());\n return;\n }\n \n const {location} : {location: string} = await completeResponse.json();\n if (completionStrategy === 'openidprovider') {\n window.location.href = location;\n return;\n }\n const url = new URL(location);\n const params = searchParamsToPOJO(url.searchParams) as AuthorizeResponse;\n\n await handleResponse(params, {\n pkce: required.pkce,\n redirectUri\n })\n }, [completionStrategy, pkce]);\n\n const refresh = useCallback(async () => {\n handleLog('SEBankID: Refresh authorize url');\n const pkce = await generatePKCE();\n\n buildAuthorizeUrl({\n acrValues: 'urn:grn:authn:se:bankid:same-device',\n loginHint: 'appswitch:browser',\n responseMode: 'json',\n pkce,\n redirectUri\n }).then(url => {\n return fetch(url).then(response => response.json() as Promise<Links>);\n })\n .then(links => {\n setPKCE(pkce || undefined);\n setLinks(links);\n const redirect = mobileOS === 'ios' ? encodeURIComponent(window.location.href) : 'null';\n const newHref = `${mobileOS ? links.launchLinks.universalLink : links.launchLinks.customFileHandlerUrl}&redirect=${redirect}`;\n\n handleLog(window.location.href);\n handleLog(newHref);\n setHref(newHref);\n })\n .catch(console.error);\n }, [buildAuthorizeUrl, redirectUri]);\n\n // Generate URL on first button render\n useEffect(() => {\n if (initiated) return;\n refresh();\n }, [refresh, initiated]);\n\n // Continously fetch new autostart token if UI is open for a long time\n useEffect(() => {\n const interval = setInterval(() => {\n if (initiated) return;\n refresh();\n }, 25000);\n return () => clearInterval(interval);\n }, [refresh, initiated]);\n\n // Track when the button is clicked to stop refreshing URL\n const handleInitiate = () => {\n handleLog('Initiated');\n setInitiated(true);\n setError(null);\n }\n\n const element = (\n <a className={`criipto-verify-button ${props.className}`} href={href} onClick={handleInitiate}>\n {props.children}\n </a>\n );\n\n return (\n <React.Fragment>\n {links ? (\n <React.Fragment>\n {mobileOS === null ? (\n <Desktop\n links={links}\n onError={setError}\n onComplete={handleComplete}\n onInitiate={handleInitiate}\n onLog={handleLog}\n >\n {element}\n </Desktop>\n ) : mobileOS === 'android' ? (\n <Android\n links={links}\n onError={setError}\n onComplete={handleComplete}\n onInitiate={handleInitiate}\n onLog={handleLog}\n >\n {element}\n </Android>\n ) : mobileOS === 'ios' ? (\n <IOS\n links={links}\n onError={setError}\n onComplete={handleComplete}\n onInitiate={handleInitiate}\n onLog={handleLog}\n redirectUri={redirectUri!}\n pkce={pkce}\n >\n {element}\n </IOS>\n ) : element}\n </React.Fragment>\n ) : element}\n {error && <p>{error}</p>}\n {/* {log && (\n <pre>\n {JSON.stringify(log, null, 2)}\n </pre>\n )} */}\n </React.Fragment>\n )\n}","import React, {useContext, useEffect, useState} from 'react';\n\nimport beeid from './logos/beeid.png';\nimport digid from './logos/digid.png';\nimport dkmitid from './logos/dkmitid.png';\nimport dknemid from './logos/dknemid.png';\nimport ftnmobile from './logos/ftnmobile.png';\nimport itsme from './logos/itsme.png';\nimport nobankid from './logos/nobankid.png';\nimport novipps from './logos/novipps.png';\nimport sebankid from './logos/sebankid.png';\nimport sofort from './logos/sofort.png';\n\nimport './AuthMethodButton.css';\nimport CriiptoVerifyContext from '../../context';\nimport SEBankIDSameDeviceButton from '../SEBankIDSameDeviceButton';\n\ninterface ButtonProps {\n className?: string,\n children: React.ReactNode,\n onClick?: React.MouseEventHandler\n}\n\ninterface AnchorButtonProps extends ButtonProps {\n href: string\n}\n\nexport function AnchorButton(props: AnchorButtonProps) {\n return (\n <a className={`criipto-verify-button ${props.className}`} href={props.href} onClick={props.onClick}>{props.children}</a>\n );\n}\n\nexport function Button(props: ButtonProps) {\n return (\n <button className={`criipto-verify-button ${props.className}`} type=\"button\" onClick={props.onClick}>{props.children}</button>\n );\n}\n\ninterface AuthMethodButtonProps {\n acrValue: string,\n href?: string;\n onClick?: React.MouseEventHandler,\n children?: React.ReactNode,\n 'data-testid'?: string,\n className?: string,\n redirectUri?: string\n}\n\nexport default function AuthMethodButton(props: AuthMethodButtonProps) {\n\tconst {acrValue} = props;\n const context = useContext(CriiptoVerifyContext);\n\tconst className = `criipto-verify-button-eid ${acrValueToClassName(acrValue)}${props.className ? ` ${props.className}` : ''}`;\n\n const [href, setHref] = useState(props.href);\n\n useEffect(() => {\n if (props.href) return;\n\n context.buildAuthorizeUrl({\n redirectUri: props.redirectUri,\n acrValues: acrValue\n }).then(setHref)\n .catch(console.error);\n }, [props.href, acrValue]);\n\n\tif (acrValue === 'urn:grn:authn:se:bankid:same-device') {\n\t\treturn (\n\t\t\t<SEBankIDSameDeviceButton\n\t\t\t\tredirectUri={props.redirectUri}\n\t\t\t\thref={href} className={className}\n\t\t\t>\n\t\t\t\t{acrValueToLogo(acrValue) ? <img src={acrValueToLogo(acrValue)} alt=\"\" /> : null}\n\t\t\t\t<span>{props.children}</span>\n\t\t\t</SEBankIDSameDeviceButton>\n\t\t);\n\t}\n\n\tif (href) {\n\t\treturn (\n\t\t\t<AnchorButton {...props} href={href} className={className}>\n\t\t\t\t{acrValueToLogo(acrValue) ? <img src={acrValueToLogo(acrValue)} alt=\"\" /> : null}\n\t\t\t\t<span>{props.children}</span>\n\t\t\t</AnchorButton>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Button {...props} className={className}>\n\t\t\t{acrValueToLogo(acrValue) ? <img src={acrValueToLogo(acrValue)} alt=\"\" /> : null}\n\t\t\t<span>{props.children}</span>\n\t\t</Button>\n\t);\n}\n\nfunction acrValueToClassName(value: string) {\n value = value.replace('urn:grn:authn:', '');\n const segments = value.split(':');\n const classNames = segments.reduce((memo: string[], segment: string) => {\n if (memo.length) {\n return memo.concat([`${memo[memo.length-1]}-${segment}`])\n } else {\n return memo.concat([segment]);\n }\n }, []);\n\n return classNames.map(className => `criipto-verify-button-${className}`).join(' ');\n}\n\nfunction acrValueToLogo(value : string) {\n\tif (value.startsWith('urn:grn:authn:be:eid')) {\n\t\treturn beeid;\n\t}\n\tif (value.startsWith('urn:grn:authn:nl:digid')) {\n\t\treturn digid;\n\t}\n\tif (value.startsWith('urn:grn:authn:dk:mitid')) {\n\t\treturn dkmitid;\n\t}\n\tif (value.startsWith('urn:grn:authn:dk:nemid')) {\n\t\treturn dknemid;\n\t}\n\tif (value.startsWith('urn:grn:authn:fi')) {\n\t\treturn ftnmobile;\n\t}\n\tif (value.startsWith('urn:grn:authn:itsme')) {\n\t\treturn itsme;\n\t}\n\tif (value.startsWith('urn:grn:authn:se:bankid')) {\n\t\treturn sebankid;\n\t}\n\tif (value.startsWith('urn:grn:authn:de:sofort')) {\n\t\treturn sofort;\n\t}\n\tif (value.startsWith('urn:grn:authn:no:bankid')) {\n\t\treturn nobankid;\n\t}\n\tif (value.startsWith('urn:grn:authn:no:vipps')) {\n\t\treturn novipps;\n\t}\n}","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEMAAAAxCAYAAACBIBS5AAAH70lEQVRoBd2aDXAURRbH/5svQmLQQIAkIoj4QWHuvFPw1AOxKCoqKsGUCqIpLATOO/RA70pBiYTgzoQEVGIFhJgEdjYRN1QUPwJ+hIjCobIzSxKDBAgcioInBkiFABL2XfUwM8zuzn4lAXfTVa+md7e3+73fe/26Z6aB8CmjAJAXcQJoA/BfANUAXgAwEkBE+JgXnKbMOG8wvH1/EMBCAAnBDRX6rTsDQ4V0GMDsnhQpXYGhQtkGYGjo+92/hr5yhmpsINcmALf6Hy60W/QG8BcvcgeABwE8C+AdAEf95JcjAP4YlLk5jbaY3B1r/8zvtKYvqRMmcg5hUmhK+QROFMbw9eXXgMgEIA7AVAB2H1B2AUjyC2RJnXUQJwlvcpKwn5eE07wkUKgLJwlOXhROcKJls1myTFll/4ABYatIPoAOL1CW+4TBScJzvCS0h7rxfvUThQbOXjZcMZZNoXYvQO72AMLXlyfyomWd30HCIEp0NrRwO6wPKcbOAsA2Z+5J9isXGLPsq6J5SajQdRLy0yIIXdvMjrI/AYgEsNoABoNzswaEq7M8Kc+58PJ64A4TrfWFewt7ARgE4JgBkGIZRlFj0WW8ZDkUBOnAlQgduOd40cKWXVZKDGA0ADDBbLdM7eEgVOc1FVbL0THRAEYrgGHggkiafyvNpqxlc2R56bMidZBuu1qaNtG7+7fI8kb9eire9T6tb/7cQyr31VLJdx9SgaMiiLGtZ3O/LhsDoD+Anw2AjAPvEPYGGhnXjBqhZeLZ5blBKBLYPqXp2PekFqHpY6o7ulf96HE96+ygltOtVHPITvmO8oB0MTss7GaNld0GMDIZjJPhCENPp7n1R1q6822/QDhReFGB8YkBjCkIFARr93tGRtX+LVTYUElFDVXEokb6pYmcTqfGxP6/3X5hmCUhV4GxwQDG1LCBUbHnUw9jq5q3aDDOdPxGq3e979FG7+weDYMZuqvlgAak5gf77wNjsvkpuuefk+mvj91N42ZkUNZrc2nx12UeyiyoKaIHF0yn2x4ZTyMzxlJm9nTK+XK1RztmmK8EahQZ7D8bDnypwWg6dtCwXzU6ujUyhulWE5PJpK0s6vxLGpJMz1XlawpNzX+GeiXEebQbOGwQzbXxWjtV2c7AWPFtlQbjaPtxjz7Vvtm1W2HoEygDEBNtovg4VyjJ111F8zcup8eXzaGo6CgZxBUmE42PiaW0qGj2sEH+rv/QVFq4ZZWL8p2BkSdZyUnnE2nrbyd9LrMXDcZr5j7ULA2gA46BZCtNpNSUCC0C0saPosTUJPnzoIhI2t53IH2flEp7+qXQtNh4rV3G/GldhsE8zvYcrJw8e8rnEnvRYHzxUT86cyRFk63VSRTnFiUseubF95FBMBhMtiYOoARlig27dUS3wFCXWAajwOF9v3HJYJw6nEL3pffSvK7mkcxevWlhfB9NsuMS6DIFRlRMNHGiRQPSmWmybOc6LWewaZLnsGr96fPFRc0Z7pHBomRGVm8PGCoUb9fszSs15TsDY83uag3Gj22/aH25g7jkMDLvj/WAkXrDELpl4hiv8rIuiXYGBrs3UYu/XeglmyY/fTeQrh4c6QFjxF03+/SW3oPBwmA3aD+3t6gs5D2Hvj/3epdhZH/+Jv37vaWyQfqlVT9N2g4l04ysC/uJxNT+pO5DTBERNLP4RQ8gL3/huqwyxYOBwXLDtiMNGojjp9uosH69xzh6IF2C8XT5YopNiKOIyEiaws92uVGb81Q8VRQn0oqll9Odd8SQyXR+/5B8/WCav6mQbhh9kxYlrI+7pj9Ak81/p4cXzaJRk8ZS3BUJNLfSdePlC8bGg9vlZxgsR1Tu20xst6muIoxI9cHtPkEwKIHAOKGnp69PnDdNM2h01r0uMIwSYurwq+lf7xXISrENVcrwIdr/jdqn/+MhFwN8wTjndMr7iQ7nOS0a1Mq2w/UBPejhRMvzyl3rRgN9HmV3rY16APp67n9K6MZxI2nwH66lZ9fnUdarc2nwTdfJXoUSCWw69L2yP2XMf4Jyt5e4GLdoazGNnDSWomNjNCimCBMNGHolPfB8lsuyysb1BUM1XL2yqDh66rj8FEyvs686J1meVGCwZ56aTko9E3l24S1fHXj7Lbt2JS2oWUGvfLPGBYBRewZ1trCIZq5+ieZtWu61fenuD6myuVaW1+tt8rR4Z18NuUvFnk/ojQbf+cFAjzN50po7ASQCYEcU3GGMh3mn9XGDP3pVOIzb7lFeF4wzAHESQBpy7KvieMlyOIyNDMhxnGiZqUwR9u7VPSr2AoiSf88Te3Z0cKLQmPOVtY/yZPxXAxilCiggp7Y2indYbT00Otp5cc0tirEFBiBYlLBXCBdKTuNbfXnJuq5HvWYUhVZux1r1xfNkACcMYHwLIPoCCaXGDqfwkvACLwlHwjlKmEPzHMI23ZGEdAA/GYBgUTHBA4T+iyVbSxI4ca2Zkyx1eZLQETZgHEIr7xA25NdbJtD5EzzMrEcAnPICwqa322/91R9svQvq1qXxdmv6YrHsnlAU7pvSsey00cM2Gzt2oJbbAbzrBQKLiAMA+qmNw+0aAyDZi6QqZywyAHAAGn1AYCBaAIwONwB6fbvjHCgDwXLHJH3H4VjvDhgOALeFo/HuOncFxmkA7GRf2OaI7oBxXDnHlSafzHHvMYw/+zsuzbzPTgZLAFYqeWFAT4Nwyfz3f6KJRv+G4gN/AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAAYCAYAAAAiR3l8AAAEg0lEQVRoBe1a7W0bMQzNz+TkABkhI2SDdoRsUErX/80G7gbuBu4GHsEjeASP4BFcPFH0nWXq42z5UCAJYCinkyjyPZGipHt4+Pr7QkAQeCF6kf8/awkMHoleZ7N/QfTdkNsb6nfG9j+uHdhQv4UMrT+M4vfuaGjCL6HPguwfyOnI7Z+J3rUxS3UvRK+iE+S0mnwexwQO0OmZ+ndD7lDGod911G/ASXZCMHkA1e4hFISWjNfeAwwAob0LSh87svuO3LL2pyluiN7YeLsLOh+0dpoeUscTCpPW271F+UT9L3l/Swk8UzhALhPsJ986g8PGkPV6sY7cXrVTjOAZ6Q7XzsYcgQEwL1tVYgJiC/qJiAHvW4bo4T1xigcNHkzLsbwJaiSblgnkiZMUEL0wRCRkgpuLiCMEop8h+gjgbCI5xcccgeiMgRE6oMQtJMaAi86G3LqopLfRndkYy6uRkWvTmkAZi4nk0PtE7kPqH8YEorIjt0HdWaNT6/Q/JQLRM4S/m0jUAK/VOUQZH8rFYzV5aSvLb+5FIEaWKMmc0ZvXJiaQw51fDyetLTUEYsBbSdQAH+l8hHwN5mD83pA9s0uTp/WvrbsngdAhRDLkLFuvU0wgKmVtMWTVrFIzppZA9L2FxBTgMjtTa7h4qbH2LNNOydNsrKm7N4GMHyc4PuHUCORGbsXv3KpO8XQWqvUXEjml1r1G65cDPKwTw+wMAhbkfsOWjmgZy8zJi9vWPM9DoKMTNykCoSw8EO9rthZTPFCAYBI5XKdCn7SVsgS4IZ54IA19pH0qmsh7ZLUyxi3lHATykuEz8f1FEjNWfhyWSpljLYFB5gr7ISjCz0winsfja//XAC5pNzbBDKhNZr418jQ9UnVzEIixMQ6iV5ZAbshbi9OimdC8hkBDPoUPpxB2K5MCJD4RVW2kawAfTYpw8pMO0TXyEiar1TMTeCwSyCRyWMptLUoEDuuQ3T9a+021vqKyFnBJxEoTo1ZehWq+yX9JYE2aniPQEC+6OEoTr6sFJG7XGvDW8mYkEJGsHEIFwJA1Jo+t8gTioNsdbyUPurQGvLW8OQgMeQRn27ksVMiTcnRsdbG1yBPoD42r95Qynla2Bry1vDkIlIjm97RTCASgkuHFh6opAuF1U8fQiJO61oC3ljcTgf4mxUe0qeAG9/XxdxwSUwQy6V8eKBMQBANzeZ5aDslgOJSYSiAGvDiP856ZPokRr63drItR7B3nW4DWHtNa3j09cCDPDveu1xAIgOMTj5wHjgj3m3chKFee4rwc2obGrQFvLe8eBGIXMNxhRpn8tQSOtxa850p7IBNu/2Ks0n1gVtlPloVicgWvC4cftAI+ZxP/WgIhZLQehhOPcMVxNsLwIF7LY3rCl8HTCJ80dNSv+XCbP3UYr7EipbXHtJZX9kD5VMJ/Q4TviLQfzqADaQGL1OEHf1dCF9sCAaxUBhJxc7HSAI/7h/Zr+QaHyYSSXlFc9m5yJzXB83fxtVA8Tu1za3l8AZC+hmP7QSLOf9Ufvi3CpfoKNl54XGTYPxsuBZWRhTDMAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAAwCAYAAAC13uL+AAAFjElEQVRoBe1a0Y3bOBB1CengdNIucJ/uIIuLZeQv/klW0s9uB6Z8BWQ72PwEB0gGnA72GrCIVOASVIJL2MOjNL4hLUoUJVx+1oAgkaLFeZzh48yQi8WMv9vPYhml+euEq44SIaN09xJm+fYmEXczijftU1EqNhOAdQ9Klp/DbHf45UDDRHydHRyzhDDN6yDLP01Tgee/YU4aOIz6vXiO0vyhBS6190zwMfVhunv2FNH+t7j4uV0V8gXXev/zwWwZpflF+DAVnQKgfgwQW9swzU/BRrwzZfAqx/vjt7isXvm1KqU24aMsP0MYmI+tkxlIh83N3Yutn1H1cVlJDiwuqvrubxnQR4JH8Y5GuQ/cTSoEtZvjHt4LQTJMuhPAdXF8uTtIzSTAZlzYm0Q8mZ1FX8SGtMvbTnw+z2KeH/ZyE5fVmWuMAGBdMoXkzBYl4tF8P1c5vM+3JIf3PS7kY1xWp64PXBFFlp+DRFzM9opJPZmyc0ASIbtkcq77eJDBel/VmHcf2VyjD4CeW7aUYSIOt5lY0jvc/0hEECXiQG3oHqbiNIepOpsm5hOYEBe0tSrlM8yREco5LuQBZkrtOBCf5yATyxY8Y0N3Vy74rA+mVYZVKb8yIBr9W+o7TdXaQc+LCXPzat3t7AaLtAVEJ9BVWU2zeUMKTw26gQNpjAMnO70RQ2bnoqcD7gyuU0M2wB/20u3DjvDAsp2s2M+wwzLEhVzaQFjri+q9o9xOzXzABWk+LINiSMOHtIJq25neihOCnkamt+OiRSe2jAu5HQJjvD/3yOn1qsvbGQDoJsO6WdOc59zcTInR4KHTAKhmTXT1UOJS6t7/gIligfdSj+VPypPpJ46rRd7ZtzQ8kWENFnK609oCbYHVTtpiA8B9WMuYLRYgBmM+OYCbhyl9gSFbZgXEX/gwZfxdag4y/57LM5jxKqJgWnHQ4vD6BkHi4oiQZlhbrI0LALNNy4ajzc8E2hfxm30uxjKlLba7+rBRMVds5zTXqO/RDnNx9ErQhFl+MrUwtoxUIcntdPdwmMd10EoxFojZHmk9J0C80dj55uMwT03tqazz2Hzl/+Uwe4YzauH2TsS2ma1RTOnjMPvuJ9gy2NzyrM8eqQU3Z9XocSxTKjN0CWeMfrTiaKb0TC24MiVAjWZEDRErjHaYPZcBk/mMco1dIafAk8k++Ig4DqY54tI2QQY7WCwW2E+ANi5Xk6V+ABjnvKNLR29t3kbgbQR+3QhEaf4jSnOEIPqFYxNfxGYuyaIk/6fpw74jir2J9V7WuCiFEZfyRHV0R92qPIpBR4KvPfAElBfRbgFHae61WHcNyGU3pyd65mEXmNshO9AfifO1hoSiDBQFhKBqFTETaJxUYKcKwmyHYxpK8zfZ7ql9fqU2+rZycxggyvJv9J/brNlA5Ovtqqw+admBoqrjonr/ZxNUX3ad0Ibk1u7cSwcQFfbTLmkDRIXxBJYPBJ7RHh+0vUcbJEx5olVZRjMVGoeYxWZaguq7XHKfd8UcB+4u4lkDRYU+Lx1gAV4Jn4gf5DlwQamOTA7/wXZxlIrLmRSAMxKt6tQDgPO0nGmC6NcAcUkjGvXd4NpRpBE8/J799Rs/caCZZZZvsWtKQEgrmsm1WuAOMoS0JIG0rWXNBNvtae7z8vjRNF9SlnbnQtAoGqZ6Umk3NcfyGhrgA4KPaZpsjy+RmVLUzMvt/GySq4xcukyQZwcATrXhZ2KKynrmRZsr0IoSPtVyHHS06RUHzEAsUfbfMagwEU/c5EwzpbziRdstGI2h27MkBlMqE9TmIMu6qayBcRZG0xoKasPdXN9QToS8aBL71U0bjLby3KmMDBRnSoBvzVQxJ7Rslpm2mzbtUSe1945DBfuqBlPiYAGeuy7MuaE17l8txYxCItgPEAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAUCAYAAABGUvnzAAAE10lEQVRoBe1Z3XHcNhC+EjjAaSZvTgfRiyKCL7nHRATtGzdgd2B14HSgdKB0cCW4BJWgEljCZT6SS35YAjhSJ0eSk5vBAAR2F7v74WcXt9n8//vxPVAW+591earVWg6+T8naFftC+NA+Rf/S46LrEtteWtdNZfyDs/44L83jrtitcnZl/V9zOZ3s9uri5jJlbGlvPgtfaZr7FN1r6RddUa/Rqdz6XWn8165s/U54ry72l2O/jFPt7B/78qfTG0XkBbUz9SMrzO2y+P3k7mNhzjYH5uf2tb35wLTc/s8AbPxX8QkAFR+w/TIeq0vb3K8GGiCWtv6kiyua30SBpTVkVUXzYa0sNvCH3sFnAjyA3pb2/aelmLwKuhzAa+9kuR/PMezUnLy71syDXSu8yR1s6gfeINfGfymt/yZ8UueuvDU6jbQQWBZ+p8tIsNls+mBpTgMeptNtDTDkVFv/p7NNKwY567/ljidnmltn+bppWrdt7hBH9P0Yqx95bsiUgn4tozL1A+4/5unoKGaJjOGa6uTqnbYEYICpZeKbfTT4JEoX4z3Z52yzJ0cHAdm19QcRUNnmPkWXA1kpf0gHfv6onYa5na3/Ts07OHvUWXTt+abgMhMgHrXuPBfL6xdlLxOLg8fQPgfgjn87nQDQQeul51v8jeiPjQrapr4TQaVSgOl+LfwvQqfrEOBx17a4jyOBW8s7ubTNGIEP86X4OpB5btaPeSNHYrBbmE/kBXqY+jEWoJ4LME42PtVwfMv8Z9c46qri4ztdtGA9ju9T6VYIsD9Wtg5SJTiLDXO0qJxtOAs48FwzPpXWMFDO+oDXmeaOx9lO3Y8FR3q0MXDBfy7AkMGn21sISDu/KYCjDro277+MjjX9XapPlphj9amSAuqqCPP0frfQEV58fCe8ox7DgiFwj7E7W/ieA2CkSjL/IoCTSbYKxeFgKDgrT03AxWoVQCSDjAK7ZHI4diovjBRfdbG/ZD6adpPqFxoex0kU7Q8fd4KjXOilfg6AOaZYBHC4+iYHwjgxammQJYasrQOgMi9Z2uFL+JA2MR/rluoXGh4XX2CM+3U7F/g8D8DTlQR5omuy7u+aPoXgdIJ3RHeXdU+aEbolkyRn7wcYKKzQGHlsJz6VT+QzONLHNY9nAQ5eA9NPvOcCHARyOM2e8BjF9v1rbQVUy4GSKMEpiBtSELU7o3zB3Z0JsmQerhcBPETMfHQi/2Y50j4HYBXIHfHELHJffa0ARjoTRLSzYMpMUTZHlZoP8UUQfX8HgCWw6045epiJHdVLAMbildc41Hhgijz6HPHatQhYvN7gstbFbevbRQKIqA/YIrJM/6JEpEEzAvBxiA3kVWh8qHDWB1H2nLe7o2J82Tw4UGj4WLKDmc+Z+nbimR/ViwCmQHKSFcZGkMPzZtspIejXqUNWUB98zN5MRX5uxQUg4XkwuNOUcSq6h046Z5U5UbNT8c02MB33S5vHU3ew0EqdO6pZFwYpsD8PcJtLw0SHoEaeiIBqVtaskkEiou2ZnO5dtjnIURZMPnxUFv9A9TrgEQO0lanHfK8DCnIyQUXnJPpvG/LEGSIbNc+f6hcaHue4gPuFVmrozuP8pwB0nMZuPgsP2z+ND/7AX7CmvsvZLnLeZI2dw859k0a8oNL/AO3s/ku5hXTHAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,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\"","import {OpenIDConfiguration} from '@criipto/auth-js';\nimport React, { useContext, useEffect, useState } from 'react';\nimport CriiptoVerifyContext from '../../context';\nimport { acrValueToTitle, filterAcrValues, Language } from '../../utils';\nimport AuthMethodButton from '../AuthMethodButton/AuthMethodButton';\n\ninterface Props {\n acrValues?: string[],\n language?: Language,\n onSelect?: (acrValue: string) => void,\n redirectUri?: string\n}\n\nexport default function AuthMethodSelector(props: Props) {\n const {fetchOpenIDConfiguration} = useContext(CriiptoVerifyContext);\n const language = props.language || 'en';\n const [configuration, setConfiguration] = useState<OpenIDConfiguration | null>(null);\n\n useEffect(() => {\n if (props.acrValues) return;\n\n (async () => {\n setConfiguration(await fetchOpenIDConfiguration());\n })();\n }, [props.acrValues]);\n\n const acrValues = filterAcrValues(props.acrValues ?? configuration?.acr_values_supported ?? []);\n\n return (\n <React.Fragment>\n {acrValues.map(acrValue => (\n <AuthMethodButton\n acrValue={acrValue}\n key={acrValue}\n onClick={props.onSelect ? (() => props.onSelect!(acrValue)) : undefined}\n redirectUri={props.redirectUri}\n >\n {acrValueToTitle(language, acrValue).title}<br />\n {acrValueToTitle(language, acrValue).subtitle}\n </AuthMethodButton>\n ))}\n </React.Fragment>\n )\n}","import { useContext } from \"react\";\nimport CriiptoVerifyContext from \"./context\";\n\nexport default function useCriiptoVerify() {\n const {result} = useContext(CriiptoVerifyContext);\n\n return {result};\n}"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","require","stub","Error","initialContext","loginWithRedirect","fetchOpenIDConfiguration","buildAuthorizeUrl","generatePKCE","handleResponse","responseType","completionStrategy","result","domain","createContext","props","client","useState","clientID","store","sessionStorage","redirectUri","setResult","response","context","useMemo","redirect","authorize","window","location","origin","options","buildAuthorizeParams","pkce","state","prompt","params","_redirectUri","processResponse","code_verifier","redirect_uri","then","code","id_token","catch","err","error","OAuth2Error","error_description","value","children","autoTitleCase","input","split","map","segment","replace","length","toUpperCase","substr","join","acrValueToTitle","language","startsWith","title","subtitle","suffix","endsWith","testUA","pattern","test","navigator","userAgent","SEBankIDSameDeviceDesktop","links","onError","onComplete","onInitiate","initiated","setInitiated","useContext","useEffect","poll","fetch","pollUrl","status","targetUrl","json","text","setTimeout","onClick","SEBankIDSameDeviceAndroid","onLog","onVisible","deps","visibilityState","useRef","document","setState","current","addEventListener","_handleVisibilityChange","removeEventListener","nextState","usePageVisibility","toString","completeUrl","STATE_KEY","autoHydratedState","rawState","getItem","JSON","parse","hydrateState","SEBankIDSameDeviceIOS","removeItem","setItem","stringify","mobileOS","MSStream","SEBankIDSameDeviceButton","href","setHref","setLinks","setPKCE","undefined","setError","log","setLog","defaultRedirectURi","handleLog","statements","console","logs","concat","handleComplete","useCallback","required","completeResponse","url","URL","searchParams","Array","from","keys","reduce","memo","refresh","acrValues","loginHint","responseMode","encodeURIComponent","newHref","launchLinks","universalLink","customFileHandlerUrl","interval","setInterval","clearInterval","handleInitiate","element","className","AnchorButton","Button","type","AuthMethodButton","acrValue","acrValueToLogo","src","alt","AuthMethodSelector","configuration","setConfiguration","original","slice","dkmitidMethod","forEach","s","newLevel","oldLevel","includes","lowestMitIDValue","filter","sort","b","indexOf","filterAcrValues","acr_values_supported","onSelect","useCriiptoVerify"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"criipto-verify-react.esm.js","mappings":"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","sources":["webpack://@criipto/verify-react/webpack/bootstrap","webpack://@criipto/verify-react/webpack/runtime/compat get default export","webpack://@criipto/verify-react/webpack/runtime/define property getters","webpack://@criipto/verify-react/webpack/runtime/hasOwnProperty shorthand","webpack://@criipto/verify-react/external commonjs \"react/jsx-runtime\"","webpack://@criipto/verify-react/external commonjs \"react\"","webpack://@criipto/verify-react/external commonjs \"@criipto/auth-js\"","webpack://@criipto/verify-react/./src/context.ts","webpack://@criipto/verify-react/./src/provider.tsx","webpack://@criipto/verify-react/./src/utils.ts","webpack://@criipto/verify-react/./src/device.ts","webpack://@criipto/verify-react/./src/components/SEBankIDSameDeviceButton/Desktop.tsx","webpack://@criipto/verify-react/./src/components/SEBankIDSameDeviceButton/Android.tsx","webpack://@criipto/verify-react/./src/hooks/usePageVisibility.ts","webpack://@criipto/verify-react/./src/components/SEBankIDSameDeviceButton/shared.ts","webpack://@criipto/verify-react/./src/components/SEBankIDSameDeviceButton/iOS.tsx","webpack://@criipto/verify-react/./src/components/SEBankIDSameDeviceButton/SEBankIDSameDeviceButton.tsx","webpack://@criipto/verify-react/./src/components/AuthMethodButton/AuthMethodButton.tsx","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/beeid@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/nldigid@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/dkmitid@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/dknemid@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/ftnbankid@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/ftnmobile@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/itsme@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/sebankid@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/sofort@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/nobankid@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodButton/logos/novipps@2x.png","webpack://@criipto/verify-react/./src/components/AuthMethodSelector/AuthMethodSelector.tsx","webpack://@criipto/verify-react/./src/use-criipto-verify.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react/jsx-runtime\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"react\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@criipto/auth-js\");","import CriiptoAuth, {OpenIDConfiguration, AuthorizeUrlParamsOptional, PKCE, AuthorizeResponse, OAuth2Error} from '@criipto/auth-js';\nimport { createContext } from 'react';\n\nexport type Result = {id_token: string} | {code: string} | OAuth2Error;\nexport type Action = 'confirm' | 'accept' | 'approve' | 'sign' | 'login';\n\nexport interface CriiptoVerifyContextInterface {\n loginWithRedirect: () => Promise<void>,\n fetchOpenIDConfiguration: () => Promise<OpenIDConfiguration>,\n buildAuthorizeUrl: (options?: AuthorizeUrlParamsOptional) => Promise<string>,\n generatePKCE: () => Promise<PKCE | undefined>,\n handleResponse: (response: AuthorizeResponse, params: {pkce?: PKCE, redirectUri?: string}) => Promise<void>,\n responseType: 'token' | 'code'\n completionStrategy: 'client' | 'openidprovider',\n result: Result | null\n domain: string\n redirectUri?: string,\n action: Action\n}\n\n/**\n * @ignore\n */\nconst stub = (): never => {\n throw new Error('You forgot to wrap your component in <CriiptoVerifyProvider>.');\n};\n\n/**\n * @ignore\n */\nconst initialContext = {\n loginWithRedirect: stub,\n fetchOpenIDConfiguration: stub,\n buildAuthorizeUrl: stub,\n generatePKCE: stub,\n handleResponse: stub,\n responseType: 'token' as 'token' | 'code',\n completionStrategy: 'client' as 'client' | 'openidprovider',\n result: null,\n domain: '',\n action: 'login' as Action\n};\n\nconst CriiptoVerifyContext = createContext<CriiptoVerifyContextInterface>(initialContext);\n\nexport default CriiptoVerifyContext;","import React, {useMemo, useState} from 'react';\nimport CriiptoAuth, {AuthorizeUrlParamsOptional, generatePKCE, OAuth2Error, PKCEPublicPart, Prompt} from '@criipto/auth-js';\n\nimport CriiptoVerifyContext, {CriiptoVerifyContextInterface, Action, Result} from './context';\n \nexport interface CriiptoVerifyProviderOptions {\n domain: string\n clientID: string\n redirectUri?: string\n children: React.ReactNode\n pkce?: PKCEPublicPart\n state?: string\n prompt?: Prompt\n /**\n * Will ammend the login_hint parameter with `action:{action}` which will adjust texsts in certain flows.\n * Default: 'login'\n */\n action?: Action\n /**\n * Note: In most cases modifying this setting **is not needed**. Defaults will work with almost all React SPA cases.\n * By default @criipto/verify-react will do PKCE on your behalf and return a jwt token.\n * However if you wish you can disable this and get the raw `code` response by setting `response` to 'code'\n */\n response?: 'token' | 'code'\n /*\n * Note: In most cases modifying this setting **is not needed**. Defaults will work with almost all React SPA cases.\n * By default @criipto/verify-react will do as much as work on your behalf\n * by interpreting URL parameters and responses with `useCriiptoVerify()` via the default value 'client'.\n * If you wish to only render a UI and redirect to the Criipto IDP for server side code exchange, you can choose 'openidprovider'.\n */\n completionStrategy?: 'client' | 'openidprovider'\n}\n\nfunction buildLoginHint(params: {options?: AuthorizeUrlParamsOptional, action?: Action}) {\n const {options, action} = params;\n let hints = options?.loginHint ? options?.loginHint.split(' ') : [];\n\n if (action) hints.push(`action:${action}`);\n return hints.length ? undefined : hints.join(' ');\n}\n\nconst CriiptoVerifyProvider = (props: CriiptoVerifyProviderOptions) : JSX.Element => {\n const [client] = useState(\n () => new CriiptoAuth({\n domain: props.domain,\n clientID: props.clientID,\n store: sessionStorage,\n redirectUri: props.redirectUri\n })\n );\n\n const [result, setResult] = useState<Result | null>(null);\n const {redirectUri} = props;\n const responseType = props.response || 'token';\n const completionStrategy = props.completionStrategy || 'client';\n const action = props.action || 'login';\n\n const context = useMemo<CriiptoVerifyContextInterface>(() => {\n return {\n loginWithRedirect: () => client.redirect.authorize({\n redirectUri: window.location.origin\n }),\n fetchOpenIDConfiguration: () => client.fetchOpenIDConfiguration(),\n buildAuthorizeUrl: async (options?: AuthorizeUrlParamsOptional) => {\n return await client.buildAuthorizeUrl(client.buildAuthorizeParams({\n pkce: props.pkce,\n state: props.state,\n prompt: props.prompt,\n ...options || {},\n loginHint: buildLoginHint({options, action})\n }));\n },\n generatePKCE: async () => {\n if (responseType !== 'token' || completionStrategy !== 'client') return;\n return await generatePKCE();\n },\n handleResponse: async (response, params) => {\n if (params.pkce && responseType === 'token') {\n let _redirectUri = params.redirectUri || redirectUri;\n if (!_redirectUri) throw new Error('redirectUri must be configured globally or per authentication component');\n\n await client.processResponse(response, {code_verifier: params.pkce.code_verifier, redirect_uri: _redirectUri}).then(response => {\n if (response?.code) setResult({code: response.code});\n else if (response?.id_token) setResult({id_token: response.id_token});\n else setResult(null);\n }).catch((err: OAuth2Error) => {\n setResult(err);\n });\n } else {\n if (response?.code) setResult({code: response.code});\n else if (response?.error) setResult(new OAuth2Error(response.error, response.error_description));\n else setResult(null);\n }\n },\n responseType,\n completionStrategy,\n result,\n domain: client.domain,\n redirectUri,\n action\n }\n }, [\n client,\n redirectUri,\n responseType,\n completionStrategy,\n result,\n action\n ]);\n\n return (\n <CriiptoVerifyContext.Provider value={context}>\n {props.children}\n </CriiptoVerifyContext.Provider>\n );\n}\n\nexport default CriiptoVerifyProvider","import { Action } from \"./context\";\n\nexport const DKMITID_PREFIX = 'urn:grn:authn:dk:mitid';\n\nexport function lowestMitIDValue(input: string[]) : string | null {\n let dkmitidMethod : string | null = null;\n\n input.forEach(s => {\n if (s.startsWith(DKMITID_PREFIX)) {\n if (!dkmitidMethod) {\n dkmitidMethod = s;\n } else {\n let newLevel = s.replace(DKMITID_PREFIX, '');\n let oldLevel = dkmitidMethod.replace(DKMITID_PREFIX, '');\n if (newLevel === ':low' && [':substantial', ':high'].includes(oldLevel)) {\n dkmitidMethod = s;\n }\n else if (newLevel === ':substantial' && oldLevel === ':high') {\n dkmitidMethod = s;\n }\n }\n }\n });\n\n return dkmitidMethod;\n}\n\nfunction autoTitleCase(input: string) {\n var segments = input.split(/:|-/).map(segment => {\n segment = segment.replace(/id(\\s|$)/, 'ID');\n if (segment.length === 2) return segment.toUpperCase();\n return segment.substr(0, 1).toUpperCase() + segment.substr(1);\n });\n return segments.join(' ');\n}\n\nfunction assertUnreachable(x: never): never {\n throw new Error(\"Didn't expect to get here\");\n}\n\nexport type Language = 'en' | 'da' | 'sv' | 'nb';\n\nexport function stringifyAction(language: Language, action: Action) : string {\n if (action === 'login') {\n if (language === 'da') return 'Login med';\n else if (language === 'sv') return 'Logga in med'\n else if (language === 'nb') return 'Logg inn med';\n return 'Login with';\n }\n if (action === 'approve') {\n if (language === 'da') return 'Godkend med';\n else if (language === 'sv') return 'Godkänn med'\n else if (language === 'nb') return 'Godkjenne med';\n return 'Approve with';\n }\n if (action === 'sign') {\n if (language === 'da') return 'Signera med';\n else if (language === 'sv') return 'Signera med'\n else if (language === 'nb') return 'Signer med';\n return 'Sign with';\n }\n if (action === 'confirm') {\n if (language === 'da') return 'Bekræft med';\n else if (language === 'sv') return 'Bekräfta med'\n else if (language === 'nb') return 'Bekreft med';\n return 'Confirm with';\n }\n if (action === 'accept') {\n if (language === 'da') return 'Acceptera med';\n else if (language === 'sv') return 'Bekräfta med'\n else if (language === 'nb') return 'Godta med';\n return 'Accept with';\n }\n\n assertUnreachable(action);\n}\n\nexport function acrValueToTitle(language: Language, value: string) : {title: string, subtitle?: string} {\n\tvalue = value.replace('urn:grn:authn:', '');\n\n if (value.startsWith('be:eid')) {\n return {title: autoTitleCase(value).replace('BEEID', 'Belgian eID')};\n }\n if (value.startsWith('nl:digid')) {\n return {title: autoTitleCase(value).replace('NL ', '')};\n }\n if (value.startsWith('dk:mitid')) {\n return {title: 'MitID'};\n }\n if (value.startsWith('dk:nemid')) {\n\t\tlet subtitle : string | undefined = undefined;\n\t\tlet suffix = value.replace('dk:nemid:', '');\n\t\t\n\t\tif (suffix === 'poces') {\n\t\t\tif (language === 'en') subtitle = 'Personal';\n\t\t\tif (language === 'da') subtitle = 'Personlig';\n\t\t\tif (language === 'sv') subtitle = 'Personlig';\n\t\t\tif (language === 'nb') subtitle = 'Personlig';\n\t\t}\n\t\tif (suffix === 'moces') {\n\t\t\tif (language === 'en') subtitle = 'Employee key card';\n\t\t\tif (language === 'da') subtitle = 'Medarbejder nøglekort';\n\t\t\tif (language === 'sv') subtitle = 'Anställd nyckelkort';\n\t\t\tif (language === 'nb') subtitle = 'Ansatt nøkkelkort';\n\t\t}\n\t\tif (suffix === 'moces:codefile') {\n\t\t\tif (language === 'en') subtitle = 'Employee key file';\n\t\t\tif (language === 'da') subtitle = 'Medarbejder nøglefil';\n\t\t\tif (language === 'sv') subtitle = 'Anställd nyckelfil';\n\t\t\tif (language === 'nb') subtitle = 'Ansatt nøkkelfil';\n\t\t}\n\n return {\n\t\t\ttitle: 'NemID',\n\t\t\tsubtitle\n\t\t}\n }\n if (value.startsWith('fi')) {\n return {title: autoTitleCase(value).replace('FI', 'FTN')};\n }\n if (value.startsWith('itsme')) {\n return {title: autoTitleCase(value).replace('me', 'ME')};\n }\n if (value.startsWith('se:bankid')) {\n\t\tlet subtitle : string | undefined = undefined;\n\t\tlet suffix = value.replace('se:bankid:', '');\n\n\t\tif (suffix === 'same-device') {\n\t\t\tif (language === 'en') subtitle = 'On this device';\n\t\t\tif (language === 'da') subtitle = 'På denne enhed';\n\t\t\tif (language === 'sv') subtitle = 'På denna enheten';\n\t\t\tif (language === 'nb') subtitle = 'På denne enheten';\n\t\t}\n\t\tif (suffix === 'another-device') {\n\t\t\tif (language === 'en') subtitle = 'With your SSN';\n\t\t\tif (language === 'da') subtitle = 'Med dit personnummer';\n\t\t\tif (language === 'sv') subtitle = 'Med ditt personnummer';\n\t\t\tif (language === 'nb') subtitle = 'Med personnummeret ditt';\n\t\t}\n\t\tif (suffix === 'another-device:qr') {\n\t\t\tif (language === 'en') subtitle = 'With QR Code';\n\t\t\tif (language === 'da') subtitle = 'Med QR-kode';\n\t\t\tif (language === 'sv') subtitle = 'Med QR-kod';\n\t\t\tif (language === 'nb') subtitle = 'Med QR-kode';\n\t\t}\n\n return {title: 'BankID', subtitle};\n }\n if (value.startsWith('de:sofort')) {\n return {title: autoTitleCase(value).replace('DE ', '')};\n }\n if (value.startsWith('no:bankid')) {\n let subtitle : string | undefined = undefined;\n if (value.endsWith(':substantial')) {\n if (language === 'en') subtitle = 'Biometrics';\n\t\t\tif (language === 'da') subtitle = 'Biometri ';\n\t\t\tif (language === 'sv') subtitle = 'Biometri';\n\t\t\tif (language === 'nb') subtitle = 'Biometri';\n }\n return {title: subtitle ? 'BankID' : autoTitleCase(value).replace('NO ', ''), subtitle};\n }\n if (value.startsWith('no:vipps')) {\n return {title: autoTitleCase(value).replace('NO ', '')};\n }\n\n return {title: autoTitleCase(value)};\n}\n\nexport function filterAcrValues(input: string[]) {\n let original = input.slice();\n let dkmitidMethod : string | null = lowestMitIDValue(input);\n\n if (dkmitidMethod) {\n return input.filter(s => !s.startsWith(DKMITID_PREFIX)).concat([dkmitidMethod]).sort((a, b) => original.indexOf(a) - original.indexOf(b));\n }\n return input;\n}","function testUA(pattern: RegExp) {\n return pattern.test(navigator.userAgent);\n};\nexport function isiOS() {\n return testUA(/iPad|iPhone|iPod/) && !(window as any).MSStream;\n};\n\nexport function isiOSSafari() {\n return isiOS() && !testUA(/ CriOS\\/[.0-9]*/);\n};\n\nexport function isAndroid() { return testUA(/Android/); };\n\nexport type MobileOS = 'ios' | 'android';\n\nexport function getMobileOS() : MobileOS | null {\n if (isiOS()) return 'ios';\n if (isAndroid()) return 'android';\n\n return null;\n}","import React, { useContext, useEffect, useState } from 'react';\nimport CriiptoVerifyContext from '../../context';\nimport {Links} from './shared';\n\ninterface Props {\n children: React.ReactElement\n links: Links\n onError: (error: string) => void\n onComplete: (completeUrl: string) => Promise<void>\n onInitiate: () => void\n onLog: (...statements: string[]) => void\n}\n\n/*\n * Desktop: Polling scenario\n */\nexport default function SEBankIDSameDeviceDesktop(props: Props) {\n const {links, onError, onComplete, onInitiate} = props;\n const [initiated, setInitiated] = useState(false);\n const {domain} = useContext(CriiptoVerifyContext);\n\n useEffect(() => {\n if (!initiated) return;\n \n let timeout : string | undefined;\n const poll = async () => {\n const response = await fetch(links.pollUrl);\n\n if (response.status === 202) {\n setTimeout(poll, 1000);\n return;\n } else if (response.status >= 400) {\n const error = await response.text();\n onError(error);\n return;\n } else {\n const {targetUrl} = await response.json();\n await onComplete(`https://${domain}${targetUrl}`);\n return;\n }\n };\n\n setTimeout(poll, 1000);\n return () => {\n if (timeout) clearTimeout(timeout);\n };\n }, [initiated]);\n\n const handleInitiate = () => {\n onInitiate();\n setInitiated(true);\n };\n \n return React.cloneElement(props.children, {\n ...props.children.props,\n onClick: handleInitiate\n });\n}","import React, { useState } from 'react';\nimport usePageVisibility from '../../hooks/usePageVisibility';\nimport {Links} from './shared';\n\ninterface Props {\n children: React.ReactElement,\n links: Links,\n onError: (error: string) => void\n onComplete: (completeUrl: string) => Promise<void>\n onInitiate: () => void\n onLog: (...statements: string[]) => void\n}\n\n/*\n * Android: Background/Foreground scenario\n */\nexport default function SEBankIDSameDeviceAndroid(props: Props) {\n const {links, onError, onComplete, onInitiate, onLog} = props;\n const [initiated, setInitiated] = useState(false);\n\n usePageVisibility(async () => {\n onLog('android', 'onForeground', initiated.toString());\n if (!initiated) return;\n \n onComplete(links.completeUrl);\n }, [links, initiated]);\n\n const handleInitiate = () => {\n onLog('android', 'handleInitiate');\n onInitiate();\n setInitiated(true);\n };\n \n return React.cloneElement(props.children, {\n ...props.children.props,\n onClick: handleInitiate\n });\n}","import React, { useRef, useState, useEffect } from 'react';\n\nexport default function usePageVisibility(onVisible? : () => void, deps : React.DependencyList = []) {\n const visibilityState = useRef(document.visibilityState);\n const [state, setState] = useState(visibilityState.current);\n\n useEffect(() => {\n document.addEventListener('visibilitychange', _handleVisibilityChange);\n\n return () => {\n document.removeEventListener('visibilitychange', _handleVisibilityChange);\n };\n }, deps);\n\n const _handleVisibilityChange = () => {\n const nextState = document.visibilityState;\n if (\n visibilityState.current === 'hidden' &&\n nextState === 'visible'\n ) {\n if (onVisible) onVisible();\n }\n\n visibilityState.current = nextState;\n setState(visibilityState.current);\n };\n\n return state;\n}","import { PKCE } from \"@criipto/auth-js\"\n\nexport interface Links {\n cancelUrl: string\n completeUrl: string\n pollUrl: string\n launchLinks: {\n customFileHandlerUrl: string\n universalLink: string\n }\n};\n\nexport interface State {\n pkce: PKCE | undefined\n redirectUri: string\n links: Links\n}\n\nconst STATE_KEY = '@criipto/verify-react:sebankid:state';\n\nexport function hydrateState() : State | undefined {\n const rawState = sessionStorage.getItem(STATE_KEY);\n if (rawState) {\n return JSON.parse(rawState) as State;\n }\n\n return undefined;\n}\n\nexport const autoHydratedState = hydrateState();\n\nexport function clearState() {\n sessionStorage.removeItem(STATE_KEY);\n}\n\nexport function saveState(input: State) : void {\n sessionStorage.setItem(STATE_KEY, JSON.stringify(input));\n}","import { PKCE } from '@criipto/auth-js';\nimport React, { useEffect, useState } from 'react';\nimport {Links, saveState, autoHydratedState, clearState} from './shared';\n\ninterface Props {\n children: React.ReactElement,\n links: Links,\n onError: (error: string) => void\n onComplete: (completeUrl: string) => Promise<void>\n onInitiate: () => void\n onLog: (...statements: string[]) => void,\n pkce: PKCE | undefined,\n redirectUri: string\n}\n\n/*\n * iOS: Page reload on switch back scenario\n */\nexport default function SEBankIDSameDeviceIOS(props: Props) {\n const {links, onError, onComplete, onInitiate, onLog, pkce, redirectUri} = props;\n\n const handleInitiate = () => {\n onLog('iOS', 'handleInitiate');\n\n saveState({\n links,\n redirectUri,\n pkce\n });\n\n onInitiate();\n };\n\n useEffect(() => {\n if (!autoHydratedState) return;\n clearState();\n onComplete(autoHydratedState.links.completeUrl);\n }, []);\n \n return React.cloneElement(props.children, {\n ...props.children.props,\n onClick: handleInitiate\n });\n}","import { PKCE, AuthorizeResponse } from '@criipto/auth-js';\nimport React, {useCallback, useContext, useEffect, useState} from 'react';\nimport CriiptoVerifyContext from '../../context';\nimport { getMobileOS } from '../../device';\nimport usePageVisibility from '../../hooks/usePageVisibility';\n\nimport Desktop from './Desktop';\nimport Android from './Android';\nimport IOS from './iOS';\n\nimport {autoHydratedState, Links} from './shared';\n\ninterface Props {\n className: string\n children: React.ReactNode\n logo: React.ReactNode\n href?: string\n redirectUri?: string\n}\n\nconst mobileOS = getMobileOS();\n\nfunction searchParamsToPOJO(input: URLSearchParams) {\n return Array.from(input.keys()).reduce((memo : {[key: string]: string}, key) => {\n memo[key] = input.get(key)!;\n return memo;\n }, {});\n}\n\nexport default function SEBankIDSameDeviceButton(props: Props) {\n const [href, setHref] = useState(props.href);\n const [links, setLinks] = useState<Links | null>(autoHydratedState?.links ?? null);\n const [pkce, setPKCE] = useState<PKCE | undefined>(autoHydratedState?.pkce ?? undefined);\n const [error, setError] = useState<string | null>(null);\n const [log, setLog] = useState<(string | string[])[]>([]);\n const [initiated, setInitiated] = useState(autoHydratedState ? true : false);\n const {buildAuthorizeUrl, completionStrategy, generatePKCE, domain, handleResponse, redirectUri: defaultRedirectURi} = useContext(CriiptoVerifyContext);\n const redirectUri = props.redirectUri || defaultRedirectURi;\n\n const reset = () => {\n setPKCE(undefined);\n setLinks(null);\n setHref(props.href);\n };\n\n const handleLog = (...statements: string[]) => {\n console.log(statements);\n setLog(logs => logs.concat([statements]));\n }\n\n const handleComplete = useCallback(async (completeUrl: string) => {\n const required = {pkce};\n reset();\n\n const completeResponse = await fetch(completeUrl);\n if (completeResponse.status >= 400) {\n setError(await completeResponse.text());\n return;\n }\n \n const {location} : {location: string} = await completeResponse.json();\n if (completionStrategy === 'openidprovider') {\n window.location.href = location;\n return;\n }\n const url = new URL(location);\n const params = searchParamsToPOJO(url.searchParams) as AuthorizeResponse;\n\n await handleResponse(params, {\n pkce: required.pkce,\n redirectUri\n })\n }, [completionStrategy, pkce]);\n\n const refresh = useCallback(async () => {\n handleLog('SEBankID: Refresh authorize url');\n const pkce = await generatePKCE();\n\n buildAuthorizeUrl({\n acrValues: 'urn:grn:authn:se:bankid:same-device',\n loginHint: 'appswitch:browser',\n responseMode: 'json',\n pkce,\n redirectUri\n }).then(url => {\n return fetch(url).then(response => response.json() as Promise<Links>);\n })\n .then(links => {\n setPKCE(pkce || undefined);\n setLinks(links);\n const redirect = mobileOS === 'ios' ? encodeURIComponent(window.location.href) : 'null';\n const newHref = `${mobileOS ? links.launchLinks.universalLink : links.launchLinks.customFileHandlerUrl}&redirect=${redirect}`;\n\n handleLog(window.location.href);\n handleLog(newHref);\n setHref(newHref);\n })\n .catch(console.error);\n }, [buildAuthorizeUrl, redirectUri]);\n\n // Generate URL on first button render\n useEffect(() => {\n if (initiated) return;\n refresh();\n }, [refresh, initiated]);\n\n // Continously fetch new autostart token if UI is open for a long time\n useEffect(() => {\n if (initiated) return;\n\n const interval = setInterval(() => {\n if (initiated) return;\n refresh();\n }, 25000);\n return () => clearInterval(interval);\n }, [refresh, initiated]);\n\n // Track when the button is clicked to stop refreshing URL\n const handleInitiate = () => {\n handleLog('Initiated');\n setInitiated(true);\n setError(null);\n }\n\n const handleError = (error: string) => {\n setInitiated(false);\n setError(error);\n }\n\n const element = (\n <a className={`${props.className} ${initiated ? 'criipto-eid-btn--disabled' : ''}`} href={href} onClick={handleInitiate}>\n <div className=\"criipto-eid-logo\">\n {initiated ? <div className=\"criipto-eid-loader\"></div> : props.logo}\n </div>\n {props.children}\n </a>\n );\n\n return (\n <React.Fragment>\n {links ? (\n <React.Fragment>\n {mobileOS === null ? (\n <Desktop\n links={links}\n onError={handleError}\n onComplete={handleComplete}\n onInitiate={handleInitiate}\n onLog={handleLog}\n >\n {element}\n </Desktop>\n ) : mobileOS === 'android' ? (\n <Android\n links={links}\n onError={handleError}\n onComplete={handleComplete}\n onInitiate={handleInitiate}\n onLog={handleLog}\n >\n {element}\n </Android>\n ) : mobileOS === 'ios' ? (\n <IOS\n links={links}\n onError={handleError}\n onComplete={handleComplete}\n onInitiate={handleInitiate}\n onLog={handleLog}\n redirectUri={redirectUri!}\n pkce={pkce}\n >\n {element}\n </IOS>\n ) : element}\n </React.Fragment>\n ) : element}\n {error && <p>{error}</p>}\n {/* {log && (\n <pre>\n {JSON.stringify(log, null, 2)}\n </pre>\n )} */}\n </React.Fragment>\n )\n}","import React, {useContext, useEffect, useState} from 'react';\n\nimport beeid from './logos/beeid@2x.png';\nimport digid from './logos/nldigid@2x.png';\nimport dkmitid from './logos/dkmitid@2x.png';\nimport dknemid from './logos/dknemid@2x.png';\nimport ftnmobile from './logos/ftnmobile@2x.png';\nimport ftnbankid from './logos/ftnbankid@2x.png';\nimport itsme from './logos/itsme@2x.png';\nimport nobankid from './logos/nobankid@2x.png';\nimport novipps from './logos/novipps@2x.png';\nimport sebankid from './logos/sebankid@2x.png';\nimport sofort from './logos/sofort@2x.png';\n\nimport './AuthMethodButton.css';\nimport CriiptoVerifyContext from '../../context';\nimport SEBankIDSameDeviceButton from '../SEBankIDSameDeviceButton';\n\ninterface ButtonProps {\n className?: string,\n children: React.ReactNode,\n onClick?: React.MouseEventHandler\n}\n\ninterface AnchorButtonProps extends ButtonProps {\n href: string\n}\n\nexport function AnchorButton(props: AnchorButtonProps) {\n return (\n <a className={`criipto-verify-button ${props.className}`} href={props.href} onClick={props.onClick}>{props.children}</a>\n );\n}\n\nexport function Button(props: ButtonProps) {\n return (\n <button className={`criipto-verify-button ${props.className}`} type=\"button\" onClick={props.onClick}>{props.children}</button>\n );\n}\n\ninterface AuthMethodButtonProps {\n acrValue: string,\n href?: string;\n onClick?: React.MouseEventHandler,\n children?: React.ReactNode,\n 'data-testid'?: string,\n className?: string,\n redirectUri?: string\n}\n\nexport default function AuthMethodButton(props: AuthMethodButtonProps) {\n\tconst {acrValue} = props;\n const context = useContext(CriiptoVerifyContext);\n\tconst className = `criipto-eid-btn ${acrValueToClassName(acrValue)}${props.className ? ` ${props.className}` : ''}`;\n\n const [href, setHref] = useState(props.href);\n\n useEffect(() => {\n if (props.href) return;\n\n context.buildAuthorizeUrl({\n redirectUri: props.redirectUri,\n acrValues: acrValue\n }).then(setHref)\n .catch(console.error);\n }, [props.href, acrValue]);\n\n\tif (acrValue === 'urn:grn:authn:se:bankid:same-device') {\n\t\treturn (\n\t\t\t<SEBankIDSameDeviceButton\n\t\t\t\tredirectUri={props.redirectUri}\n\t\t\t\thref={href}\n\t\t\t\tclassName={className}\n\t\t\t\tlogo={<img src={acrValueToLogo(acrValue)} alt=\"\" />}\n\t\t\t>\n\t\t\t\t{props.children}\n\t\t\t</SEBankIDSameDeviceButton>\n\t\t);\n\t}\n\n\tif (href) {\n\t\treturn (\n\t\t\t<AnchorButton {...props} href={href} className={className}>\n\t\t\t\t{acrValueToLogo(acrValue) ? (\n\t\t\t\t\t<div className=\"criipto-eid-logo\">\n\t\t\t\t\t\t<img src={acrValueToLogo(acrValue)} alt=\"\" />\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t\t{props.children}\n\t\t\t</AnchorButton>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Button {...props} className={className}>\n\t\t\t{acrValueToLogo(acrValue) ? (\n\t\t\t\t<div className=\"criipto-eid-logo\">\n\t\t\t\t\t<img src={acrValueToLogo(acrValue)} alt=\"\" />\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t{props.children}\n\t\t</Button>\n\t);\n}\n\nfunction acrValueToClassName(value: string) {\n value = value.replace('urn:grn:authn:', '');\n const segments = value.split(':');\n const classNames = segments.reduce((memo: string[], segment: string) => {\n if (memo.length) {\n return memo.concat([`${memo[memo.length-1]}-${segment}`])\n } else {\n return memo.concat([segment]);\n }\n }, []);\n\n return classNames.map(className => `criipto-eid-btn--${className}`).join(' ');\n}\n\nfunction acrValueToLogo(value : string) {\n\tif (value.startsWith('urn:grn:authn:be:eid')) {\n\t\treturn beeid;\n\t}\n\tif (value.startsWith('urn:grn:authn:nl:digid')) {\n\t\treturn digid;\n\t}\n\tif (value.startsWith('urn:grn:authn:dk:mitid')) {\n\t\treturn dkmitid;\n\t}\n\tif (value.startsWith('urn:grn:authn:dk:nemid')) {\n\t\treturn dknemid;\n\t}\n\tif (value.startsWith('urn:grn:authn:fi:bank-id')) {\n\t\treturn ftnbankid;\n\t}\n\tif (value.startsWith('urn:grn:authn:fi')) {\n\t\treturn ftnmobile;\n\t}\n\tif (value.startsWith('urn:grn:authn:itsme')) {\n\t\treturn itsme;\n\t}\n\tif (value.startsWith('urn:grn:authn:se:bankid')) {\n\t\treturn sebankid;\n\t}\n\tif (value.startsWith('urn:grn:authn:de:sofort')) {\n\t\treturn sofort;\n\t}\n\tif (value.startsWith('urn:grn:authn:no:bankid')) {\n\t\treturn nobankid;\n\t}\n\tif (value.startsWith('urn:grn:authn:no:vipps')) {\n\t\treturn novipps;\n\t}\n}","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAAA8CAYAAAAe5VayAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUdSURBVHgB7Zzveds2EMZPffy9ygRBJrC9ATVB3AmsTOB4AjETSJ3A6gRNJjA9QdUJzEwQZQL0XvEgQZAIgCzo2CR/z4OQog6U9AZ/7g6EiXqE1nqhw/zg8g+Xv7nccclo5ECkiOd45vLARVELfqMRoLjMubQScxTxlDlVYuaxFUYR61lIN1chw1FEP4oLJqErn9EoYpgpVULe1hlMqEdI13sfMIMosMukTCmOLZfZZDLZ0MgBFn3KZS5jX6wrpNz7RLdEqZzR26fksuEWtbUvwsfkQx5Rv+C6M4oFwnFZipffN07GOV393ueIurcx4qGZr/QweNaWKDpOSDSqaaj1hW7SR3JHg1DvWxj7iSsgHx6pmr2GyJrHu0840VVi4tFju2Xbdzhx/cQhCwgwU3/GCQtU8OGrx3YqQh9ElOasaGShD27MfcD2I/7ZdWep9Ewjhq/cEv/ACWuD3pnV2JVs98G0xIxGbG70Yfb1dWlMQFMjYtjvGR5Gk28BO3UhJxk1Y0XH/0MFdQuiixs6/nxcyz110JIyqaeoObvMDXfXklvblupj7MsL3S4ljrDpybzge1DHbJ3Pw48q7Ws1oBXds/2cj/DrFMVj2/pE3M3OinoOi73mA+LdktpRet5TvcknOtEEoo0Hu5ehW/LhE3VAX5Oy6HpzqpKpylwUB7qgxPQ9sw0xH5xrXygxQ1geuNLHGZfkmelUIiLevKZqklJyjmtljT3co4zLO+5iiJo+UDVelZQeCLhfaJJk7JYSckEJ4C/2p3PpO5cNtwC4GEs6+Hg7f891TWTQX7M9xEWY5V1da4G77uJ1WZrSaXe2ZkTThWY+305ayf9xRepQ1CFJRERKSFfLCHArbp0ZEcIgmF/ZK2W6ypz/kJI79p24Il2RpDvTcfJyzgWh0kxaogmd9rOiiHZn1VkgCmG7ldgXgVDrVdFVd1bkuBbO6trHM3XcJEhBb4RULfEc6OJTd2lSWJ255tqVlI6ks7FLlyKCSy4nEwkL+1e4atIf7vqGihLStYg/z13kFgqX59JfNVmiuHQyQKndp05FLD3PrUDAnF6GtfM6uYhd+okrz3twzjsdpwTkPd1YOXkWP1ZECII1VoRnMbFnbkcxcGm09ZSBTDYIDQunHl7PqV18W1oFkc9n/pxr20CSsxklBt052CL4y5ilw634e787JhjjruRebtY7pyqrjLpPtu/Ih5kkB3C/n2Yml2sragBW3XzvSwCwoA6IEhGDsTW+4QcerQfwe4iRvzl1YJfTwanG60fbCZe65xIC3ykhsiC/oPbOu6/eNkpEBns+TJeGKFtZ/Ydw+wlEhEOLzMTO/XBF1UPlaz5+scW06i7oTJfTx/tNYDvV9XtQ8P57OuwKaCPexvnedZRm8d63QN0lu+5PhxTaa2IOfzbiwYbMTCwF/RrMsqai14cZ17OA3b9GxJdyOd4Ka2uo8blEuydudyLK4N5oNuw5O99Shx+x3o2btp+I1ljSSG61wpBLtD65oof7lKxhaWkxD9jWTzZ6uEIuG2rgDx919eD7Ug8DLE/cNBQw/llOueGD7mfLfNTVpvFpQwHBUStsshkI0QSigLah02sBnsjTmc1AsaHh/uH4EdoPW3f6pbalvQXkB6qAmYmrTeZp3CBpo9v/DYgYbuo+t+s1lj5w9tEXm1FEPyVVXbj0GY077+tBLuE6JCAYW+IpBZf7JhPIKGIFxr01VTupQjsSThiiiGZNp6AqlbVpI5zNf5XRuR7tdpDGAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAAuCAYAAADwZJ3MAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUlSURBVHgB7Zzvdds4DMCRe/f9fBOEneDSCSJPUHeCcyZIOoGVCZxOYN0E6U1gZYKkE1idIOkEOMCkn3WqJEAiacmxf++hckMwpAn+AUEqAGeOmgsYCYho6PGJZELy/eLi4huMCKpfQo+/wNbvieqXwxkLNU6Kv7JxRh26bhOSx5r6rTgNBmY7Al1FulbmjXrhG3jCxqPHoiG5oDI+wICwoegxb0j+RvX7XNE/fFu63tSHV5I1yZLkCnrgRlobCQwEzwAoc1nJs8D+rNG2ZaKt42/gB/e0hOSO5NkZ429tZrRTpBHUrmE4jEIngXAkYNtyrW1LXwNWMSQZ6tcv7yk4Mpr6FRAHA/u2bJzdQhuwXDiPyLs2JTfv59DOPzAcBbQbkdO/Q1wM2LZM6xJjGZDh6XXZVHCJL9DcSA9k5AIGwnWwLy0qDyEcOSWLxrbE/k6Mlta5HK2zsC7ps3N0CyOB6jIjeS7Vjz/PGnQXGJe0rtCVkIkbdOPkFbvDeUQvFe2e6xJGiqvfRNBZKNpiU5I+JNVCV0KGVU1Fr12+DepYwwmAsgHXNXmuSG47tCXrbTtS7zWQ5n4OJ93QxylJpsiSYIctxilB7fhC8tUFLVJFFkOyXWJ+B0+ck3FDxikUhXN6FK8S97FUfu6mOXYwXkj+PaCz4QXV856+yw/6uBJU70jv6/YT9phC68D/OyJNJJU8K0H/UigzUZS7QbelQXmKu+7ynWrqs8B2nkHXlkuUuQ29jbhR6HyCQNAXeKAHrymJoGrAbmmWMDzaOOk9yIGEWVADuuk0F9QS8AStN8g9uetWg0fhHI4AN+VngtpVjI28dI7XK+hdIfX4PQaOhychfRLDgD8kBfTY61HeOXQfecfKi6Tg7YXWENvbWyj1uB6F+xxi1I+SmLHQ4LjRZwS1giShNeRPko8s9H/eX2XwDolhQI2X9RP6IXmwBcmUgwzlH7Jz5YIOKRwXRlKIYUDpANbn+kAipKdtpxe8SQbZSx4TRlKIYcCZkC4uzHWgjbS0jW7uGJooz6huuwlIoceXoAZUrlEZ9EOamrUdQ/SSx4DrsImgFs6ArkCNhyjtbfpi4J2A9qRBc3qTBTGgMx4XaATVzOOEXVo3DeruaQYL5cWgZDwjqLJj9uRlQBfSSunjM+hGwD30xBleMmLrDOA62hxGCtpTfm5Lzb415X+0G3k2VAJ2HWL5wxUyA31wNg1wv4XXuaQlnY9YflI5aTUB7Y2ARxgBuD+RMdCvLbOdw6Y14Axk77KNwrnwvrAHmQg6C7QHxxnsHRaeNn3qHxIDuvWtiQJKM1mMUFpdgVMIA/e6FOSeauD4Nu0aeAmZlmey2KG0olqgD4prfu+ZAmraMqYBc5KPoe910u/L6PEApwWv/Wy8X/a6MQzIo2ROhU1j3UOh38ujsI8RCziuoDa3X+qC8kWdQkgD5mBPvD8oQ1peOCNygLpQZsnBrsWSvpR+CHikpWDbstX52zkx7K3loOetJL63vqSyG08u3HSauRAee57sjk8q9dw2xu6EAru/NNo1dtu1LZkC9nXNqa5HEe6LggsuXDad+ne9ZXZmZGD7qwGqK39j4hD7wGC4a4FSmOlz03SO9m5o2x6y63R5pgvKy66PdescG0+Rd9SB7jpG82dGNKCNIWrDUDlY52D3GrgUvRn8DyqcBMpR2IfzizeHAN2tbAzLSbz6NhqcEVcYBu4M2mOcMyGhhp9j/7dcmeXZeCPAGZK9T83r36/OcAbeAf8BIoccO1vtVLIAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAAjCAYAAABctgKLAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAS9SURBVHgB7Zv/VdswEMe/6ev/zQZ1J2g6Qc0EtBNgJgAmIEwQOkFgAmACzATABBET4E6g3iGlNUE/LMnBwuXznp5D9BPrfHc6XybIGCllSZev+s+ryWQikCG0zildSiqfqfBnQeWe1nuHd+Kgm3oqXzJHRvDGU1lSeZRmbrUQx47v4lGPf01lQeUgZq4JD2Cp4yfuFD1AcxzSZddQ1dAcPw3tK7oszaPhJ/W5xMDQGmd0uaBSdGh+QmueIxDeZYTTUOH7c05z1t7WHgkrkAiP4ZhjZelz6+hzgYHR/9OjDGOOQGQ6Kyp7rjlYA7ikrCYp2kECNPwtXWaWakHjfzH0YcEoELgm6vcDygab5qnRE571udgJWYdnb0I4g9JCwjiJhz1EQn0PPWPbNMC1o8/SMZ+t3zV6goVMxhO0DtkvK2nQ6B86rIOdsSkC0ZMdII4Ty/eNo+612EU8s5h72RMFletNIegiALzgJcI5RpyahFaT7ByK1tf83U4GR8EZ4uF7WWA4Cigh+CuEXQSAYbVXdmy79uIrJMCevvYPCi5s9zM5V6c+wZ8wLAXUw/lEVwFgll3Ul1Yxx+gJ2vQHLninTw7XpuBjQKcCamOPPO2iVf8aLWhGYWubAFe7DaYmByjSnNRI0273yAP2z45iPM3SNiLXyTBWEeN8T5jPO7ePxDmHPAVswnGMaYgJWLOUdlMQ4yy+KbSDKhDHIfKB93DXJQCN5fsChuOdVJGuAv8HfEJpAvvMSXhyUf9rZi4B4PcANq97LlUs/AnpdvzOoOzmaNCnkX10F4JT6jN0/MJE6TMB+466ReuzzbYJDB+42Qr6hdQ3KAG3IahU1NbnOA/F1HkKYEmnp5sXvzBUszPENs0V3GC1J2RvIe0X66vlc++eN8UUqKmRGJewzC/osk9rYCEvoXIX+H6whrij+hvkTeE9BvIrYfoHOfxZGqpZ7dscwjPqe44t044R0DqbLu22sAYBtybIlq6nAJu9s22+wEhV/9joFAjSapw3dIFuzHNN39oG2gxtBqWaN5AS1nSOBHpMQZtXUf1DIv/lAPL9sOUgQPs+NZRvkmNO411oIMh39BEYuerXji9HETkzqYI/FF1CHalXUuUPFsiHJkgAtAS7Nni0ql+qNDA+7rIZjH0jWFG51UKUA5fBoWCdKFobqkar+vVTy5tfIh0WnoXMI8P5JuZdALNpCgRGqvpbm1+gX44H1gScWymiBMBgCsbs9Se/3naNPaBP8JTyH6sB2qZgzKq/xBYiiC1i0+1S4WyrK/4QkhBiYh95YTuhzBBHb5lNDjikXvaZtu5BoJXUE60BGFb7mal+mwBM20cw7dEfuNSvrivxOqRkGody1N6zJAHIEFfkrYI6i3N0hs/xbMI+O9rHprTHUGH78MNRbf6sbmwC0GfCRYnXYyoTfkTaAQGVUv/CVxuVAGg7WqMfYv2GWL6if/ipn1P5ZnsvkeoE5gg7pknn9i0/jTb6FDjeeDZxv2jjnVlLoxMA/eaSfzzKHnyFOGJDvSkUiEdA+T81AhNR+NfB3y11D315+Dp/0PSLmN8m1aTfttlU4r1PqlvjFHieqbPGmbGj+7kcxG3w4l449uapPZXH1ESXPzSxXZJw46hxAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJIAAAAeCAYAAADHCUctAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAU5SURBVHgB7Vvtdds6DEVy+v9lg+pNkHSCsBPUnaDOBHEmsDJB+iawO0GyQZQJ7DdB1AnaTsDimkBFq7KoD8qOE91zcGhZImHRIHgJkCfEsNYaLi5Z8pOTk28UCdxuwsWdtHsTeNZw8YX64Zb15LRbx5SLT3L5EPldDRfXLGcsy5htV+i64OKR3DtcBZ7F75mxnMtvCyEX+Z9lXdefZUWp3cazKO8NdK42GnhuauPguqWOGcV5z7SibUMDwXuX5wbPLmw/rFi+WOcUduIduVEEZCywdFSAF7mi/eG993nC8pM6gEfPU83tcylzlrXoueMOyrjemjrCOu8wl8uvLIZcP8K7ZnR4XEiJd0ypvm8TkQuvhCxxk98VHj+trOlZ3iXLxEYcrba5RzKe3pQGgDcyF3K90lFtO3pgjFKpvxm5VXqGgG3nkfT3zakl5P2mXhvaX0n52VP/gq3tgdyoAuY24M5igfVm5EaL6k1peHwm550SlnvqhoXUz6W9VwXwIxbwvX+p+H8SlpV44j84rah/S65jMErvbSS+FAL/WOhN5XJwYxISqdO3aatPnjdy+bkxKT1SyP8Dg8rJ2caj72hOKypgDsXoQunP/4PjAMaUcXHj6TNN6lm3+tN+mfXhWMcEGSwfydnGxtH8uenNfZd+JXAk756hDmjKkSrqzW1kzlTHXfi7pdz7EZrOS7zoro2eWNgXR6pp0+fSc/2y0pDk3n3TDt6hsJMhSd15TGMKGNKZ1+GY/892tOE/99xWTywc2pCk3Ue1DVyfBp4Hh8jJubHBOqYKMs0ph5lXjf6IuuCq1WXXTecpFeT6I71t3EqJwWVqDUk62CekUQJ4TYEVg6d/NuQol/n/xtO19a5yrTG36Wsn1yEIv9SY1KeQR9IKGhJAAM/QHlEypunAxrSk7fDHZolri1QPkAYCn28JmZQmaEiA5Mm00sIOHBIQLpLKPDzZszHpu2r4Q/NawFKm3BEOuZRnjQxJgD8SriyhYnRGh0whIJHgKYZcMlm9BXhJTh1TKC2g3DBhWVHBi25ohI9cyqSxIZUCeNPYfEm8EEY+jBTeALEZ4+8awDSLKGtoJ0FfyLv6keoNGRfOOKLAL/3QxiMNnUKBERn5DB7y4ZBcRIKMMNic5eqtk+sd+EfKn60MSbCVQqEIkDiR5m5mL4WH8O/4Kh7wgUZUIZEyb21I5RRKpPiObmgDmf2PRhwLdPDnXTySun31GrM+IQGsyqiw7HFFdCSQlbuRy4dOhgTA7VMRErjvwZd0w9l65CFHhYn3+amzIQl0T8/eUygjDg5NI4GO5L0MKVIKRZfUe9n3NKI/ZHGUyOWGjvT1SFUplIt2LWxOKwDJvtMvI9pD/iP1RqnSkd6GBJRSKG13VYK4q1e6po7QgGbdNpAR/WDdhj4N+Wyli6IYkqBTCkWmR/1BE9th75EYjgY0ExoRFTJIMeuAB+u5va1TRtEMqbQNo1UKpbQC3Ow9aroKFFeLfJgf0BxTGREgGxNTcrlPnS1mVYcy31FEILHKirGchxFtTtjKrSZ7mrEChNs0Uh/eKeMSJ1bXvnGIkeHE7ISKWAbuz4Y84XrkQH9+DzyDlEciYmh7AZRRXarIFrikCBA3uLLbaMx97N/nqHzs+n5hw3utF/osDQj78rbazm13PEv985AeeCRMK0msBKl4jg/WGWZC7tx/47Zluwg825Sc19FTn+SVOTkvl7F8aziVwVNhhA2dgkH7iegbCmsq3r8WIMTWeaImZ/9zcp4d5dOrpAjcGe8hNOJF4jf9Ajp09a6TmAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import {OpenIDConfiguration} from '@criipto/auth-js';\nimport React, { useContext, useEffect, useState } from 'react';\nimport CriiptoVerifyContext from '../../context';\nimport { acrValueToTitle, filterAcrValues, Language, stringifyAction } from '../../utils';\nimport AuthMethodButton from '../AuthMethodButton/AuthMethodButton';\n\nimport './AuthMethodSelector.css';\n\ninterface Props {\n acrValues?: string[],\n language?: Language,\n onSelect?: (acrValue: string) => void,\n redirectUri?: string\n}\n\nfunction lowercaseFirst(input?: string) {\n if (!input) return input;\n return input.substring(0, 1).toLowerCase() + input.substr(1, input.length);\n}\n\nexport default function AuthMethodSelector(props: Props) {\n const {fetchOpenIDConfiguration, action} = useContext(CriiptoVerifyContext);\n const language = props.language || 'en';\n const [configuration, setConfiguration] = useState<OpenIDConfiguration | null>(null);\n\n useEffect(() => {\n if (props.acrValues) return;\n\n (async () => {\n setConfiguration(await fetchOpenIDConfiguration());\n })();\n }, [props.acrValues]);\n\n const acrValues = filterAcrValues(props.acrValues ?? configuration?.acr_values_supported ?? []);\n\n return (\n <div className=\"criipto-eid-selector\">\n {acrValues.map(acrValue => (\n <AuthMethodButton\n acrValue={acrValue}\n key={acrValue}\n onClick={props.onSelect ? (() => props.onSelect!(acrValue)) : undefined}\n redirectUri={props.redirectUri}\n >\n {stringifyAction(language, action) ? `${stringifyAction(language, action)} ` : ''}{acrValueToTitle(language, acrValue).title} \n {lowercaseFirst(acrValueToTitle(language, acrValue).subtitle)}\n </AuthMethodButton>\n ))}\n </div>\n )\n}","import { useContext } from \"react\";\nimport CriiptoVerifyContext from \"./context\";\n\nexport default function useCriiptoVerify() {\n const {result} = useContext(CriiptoVerifyContext);\n\n return {result};\n}"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","require","stub","Error","initialContext","loginWithRedirect","fetchOpenIDConfiguration","buildAuthorizeUrl","generatePKCE","handleResponse","responseType","completionStrategy","result","domain","action","createContext","buildLoginHint","params","options","hints","loginHint","split","push","length","undefined","join","props","client","useState","clientID","store","sessionStorage","redirectUri","setResult","response","context","useMemo","redirect","authorize","window","location","origin","buildAuthorizeParams","pkce","state","prompt","_redirectUri","processResponse","code_verifier","redirect_uri","then","code","id_token","catch","err","error","OAuth2Error","error_description","value","children","autoTitleCase","input","map","segment","replace","toUpperCase","substr","stringifyAction","language","x","assertUnreachable","acrValueToTitle","startsWith","title","subtitle","suffix","endsWith","testUA","pattern","test","navigator","userAgent","SEBankIDSameDeviceDesktop","links","onError","onComplete","onInitiate","initiated","setInitiated","useContext","useEffect","poll","fetch","pollUrl","status","targetUrl","json","text","setTimeout","onClick","SEBankIDSameDeviceAndroid","onLog","onVisible","deps","visibilityState","useRef","document","setState","current","addEventListener","_handleVisibilityChange","removeEventListener","nextState","usePageVisibility","toString","completeUrl","STATE_KEY","autoHydratedState","rawState","getItem","JSON","parse","hydrateState","SEBankIDSameDeviceIOS","removeItem","setItem","stringify","mobileOS","MSStream","SEBankIDSameDeviceButton","href","setHref","setLinks","setPKCE","setError","log","setLog","defaultRedirectURi","handleLog","statements","console","logs","concat","handleComplete","useCallback","required","completeResponse","url","URL","searchParams","Array","from","keys","reduce","memo","refresh","acrValues","responseMode","encodeURIComponent","newHref","launchLinks","universalLink","customFileHandlerUrl","interval","setInterval","clearInterval","handleInitiate","handleError","element","className","logo","AnchorButton","Button","type","AuthMethodButton","acrValue","src","acrValueToLogo","alt","AuthMethodSelector","configuration","setConfiguration","original","slice","dkmitidMethod","forEach","s","newLevel","oldLevel","includes","lowestMitIDValue","filter","sort","b","indexOf","filterAcrValues","acr_values_supported","onSelect","substring","toLowerCase","useCriiptoVerify"],"sourceRoot":""}
|