1.0.11 • Published 1 month ago

@icure/icure-react-native-crypto v1.0.11

Weekly downloads
-
License
MIT
Repository
github
Last release
1 month ago

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

1.0.9

1 month ago

1.0.11

1 month ago

1.0.10

1 month ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago