From 4df7adcb42dbf01d7c3b49db3471092ff7dae21d Mon Sep 17 00:00:00 2001 From: David Andre Evans Farinha Date: Mon, 7 May 2018 17:51:22 +0300 Subject: [PATCH] Creating type definitions for "react-native-keychain" (#25419) * Creating type definitions for "react-native-keychain" * Updating index.d.ts to include Promise on getGenericPassword() * Fixing all tslint and dts-lint errors and issues. * Removing duplicate "Definitions by" * Updating index.d.ts, improving tests. -Updating index.d.ts to include type definitions for canImplyAuthentication and getSupportedBiometryType. -Updating index.d.ts to fix type definitions for setInternetCredentials and resetGenericPassword. -Adding full type test coverage to all exposed methods on react-native-keychain. * Updating type definitions for setGenericPassword, getGenericPassword. -Updating index.d.ts to update type definitions for setGenericPassword, getGenericPassword. -Updating type definition tests to reflect new type definition updates. * Updating type definitions for setGenericPassword -Updating index.d.ts to include correct setGenericPassword parameter types. --- types/react-native-keychain/index.d.ts | 87 +++++++++++++++++++ .../react-native-keychain-tests.ts | 39 +++++++++ types/react-native-keychain/tsconfig.json | 23 +++++ types/react-native-keychain/tslint.json | 1 + 4 files changed, 150 insertions(+) create mode 100644 types/react-native-keychain/index.d.ts create mode 100644 types/react-native-keychain/react-native-keychain-tests.ts create mode 100644 types/react-native-keychain/tsconfig.json create mode 100644 types/react-native-keychain/tslint.json diff --git a/types/react-native-keychain/index.d.ts b/types/react-native-keychain/index.d.ts new file mode 100644 index 0000000000..e6fcde8bd6 --- /dev/null +++ b/types/react-native-keychain/index.d.ts @@ -0,0 +1,87 @@ +// Type definitions for react-native-keychain 3.0 +// Project: https://github.com/oblador/react-native-keychain +// Definitions by: David Evans Farinha +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.1 + +export interface UserCredentials { + username: string; + password: string; +} + +export interface SharedWebCredentials { + server: string; + username: string; + password: string; +} + +export interface Options { + accessControl?: SecAccessControl; + accessGroup?: string; + accessible?: SecAccessible; + authenticationPrompt?: string; + authenticationType?: LAPolicy; + service?: string; +} + +export type SecAccessible = + 'AccessibleWhenUnlocked' + | 'AccessibleAfterFirstUnlock' + | 'AccessibleAlways' + | 'AccessibleWhenPasscodeSetThisDeviceOnly' + | 'AccessibleWhenUnlockedThisDeviceOnly' + | 'AccessibleAfterFirstUnlockThisDeviceOnly' + | 'AccessibleAlwaysThisDeviceOnly'; + +export type SecAccessControl = + 'UserPresence' + | 'BiometryAny' + | 'BiometryCurrentSet' + | 'DevicePasscode' + | 'ApplicationPassword' + | 'BiometryAnyOrDevicePasscode' + | 'BiometryCurrentSetOrDevicePasscode'; + +export type LAPolicy = 'Authentication' | 'AuthenticationWithBiometrics'; + +export function canImplyAuthentication(options?: Options): Promise; + +export function getSupportedBiometryType(): Promise; + +export function setInternetCredentials( + server: string, + username: string, + password: string, + options?: Options +): Promise; + +export function getInternetCredentials( + server: string +): Promise; + +export function resetInternetCredentials( + server: string +): Promise; + +export function setGenericPassword( + username: string, + password: string, + serviceOrOptions?: string | Options +): Promise; + +export function getGenericPassword( + serviceOrOptions?: string | Options +): Promise; + +export function resetGenericPassword( + serviceOrOptions?: string | Options +): Promise; + +export function requestSharedWebCredentials( +): Promise; + +export function setSharedWebCredentials( + server: string, + username: string, + password: string +): Promise; diff --git a/types/react-native-keychain/react-native-keychain-tests.ts b/types/react-native-keychain/react-native-keychain-tests.ts new file mode 100644 index 0000000000..55f643e26f --- /dev/null +++ b/types/react-native-keychain/react-native-keychain-tests.ts @@ -0,0 +1,39 @@ +import * as Keychain from 'react-native-keychain'; + +async () => { + const username = 'username'; + const password = 'password'; + + const service: string | undefined = "test.service"; + const server = "test.server"; + + const serviceOrOptions: string | Keychain.Options | undefined = {}; + const options: Keychain.Options = {}; + + const keychainServicePassword: boolean | { + service: string; + username: string; + password: string; + } = await Keychain.getGenericPassword(service); + const keychainPassword: boolean | { + service: string; + username: string; + password: string; + } = await Keychain.getGenericPassword(); + + const keychainServerPassword: Keychain.UserCredentials = await Keychain.getInternetCredentials(server); + + const keychainSharedWebPassword: Keychain.SharedWebCredentials = await Keychain.requestSharedWebCredentials(); + + const keychainResetGenericPassword: boolean = await Keychain.resetGenericPassword(serviceOrOptions); + + const keychainSetGenericPassword: boolean = await Keychain.setGenericPassword(username, password, options); + + const keychainSetServerPassword: boolean = await Keychain.setInternetCredentials(server, username, password, serviceOrOptions); + + const keychainSetSharedWebPassword: boolean = await Keychain.setSharedWebCredentials(server, username, password); + + const canImplyAuthentication: boolean = await Keychain.canImplyAuthentication(serviceOrOptions); + + const supportedBiometryType: string | null = await Keychain.getSupportedBiometryType(); +}; diff --git a/types/react-native-keychain/tsconfig.json b/types/react-native-keychain/tsconfig.json new file mode 100644 index 0000000000..54fbdf074a --- /dev/null +++ b/types/react-native-keychain/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true, + "strictFunctionTypes": true + }, + "files": [ + "index.d.ts", + "react-native-keychain-tests.ts" + ] +} diff --git a/types/react-native-keychain/tslint.json b/types/react-native-keychain/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/react-native-keychain/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }