Skip to content

Commit

Permalink
refactored js portion of library into typescript
Browse files Browse the repository at this point in the history
  • Loading branch information
NappyPirate committed Nov 20, 2019
1 parent 570dedf commit 77bcc0f
Show file tree
Hide file tree
Showing 8 changed files with 166 additions and 161 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
node_modules/
npm-debug.log
yarn-error.log
lib/
build/

# Xcode
#
Expand Down
67 changes: 0 additions & 67 deletions index.d.ts

This file was deleted.

89 changes: 0 additions & 89 deletions index.js

This file was deleted.

129 changes: 129 additions & 0 deletions index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
import { NativeModules } from 'react-native';

const { ReactNativeBiometrics: bridge } = NativeModules;

interface IsSensorAvailableResult {
available: boolean
biometryType?: string
error?: string
}

interface CreateKeysResult {
publicKey: string
}

interface BiometricKeysExistResult {
keysExist: boolean
}

interface DeleteKeysResult {
keysDeleted: boolean
}

interface CreateSignatureOptions {
promptMessage: string
payload: string
cancelButtonText?: string
}

interface CreateSignatureResult {
success: boolean
signature?: string
error?: string
}

interface SimplePromptOptions {
promptMessage: string
cancelButtonText?: string
}

interface SimplePromptResult {
success: boolean
error?: string
}

module ReactNativeBiometrics {
/**
* Enum for touch id sensor type
*/
export const TouchID = 'TouchID';
/**
* Enum for face id sensor type
*/
export const FaceID = 'FaceID';
/**
* Enum for generic biometrics (this is the only value available on android)
*/
export const Biometrics = 'Biometrics';

/**
* Returns promise that resolves to an object with object.biometryType = Biometrics | TouchID | FaceID
* @returns {Promise<Object>} Promise that resolves to an object with details about biometrics available
*/
export function isSensorAvailable(): Promise<IsSensorAvailableResult> {
return bridge.isSensorAvailable();
}
/**
* Creates a public private key pair,returns promise that resolves to
* an object with object.publicKey, which is the public key of the newly generated key pair
* @returns {Promise<Object>} Promise that resolves to object with details about the newly generated public key
*/
export function createKeys(): Promise<CreateKeysResult> {
return bridge.createKeys();
}

/**
* Returns promise that resolves to an object with object.keysExists = true | false
* indicating if the keys were found to exist or not
* @returns {Promise<Object>} Promise that resolves to object with details aobut the existence of keys
*/
export function biometricKeysExist(): Promise<BiometricKeysExistResult> {
return bridge.biometricKeysExist();
}

/**
* Returns promise that resolves to an object with true | false
* indicating if the keys were properly deleted
* @returns {Promise<Object>} Promise that resolves to an object with details about the deletion
*/
export function deleteKeys(): Promise<DeleteKeysResult> {
return bridge.deleteKeys();
}

/**
* Prompts user with biometrics dialog using the passed in prompt message and
* returns promise that resolves to an object with object.signature,
* which is cryptographic signature of the payload
* @param {Object} createSignatureOptions
* @param {string} createSignatureOptions.promptMessage
* @param {string} createSignatureOptions.payload
* @param {string} createSignatureOptions.cancelButtonText (Android only)
* @returns {Promise<Object>} Promise that resolves to an object cryptographic signature details
*/
export function createSignature(createSignatureOptions: CreateSignatureOptions): Promise<CreateSignatureResult> {
if (!createSignatureOptions.cancelButtonText) {
createSignatureOptions.cancelButtonText = 'Cancel';
}

return bridge.createSignature(createSignatureOptions);
}

/**
* Prompts user with biometrics dialog using the passed in prompt message and
* returns promise that resolves to an object with object.success = true if the user passes,
* object.success = false if the user cancels, and rejects if anything fails
* @param {Object} simplePromptOptions
* @param {string} simplePromptOptions.promptMessage
* @param {string} simplePromptOptions.cancelButtonText (Android only)
* @returns {Promise<Object>} Promise that resolves an object with details about the biometrics result
*/
export function simplePrompt(simplePromptOptions: SimplePromptOptions): Promise<SimplePromptResult> {
if (!simplePromptOptions.cancelButtonText) {
simplePromptOptions.cancelButtonText = 'Cancel';
}

return bridge.simplePrompt(simplePromptOptions);
}
}

export default ReactNativeBiometrics;
1 change: 1 addition & 0 deletions modules.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
declare module 'react-native'
11 changes: 10 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 9 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@
"version": "2.0.0",
"summary": "A React Native library for biometrics",
"description": "React Native biometric functionality for signing and encryption",
"main": "index.js",
"types": "index.d.ts",
"main": "build/cjs/index.js",
"module": "build/esm/index.js",
"types": "build/esm/index.d.ts",
"scripts": {
"clean": "rm -rf lib && rm -rf node_modules && npm install",
"build": "npm run build:cjs && npm run build:esm",
"build:cjs": "tsc --target es5 --outDir build/cjs --module commonjs",
"build:esm": "tsc --target es5 --outDir build/esm --module esnext",
"release": "npm run clean && npm publish"
},
"keywords": [
Expand Down Expand Up @@ -38,5 +42,7 @@
"bugs": {
"url": "https://github.com/SelfLender/react-native-biometrics/issues"
},
"devDependencies": {}
"devDependencies": {
"typescript": "^3.7.2"
}
}
16 changes: 16 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"compilerOptions": {
"strict": true,
"noImplicitAny": true,
"target": "es5",
"declaration": true,
"sourceMap": true,
"moduleResolution": "node",
"outDir": "build",
"lib": ["es2015", "es2015.promise"]
},
"include": [
"index.ts",
"modules.d.ts"
]
}

0 comments on commit 77bcc0f

Please sign in to comment.