diff --git a/package.json b/package.json index c975bef..0701dae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@btsd/aitu-bridge", - "version": "0.3.55", + "version": "0.3.56", "description": "", "source": "src/index.ts", "main": "dist/index.js", diff --git a/src/index.ts b/src/index.ts index 5c9d1bd..f35636f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -114,9 +114,27 @@ export interface UserStepInfoResponse { steps: UserStepsPerDay[]; } -export class PermissionDeniedError extends Error { +export class BiometryFailedError extends Error { constructor() { - super("No permission"); + super("Biometry failed"); + } +} + +export class BiometryCanceledError extends Error { + constructor() { + super("Biometry cancelled"); + } +} + +export class BiometryUnavailableError extends Error { + constructor() { + super("Biometry is unavailable"); + } +} + +export class BiometryOtherError extends Error { + constructor() { + super("Biometry error"); } } @@ -173,6 +191,9 @@ export interface AituBridge { setCustomBackArrowVisible: (visible: boolean) => Promise; openPayment: (transactionId: string) => Promise; setCustomBackArrowOnClickHandler: (handler: BackArrowClickHandlerType) => void; + /** + * @deprecated, use checkUserBiometry method + */ checkBiometry: () => Promise; openExternalUrl: (url: string) => Promise; enableSwipeBack: () => Promise; @@ -180,6 +201,9 @@ export interface AituBridge { setNavigationItemMode: (mode: NavigationItemMode) => Promise; getNavigationItemMode: () => Promise; getUserStepInfo: () => Promise; + + isBiometryAvailable: () => Promise; + checkUserBiometry: () => Promise; } const invokeMethod = 'invoke'; @@ -213,7 +237,9 @@ const enableSwipeBackMethod = 'enableSwipeBack'; const disableSwipeBackMethod = 'disableSwipeBack'; const setNavigationItemModeMethod = 'setNavigationItemMode'; const getNavigationItemModeMethod = 'getNavigationItemMode'; -const getUserStepInfoMethod = 'getUserStepInfo' +const getUserStepInfoMethod = 'getUserStepInfo'; +const isBiometryAvailableMethod = 'isBiometryAvailable'; +const checkUserBiometryMethod = 'checkUserBiometry'; const android = typeof window !== 'undefined' && (window as any).AndroidBridge; const ios = typeof window !== 'undefined' && (window as any).webkit && (window as any).webkit.messageHandlers; @@ -757,6 +783,36 @@ const buildBridge = (): AituBridge => { } } + const isBiometryAvailable = (reqId) => { + const isAndroid = android && android[isBiometryAvailableMethod]; + const isIos = ios && ios[isBiometryAvailableMethod]; + + if (isAndroid) { + android[isBiometryAvailableMethod](reqId); + } else if (isIos) { + ios[isBiometryAvailableMethod].postMessage({ reqId }); + } else if (web) { + web.execute(isBiometryAvailableMethod, reqId); + } else if (typeof window !== 'undefined') { + console.log('--isBiometryAvailable-isUnknown'); + } + } + + const checkUserBiometry = (reqId) => { + const isAndroid = android && android[checkUserBiometryMethod]; + const isIos = ios && ios[checkUserBiometryMethod]; + + if (isAndroid) { + android[checkUserBiometryMethod](reqId); + } else if (isIos) { + ios[checkUserBiometryMethod].postMessage({ reqId }); + } else if (web) { + web.execute(checkUserBiometryMethod, reqId); + } else if (typeof window !== 'undefined') { + console.log('--checkUserBiometry-isUnknown'); + } + } + const invokePromise = promisifyInvoke(invoke, sub); const storagePromise = promisifyStorage(storage, sub); @@ -786,6 +842,8 @@ const buildBridge = (): AituBridge => { const setNavigationItemModePromise = promisifyMethod(setNavigationItemMode, setNavigationItemModeMethod, sub); const getNavigationItemModePromise = promisifyMethod(getNavigationItemMode, getNavigationItemModeMethod, sub); const getUserStepInfoPromise = promisifyMethod(getUserStepInfo, getUserStepInfoMethod, sub); + const isBiometryAvailablePromise = promisifyMethod(isBiometryAvailable, isBiometryAvailableMethod, sub); + const checkUserBiometryPromise = promisifyMethod(checkUserBiometry, checkUserBiometryMethod, sub); return { version: String(LIB_VERSION), @@ -835,6 +893,8 @@ const buildBridge = (): AituBridge => { setNavigationItemMode: setNavigationItemModePromise, getNavigationItemMode: getNavigationItemModePromise, getUserStepInfo: getUserStepInfoPromise, + isBiometryAvailable: isBiometryAvailablePromise, + checkUserBiometry: checkUserBiometryPromise, }; } diff --git a/src/version.ts b/src/version.ts index 8d73296..146e531 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const LIB_VERSION = "0.3.55"; +export const LIB_VERSION = "0.3.56";