UNPKG

@nevis-security/nevis-mobile-authentication-sdk-react

Version:

React Native plugin for Nevis Mobile Authentication SDK. Supports only mobile.

148 lines 6.71 kB
/** * Copyright © 2023-2024 Nevis Security AG. All rights reserved. */ import { Account } from './../../localData/Account'; import { Authenticator } from './../../localData/Authenticator'; /** * The service returning the information required to choose the account to be used. * * It returns all the available accounts and authenticators and also informs * whether a given authenticator is compliant with the policy required by the * FIDO UAF server for the ongoing operation. * * @see {@link AccountSelector.selectAccount} */ export declare abstract class AccountSelectionContext { /** * The accounts that have been registered with the SDK. */ abstract accounts: Array<Account>; /** * The available authenticators. * * Note that this may also include authenticators that cannot be used to * complete the operation. * * All the available authenticators are returned so that the users of the SDK * can figure out not only whether an account authenticator can be used for * the operation, but also why. For example, a developer would like to give a * visual hint explaining why the Fingerprint authenticator for a given user * cannot be used during authentication if it is not registered: by using * {@link Authenticator.registration | Authenticator.registration} this situation can be identified. * * The following snippet can be used to identify whether the authenticator can * be used or not with a given account (identified by its username): * * _isValid( * authenticator: Authenticator, * username: string, * context: AccountSelectionContext, * ): boolean { * let registration: Registration = authenticator.registration; * // This method will filter the authenticators that are no supported * // by the hardware, those not registered, and those that are compliant * // with the server policy. * return registration.isRegistered(username) && * authenticator.isSupportedByHardware && * authenticator.isSupportedByOs && * context.isPolicyCompliant(authenticator.aaid); * } * * Returns all the available authenticators. * @see {@link Authenticator.registration}, {@link Authenticator.isSupportedByHardware}, * {@link Authenticator.isSupportedByOs}, {@link isPolicyCompliant} */ abstract authenticators: Array<Authenticator>; /** * Returns whether the specified account with the provided authenticator is * compliant with the policy of the server. * * If a username without an authenticator that is policy compliant is provided * through {@link AccountSelectionHandler.username}, a {@link FidoErrorCode} with * {@link FidoErrorCodeType.NoSuitableAuthenticator} will be returned as a result * of the operation. * * To know if a given account has at least one policy compliant authenticator, * the following code can be used: * * async hasPolicyCompliantAuthenticator(accountUsername: string): boolean { * authenticators.forEach((authenticator) { * if (await isPolicyCompliant(authenticator.aaid, accountUsername)) { * return true; * } * }); * return false; * } * * @param authenticatorAaid the AAID of the {@link Authenticator}. * @param username the username of the account. * * @returns true if the authenticator is compliant with the policy, and false * otherwise. */ abstract isPolicyCompliant(authenticatorAaid: string, username: string): Promise<boolean>; /** * The transaction confirmation data, if any, to be presented to the user for * verification. * * If this data is present, data must be presented to the user before authenticating. * * Basic implementation layout: * * void selectAuthenticator( * context: AuthenticatorSelectionContext, * handler: AuthenticatorSelectionHandler, * ) { * if (context.transactionConfirmationData != null) { * showTransactionMessage(context.transactionConfirmationData!, * (userConfirmed) => { * if (userConfirmed) { * selectAuthenticator(context, handler); * } * else { * // Cancel the operation if the transaction was rejected * handler.cancel(); * } * }); * } else { * // No transaction confirmation, * // just proceed to authenticator selection * selectAuthenticator(context, handler); * } * } * * void _showTransactionMessage(transactionConfirmationData: string, * Handler<boolean> confirmationHandler) { * // Display the transaction confirmation data and ask the user to * // confirm it. Then invoke confirmationHandler with the result of * // the confirmation: * // confirmationHandler.accept(confirmation); * } * * * Note that in the case of registration or authentication not involving * transaction confirmation, this is typically empty and thus, it does not * require handling. * * The contents are the base64 URL decoded contents of the Transaction as * described in the {@link https://fidoalliance.org/specs/fido-uaf-v1.1-ps-20170202/fido-uaf-protocol-v1.1-ps-20170202.html#idl-def-Transaction | FIDO UAF specification}. */ abstract transactionConfirmationData?: string; /** * Alternate constructor that creates {@link AccountSelectionContext} from a json. * * @param json contains the source for instance creation. * @returns the created {@link AccountSelectionContext} instance. */ static fromJson(json: any): AccountSelectionContext; } export declare class AccountSelectionContextImpl extends AccountSelectionContext { operationId: string; accounts: Array<Account>; authenticators: Array<Authenticator>; transactionConfirmationData?: string; constructor(operationId: string, accounts: Array<Account>, authenticators: Array<Authenticator>, transactionConfirmationData?: string); static fromJson(json: any): AccountSelectionContextImpl; isPolicyCompliant(aaid: string, username: string): Promise<boolean>; } //# sourceMappingURL=AccountSelectionContext.d.ts.map