react-native-jolocom

React Native environment for Jolocom SDK


Keywords
react-native, jolocom, jolocom sdk
License
Apache-2.0
Install
npm install react-native-jolocom@2.8.0

Documentation

react-native-jolocom

Jolocom SDK integration with React Native.

Getting started

Install

You need to install two packages, the @jolocom/native-core-react-native package contains the actual binding code and is generated from https://github.com/jolocom/rust-multi-target/tree/master/react-native

$ yarn add react-native-jolocom @jolocom/native-core-react-native

OR

$ npm install --save react-native-jolocom @jolocom/native-core-react-native

Mostly automatic installation

For React Native version >= 0.60, Android is automatic, but for iOS you need to do:

$ cd ios
$ pod install

For React Native version < 0.60 you need to link

$ react-native link react-native-jolocom @jolocom/native-core-react-native

Configure Metro

Some of the dependency require libraries from node and must be polyfilled. You will need to add this resolver.extraNodeModules config to your metro.config.js

/**
 * Metro configuration for React Native, to polyfill some required libraries
 */

module.exports = {
  resolver: {
    extraNodeModules: {
      // React Native bindings for jolocom/wallet-rs
      crypto: require.resolve("react-native-crypto"),
      // Polyfills for node packages
      "crypto-browserify": require.resolve("react-native-crypto"),
      stream: require.resolve("stream-browserify"),
      vm: require.resolve("vm-browserify"),
    },
  },
};

And of course you need to add those as dependency in your project:

$ yarn add react-native-crypto stream-browserify vm-browserify

Configure SDK storage

The SDK requires a storage backend, and there is currently only JolocomTypeormStorage implemented. An example typeorm configuration ormconfig.ts is provided below

// ormconfig.ts

import { entityList } from "@jolocom/sdk-storage-typeorm";
import { ConnectionOptions } from "typeorm";

// TODO Add migrations when you create any!
const migrations: any[] = [];

export default {
  type: "react-native",
  database: "MyApplicationData",
  location: "default",
  logging: ["error", "warn", "schema"],
  entities: entityList,
  migrations,
  migrationsRun: true,
  synchronize: false,
  cli: {
    migrationsDir: "src/migrations",
  },
} as ConnectionOptions;

Usage

Create an initializer function as follows and call it at an appropriate point during app initialisation. Note that it needs to be asynchronous due to typeorm setting up a database connection.

import {
  JolocomSDK,
  JolocomTypeormStorage,
  JolocomKeychainPasswordStore,
} from "react-native-jolocom";

import { createConnection } from "typeorm";
import ormconfig from "./ormconfig.ts";

async function initJolocom() {
  const conn = await createConnection(ormconfig);
  const storage = new JolocomTypeormStorage(conn);
  const passwordStore = new JolocomKeychainPasswordStore();
  return new JolocomSDK({ storage, passwordStore });
}

The SDK instance can be used as usual. Refer to https://github.com/jolocom/jolocom-sdk