diff options
Diffstat (limited to 'packages/browser/src/helpers')
-rw-r--r-- | packages/browser/src/helpers/__mocks__/browserSupportsWebauthn.ts (renamed from packages/browser/src/helpers/__mocks__/supportsWebauthn.ts) | 2 | ||||
-rw-r--r-- | packages/browser/src/helpers/browserSupportsWebauthn.test.ts (renamed from packages/browser/src/helpers/supportsWebauthn.test.ts) | 8 | ||||
-rw-r--r-- | packages/browser/src/helpers/browserSupportsWebauthn.ts (renamed from packages/browser/src/helpers/supportsWebauthn.ts) | 2 | ||||
-rw-r--r-- | packages/browser/src/helpers/platformAuthenticatorIsAvailable.test.ts | 26 | ||||
-rw-r--r-- | packages/browser/src/helpers/platformAuthenticatorIsAvailable.ts | 9 |
5 files changed, 41 insertions, 6 deletions
diff --git a/packages/browser/src/helpers/__mocks__/supportsWebauthn.ts b/packages/browser/src/helpers/__mocks__/browserSupportsWebauthn.ts index b6b47d4..20d5d88 100644 --- a/packages/browser/src/helpers/__mocks__/supportsWebauthn.ts +++ b/packages/browser/src/helpers/__mocks__/browserSupportsWebauthn.ts @@ -1,2 +1,2 @@ // We just need a simple mock so we can control whether this returns `true` or `false` -export default jest.fn(); +export const browserSupportsWebauthn = jest.fn(); diff --git a/packages/browser/src/helpers/supportsWebauthn.test.ts b/packages/browser/src/helpers/browserSupportsWebauthn.test.ts index e11d77b..5308315 100644 --- a/packages/browser/src/helpers/supportsWebauthn.test.ts +++ b/packages/browser/src/helpers/browserSupportsWebauthn.test.ts @@ -1,4 +1,4 @@ -import supportsWebauthn from './supportsWebauthn'; +import { browserSupportsWebauthn } from './browserSupportsWebauthn'; beforeEach(() => { // @ts-ignore 2741 @@ -6,12 +6,12 @@ beforeEach(() => { }); test('should return true when browser supports WebAuthn', () => { - expect(supportsWebauthn()).toBe(true); + expect(browserSupportsWebauthn()).toBe(true); }); test('should return false when browser does not support WebAuthn', () => { delete (window as any).PublicKeyCredential; - expect(supportsWebauthn()).toBe(false); + expect(browserSupportsWebauthn()).toBe(false); }); test('should return false when window is undefined', () => { @@ -20,7 +20,7 @@ test('should return false when window is undefined', () => { windowSpy.mockImplementation(() => undefined); expect(window).toBe(undefined); - expect(supportsWebauthn()).toBe(false); + expect(browserSupportsWebauthn()).toBe(false); // Restore original window value. windowSpy.mockRestore(); diff --git a/packages/browser/src/helpers/supportsWebauthn.ts b/packages/browser/src/helpers/browserSupportsWebauthn.ts index b572080..030256f 100644 --- a/packages/browser/src/helpers/supportsWebauthn.ts +++ b/packages/browser/src/helpers/browserSupportsWebauthn.ts @@ -1,7 +1,7 @@ /** * Determine if the browser is capable of Webauthn */ -export default function supportsWebauthn(): boolean { +export function browserSupportsWebauthn(): boolean { return ( window?.PublicKeyCredential !== undefined && typeof window.PublicKeyCredential === 'function' ); diff --git a/packages/browser/src/helpers/platformAuthenticatorIsAvailable.test.ts b/packages/browser/src/helpers/platformAuthenticatorIsAvailable.test.ts new file mode 100644 index 0000000..ba9f233 --- /dev/null +++ b/packages/browser/src/helpers/platformAuthenticatorIsAvailable.test.ts @@ -0,0 +1,26 @@ +import { platformAuthenticatorIsAvailable } from './platformAuthenticatorIsAvailable'; + +const mockIsUVPAA = jest.fn(); + +beforeEach(() => { + mockIsUVPAA.mockReset(); + + // @ts-ignore 2741 + window.PublicKeyCredential = { + isUserVerifyingPlatformAuthenticatorAvailable: mockIsUVPAA.mockResolvedValue(true), + }; +}); + +test('should return true when platform authenticator is available', async () => { + const isAvailable = await platformAuthenticatorIsAvailable(); + + expect(isAvailable).toEqual(true); +}); + +test('should return false when platform authenticator is unavailable', async () => { + mockIsUVPAA.mockResolvedValue(false); + + const isAvailable = await platformAuthenticatorIsAvailable(); + + expect(isAvailable).toEqual(false); +}); diff --git a/packages/browser/src/helpers/platformAuthenticatorIsAvailable.ts b/packages/browser/src/helpers/platformAuthenticatorIsAvailable.ts new file mode 100644 index 0000000..10d84e3 --- /dev/null +++ b/packages/browser/src/helpers/platformAuthenticatorIsAvailable.ts @@ -0,0 +1,9 @@ +/** + * Determine whether the browser can communicate with a built-in authenticator, like + * Touch ID, Android fingerprint scanner, or Windows Hello. + * + * This method will _not_ be able to tell you the name of the platform authenticator. + */ +export async function platformAuthenticatorIsAvailable(): Promise<boolean> { + return PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable(); +} |