UNPKG

@capgo/capacitor-native-biometric

Version:

This plugin gives access to the native biometric apis for android and iOS

1,328 lines 39.3 kB
{ "api": { "name": "NativeBiometricPlugin", "slug": "nativebiometricplugin", "docs": "", "tags": [], "methods": [ { "name": "isAvailable", "signature": "(options?: IsAvailableOptions | undefined) => Promise<AvailableResult>", "parameters": [ { "name": "options", "docs": "", "type": "IsAvailableOptions | undefined" } ], "returns": "Promise<AvailableResult>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "1.0.0" } ], "docs": "Checks if biometric authentication hardware is available.", "complexTypes": [ "AvailableResult", "IsAvailableOptions" ], "slug": "isavailable" }, { "name": "addListener", "signature": "(eventName: 'biometryChange', listener: BiometryChangeListener) => Promise<PluginListenerHandle>", "parameters": [ { "name": "eventName", "docs": "- Must be 'biometryChange'", "type": "'biometryChange'" }, { "name": "listener", "docs": "- Callback function that receives the updated AvailableResult", "type": "BiometryChangeListener" } ], "returns": "Promise<PluginListenerHandle>", "tags": [ { "name": "param", "text": "eventName - Must be 'biometryChange'" }, { "name": "param", "text": "listener - Callback function that receives the updated AvailableResult" }, { "name": "returns", "text": "Handle to remove the listener" }, { "name": "since", "text": "7.6.0" }, { "name": "example", "text": "```typescript\nconst handle = await NativeBiometric.addListener('biometryChange', (result) => {\n console.log('Biometry availability changed:', result.isAvailable);\n});\n\n// To remove the listener:\nawait handle.remove();\n```" } ], "docs": "Adds a listener that is called when the app resumes from background.\nThis is useful to detect if biometry availability has changed while\nthe app was in the background (e.g., user enrolled/unenrolled biometrics).", "complexTypes": [ "PluginListenerHandle", "BiometryChangeListener" ], "slug": "addlistenerbiometrychange-" }, { "name": "verifyIdentity", "signature": "(options?: BiometricOptions | undefined) => Promise<void>", "parameters": [ { "name": "options", "docs": "", "type": "BiometricOptions | undefined" } ], "returns": "Promise<void>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "1.0.0" } ], "docs": "Prompts the user to authenticate with biometrics.", "complexTypes": [ "BiometricOptions" ], "slug": "verifyidentity" }, { "name": "getCredentials", "signature": "(options: GetCredentialOptions) => Promise<Credentials>", "parameters": [ { "name": "options", "docs": "", "type": "GetCredentialOptions" } ], "returns": "Promise<Credentials>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "1.0.0" } ], "docs": "Gets the stored credentials for a given server.", "complexTypes": [ "Credentials", "GetCredentialOptions" ], "slug": "getcredentials" }, { "name": "setCredentials", "signature": "(options: SetCredentialOptions) => Promise<void>", "parameters": [ { "name": "options", "docs": "", "type": "SetCredentialOptions" } ], "returns": "Promise<void>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "1.0.0" } ], "docs": "Stores the given credentials for a given server.", "complexTypes": [ "SetCredentialOptions" ], "slug": "setcredentials" }, { "name": "deleteCredentials", "signature": "(options: DeleteCredentialOptions) => Promise<void>", "parameters": [ { "name": "options", "docs": "", "type": "DeleteCredentialOptions" } ], "returns": "Promise<void>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "1.0.0" } ], "docs": "Deletes the stored credentials for a given server.", "complexTypes": [ "DeleteCredentialOptions" ], "slug": "deletecredentials" }, { "name": "getSecureCredentials", "signature": "(options: GetSecureCredentialsOptions) => Promise<Credentials>", "parameters": [ { "name": "options", "docs": "", "type": "GetSecureCredentialsOptions" } ], "returns": "Promise<Credentials>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "8.4.0" } ], "docs": "Gets the stored credentials for a given server, requiring biometric authentication.\nCredentials must have been stored with accessControl set to BIOMETRY_CURRENT_SET or BIOMETRY_ANY.\n\nOn iOS, the system automatically shows the biometric prompt when accessing the protected Keychain item.\nOn Android, BiometricPrompt is shown with a CryptoObject bound to the credential decryption key.", "complexTypes": [ "Credentials", "GetSecureCredentialsOptions" ], "slug": "getsecurecredentials" }, { "name": "isCredentialsSaved", "signature": "(options: IsCredentialsSavedOptions) => Promise<IsCredentialsSavedResult>", "parameters": [ { "name": "options", "docs": "", "type": "IsCredentialsSavedOptions" } ], "returns": "Promise<IsCredentialsSavedResult>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "7.3.0" } ], "docs": "Checks if credentials are already saved for a given server.", "complexTypes": [ "IsCredentialsSavedResult", "IsCredentialsSavedOptions" ], "slug": "iscredentialssaved" }, { "name": "setData", "signature": "(options: SetDataOptions) => Promise<void>", "parameters": [ { "name": "options", "docs": "", "type": "SetDataOptions" } ], "returns": "Promise<void>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "8.6.0" } ], "docs": "Stores an arbitrary string value under the given key.\nValues are encrypted at rest using the platform secure storage backend\n(Android Keystore + SharedPreferences, iOS Keychain).\n\nFor biometric-protected storage, set `accessControl` and retrieve the value\nwith `getSecureData()`. Credential helpers remain available for username/password flows.", "complexTypes": [ "SetDataOptions" ], "slug": "setdata" }, { "name": "getData", "signature": "(options: GetDataOptions) => Promise<StoredData>", "parameters": [ { "name": "options", "docs": "", "type": "GetDataOptions" } ], "returns": "Promise<StoredData>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "8.6.0" } ], "docs": "Gets a previously stored value for the given key.\nOnly returns values stored without biometric `accessControl`.", "complexTypes": [ "StoredData", "GetDataOptions" ], "slug": "getdata" }, { "name": "getSecureData", "signature": "(options: GetSecureDataOptions) => Promise<StoredData>", "parameters": [ { "name": "options", "docs": "", "type": "GetSecureDataOptions" } ], "returns": "Promise<StoredData>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "8.6.0" } ], "docs": "Gets a biometric-protected value for the given key.\nThe value must have been stored with `accessControl` set to BIOMETRY_CURRENT_SET or BIOMETRY_ANY.", "complexTypes": [ "StoredData", "GetSecureDataOptions" ], "slug": "getsecuredata" }, { "name": "deleteData", "signature": "(options: DeleteDataOptions) => Promise<void>", "parameters": [ { "name": "options", "docs": "", "type": "DeleteDataOptions" } ], "returns": "Promise<void>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "8.6.0" } ], "docs": "Deletes the stored value for the given key (protected and unprotected).", "complexTypes": [ "DeleteDataOptions" ], "slug": "deletedata" }, { "name": "isDataSaved", "signature": "(options: IsDataSavedOptions) => Promise<IsDataSavedResult>", "parameters": [ { "name": "options", "docs": "", "type": "IsDataSavedOptions" } ], "returns": "Promise<IsDataSavedResult>", "tags": [ { "name": "param", "text": "options" }, { "name": "returns" }, { "name": "memberof", "text": "NativeBiometricPlugin" }, { "name": "since", "text": "8.6.0" } ], "docs": "Checks whether a value is already saved for the given key.", "complexTypes": [ "IsDataSavedResult", "IsDataSavedOptions" ], "slug": "isdatasaved" }, { "name": "getPluginVersion", "signature": "() => Promise<{ version: string; }>", "parameters": [], "returns": "Promise<{ version: string; }>", "tags": [ { "name": "returns", "text": "Promise that resolves with the plugin version" }, { "name": "since", "text": "1.0.0" } ], "docs": "Get the native Capacitor plugin version.", "complexTypes": [], "slug": "getpluginversion" } ], "properties": [] }, "interfaces": [ { "name": "AvailableResult", "slug": "availableresult", "docs": "Result from isAvailable() method indicating biometric authentication availability.", "tags": [], "methods": [], "properties": [ { "name": "isAvailable", "tags": [], "docs": "Whether authentication is available.\n\nOn Android, weak-only biometrics (such as some face unlock implementations)\nare available for `verifyIdentity()` when no `allowedBiometryTypes` filter\nexcludes them. If `useFallback` is true, PIN/pattern/password can also make\nthis value true.", "complexTypes": [], "type": "boolean" }, { "name": "authenticationStrength", "tags": [], "docs": "The strength of available authentication method (STRONG, WEAK, or NONE)", "complexTypes": [ "AuthenticationStrength" ], "type": "AuthenticationStrength" }, { "name": "biometryType", "tags": [], "docs": "The primary biometry type available on the device.\nOn Android devices with multiple biometry types, this returns MULTIPLE.\nUse this for display purposes only - always use isAvailable for logic decisions.", "complexTypes": [ "BiometryType" ], "type": "BiometryType" }, { "name": "deviceIsSecure", "tags": [], "docs": "Whether the device has a secure lock screen (PIN, pattern, or password).\nThis is independent of biometric enrollment.", "complexTypes": [], "type": "boolean" }, { "name": "strongBiometryIsAvailable", "tags": [], "docs": "Whether strong biometry (Face ID, Touch ID, or fingerprint on devices that consider it strong)\nis specifically available, separate from weak biometry or device credentials.", "complexTypes": [], "type": "boolean" }, { "name": "errorCode", "tags": [ { "text": "BiometricAuthError", "name": "see" } ], "docs": "Error code from BiometricAuthError enum. Only present when isAvailable is false.\nIndicates why biometric authentication is not available.", "complexTypes": [ "BiometricAuthError" ], "type": "BiometricAuthError" } ] }, { "name": "IsAvailableOptions", "slug": "isavailableoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "useFallback", "tags": [], "docs": "Whether passcode or device credentials should count toward biometric availability\nwhen no biometric is enrolled or available.\n\n- On iOS, this affects both `isAvailable()` and `verifyIdentity()`.\n- On Android, this is honored by `isAvailable()` only — the native check computes\n `fallbackAvailable = useFallback && deviceIsSecure` and reports availability\n accordingly. The `verifyIdentity()` flow ignores this option on Android due to\n BiometricPrompt API constraints (DEVICE_CREDENTIAL authenticator and negative\n button are mutually exclusive); use `BiometricOptions.useFallback` (iOS-only) to\n control the auth-dialog fallback there.", "complexTypes": [], "type": "boolean" } ] }, { "name": "PluginListenerHandle", "slug": "pluginlistenerhandle", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "remove", "tags": [], "docs": "", "complexTypes": [], "type": "() => Promise<void>" } ] }, { "name": "BiometricOptions", "slug": "biometricoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "reason", "tags": [], "docs": "", "complexTypes": [], "type": "string | undefined" }, { "name": "title", "tags": [], "docs": "", "complexTypes": [], "type": "string | undefined" }, { "name": "subtitle", "tags": [], "docs": "", "complexTypes": [], "type": "string | undefined" }, { "name": "description", "tags": [], "docs": "", "complexTypes": [], "type": "string | undefined" }, { "name": "negativeButtonText", "tags": [], "docs": "", "complexTypes": [], "type": "string | undefined" }, { "name": "useFallback", "tags": [], "docs": "Only for iOS.\nSpecifies if should fallback to passcode authentication if biometric authentication fails.\nOn Android, this parameter is ignored due to BiometricPrompt API constraints:\nDEVICE_CREDENTIAL authenticator and negative button (cancel) are mutually exclusive.", "complexTypes": [], "type": "boolean | undefined" }, { "name": "fallbackTitle", "tags": [], "docs": "Only for iOS.\nSet the text for the fallback button in the authentication dialog.\nIf this property is not specified, the default text is set by the system.", "complexTypes": [], "type": "string | undefined" }, { "name": "maxAttempts", "tags": [ { "text": "1", "name": "default" } ], "docs": "Only for Android.\nSet a maximum number of attempts for biometric authentication. The maximum allowed by android is 5.", "complexTypes": [], "type": "number | undefined" }, { "name": "allowedBiometryTypes", "tags": [ { "text": "[BiometryType.FINGERPRINT, BiometryType.FACE_AUTHENTICATION]", "name": "example" } ], "docs": "Only for Android.\nSpecify which biometry types are allowed for authentication.\nIf not specified, all enrolled biometric classes (strong and weak) are allowed.\nOn Android, face unlock is often classified as weak biometrics — include\n`BiometryType.FACE_AUTHENTICATION` or omit this option to allow it.\nUse `BiometryType.DEVICE_CREDENTIAL` for PIN/pattern/password (disables the cancel button).", "complexTypes": [ "BiometryType" ], "type": "BiometryType[] | undefined" } ] }, { "name": "Credentials", "slug": "credentials", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "username", "tags": [], "docs": "", "complexTypes": [], "type": "string" }, { "name": "password", "tags": [], "docs": "", "complexTypes": [], "type": "string" } ] }, { "name": "GetCredentialOptions", "slug": "getcredentialoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "server", "tags": [], "docs": "", "complexTypes": [], "type": "string" } ] }, { "name": "SetCredentialOptions", "slug": "setcredentialoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "username", "tags": [], "docs": "", "complexTypes": [], "type": "string" }, { "name": "password", "tags": [], "docs": "", "complexTypes": [], "type": "string" }, { "name": "server", "tags": [], "docs": "", "complexTypes": [], "type": "string" }, { "name": "accessControl", "tags": [ { "text": "AccessControl.NONE", "name": "default" }, { "text": "8.4.0", "name": "since" } ], "docs": "Access control level for the stored credentials.\nWhen set to BIOMETRY_CURRENT_SET or BIOMETRY_ANY, the credentials are\nhardware-protected and require biometric authentication to access.\n\nOn iOS, this adds SecAccessControl to the Keychain item.\nOn Android, this creates a biometric-protected Keystore key and requires\nBiometricPrompt authentication for both storing and retrieving credentials.", "complexTypes": [ "AccessControl" ], "type": "AccessControl" }, { "name": "authValidityDuration", "tags": [ { "text": "0", "name": "default" }, { "text": "8.5.0", "name": "since" } ], "docs": "Only for Android. Ignored on iOS and web.\nOnly meaningful together with `accessControl` set to BIOMETRY_CURRENT_SET or BIOMETRY_ANY.\n\nNumber of seconds a successful biometric authentication remains valid for\nKeystore key use. When `0` or omitted (the default), the Keystore key requires\na fresh authentication for every operation — each `getSecureCredentials()` call\nshows a `BiometricPrompt` cryptographically bound to that specific read via a\n`CryptoObject`. This is the strongest mode: it guarantees no code path can use\nthe key without a live biometric check.\n\nWhen set to a value greater than `0`, one successful biometric authentication\nauthorizes Keystore key use for that many seconds. Subsequent\n`getSecureCredentials()` calls within the window succeed without showing a\nprompt. This trades security for convenience: any in-app code that can reach\nthe decryption call — not just the code path that triggered the prompt — can\nsilently read the credentials for the remainder of the window.", "complexTypes": [], "type": "number | undefined" }, { "name": "title", "tags": [ { "text": "\"Protect Credentials\"", "name": "default" }, { "text": "8.4.14", "name": "since" } ], "docs": "Title for the biometric prompt shown while protecting credentials.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" }, { "name": "negativeButtonText", "tags": [ { "text": "\"Cancel\"", "name": "default" }, { "text": "8.4.14", "name": "since" } ], "docs": "Text for the negative/cancel button in the biometric prompt.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" } ] }, { "name": "DeleteCredentialOptions", "slug": "deletecredentialoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "server", "tags": [], "docs": "", "complexTypes": [], "type": "string" } ] }, { "name": "GetSecureCredentialsOptions", "slug": "getsecurecredentialsoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "server", "tags": [], "docs": "", "complexTypes": [], "type": "string" }, { "name": "reason", "tags": [], "docs": "Reason for requesting biometric authentication.\nDisplayed in the biometric prompt on both iOS and Android.", "complexTypes": [], "type": "string | undefined" }, { "name": "title", "tags": [], "docs": "Title for the biometric prompt.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" }, { "name": "subtitle", "tags": [], "docs": "Subtitle for the biometric prompt.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" }, { "name": "description", "tags": [], "docs": "Description for the biometric prompt.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" }, { "name": "negativeButtonText", "tags": [], "docs": "Text for the negative/cancel button.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" } ] }, { "name": "IsCredentialsSavedResult", "slug": "iscredentialssavedresult", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "isSaved", "tags": [], "docs": "", "complexTypes": [], "type": "boolean" } ] }, { "name": "IsCredentialsSavedOptions", "slug": "iscredentialssavedoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "server", "tags": [], "docs": "", "complexTypes": [], "type": "string" } ] }, { "name": "SetDataOptions", "slug": "setdataoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "key", "tags": [], "docs": "Unique identifier for the stored value.\nUse a stable app-specific namespace (e.g. `pin`, `session.token`).", "complexTypes": [], "type": "string" }, { "name": "value", "tags": [], "docs": "Arbitrary string payload. Serialize objects with `JSON.stringify()` before storing.\n\nPlatform limits apply: Android Keystore-backed encryption works best with payloads\nunder ~8 KB; iOS Keychain practical limits are higher but very large values are discouraged.", "complexTypes": [], "type": "string" }, { "name": "accessControl", "tags": [ { "text": "AccessControl.NONE", "name": "default" }, { "text": "8.6.0", "name": "since" } ], "docs": "Access control level for the stored value.\nWhen set to BIOMETRY_CURRENT_SET or BIOMETRY_ANY, the value is hardware-protected\nand requires biometric authentication to access via `getSecureData()`.", "complexTypes": [ "AccessControl" ], "type": "AccessControl" }, { "name": "authValidityDuration", "tags": [ { "text": "0", "name": "default" }, { "text": "8.6.0", "name": "since" } ], "docs": "Only for Android. Ignored on iOS and web.\nOnly meaningful together with `accessControl` set to BIOMETRY_CURRENT_SET or BIOMETRY_ANY.", "complexTypes": [], "type": "number | undefined" }, { "name": "title", "tags": [ { "text": "\"Protect Data\"", "name": "default" }, { "text": "8.6.0", "name": "since" } ], "docs": "Title for the biometric prompt shown while protecting data.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" }, { "name": "negativeButtonText", "tags": [ { "text": "\"Cancel\"", "name": "default" }, { "text": "8.6.0", "name": "since" } ], "docs": "Text for the negative/cancel button in the biometric prompt.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" } ] }, { "name": "StoredData", "slug": "storeddata", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "value", "tags": [], "docs": "", "complexTypes": [], "type": "string" } ] }, { "name": "GetDataOptions", "slug": "getdataoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "key", "tags": [], "docs": "", "complexTypes": [], "type": "string" } ] }, { "name": "GetSecureDataOptions", "slug": "getsecuredataoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "key", "tags": [], "docs": "", "complexTypes": [], "type": "string" }, { "name": "reason", "tags": [], "docs": "Reason for requesting biometric authentication.\nDisplayed in the biometric prompt on both iOS and Android.", "complexTypes": [], "type": "string | undefined" }, { "name": "title", "tags": [], "docs": "Title for the biometric prompt.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" }, { "name": "subtitle", "tags": [], "docs": "Subtitle for the biometric prompt.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" }, { "name": "description", "tags": [], "docs": "Description for the biometric prompt.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" }, { "name": "negativeButtonText", "tags": [], "docs": "Text for the negative/cancel button.\nOnly for Android.", "complexTypes": [], "type": "string | undefined" } ] }, { "name": "DeleteDataOptions", "slug": "deletedataoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "key", "tags": [], "docs": "", "complexTypes": [], "type": "string" } ] }, { "name": "IsDataSavedResult", "slug": "isdatasavedresult", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "isSaved", "tags": [], "docs": "", "complexTypes": [], "type": "boolean" } ] }, { "name": "IsDataSavedOptions", "slug": "isdatasavedoptions", "docs": "", "tags": [], "methods": [], "properties": [ { "name": "key", "tags": [], "docs": "", "complexTypes": [], "type": "string" } ] } ], "enums": [ { "name": "AuthenticationStrength", "slug": "authenticationstrength", "members": [ { "name": "NONE", "value": "0", "tags": [], "docs": "No authentication available, even if PIN is available but useFallback = false" }, { "name": "STRONG", "value": "1", "tags": [], "docs": "Strong authentication: Face ID on iOS, fingerprints on devices that consider fingerprints strong (Android).\nNote: PIN/pattern/password is NEVER considered STRONG, even when useFallback = true." }, { "name": "WEAK", "value": "2", "tags": [], "docs": "Weak authentication: Face authentication on Android devices that consider face weak,\nor PIN/pattern/password if useFallback = true (PIN is always WEAK, never STRONG)." } ] }, { "name": "BiometryType", "slug": "biometrytype", "members": [ { "name": "NONE", "value": "0", "tags": [], "docs": "" }, { "name": "TOUCH_ID", "value": "1", "tags": [], "docs": "" }, { "name": "FACE_ID", "value": "2", "tags": [], "docs": "" }, { "name": "FINGERPRINT", "value": "3", "tags": [], "docs": "" }, { "name": "FACE_AUTHENTICATION", "value": "4", "tags": [], "docs": "" }, { "name": "IRIS_AUTHENTICATION", "value": "5", "tags": [], "docs": "" }, { "name": "MULTIPLE", "value": "6", "tags": [], "docs": "" }, { "name": "DEVICE_CREDENTIAL", "value": "7", "tags": [], "docs": "" } ] }, { "name": "BiometricAuthError", "slug": "biometricautherror", "members": [ { "name": "UNKNOWN_ERROR", "value": "0", "tags": [], "docs": "Unknown error occurred" }, { "name": "BIOMETRICS_UNAVAILABLE", "value": "1", "tags": [], "docs": "Biometrics are unavailable (no hardware or hardware error)\nPlatform: Android, iOS" }, { "name": "USER_LOCKOUT", "value": "2", "tags": [], "docs": "User has been locked out due to too many failed attempts\nPlatform: Android, iOS" }, { "name": "BIOMETRICS_NOT_ENROLLED", "value": "3", "tags": [], "docs": "No biometrics are enrolled on the device\nPlatform: Android, iOS" }, { "name": "USER_TEMPORARY_LOCKOUT", "value": "4", "tags": [], "docs": "User is temporarily locked out (Android: 30 second lockout)\nPlatform: Android" }, { "name": "AUTHENTICATION_FAILED", "value": "10", "tags": [], "docs": "Authentication failed (user did not authenticate successfully)\nPlatform: Android, iOS" }, { "name": "APP_CANCEL", "value": "11", "tags": [], "docs": "App canceled the authentication (iOS only)\nPlatform: iOS" }, { "name": "INVALID_CONTEXT", "value": "12", "tags": [], "docs": "Invalid context (iOS only)\nPlatform: iOS" }, { "name": "NOT_INTERACTIVE", "value": "13", "tags": [], "docs": "Authentication was not interactive (iOS only)\nPlatform: iOS" }, { "name": "PASSCODE_NOT_SET", "value": "14", "tags": [], "docs": "Passcode/PIN is not set on the device\nPlatform: Android, iOS" }, { "name": "SYSTEM_CANCEL", "value": "15", "tags": [], "docs": "System canceled the authentication (e.g., due to screen lock)\nPlatform: Android, iOS" }, { "name": "USER_CANCEL", "value": "16", "tags": [], "docs": "User canceled the authentication\nPlatform: Android, iOS" }, { "name": "USER_FALLBACK", "value": "17", "tags": [], "docs": "User chose to use fallback authentication method\nPlatform: Android, iOS" } ] }, { "name": "AccessControl", "slug": "accesscontrol", "members": [ { "name": "NONE", "value": "0", "tags": [], "docs": "No biometric protection. Credentials are accessible without authentication.\nThis is the default behavior for backward compatibility." }, { "name": "BIOMETRY_CURRENT_SET", "value": "1", "tags": [], "docs": "Biometric authentication required for credential access.\nCredentials are invalidated if biometrics change (e.g., new fingerprint enrolled).\nMore secure but credentials are lost if user modifies their biometric enrollment." }, { "name": "BIOMETRY_ANY", "value": "2", "tags": [], "docs": "Biometric authentication required for credential access.\nCredentials survive new biometric enrollment (e.g., adding a new fingerprint).\nMore lenient — recommended for most apps." } ] } ], "typeAliases": [ { "name": "BiometryChangeListener", "slug": "biometrychangelistener", "docs": "Callback type for biometry change listener", "types": [ { "text": "(result: AvailableResult): void", "complexTypes": [ "AvailableResult" ] } ] } ], "pluginConfigs": [] }