Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@simplewebauthn/browser

Package Overview
Dependencies
Maintainers
1
Versions
60
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@simplewebauthn/browser - npm Package Compare versions

Comparing version 5.2.1 to 5.3.0

dist/types/helpers/browserSupportsWebAuthnAutofill.d.ts

4

dist/bundle/index.es5.umd.min.js

@@ -1,2 +0,2 @@

/* [@simplewebauthn/browser] Version: 5.2.1 - Wednesday, May 18th, 2022, 4:56:22 PM */
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).SimpleWebAuthnBrowser={})}(this,(function(e){"use strict";var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])},r(e,t)};var t=function(){return t=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e},t.apply(this,arguments)};function n(e,r,t,n){return new(t||(t=Promise))((function(o,i){function a(e){try{s(n.next(e))}catch(e){i(e)}}function l(e){try{s(n.throw(e))}catch(e){i(e)}}function s(e){var r;e.done?o(e.value):(r=e.value,r instanceof t?r:new t((function(e){e(r)}))).then(a,l)}s((n=n.apply(e,r||[])).next())}))}function o(e,r){var t,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(i){return function(l){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;a;)try{if(t=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,n=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=r.call(e,a)}catch(e){i=[6,e],n=0}finally{t=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,l])}}}function i(e){var r,t,n=new Uint8Array(e),o="";try{for(var i=function(e){var r="function"==typeof Symbol&&Symbol.iterator,t=r&&e[r],n=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}(n),a=i.next();!a.done;a=i.next()){var l=a.value;o+=String.fromCharCode(l)}}catch(e){r={error:e}}finally{try{a&&!a.done&&(t=i.return)&&t.call(i)}finally{if(r)throw r.error}}return btoa(o).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function a(e){for(var r=e.replace(/-/g,"+").replace(/_/g,"/"),t=(4-r.length%4)%4,n=r.padEnd(r.length+t,"="),o=atob(n),i=new ArrayBuffer(o.length),a=new Uint8Array(i),l=0;l<o.length;l++)a[l]=o.charCodeAt(l);return i}function l(){return void 0!==(null===window||void 0===window?void 0:window.PublicKeyCredential)&&"function"==typeof window.PublicKeyCredential}function s(e){var r=e.id;return t(t({},e),{id:a(r),transports:e.transports})}function u(e){return"localhost"===e||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}var c=function(e){function t(r,t){void 0===t&&(t="WebAuthnError");var n=e.call(this,r)||this;return n.name=t,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}(t,e),t}(Error);e.browserSupportsWebauthn=l,e.platformAuthenticatorIsAvailable=function(){return n(this,void 0,void 0,(function(){return o(this,(function(e){return l()?[2,PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()]:[2,!1]}))}))},e.startAuthentication=function(e){var r,d;return n(this,void 0,void 0,(function(){var n,f,p,w,h,y,b,v,g;return o(this,(function(o){switch(o.label){case 0:if(!l())throw new Error("WebAuthn is not supported in this browser");0!==(null===(r=e.allowCredentials)||void 0===r?void 0:r.length)&&(n=null===(d=e.allowCredentials)||void 0===d?void 0:d.map(s)),f=t(t({},e),{challenge:a(e.challenge),allowCredentials:n}),p={publicKey:f},o.label=1;case 1:return o.trys.push([1,3,,4]),[4,navigator.credentials.get(p)];case 2:return w=o.sent(),[3,4];case 3:throw function(e){var r,t=e.error,n=e.options,o=n.publicKey;if(!o)throw Error("options was missing required publicKey property");if("AbortError"===t.name){if(n.signal===(new AbortController).signal)return new c("Authentication ceremony was sent an abort signal","AbortError")}else{if("NotAllowedError"===t.name)return(null===(r=o.allowCredentials)||void 0===r?void 0:r.length)?new c("No available authenticator recognized any of the allowed credentials","NotAllowedError"):new c("User clicked cancel, or the authentication ceremony timed out","NotAllowedError");if("SecurityError"===t.name){var i=window.location.hostname;if(!u(i))return new c("".concat(window.location.hostname," is an invalid domain"),"SecurityError");if(o.rpId!==i)return new c('The RP ID "'.concat(o.rpId,'" is invalid for this domain'),"SecurityError")}else if("UnknownError"===t.name)return new c("The authenticator was unable to process the specified options, or could not create a new assertion signature","UnknownError")}return t}({error:o.sent(),options:p});case 4:if(!w)throw new Error("Authentication was not completed");return h=w.id,y=w.rawId,b=w.response,v=w.type,g=void 0,b.userHandle&&(m=b.userHandle,g=new TextDecoder("utf-8").decode(m)),[2,{id:h,rawId:i(y),response:{authenticatorData:i(b.authenticatorData),clientDataJSON:i(b.clientDataJSON),signature:i(b.signature),userHandle:g},type:v,clientExtensionResults:w.getClientExtensionResults()}]}var m}))}))},e.startRegistration=function(e){return n(this,void 0,void 0,(function(){var r,n,d,f,p,w,h,y;return o(this,(function(o){switch(o.label){case 0:if(!l())throw new Error("WebAuthn is not supported in this browser");r=t(t({},e),{challenge:a(e.challenge),user:t(t({},e.user),{id:(b=e.user.id,(new TextEncoder).encode(b))}),excludeCredentials:e.excludeCredentials.map(s)}),n={publicKey:r},o.label=1;case 1:return o.trys.push([1,3,,4]),[4,navigator.credentials.create(n)];case 2:return d=o.sent(),[3,4];case 3:throw function(e){var r,t,n=e.error,o=e.options,i=o.publicKey;if(!i)throw Error("options was missing required publicKey property");if("AbortError"===n.name){if(o.signal===(new AbortController).signal)return new c("Registration ceremony was sent an abort signal","AbortError")}else if("ConstraintError"===n.name){if(!0===(null===(r=i.authenticatorSelection)||void 0===r?void 0:r.requireResidentKey))return new c("Discoverable credentials were required but no available authenticator supported it","ConstraintError");if("required"===(null===(t=i.authenticatorSelection)||void 0===t?void 0:t.userVerification))return new c("User verification was required but no available authenticator supported it","ConstraintError")}else{if("InvalidStateError"===n.name)return new c("The authenticator was previously registered","InvalidStateError");if("NotAllowedError"===n.name)return new c("User clicked cancel, or the registration ceremony timed out","NotAllowedError");if("NotSupportedError"===n.name)return 0===i.pubKeyCredParams.filter((function(e){return"public-key"===e.type})).length?new c('No entry in pubKeyCredParams was of type "public-key"',"NotSupportedError"):new c("No available authenticator supported any of the specified pubKeyCredParams algorithms","NotSupportedError");if("SecurityError"===n.name){var a=window.location.hostname;if(!u(a))return new c("".concat(window.location.hostname," is an invalid domain"),"SecurityError");if(i.rp.id!==a)return new c('The RP ID "'.concat(i.rp.id,'" is invalid for this domain'),"SecurityError")}else if("TypeError"===n.name){if(i.user.id.byteLength<1||i.user.id.byteLength>64)return new c("User ID was not between 1 and 64 characters","TypeError")}else if("UnknownError"===n.name)return new c("The authenticator was unable to process the specified options, or could not create a new credential","UnknownError")}return n}({error:o.sent(),options:n});case 4:if(!d)throw new Error("Registration was not completed");return f=d.id,p=d.rawId,w=d.response,h=d.type,y={id:f,rawId:i(p),response:{attestationObject:i(w.attestationObject),clientDataJSON:i(w.clientDataJSON)},type:h,clientExtensionResults:d.getClientExtensionResults()},"function"==typeof w.getTransports&&(y.transports=w.getTransports()),[2,y]}var b}))}))},Object.defineProperty(e,"__esModule",{value:!0})}));
/* [@simplewebauthn/browser@5.3.0] */
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SimpleWebAuthnBrowser={})}(this,(function(e){"use strict";var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},t(e,r)};var r=function(){return r=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)};function n(e,t,r,n){return new(r||(r=Promise))((function(o,i){function a(e){try{u(n.next(e))}catch(e){i(e)}}function l(e){try{u(n.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,l)}u((n=n.apply(e,t||[])).next())}))}function o(e,t){var r,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(i){return function(l){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,n=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],n=0}finally{r=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,l])}}}function i(e){var t,r,n=new Uint8Array(e),o="";try{for(var i=function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(n),a=i.next();!a.done;a=i.next()){var l=a.value;o+=String.fromCharCode(l)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return btoa(o).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function a(e){for(var t=e.replace(/-/g,"+").replace(/_/g,"/"),r=(4-t.length%4)%4,n=t.padEnd(t.length+r,"="),o=atob(n),i=new ArrayBuffer(o.length),a=new Uint8Array(i),l=0;l<o.length;l++)a[l]=o.charCodeAt(l);return i}function l(){return void 0!==(null===window||void 0===window?void 0:window.PublicKeyCredential)&&"function"==typeof window.PublicKeyCredential}function u(e){var t=e.id;return r(r({},e),{id:a(t),transports:e.transports})}function s(e){return"localhost"===e||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}var c=function(e){function r(t,r){void 0===r&&(r="WebAuthnError");var n=e.call(this,t)||this;return n.name=r,n}return function(e,r){function n(){this.constructor=e}t(e,r),e.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}(r,e),r}(Error);var d=new(function(){function e(){}return e.prototype.createNewAbortSignal=function(){return this.controller&&this.controller.abort(),this.controller=new AbortController,this.controller.signal},e.prototype.reset=function(){this.controller=void 0},e}());function f(){return n(this,void 0,void 0,(function(){var e;return o(this,(function(t){return navigator.credentials.conditionalMediationSupported?[2,!0]:[2,void 0!==(e=window.PublicKeyCredential).isConditionalMediationAvailable&&e.isConditionalMediationAvailable()]}))}))}e.browserSupportsWebAuthnAutofill=f,e.browserSupportsWebauthn=l,e.platformAuthenticatorIsAvailable=function(){return n(this,void 0,void 0,(function(){return o(this,(function(e){return l()?[2,PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()]:[2,!1]}))}))},e.startAuthentication=function(e,t){var p,h;return void 0===t&&(t=!1),n(this,void 0,void 0,(function(){var n,w,b,y,v,g,m,E,A;return o(this,(function(o){switch(o.label){case 0:if(!l())throw new Error("WebAuthn is not supported in this browser");return 0!==(null===(p=e.allowCredentials)||void 0===p?void 0:p.length)&&(n=null===(h=e.allowCredentials)||void 0===h?void 0:h.map(u)),w=r(r({},e),{challenge:a(e.challenge),allowCredentials:n}),b={},t?[4,f()]:[3,2];case 1:if(!o.sent())throw Error("Browser does not support WebAuthn autofill");if(document.querySelectorAll("input[autocomplete*='webauthn']").length<1)throw Error('No <input> with `"webauthn"` in its `autocomplete` attribute was detected');b.mediation="conditional",w.allowCredentials=[],o.label=2;case 2:b.publicKey=w,b.signal=d.createNewAbortSignal(),o.label=3;case 3:return o.trys.push([3,5,6,7]),[4,navigator.credentials.get(b)];case 4:return y=o.sent(),[3,7];case 5:throw function(e){var t,r=e.error,n=e.options,o=n.publicKey;if(!o)throw Error("options was missing required publicKey property");if("AbortError"===r.name){if(n.signal===(new AbortController).signal)return new c("Authentication ceremony was sent an abort signal","AbortError")}else{if("NotAllowedError"===r.name)return(null===(t=o.allowCredentials)||void 0===t?void 0:t.length)?new c("No available authenticator recognized any of the allowed credentials","NotAllowedError"):new c("User clicked cancel, or the authentication ceremony timed out","NotAllowedError");if("SecurityError"===r.name){var i=window.location.hostname;if(!s(i))return new c("".concat(window.location.hostname," is an invalid domain"),"SecurityError");if(o.rpId!==i)return new c('The RP ID "'.concat(o.rpId,'" is invalid for this domain'),"SecurityError")}else if("UnknownError"===r.name)return new c("The authenticator was unable to process the specified options, or could not create a new assertion signature","UnknownError")}return r}({error:o.sent(),options:b});case 6:return d.reset(),[7];case 7:if(!y)throw new Error("Authentication was not completed");return v=y.id,g=y.rawId,m=y.response,E=y.type,A=void 0,m.userHandle&&(S=m.userHandle,A=new TextDecoder("utf-8").decode(S)),[2,{id:v,rawId:i(g),response:{authenticatorData:i(m.authenticatorData),clientDataJSON:i(m.clientDataJSON),signature:i(m.signature),userHandle:A},type:E,clientExtensionResults:y.getClientExtensionResults(),authenticatorAttachment:y.authenticatorAttachment}]}var S}))}))},e.startRegistration=function(e){return n(this,void 0,void 0,(function(){var t,n,f,p,h,w,b,y;return o(this,(function(o){switch(o.label){case 0:if(!l())throw new Error("WebAuthn is not supported in this browser");t=r(r({},e),{challenge:a(e.challenge),user:r(r({},e.user),{id:(v=e.user.id,(new TextEncoder).encode(v))}),excludeCredentials:e.excludeCredentials.map(u)}),(n={publicKey:t}).signal=d.createNewAbortSignal(),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,navigator.credentials.create(n)];case 2:return f=o.sent(),[3,5];case 3:throw function(e){var t,r,n=e.error,o=e.options,i=o.publicKey;if(!i)throw Error("options was missing required publicKey property");if("AbortError"===n.name){if(o.signal===(new AbortController).signal)return new c("Registration ceremony was sent an abort signal","AbortError")}else if("ConstraintError"===n.name){if(!0===(null===(t=i.authenticatorSelection)||void 0===t?void 0:t.requireResidentKey))return new c("Discoverable credentials were required but no available authenticator supported it","ConstraintError");if("required"===(null===(r=i.authenticatorSelection)||void 0===r?void 0:r.userVerification))return new c("User verification was required but no available authenticator supported it","ConstraintError")}else{if("InvalidStateError"===n.name)return new c("The authenticator was previously registered","InvalidStateError");if("NotAllowedError"===n.name)return new c("User clicked cancel, or the registration ceremony timed out","NotAllowedError");if("NotSupportedError"===n.name)return 0===i.pubKeyCredParams.filter((function(e){return"public-key"===e.type})).length?new c('No entry in pubKeyCredParams was of type "public-key"',"NotSupportedError"):new c("No available authenticator supported any of the specified pubKeyCredParams algorithms","NotSupportedError");if("SecurityError"===n.name){var a=window.location.hostname;if(!s(a))return new c("".concat(window.location.hostname," is an invalid domain"),"SecurityError");if(i.rp.id!==a)return new c('The RP ID "'.concat(i.rp.id,'" is invalid for this domain'),"SecurityError")}else if("TypeError"===n.name){if(i.user.id.byteLength<1||i.user.id.byteLength>64)return new c("User ID was not between 1 and 64 characters","TypeError")}else if("UnknownError"===n.name)return new c("The authenticator was unable to process the specified options, or could not create a new credential","UnknownError")}return n}({error:o.sent(),options:n});case 4:return d.reset(),[7];case 5:if(!f)throw new Error("Registration was not completed");return p=f.id,h=f.rawId,w=f.response,b=f.type,y={id:p,rawId:i(h),response:{attestationObject:i(w.attestationObject),clientDataJSON:i(w.clientDataJSON)},type:b,clientExtensionResults:f.getClientExtensionResults(),authenticatorAttachment:f.authenticatorAttachment},"function"==typeof w.getTransports&&(y.transports=w.getTransports()),[2,y]}var v}))}))},Object.defineProperty(e,"__esModule",{value:!0})}));

@@ -1,2 +0,2 @@

/* [@simplewebauthn/browser] Version: 5.2.1 - Wednesday, May 18th, 2022, 4:56:21 PM */
/* [@simplewebauthn/browser@5.3.0] */
function utf8StringToBuffer(value) {

@@ -105,2 +105,16 @@ return new TextEncoder().encode(value);

class WebAuthnAbortService {
createNewAbortSignal() {
if (this.controller) {
this.controller.abort();
}
this.controller = new AbortController();
return this.controller.signal;
}
reset() {
this.controller = undefined;
}
}
const webauthnAbortService = new WebAuthnAbortService();
async function startRegistration(creationOptionsJSON) {

@@ -120,2 +134,3 @@ if (!browserSupportsWebauthn()) {

const options = { publicKey };
options.signal = webauthnAbortService.createNewAbortSignal();
let credential;

@@ -128,2 +143,5 @@ try {

}
finally {
webauthnAbortService.reset();
}
if (!credential) {

@@ -142,2 +160,3 @@ throw new Error('Registration was not completed');

clientExtensionResults: credential.getClientExtensionResults(),
authenticatorAttachment: credential.authenticatorAttachment,
};

@@ -154,2 +173,11 @@ if (typeof response.getTransports === 'function') {

async function browserSupportsWebAuthnAutofill() {
if (navigator.credentials.conditionalMediationSupported) {
return true;
}
const globalPublicKeyCredential = window.PublicKeyCredential;
return (globalPublicKeyCredential.isConditionalMediationAvailable !== undefined &&
globalPublicKeyCredential.isConditionalMediationAvailable());
}
function identifyAuthenticationError({ error, options, }) {

@@ -187,3 +215,3 @@ var _a;

async function startAuthentication(requestOptionsJSON) {
async function startAuthentication(requestOptionsJSON, useBrowserAutofill = false) {
var _a, _b;

@@ -202,3 +230,16 @@ if (!browserSupportsWebauthn()) {

};
const options = { publicKey };
const options = {};
if (useBrowserAutofill) {
if (!(await browserSupportsWebAuthnAutofill())) {
throw Error('Browser does not support WebAuthn autofill');
}
const eligibleInputs = document.querySelectorAll("input[autocomplete*='webauthn']");
if (eligibleInputs.length < 1) {
throw Error('No <input> with `"webauthn"` in its `autocomplete` attribute was detected');
}
options.mediation = 'conditional';
publicKey.allowCredentials = [];
}
options.publicKey = publicKey;
options.signal = webauthnAbortService.createNewAbortSignal();
let credential;

@@ -211,2 +252,5 @@ try {

}
finally {
webauthnAbortService.reset();
}
if (!credential) {

@@ -231,2 +275,3 @@ throw new Error('Authentication was not completed');

clientExtensionResults: credential.getClientExtensionResults(),
authenticatorAttachment: credential.authenticatorAttachment,
};

@@ -242,2 +287,2 @@ }

export { browserSupportsWebauthn, platformAuthenticatorIsAvailable, startAuthentication, startRegistration };
export { browserSupportsWebAuthnAutofill, browserSupportsWebauthn, platformAuthenticatorIsAvailable, startAuthentication, startRegistration };

@@ -1,2 +0,2 @@

/* [@simplewebauthn/browser] Version: 5.2.1 - Wednesday, May 18th, 2022, 4:56:21 PM */
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).SimpleWebAuthnBrowser={})}(this,(function(e){"use strict";function r(e){const r=new Uint8Array(e);let t="";for(const e of r)t+=String.fromCharCode(e);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function t(e){const r=e.replace(/-/g,"+").replace(/_/g,"/"),t=(4-r.length%4)%4,n=r.padEnd(r.length+t,"="),o=atob(n),i=new ArrayBuffer(o.length),a=new Uint8Array(i);for(let e=0;e<o.length;e++)a[e]=o.charCodeAt(e);return i}function n(){return void 0!==(null===window||void 0===window?void 0:window.PublicKeyCredential)&&"function"==typeof window.PublicKeyCredential}function o(e){const{id:r}=e;return{...e,id:t(r),transports:e.transports}}function i(e){return"localhost"===e||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}class a extends Error{constructor(e,r="WebAuthnError"){super(e),this.name=r}}e.browserSupportsWebauthn=n,e.platformAuthenticatorIsAvailable=async function(){return!!n()&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()},e.startAuthentication=async function(e){var s,l;if(!n())throw new Error("WebAuthn is not supported in this browser");let c;0!==(null===(s=e.allowCredentials)||void 0===s?void 0:s.length)&&(c=null===(l=e.allowCredentials)||void 0===l?void 0:l.map(o));const u={publicKey:{...e,challenge:t(e.challenge),allowCredentials:c}};let d;try{d=await navigator.credentials.get(u)}catch(e){throw function({error:e,options:r}){var t;const{publicKey:n}=r;if(!n)throw Error("options was missing required publicKey property");if("AbortError"===e.name){if(r.signal===(new AbortController).signal)return new a("Authentication ceremony was sent an abort signal","AbortError")}else{if("NotAllowedError"===e.name)return(null===(t=n.allowCredentials)||void 0===t?void 0:t.length)?new a("No available authenticator recognized any of the allowed credentials","NotAllowedError"):new a("User clicked cancel, or the authentication ceremony timed out","NotAllowedError");if("SecurityError"===e.name){const e=window.location.hostname;if(!i(e))return new a(`${window.location.hostname} is an invalid domain`,"SecurityError");if(n.rpId!==e)return new a(`The RP ID "${n.rpId}" is invalid for this domain`,"SecurityError")}else if("UnknownError"===e.name)return new a("The authenticator was unable to process the specified options, or could not create a new assertion signature","UnknownError")}return e}({error:e,options:u})}if(!d)throw new Error("Authentication was not completed");const{id:w,rawId:p,response:f,type:h}=d;let y;var b;return f.userHandle&&(b=f.userHandle,y=new TextDecoder("utf-8").decode(b)),{id:w,rawId:r(p),response:{authenticatorData:r(f.authenticatorData),clientDataJSON:r(f.clientDataJSON),signature:r(f.signature),userHandle:y},type:h,clientExtensionResults:d.getClientExtensionResults()}},e.startRegistration=async function(e){if(!n())throw new Error("WebAuthn is not supported in this browser");var s;const l={publicKey:{...e,challenge:t(e.challenge),user:{...e.user,id:(s=e.user.id,(new TextEncoder).encode(s))},excludeCredentials:e.excludeCredentials.map(o)}};let c;try{c=await navigator.credentials.create(l)}catch(e){throw function({error:e,options:r}){var t,n;const{publicKey:o}=r;if(!o)throw Error("options was missing required publicKey property");if("AbortError"===e.name){if(r.signal===(new AbortController).signal)return new a("Registration ceremony was sent an abort signal","AbortError")}else if("ConstraintError"===e.name){if(!0===(null===(t=o.authenticatorSelection)||void 0===t?void 0:t.requireResidentKey))return new a("Discoverable credentials were required but no available authenticator supported it","ConstraintError");if("required"===(null===(n=o.authenticatorSelection)||void 0===n?void 0:n.userVerification))return new a("User verification was required but no available authenticator supported it","ConstraintError")}else{if("InvalidStateError"===e.name)return new a("The authenticator was previously registered","InvalidStateError");if("NotAllowedError"===e.name)return new a("User clicked cancel, or the registration ceremony timed out","NotAllowedError");if("NotSupportedError"===e.name)return 0===o.pubKeyCredParams.filter((e=>"public-key"===e.type)).length?new a('No entry in pubKeyCredParams was of type "public-key"',"NotSupportedError"):new a("No available authenticator supported any of the specified pubKeyCredParams algorithms","NotSupportedError");if("SecurityError"===e.name){const e=window.location.hostname;if(!i(e))return new a(`${window.location.hostname} is an invalid domain`,"SecurityError");if(o.rp.id!==e)return new a(`The RP ID "${o.rp.id}" is invalid for this domain`,"SecurityError")}else if("TypeError"===e.name){if(o.user.id.byteLength<1||o.user.id.byteLength>64)return new a("User ID was not between 1 and 64 characters","TypeError")}else if("UnknownError"===e.name)return new a("The authenticator was unable to process the specified options, or could not create a new credential","UnknownError")}return e}({error:e,options:l})}if(!c)throw new Error("Registration was not completed");const{id:u,rawId:d,response:w,type:p}=c,f={id:u,rawId:r(d),response:{attestationObject:r(w.attestationObject),clientDataJSON:r(w.clientDataJSON)},type:p,clientExtensionResults:c.getClientExtensionResults()};return"function"==typeof w.getTransports&&(f.transports=w.getTransports()),f},Object.defineProperty(e,"__esModule",{value:!0})}));
/* [@simplewebauthn/browser@5.3.0] */
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SimpleWebAuthnBrowser={})}(this,(function(e){"use strict";function t(e){const t=new Uint8Array(e);let r="";for(const e of t)r+=String.fromCharCode(e);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function r(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),r=(4-t.length%4)%4,n=t.padEnd(t.length+r,"="),o=atob(n),i=new ArrayBuffer(o.length),a=new Uint8Array(i);for(let e=0;e<o.length;e++)a[e]=o.charCodeAt(e);return i}function n(){return void 0!==(null===window||void 0===window?void 0:window.PublicKeyCredential)&&"function"==typeof window.PublicKeyCredential}function o(e){const{id:t}=e;return{...e,id:r(t),transports:e.transports}}function i(e){return"localhost"===e||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}class a extends Error{constructor(e,t="WebAuthnError"){super(e),this.name=t}}const l=new class{createNewAbortSignal(){return this.controller&&this.controller.abort(),this.controller=new AbortController,this.controller.signal}reset(){this.controller=void 0}};async function s(){if(navigator.credentials.conditionalMediationSupported)return!0;const e=window.PublicKeyCredential;return void 0!==e.isConditionalMediationAvailable&&e.isConditionalMediationAvailable()}e.browserSupportsWebAuthnAutofill=s,e.browserSupportsWebauthn=n,e.platformAuthenticatorIsAvailable=async function(){return!!n()&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()},e.startAuthentication=async function(e,c=!1){var u,d;if(!n())throw new Error("WebAuthn is not supported in this browser");let w;0!==(null===(u=e.allowCredentials)||void 0===u?void 0:u.length)&&(w=null===(d=e.allowCredentials)||void 0===d?void 0:d.map(o));const p={...e,challenge:r(e.challenge),allowCredentials:w},h={};if(c){if(!await s())throw Error("Browser does not support WebAuthn autofill");if(document.querySelectorAll("input[autocomplete*='webauthn']").length<1)throw Error('No <input> with `"webauthn"` in its `autocomplete` attribute was detected');h.mediation="conditional",p.allowCredentials=[]}let f;h.publicKey=p,h.signal=l.createNewAbortSignal();try{f=await navigator.credentials.get(h)}catch(e){throw function({error:e,options:t}){var r;const{publicKey:n}=t;if(!n)throw Error("options was missing required publicKey property");if("AbortError"===e.name){if(t.signal===(new AbortController).signal)return new a("Authentication ceremony was sent an abort signal","AbortError")}else{if("NotAllowedError"===e.name)return(null===(r=n.allowCredentials)||void 0===r?void 0:r.length)?new a("No available authenticator recognized any of the allowed credentials","NotAllowedError"):new a("User clicked cancel, or the authentication ceremony timed out","NotAllowedError");if("SecurityError"===e.name){const e=window.location.hostname;if(!i(e))return new a(`${window.location.hostname} is an invalid domain`,"SecurityError");if(n.rpId!==e)return new a(`The RP ID "${n.rpId}" is invalid for this domain`,"SecurityError")}else if("UnknownError"===e.name)return new a("The authenticator was unable to process the specified options, or could not create a new assertion signature","UnknownError")}return e}({error:e,options:h})}finally{l.reset()}if(!f)throw new Error("Authentication was not completed");const{id:b,rawId:y,response:g,type:m}=f;let E;var v;return g.userHandle&&(v=g.userHandle,E=new TextDecoder("utf-8").decode(v)),{id:b,rawId:t(y),response:{authenticatorData:t(g.authenticatorData),clientDataJSON:t(g.clientDataJSON),signature:t(g.signature),userHandle:E},type:m,clientExtensionResults:f.getClientExtensionResults(),authenticatorAttachment:f.authenticatorAttachment}},e.startRegistration=async function(e){if(!n())throw new Error("WebAuthn is not supported in this browser");var s;const c={publicKey:{...e,challenge:r(e.challenge),user:{...e.user,id:(s=e.user.id,(new TextEncoder).encode(s))},excludeCredentials:e.excludeCredentials.map(o)}};let u;c.signal=l.createNewAbortSignal();try{u=await navigator.credentials.create(c)}catch(e){throw function({error:e,options:t}){var r,n;const{publicKey:o}=t;if(!o)throw Error("options was missing required publicKey property");if("AbortError"===e.name){if(t.signal===(new AbortController).signal)return new a("Registration ceremony was sent an abort signal","AbortError")}else if("ConstraintError"===e.name){if(!0===(null===(r=o.authenticatorSelection)||void 0===r?void 0:r.requireResidentKey))return new a("Discoverable credentials were required but no available authenticator supported it","ConstraintError");if("required"===(null===(n=o.authenticatorSelection)||void 0===n?void 0:n.userVerification))return new a("User verification was required but no available authenticator supported it","ConstraintError")}else{if("InvalidStateError"===e.name)return new a("The authenticator was previously registered","InvalidStateError");if("NotAllowedError"===e.name)return new a("User clicked cancel, or the registration ceremony timed out","NotAllowedError");if("NotSupportedError"===e.name)return 0===o.pubKeyCredParams.filter((e=>"public-key"===e.type)).length?new a('No entry in pubKeyCredParams was of type "public-key"',"NotSupportedError"):new a("No available authenticator supported any of the specified pubKeyCredParams algorithms","NotSupportedError");if("SecurityError"===e.name){const e=window.location.hostname;if(!i(e))return new a(`${window.location.hostname} is an invalid domain`,"SecurityError");if(o.rp.id!==e)return new a(`The RP ID "${o.rp.id}" is invalid for this domain`,"SecurityError")}else if("TypeError"===e.name){if(o.user.id.byteLength<1||o.user.id.byteLength>64)return new a("User ID was not between 1 and 64 characters","TypeError")}else if("UnknownError"===e.name)return new a("The authenticator was unable to process the specified options, or could not create a new credential","UnknownError")}return e}({error:e,options:c})}finally{l.reset()}if(!u)throw new Error("Registration was not completed");const{id:d,rawId:w,response:p,type:h}=u,f={id:d,rawId:t(w),response:{attestationObject:t(p.attestationObject),clientDataJSON:t(p.clientDataJSON)},type:h,clientExtensionResults:u.getClientExtensionResults(),authenticatorAttachment:u.authenticatorAttachment};return"function"==typeof p.getTransports&&(f.transports=p.getTransports()),f},Object.defineProperty(e,"__esModule",{value:!0})}));

@@ -1,5 +0,6 @@

import startRegistration from './methods/startRegistration';
import startAuthentication from './methods/startAuthentication';
import { startRegistration } from './methods/startRegistration';
import { startAuthentication } from './methods/startAuthentication';
import { browserSupportsWebauthn } from './helpers/browserSupportsWebauthn';
import { platformAuthenticatorIsAvailable } from './helpers/platformAuthenticatorIsAvailable';
export { startRegistration, startAuthentication, browserSupportsWebauthn, platformAuthenticatorIsAvailable, };
import { browserSupportsWebAuthnAutofill } from './helpers/browserSupportsWebAuthnAutofill';
export { startRegistration, startAuthentication, browserSupportsWebauthn, browserSupportsWebAuthnAutofill, platformAuthenticatorIsAvailable, };
import { PublicKeyCredentialRequestOptionsJSON, AuthenticationCredentialJSON } from '@simplewebauthn/typescript-types';
export default function startAuthentication(requestOptionsJSON: PublicKeyCredentialRequestOptionsJSON): Promise<AuthenticationCredentialJSON>;
export declare function startAuthentication(requestOptionsJSON: PublicKeyCredentialRequestOptionsJSON, useBrowserAutofill?: boolean): Promise<AuthenticationCredentialJSON>;
import { PublicKeyCredentialCreationOptionsJSON, RegistrationCredentialJSON } from '@simplewebauthn/typescript-types';
export default function startRegistration(creationOptionsJSON: PublicKeyCredentialCreationOptionsJSON): Promise<RegistrationCredentialJSON>;
export declare function startRegistration(creationOptionsJSON: PublicKeyCredentialCreationOptionsJSON): Promise<RegistrationCredentialJSON>;
{
"name": "@simplewebauthn/browser",
"version": "5.2.1",
"version": "5.3.0",
"description": "SimpleWebAuthn for Browsers",

@@ -35,3 +35,3 @@ "main": "dist/bundle/index.js",

"@rollup/plugin-typescript": "^8.2.1",
"@simplewebauthn/typescript-types": "^5.2.1",
"@simplewebauthn/typescript-types": "^5.3.0",
"rollup": "^2.52.1",

@@ -41,3 +41,3 @@ "rollup-plugin-terser": "^7.0.2",

},
"gitHead": "7a51b18bd724795f8f891207dda3fd8f04b915e9"
"gitHead": "ad8b71fb26330f123155ec8467dd8f2ffedc0986"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc