summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src/assertion/generateAssertionCredentials.ts
blob: 71f9e446672ba48dd07d67498670ce28dd23e073 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import base64url from 'base64url';

import { AssertionCredentials } from '@libTypes';

/**
 * Prepare credentials for user registration via navigator.credentials.get(...)
 *
 * @param challenge Random string the authenticator needs to sign and pass back
 * @param base64CredentialIDs Array of base64-encoded authenticator IDs registered by the user for
 * assertion
 * @param timeout How long (in ms) the user can take to complete attestation
 */
export default function generateAssertionCredentials(
  challenge: string,
  base64CredentialIDs: string[],
  timeout: number = 60000,
): AssertionCredentials {
  return {
    publicKey: {
      challenge: Uint8Array.from(challenge, c => c.charCodeAt(0)),
      allowCredentials: base64CredentialIDs.map(id => ({
        id: base64url.toBuffer(id),
        type: 'public-key',
        transports: ['usb', 'ble', 'nfc'],
      })),
      timeout,
    },
  };
}