diff options
Diffstat (limited to 'packages/server/src')
-rw-r--r-- | packages/server/src/assertion/generateAssertionOptions.test.ts | 51 | ||||
-rw-r--r-- | packages/server/src/assertion/generateAssertionOptions.ts | 35 |
2 files changed, 48 insertions, 38 deletions
diff --git a/packages/server/src/assertion/generateAssertionOptions.test.ts b/packages/server/src/assertion/generateAssertionOptions.test.ts index 257657b..aa345af 100644 --- a/packages/server/src/assertion/generateAssertionOptions.test.ts +++ b/packages/server/src/assertion/generateAssertionOptions.test.ts @@ -3,40 +3,41 @@ import generateAssertionOptions from './generateAssertionOptions'; test('should generate credential request options suitable for sending via JSON', () => { const challenge = 'totallyrandomvalue'; - const options = generateAssertionOptions( + const options = generateAssertionOptions({ challenge, - 1, - [ + timeout: 1, + allowedBase64CredentialIDs: [ Buffer.from('1234', 'ascii').toString('base64'), Buffer.from('5678', 'ascii').toString('base64'), ], - ); + }); expect(options).toEqual({ - publicKey: { - challenge, - allowCredentials: [ - { - id: 'MTIzNA==', - type: 'public-key', - transports: ['usb', 'ble', 'nfc', 'internal'], - }, - { - id: 'NTY3OA==', - type: 'public-key', - transports: ['usb', 'ble', 'nfc', 'internal'], - }, - ], - timeout: 1, - }, + challenge, + allowCredentials: [ + { + id: 'MTIzNA==', + type: 'public-key', + transports: ['usb', 'ble', 'nfc', 'internal'], + }, + { + id: 'NTY3OA==', + type: 'public-key', + transports: ['usb', 'ble', 'nfc', 'internal'], + }, + ], + timeout: 1, }); }); test('defaults to 60 seconds if no timeout is specified', () => { - const options = generateAssertionOptions('totallyrandomvalue', undefined, [ - Buffer.from('1234', 'ascii').toString('base64'), - Buffer.from('5678', 'ascii').toString('base64'), - ]); + const options = generateAssertionOptions({ + challenge: 'totallyrandomvalue', + allowedBase64CredentialIDs: [ + Buffer.from('1234', 'ascii').toString('base64'), + Buffer.from('5678', 'ascii').toString('base64'), + ], + }); - expect(options.publicKey.timeout).toEqual(60000); + expect(options.timeout).toEqual(60000); }); diff --git a/packages/server/src/assertion/generateAssertionOptions.ts b/packages/server/src/assertion/generateAssertionOptions.ts index b30344d..035c2da 100644 --- a/packages/server/src/assertion/generateAssertionOptions.ts +++ b/packages/server/src/assertion/generateAssertionOptions.ts @@ -2,6 +2,13 @@ import type { PublicKeyCredentialRequestOptionsJSON, } from '@simplewebauthn/typescript-types'; +type Options = { + challenge: string, + allowedBase64CredentialIDs: string[], + suggestedTransports?: AuthenticatorTransport[], + timeout?: number, +}; + /** * Prepare a value to pass into navigator.credentials.get(...) for authenticator "login" * @@ -12,20 +19,22 @@ import type { * @param suggestedTransports Suggested types of authenticators for assertion */ export default function generateAssertionOptions( - challenge: string, - timeout = 60000, - allowedBase64CredentialIDs: string[], - suggestedTransports: AuthenticatorTransport[] = ['usb', 'ble', 'nfc', 'internal'], + opts: Options, ): PublicKeyCredentialRequestOptionsJSON { + const { + challenge, + allowedBase64CredentialIDs, + suggestedTransports = ['usb', 'ble', 'nfc', 'internal'], + timeout = 60000, + } = opts; + return { - publicKey: { - challenge, - allowCredentials: allowedBase64CredentialIDs.map(id => ({ - id, - type: 'public-key', - transports: suggestedTransports, - })), - timeout, - }, + challenge, + allowCredentials: allowedBase64CredentialIDs.map(id => ({ + id, + type: 'public-key', + transports: suggestedTransports, + })), + timeout, }; } |