@icure/icure-react-native-crypto
v1.0.11
Published
React-Native cryptography package for iCure
Downloads
27
Readme
icure-react-native-crypto
React Native Cryptography package for iCure.
Table of Contents
Installation
Cryptography libraries
npm install @icure/icure-react-native-crypto @craftzdog/react-native-buffer @icure/icure-react-native-crypto @icure/react-native-aes-crypto @icure/react-native-rsa-native @react-native-async-storage/async-storage react-native-get-random-values react-native-quick-base64
yarn add @icure/icure-react-native-crypto @craftzdog/react-native-buffer @icure/icure-react-native-crypto @icure/react-native-aes-crypto @icure/react-native-rsa-native @react-native-async-storage/async-storage react-native-get-random-values react-native-quick-base64
iCure libraries
You may want to install the following libraries to use iCure depending of your needs. If you already have the MedTech libraries installed, it is not mandatory to add the iCure SDK your project.
iCure Medical Typescript SDK
npm install @icure/medical-device-sdk
yarn add @icure/medical-device-sdk
iCure Typescript SDK
npm install @icure/api
yarn add @icure/api
Usage
iCure Medical Typescript SDK
To use the iCure MedTech SDK, you need to import the @icure/medical-device-sdk
package (v1.0.3 or above).
import crypto from '@icure/icure-react-native-crypto';
import { AnonymousMedTechApiBuilder } from '@icure/medical-device-sdk';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { StorageFacade } from "@icure/medical-device-sdk";
Buffer = require('@craftzdog/react-native-buffer').Buffer;
// ...
/*
* Since React-Native doesn't have its own implementation of LocalStorage,
* we have to provide a custom implementation to the iCure Medtech SDK through AnonymousMedTechApi or MedTechApi.
* We recommend you to use the @react-native-async-storage/async-storage package.
*/
export class AsyncStorageImpl implements StorageFacade<string> {
async getItem(key: string): Promise<string | undefined> {
return await AsyncStorage.getItem(key) ?? undefined;
}
async setItem(key: string, valueToStore: string): Promise<void> {
await AsyncStorage.setItem(key, valueToStore)
.then(() => console.log("Stored key: " + key)) // Logs added only as debug purpose. Do not log those in production
.catch((error) => console.log("Error storing key: " + key + " - " + error)); // Logs added only as debug purpose. Do not log those in production
}
async deleteItem(key: string): Promise<void> {
await AsyncStorage.removeItem(key)
.then(() => console.log("Deleted key: " + key)) // Logs added only as debug purpose. Do not log those in production
.catch((error) => console.log("Error deleting key: " + key + " - " + error)); // Logs added only as debug purpose. Do not log those in production
}
}
// ...
const anonymousMedTechApi = await new AnonymousMedTechApiBuilder()
.withICureBaseUrl(iCureUrl)
.withMsgGwUrl(msgGtwUrl)
.withMsgGwSpecId(msgGtwSpecId)
.withCrypto(crypto as Crypto) // import crypto from '@icure/icure-react-native-crypto';
.withAuthProcessByEmailId(authProcessId)
.withAuthProcessBySmsId(authProcessId)
.withStorage(new AsyncStorageImpl()) // Implementation of StorageFacade interface that we have created above
.preventCookieUsage()
.build();
iCure Typescript SDK
To use the iCure SDK, you need to import the @icure/api
package (v6.0.1 or above).
import crypto from '@icure/icure-react-native-crypto';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { StorageFacade } from "@icure/medical-device-sdk";
import { KeyStorageImpl } from '@icure/api';
import { Api } from '@icure/api'
Buffer = require('@craftzdog/react-native-buffer').Buffer;
// ...
/*
* Since React-Native don't have it's own implementation of LocalStorage, we have to provide a custom implementation to the iCure SDK through Api.
* We recommend you to use the @react-native-async-storage/async-storage package.
*/
export class AsyncStorageImpl implements StorageFacade<string> {
async getItem(key: string): Promise<string | undefined> {
return await AsyncStorage.getItem(key) ?? undefined;
}
async setItem(key: string, valueToStore: string): Promise<void> {
await AsyncStorage.setItem(key, valueToStore)
.then(() => console.log("Stored key: " + key)) // Logs added only as debug purpose. Do not log those in production
.catch((error) => console.log("Error storing key: " + key + " - " + error)); // Logs added only as debug purpose. Do not log those in production
}
async deleteItem(key: string): Promise<void> {
await AsyncStorage.removeItem(key)
.then(() => console.log("Deleted key: " + key)) // Logs added only as debug purpose. Do not log those in production
.catch((error) => console.log("Error deleting key: " + key + " - " + error)); // Logs added only as debug purpose. Do not log those in production
}
}
// ...
const storage = new AsyncStorageImpl(); // StorageFacade implementation that we have created above
const keyStorage = new KeyStorageImpl(storage) // KeyStorage implementation that @icure/api exposes
const apis = Api(
icureUrl,
username,
password,
crypto, // import of @icure/icure-react-native-crypto
fetch,
forceAuthorization,
autoLogin,
storage,
keyStorage
);
Contributing
See the contributing guide to learn how to contribute to the repository and the development workflow.
License
MIT