summaryrefslogtreecommitdiffhomepage
path: root/packages/browser
diff options
context:
space:
mode:
Diffstat (limited to 'packages/browser')
-rw-r--r--packages/browser/src/helpers/identifyAuthenticationError.ts2
-rw-r--r--packages/browser/src/helpers/identifyRegistrationError.ts2
-rw-r--r--packages/browser/src/helpers/webAuthnAbortService.test.ts7
-rw-r--r--packages/browser/src/helpers/webAuthnAbortService.ts4
4 files changed, 11 insertions, 4 deletions
diff --git a/packages/browser/src/helpers/identifyAuthenticationError.ts b/packages/browser/src/helpers/identifyAuthenticationError.ts
index e617a7d..d8d6960 100644
--- a/packages/browser/src/helpers/identifyAuthenticationError.ts
+++ b/packages/browser/src/helpers/identifyAuthenticationError.ts
@@ -18,7 +18,7 @@ export function identifyAuthenticationError({
}
if (error.name === 'AbortError') {
- if (options.signal === new AbortController().signal) {
+ if (options.signal instanceof AbortSignal) {
// https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 16)
return new WebAuthnError({
message: 'Authentication ceremony was sent an abort signal',
diff --git a/packages/browser/src/helpers/identifyRegistrationError.ts b/packages/browser/src/helpers/identifyRegistrationError.ts
index 4649fb9..02c9dac 100644
--- a/packages/browser/src/helpers/identifyRegistrationError.ts
+++ b/packages/browser/src/helpers/identifyRegistrationError.ts
@@ -18,7 +18,7 @@ export function identifyRegistrationError({
}
if (error.name === 'AbortError') {
- if (options.signal === new AbortController().signal) {
+ if (options.signal instanceof AbortSignal) {
// https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 16)
return new WebAuthnError({
message: 'Registration ceremony was sent an abort signal',
diff --git a/packages/browser/src/helpers/webAuthnAbortService.test.ts b/packages/browser/src/helpers/webAuthnAbortService.test.ts
index b3ec518..98c1ccd 100644
--- a/packages/browser/src/helpers/webAuthnAbortService.test.ts
+++ b/packages/browser/src/helpers/webAuthnAbortService.test.ts
@@ -7,7 +7,7 @@ test('should create a new abort signal every time', () => {
expect(signal2).not.toBe(signal1);
});
-test('should call abort() on existing controller when creating a new signal', () => {
+test('should call abort() with AbortError on existing controller when creating a new signal', () => {
// Populate `.controller`
webauthnAbortService.createNewAbortSignal();
@@ -19,4 +19,9 @@ test('should call abort() on existing controller when creating a new signal', ()
// Generate a new signal, which should call `abort()` on the existing controller
webauthnAbortService.createNewAbortSignal();
expect(abortSpy).toHaveBeenCalledTimes(1);
+
+ // Make sure we raise an AbortError so it can be detected correctly
+ const abortReason = abortSpy.mock.calls[0][0];
+ expect(abortReason).toBeInstanceOf(Error);
+ expect(abortReason.name).toEqual('AbortError');
});
diff --git a/packages/browser/src/helpers/webAuthnAbortService.ts b/packages/browser/src/helpers/webAuthnAbortService.ts
index 8955526..f90b263 100644
--- a/packages/browser/src/helpers/webAuthnAbortService.ts
+++ b/packages/browser/src/helpers/webAuthnAbortService.ts
@@ -12,7 +12,9 @@ class WebAuthnAbortService {
createNewAbortSignal() {
// Abort any existing calls to navigator.credentials.create() or navigator.credentials.get()
if (this.controller) {
- this.controller.abort('Cancelling existing WebAuthn API call for new one');
+ const abortError = new Error('Cancelling existing WebAuthn API call for new one');
+ abortError.name = 'AbortError';
+ this.controller.abort(abortError);
}
const newController = new AbortController();