open-index/open-npm huggingface dataset:
npm package: @hyperlane-xyz/sdk
Description: The official SDK for the Hyperlane Network
Latest version: 31.0.0

# Hyperlane SDK

The Hyperlane SDK helps developers create and manage interchain applications.

For more details on Hyperlane concepts, [see the documentation](https://docs.hyperlane.xyz)

## Install

```bash
# Install with NPM
npm install @hyperlane-xyz/sdk

# Or with pnpm
pnpm add @hyperlane-xyz/sdk
```

Note, this package uses [ESM Modules](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#pure-esm-package)

## Contents

The SDK includes various classes for building, deploying, and testing multi-chain applications. Different abstractions serve different use cases. A few common utilities include:

- `MultiProvider` / `MultiProtocolProvider`: A utility for managing chain metadata, and RPC providers.
- `HyperlaneApp` / `MultiProtocolApp`: A base to extend for a multi-chain app.
- `HyperlaneCore` / `MultiProtocolCore`: A class for common interactions with Hyperlane core deployments.
- `HyperlaneDeployer`: The base class for executing multi-chain contract deployments.
- `Token` & `WarpCore`: Utilities for interacting with Warp Route deployments.

## License

Apache 2.0
npm package: @hyperlane-xyz/starknet-core
Description: Core cairo contracts for Hyperlane
Latest version: 31.0.0

# Hyperlane Starknet Core

The Hyperlane Starknet Core package provides TypeScript tooling for interacting with Hyperlane's Cairo contracts on Starknet. It includes TypeScript artifacts autogenerated from Cairo contracts developed in collaboration with Astraly Labs.

## Features

- Pre-compiled Cairo contract ABI artifacts
- TypeScript bindings for Starknet contracts

## Installation

```bash
# Install with NPM
npm install @hyperlane-xyz/starknet-core

# Or with pnpm
pnpm add @hyperlane-xyz/starknet-core
```

## Requirements

- Node.js 18 or newer
- For development: `curl`, `jq`, and `unzip` utilities

## Usage

```typescript
import {
  ContractType,
  getCompiledContract,
} from '@hyperlane-xyz/starknet-core';

// Get the Hyperlane mailbox contract
const mailboxContract = getCompiledContract('mailbox');

// Get token contracts
const tokenContract = getCompiledContract('erc20', ContractType.TOKEN);

// Get mock contracts
const mockContract = getCompiledContract('mock_validator', ContractType.MOCK);
```

## Contract Categories

Contracts are organized into three categories:

- `contracts`: Core Hyperlane protocol contracts
- `tokens`: Token implementation contracts
- `mocks`: Test and mock contracts

## Development

### Setup

1. Clone the repository
2. Install dependencies: `pnpm install`

### Build Process

The build process combines multiple steps in a specific order:

```bash
pnpm build
```

This command runs:

1. TypeScript compilation (`tsc`)
2. Fetching contract artifacts from GitHub (`fetch-contracts`)
3. Generating TypeScript ABI artifacts from Cairo contracts (`generate-artifacts`)

All build output is placed in the `dist` directory.

### Individual Build Steps

You can also run the individual build steps separately:

#### Fetching Contract Artifacts

```bash
pnpm fetch-contracts
```

This downloads the contract artifacts from the [Hyperlane Starknet repository](https://github.com/hyperlane-xyz/hyperlane_starknet).

#### Generating TypeScript Artifacts

```bash
pnpm generate-artifacts
```

This creates JavaScript and TypeScript declaration files in the `dist/artifacts` directory.

## License

Apache 2.0
npm package: @hyperlane-xyz/tron-sdk
Description: Hyperlane TypeScript SDK for Tron
Latest version: 22.1.10

# Hyperlane TRON SDK

The Hyperlane TRON SDK is a fully typed TypeScript SDK for the [TRON Implementation](https://github.com/hyperlane-xyz/hyperlane-tron).
It can be used as a standalone SDK for frontend or in backend applications which want to connect to a TRON chain which has the Hyperlane blueprint installed.

## Install

```bash
# Install with NPM
npm install @hyperlane-xyz/tron-sdk

# Or with pnpm
pnpm add @hyperlane-xyz/tron-sdk
```

## Usage

```ts
import { TronProvider, TronSigner } from "@hyperlane-xyz/tron-sdk";

const signer = await TronSigner.connectWithSigner(
  ['http://localhost:3030'],
  PRIV_KEY,
  {
    metadata: {
      chainId: 1
    }
  }
);

const mailboxAddress = await signer.createMailbox({ domainId: 75898670 });

const mailbox = await signer.getMailbox({ mailboxAddress });
...

// performing queries without signer
const provider = await TronProvider.connect(
  ['http://localhost:3030'],
  1
);

const mailbox = await provider.getMailbox({ mailboxAddress });
```

## Setup

Node 18 or newer is required.
npm package: @hyperlane-xyz/utils
Description: General utilities and types for the Hyperlane network
Latest version: 31.0.0

# Hyperlane Utils

A collection of various utilities and types for building applications with Hyperlane.
Typically not used directly but through the [Hyperlane SDK](https://www.npmjs.com/package/@hyperlane-xyz/sdk) instead.

## Install

```bash
# Install with NPM
npm install @hyperlane-xyz/utils

# Or with pnpm
pnpm add @hyperlane-xyz/utils
```

Note, this package uses [ESM Modules](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c#pure-esm-package)

## License

Apache 2.0
npm package: @hyperlane-xyz/widgets
Description: Common react components for Hyperlane projects
Latest version: 31.0.0

# Hyperlane Widgets

Common react components for projects using Hyperlane.

## Installation

```sh
# Install with npm
npm install @hyperlane-xyz/widgets

# Or install with pnpm
pnpm add @hyperlane-xyz/widgets
```

### Peer dependencies

This package requires `@hyperlane-xyz/sdk`, `react`, and `react-dom`.

## Contents

### Components

- `ChainLogo`: A logo icon for a given chain ID
- `MessageTimeline`: A timeline showing stages of message delivery
- `WideChevron`: A customizable version of Hyperlane's chevron logo

### Hooks

- `useMessage`: Fetch data about a message from the Hyperlane Explorer
- `useMessageStage`: Fetch and compute message delivery stage and timings
- `useMessageTimeline`: Fetch message data for use with `MessageTimeline`

## Learn more

For more information, see the [Hyperlane documentation](https://docs.hyperlane.xyz/docs/intro).
npm package: @hyperledgendary/fabric-protos
Description: Hyperledger Fabric gRPC and Protocol Buffer Bindings
Author: Hyperledgendary Fabric Developers
Latest version: 0.1.0

# Hyperledger Fabric gRPC and Protocol Buffer Bindings for Node.js and TypeScript

This repository contains the Hyperledger Fabric gRPC service and protobuf bindings for Node.js and TypeScript.
npm package: @hyperledger/aries-askar-nodejs
Description: Nodejs wrapper for Aries Askar
Author: Hyperledger
Latest version: 0.2.3

# Aries Askar NodeJS

Wrapper for Nodejs around Aries Askar

## Requirements

This library requires (and has been tested extensively with) Node.js version `18.x`. Newer versions might also work, but they have not been tested.

## Installation

```sh
yarn add @hyperledger/aries-askar-nodejs
```

## Setup

You can import all types and classes from the `@hyperledger/aries-askar-nodejs` library:

```typescript
import { Key, KeyAlgs } from '@hyperledger/aries-askar-nodejs'

const seed = Uint8Array.from(Buffer.from('testseed000000000000000000000001'))
const key = Key.fromSeed({ algorithm: KeyAlgs.Bls12381G1, seed })
```

> **Note**: If you want to use this library in a cross-platform environment you need to import methods from the `@hyperledger/aries-askar-shared` package instead. This is a platform independent package that allows to register the native bindings. The `@hyperledger/aries-askar-nodejs` package uses this package under the hood. See the [Aries Askar Shared README](https://github.com/hyperledger/aries-askar/tree/main/wrappers/javascript/aries-askar-shared/README.md) for documentation on how to use this package.

## Version Compatibility

The JavaScript wrapper is versioned independently from the native bindings. The following table shows the compatibility between the different versions:

| Aries Askar | JavaScript Wrapper |
| ----------- | ------------------ |
| v0.2.9      | v0.1.0, v0.1.1     |
| v0.3.1      | v0.2.0             |
npm package: @hyperledger/aries-askar-react-native
Description: React Native wrapper for Aries Askar
Author: Hyperledger
Latest version: 0.2.3

# Aries Askar React Native

Wrapper for React Native around Aries Askar

## Requirements

This module uses the new React Native Turbo Modules. These are faster than the
previous Native Modules, and can be completely synchronous. A React Native
version of `>= 0.66.0` is required for this package to work.

## Installation

```sh
yarn add @hyperledger/aries-askar-react-native
```

## Setup

You can import all types and classes from the `@hyperledger/aries-askar-react-native` library:

```typescript
import { Key, KeyAlgs } from '@hyperledger/aries-askar-react-native'

const seed = Uint8Array.from(Buffer.from('testseed000000000000000000000001'))
const key = Key.fromSeed({ algorithm: KeyAlgs.Bls12381G1, seed })
```

> **Note**: If you want to use this library in a cross-platform environment you need to import methods from the `@hyperledger/aries-askar-shared` package instead. This is a platform independent package that allows to register the native bindings. The `@hyperledger/aries-askar-react-native` package uses this package under the hood. See the [Aries Askar Shared README](https://github.com/hyperledger/aries-askar/tree/main/wrappers/javascript/aries-askar-shared/README.md) for documentation on how to use this package.

## Version Compatibility

The JavaScript wrapper is versioned independently from the native bindings. The following table shows the compatibility between the different versions:

| Aries Askar | JavaScript Wrapper |
| ----------- | ------------------ |
| v0.2.9      | v0.1.0, v0.1.1     |
| v0.3.1      | v0.2.0             |
npm package: @hyperledger/aries-askar-shared
Description: Shared library for using Aries Askar with NodeJS and React Native
Latest version: 0.2.3

# Aries Askar Shared

This package does not contain any functionality, just the classes and types that wrap around the native NodeJS / React Native functionality

## Platform independent setup

If you would like to leverage the Aries Askar libraries for JavaScript in a platform independent way you need to add the `@hyperledger/aries-askar-shared` package to your project. This package exports all public methods.

Before calling any methods you then need to make sure you register the platform specific native bindings. You can do this by importing the platform specific package. You can do this by having separate files that register the package, which allows the React Native bundler to import a different package:

```typescript
// register.ts
import '@hyperledger/aries-askar-nodejs'
```

```typescript
// register.native.ts
import '@hyperledger/aries-askar-react-native'
```

An alterative approach is to first try to require the Node.JS package, and otherwise require the React Native package:

```typescript
try {
  require('@hyperledger/aries-askar-nodejs')
} catch (error) {
  try {
    require('@hyperledger/aries-askar-react-native')
  } catch (error) {
    throw new Error('Could not load Aries Askar bindings')
  }
}
```

How you approach it is up to you, as long as the native binding are called before any actions are performed on the Aries Askar library.

## Version Compatibility

The JavaScript wrapper is versioned independently from the native bindings. The following table shows the compatibility between the different versions:

| Aries Askar | JavaScript Wrapper |
| ----------- | ------------------ |
| v0.2.9      | v0.1.0, v0.1.1     |
| v0.3.1      | v0.2.0             |
npm package: @hyperledger/burrow
Description: TypeScript library that calls a Hyperledger Burrow server over GRPC.
Latest version: 0.34.4
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# @hyperledger/burrow

This is a TypeScript API for communicating with a [Hyperledger Burrow](https://github.com/hyperledger/burrow) server, which implements the GRPC spec.

## Version compatibility

This lib's version is pegged to burrow's version on the minor. So @hyperledger/burrow at version X.Y.^ will work with burrow version X.Y.^ where ^ means latest patch version. The patch version numbering will not always correspond. If you are having difficulties getting this lib to work with a burrow release please first make sure you have the latest patch version of each.
npm package: @hyperledger/cactus-cmd-socketio-server
Description: Allows Cactus nodes to interact with HTLC ETH contracts
Author: Hyperledger Cactus Contributors
Latest version: 2.0.0-rc.2

# `@hyperledger/cactus-cmd-socketio-server`

This module is responsible for providing the cactus node server using socket.io connection to validators

## Usage samples
- To confirm the operation of this package, please refer to the following business-logic sample application:
	- [cactus-example-electricity-trade](../../examples/cactus-example-electricity-trade)
	- [cactus-example-discounted-asset-trade](../../examples/cactus-example-discounted-asset-trade)

## Docker
- Docker image of this package is used mostly as a base for other applications and plugins (BLP, socketio connectors).
- Docker build process will use artifacts from the latest build. Make sure `./dist` contains the version you want to dockerize.

```
# Build
docker build . -t cactus-cmd-socketio-server
```
npm package: @hyperledger/cactus-test-plugin-ledger-connector-quorum
Description: Integration tests for the Quorum ledger and the API server.
Author: Hyperledger Cactus Contributors
Latest version: 2.0.0-rc.2

# `@hyperledger/cactus-test-plugin-ledger-connector-quorum`


## Usage

```
// TODO: DEMONSTRATE API
```

## FAQ

### **What is a dedicated test package for?**

This is a dedicated test package meaning that it verifies the integration between two packages that are somehow dependent on each other and therefore these tests cannot be added properly in the child package due to circular dependency issues and it would not be fitting to add it in the parent because the child package's tests should not be held by the parent as a matter of principle.
npm package: @hyperledger/fabric-gateway
Description: Hyperledger Fabric Gateway client API for Node
Author: hyperledger/fabric
Latest version: 1.10.1

# Hyperledger Fabric Gateway Client API for Node

The Fabric Gateway client API allows applications to interact with a Hyperledger Fabric blockchain network. It implements the Fabric programming model, providing a simple API to submit transactions to a ledger or query the contents of a ledger with minimal code.

## How to use

Samples showing how to create client applications that connect to and interact with a Hyperledger Fabric network, are available in the [fabric-samples](https://github.com/hyperledger/fabric-samples) repository:

- [asset-transfer-basic](https://github.com/hyperledger/fabric-samples/tree/main/asset-transfer-basic) for examples of transaction submit and evaluate.
- [asset-transfer-events](https://github.com/hyperledger/fabric-samples/tree/main/asset-transfer-events) for examples of chaincode eventing.
- [off_chain_data](https://github.com/hyperledger/fabric-samples/tree/main/off_chain_data) for examples of block eventing.

## API documentation

The Gateway client API documentation for Node is available here:

- https://hyperledger.github.io/fabric-gateway/main/api/node/

## Installation

Add a dependency to your project's `package.json` file with the command:

```sh
npm install @hyperledger/fabric-gateway
```

## Compatibility

This API requires Fabric v2.4 (or later) with a Gateway enabled Peer. Additional compatibility information is available in the documentation:

- https://hyperledger.github.io/fabric-gateway/
npm package: @hyperledger/firefly-sdk
Description: Client SDK for Hyperledger FireFly
Latest version: 1.3.3

# FireFly Node.js SDK

![version](https://img.shields.io/github/package-json/v/hyperledger/firefly-sdk-nodejs?label=firefly-sdk-nodejs)
[![FireFly Documentation](https://img.shields.io/static/v1?label=FireFly&message=documentation&color=informational)](https://hyperledger.github.io/firefly/latest)

![Hyperledger FireFly](./images/hyperledger_firefly_logo.png)

This is the client SDK for Node.js, allowing you to build your own applications on top of Hyperledger FireFly.

## Installation

```bash
npm install @hyperledger/firefly-sdk
```

## Usage

```typescript
import FireFly from '@hyperledger/firefly-sdk';

async function main() {
  const firefly = new FireFly({ host: 'http://localhost:5000' });
  await firefly.sendBroadcast({
    data: [
      {
        value: 'test-message',
      },
    ],
  });
}

if (require.main === module) {
  main().catch((err) => console.error(`Error: ${err}`));
}
```

(This example was taken from the [examples](examples) folder where you will find some other basic samples)

## Generated schemas

The types for FireFly requests and responses are generated from the OpenAPI schema for FireFly. If you have
the `firefly` repository cloned in a folder parallel to this one, you can run the following to re-generate
the TypeScript interfaces from the latest FireFly definitions:

```bash
npm run schema
```

## Git repositories

There are multiple Git repos making up the Hyperledger FireFly project. Some others
that may be helpful to reference:

- Core - https://github.com/hyperledger/firefly
- Command Line Interface (CLI) - https://github.com/hyperledger/firefly-cli
- FireFly Sandbox - https://github.com/hyperledger/firefly-sandbox

## Contributing

Interested in contributing to the community?

Check out our [Contributor Guide](https://hyperledger.github.io/firefly/latest/contributors/index), and welcome!

Please adhere to this project's [Code of Conduct](CODE_OF_CONDUCT.md).

## License

Hyperledger Project source code files are made available under the Apache License, Version 2.0 (Apache-2.0), located in the [LICENSE](LICENSE) file.
npm package: @hyperledger/identus-cloud-agent-client
Description: TypeScript OpenAPI client for Identus Cloud Agent
Author: allain.magyar@iohk.io
Latest version: 2.1.0

## @

This generator creates TypeScript/JavaScript client that utilizes fetch-api.

### Building

To build and compile the typescript sources to javascript use:
```
npm install
npm run build
```

### Publishing

First build the package then run ```npm publish```

### Consuming

Navigate to the folder of your consuming project and run one of the following commands.

_published:_

```
npm install @ --save
```

_unPublished (not recommended):_

```
npm install PATH_TO_GENERATED_PACKAGE --save
```

### Usage

Below code snippet shows exemplary usage of the configuration and the API based 
on the typical `PetStore` example used for OpenAPI. 

```
import * as your_api from 'your_api_package'

// Covers all auth methods included in your OpenAPI yaml definition
const authConfig: your_api.AuthMethodsConfiguration = {
    "api_key": "YOUR_API_KEY"
}

// Implements a simple middleware to modify requests before (`pre`) they are sent
// and after (`post`) they have been received 
class Test implements your_api.Middleware {
    pre(context: your_api.RequestContext): Promise<your_api.RequestContext> {
        // Modify context here and return
        return Promise.resolve(context);
    }

    post(context: your_api.ResponseContext): Promise<your_api.ResponseContext> {
        return Promise.resolve(context);
    }

}

// Create configuration parameter object
const configurationParameters = {
    httpApi: new your_api.JQueryHttpLibrary(), // Can also be ignored - default is usually fine
    baseServer: your_api.servers[0], // First server is default
    authMethods: authConfig, // No auth is default
    promiseMiddleware: [new Test()],
}

// Convert to actual configuration
const config = your_api.createConfiguration(configurationParameters);

// Use configuration with your_api
const api = new your_api.PetApi(config);
your_api.Pet p = new your_api.Pet();
p.name = "My new pet";
p.photoUrls = [];
p.tags = [];
p.status = "available";
Promise<your_api.Pet> createdPet = api.addPet(p);

```
npm package: @hyperledger/indy-vdr-nodejs
Description: Nodejs wrapper for Indy Vdr
Author: Hyperledger
Latest version: 0.3.0

# Indy VDR NodeJS

Wrapper for Nodejs around indy-vdr

## Requirements

This library requires Node.js version `20.x`. Newer versions might also work, but they have not been tested as extensively

## Installation

```sh
npm install @hyperledger/indy-vdr-nodejs
```

## Usage

You can import all types and classes from the `@hyperledger/indy-vdr-nodejs` library:

```typescript
import { PoolCreate, GetSchemaRequest } from '@hyperledger/indy-vdr-nodejs'

const pool = new PoolCreate({
  parameters: {
    transactions: <TRANSACTION_OBJECT>
  }
})

const getSchemaRequest = new GetSchemaRequest({
  schemaId: 'J6nTnUo3YLayzc2GUUctb1:2:MyName:1.0',
})

const schemaResponse = await pool.submitRequest(getSchemaRequest)
```

## Testing

In order to test this library, you need a local indy network running. This can be done with the following commands (from the root of the repository):

```sh
docker build -f ci/indy-pool.dockerfile -t test_pool --build-arg pool_ip=10.0.0.2 ci
docker network create --subnet=10.0.0.0/8 indy-sdk-network
docker run -d --name indy_pool -p 9701-9708:9701-9708 --net=indy-sdk-network test_pool

# Network is now running

cd wrappers/javascript

docker exec $(docker ps -aqf "ancestor=test_pool") cat /var/lib/indy/sandbox/pool_transactions_genesis >> genesis.txn

npm run test:local-build
```

> **Note**: If you want to use this library in a cross-platform environment you need to import methods from the `@hyperledger/indy-vdr-shared` package instead. This is a platform independent package that allows to register the native bindings. The `@hyperledger/indy-vdr-nodejs` package uses this package under the hood. See the [Indy VDR Shared README](https://github.com/hyperledger-indy/indy-vdr/tree/main/wrappers/javascript/indy-vdr-shared/README.md) for documentation on how to use this package.

## Version Compatibility

The JavaScript wrapper is versioned independently from the native bindings. The following table shows the compatibility between the different versions:

| Indy VDR      | JavaScript Wrapper   |
| ------------- | -------------------- |
| v0.4.0-dev.16 | v0.1.0               |
| v0.4.1        | >= v0.2.0 & < v0.2.3 |
| v0.4.4        | v0.2.3               |
| v0.4.5        | >= v0.2.4            |
npm package: @hyperledger/indy-vdr-react-native
Description: React Native wrapper for Indy Vdr
Author: Hyperledger
Latest version: 0.3.0

# Indy VDR React Native

Wrapper for React Native around indy-vdr

## Requirements

This module uses the new React Native Turbo Modules. These are faster than the
previous Native Modules, and can be completely synchronous. A React Native
version of `>= 0.66.0` is required for this package to work.

## Installation

```sh
npm install @hyperledger/indy-vdr-react-native
```

## Usage

You can import all types and classes from the `@hyperledger/indy-vdr-react-native` library:

```typescript
import { PoolCreate, GetSchemaRequest } from '@hyperledger/indy-vdr-react-native'

const pool = new PoolCreate({
  parameters: {
    transactions: <TRANSACTION_OBJECT>
  }
})

const getSchemaRequest = new GetSchemaRequest({
  schemaId: 'J6nTnUo3YLayzc2GUUctb1:2:MyName:1.0',
})

const schemaResponse = await pool.submitRequest(getSchemaRequest)
```

> **Note**: If you want to use this library in a cross-platform environment you need to import methods from the `@hyperledger/indy-vdr-shared` package instead. This is a platform independent package that allows to register the native bindings. The `@hyperledger/indy-vdr-react-native` package uses this package under the hood. See the [Indy VDR Shared README](https://github.com/hyperledger-indy/indy-vdr/tree/main/wrappers/javascript/indy-vdr-shared/README.md) for documentation on how to use this package.

## Version Compatibility

The JavaScript wrapper is versioned independently from the native bindings. The following table shows the compatibility between the different versions:

| Indy VDR      | JavaScript Wrapper   |
| ------------- | -------------------- |
| v0.4.0-dev.16 | v0.1.0               |
| v0.4.1        | >= v0.2.0 & < v0.2.3 |
| v0.4.4        | v0.2.3               |
| v0.4.5        | >= v0.2.4            |
npm package: @hyperledger/indy-vdr-shared
Description: Shared library for using Indy VDR with NodeJS and React Native
Latest version: 0.3.0

# Indy VDR Shared

This package does not contain any functionality, just the classes and types
that wrap around the native NodeJS / React Native functionality

## General setup

Every function can be called by creating an instance of a class with the
correct parameters. This class will have a `handle` as a property and that can
be used to create a ledger request. Following is a small example to request a
schema from a ledger.

```typescript
import { PoolCreate, GetSchemaRequest } from '@hyperledger/indy-vdr-shared'

const pool = new PoolCreate({
  parameters: {
    transactions: <TRANSACTION_OBJECT>
  }
})

const getSchemaRequest = new GetSchemaRequest({
  schemaId: 'J6nTnUo3YLayzc2GUUctb1:2:MyName:1.0',
})

const schemaResponse = await pool.submitRequest(getSchemaRequest)
```

## Platform independent setup

If you would like to leverage the Indy VDR libraries for JavaScript in a platform independent way you need to add the `@hyperledger/indy-vdr-shared` package to your project. This package exports all public methods.

Before calling any methods you then need to make sure you register the platform specific native bindings. You can do this by importing the platform specific package. You can do this by having separate files that register the package, which allows the React Native bundler to import a different package:

```typescript
// register.ts
import '@hyperledger/indy-vdr-nodejs'
```

```typescript
// register.native.ts
import '@hyperledger/indy-vdr-react-native'
```

An alterative approach is to first try to require the Node.JS package, and otherwise require the React Native package:

```typescript
try {
  require('@hyperledger/indy-vdr-nodejs')
} catch (error) {
  try {
    require('@hyperledger/indy-vdr-react-native')
  } catch (error) {
    throw new Error('Could not load Indy VDR bindings')
  }
}
```

How you approach it is up to you, as long as the native binding are called before any actions are performed on the Indy VDR library.

## Version Compatibility

The JavaScript wrapper is versioned independently from the native bindings. The following table shows the compatibility between the different versions:

| Indy VDR      | JavaScript Wrapper   |
| ------------- | -------------------- |
| v0.4.0-dev.16 | v0.1.0               |
| v0.4.1        | >= v0.2.0 & < v0.2.3 |
| v0.4.4        | v0.2.3               |
| v0.4.5        | >= v0.2.4            |
npm package: @hyperledger/node-vcx-wrapper
Description: NodeJS wrapper Aries Framework
Latest version: 0.62.0-main-7308

## Pre-requirements
##### Libraries
Before you'll be able to run demo, you need to make sure you've compiled
- [`vdrtools`](https://gitlab.com/evernym/verity/vdr-tools)
- [`libvcx`](https://github.com/hyperledger/aries-vcx)

Library binaries must be located `/usr/local/lib` on OSX, `/usr/lib` on Linux.

# Testing
- To run all unit tests:
```
npm run test
```

## Contribution Guide

Make sure you have these packages installed:

* StandardJS
* Typescript

Run this commands before submitting your PR:

```
npm run lint
```
npm package: @hyperledger/vcx-napi-rs-darwin-arm64
Description: aries-vcx napi
Latest version: 0.61.0-diddocremove-generics-7322

# `@hyperledger/vcx-napi-rs-darwin-arm64`

This is the **aarch64-apple-darwin** binary for `@hyperledger/vcx-napi-rs`
npm package: @hyperledger/vcx-napi-rs-darwin-x64
Description: aries-vcx napi
Latest version: 0.61.0-diddocremove-generics-7322

# `@hyperledger/vcx-napi-rs-darwin-x64`

This is the **x86_64-apple-darwin** binary for `@hyperledger/vcx-napi-rs`
npm package: @hyperledger/vcx-napi-rs-linux-x64-gnu
Description: aries-vcx napi
Latest version: 0.61.0-diddocremove-generics-7322

# `@hyperledger/vcx-napi-rs-linux-x64-gnu`

This is the **x86_64-unknown-linux-gnu** binary for `@hyperledger/vcx-napi-rs`
npm package: @hyperledger/vcx-napi-rs-linux-x64-musl
Description: aries-vcx napi
Latest version: 0.61.0-diddocremove-generics-7322

# `@hyperledger/vcx-napi-rs-linux-x64-musl`

This is the **x86_64-unknown-linux-musl** binary for `@hyperledger/vcx-napi-rs`
npm package: @hyperledger/vcxagent-core
Description: Aries-framework-rs based Aries agent
Latest version: 0.62.0-main-7308

# VCX Agent Core
VCX Agent Core is implementation of simple agent with persistent file storage. It's based on
[NodeJS Wrapper](../../../wrappers/node) for `aries-vcx` library.

# Try it
1. First step is to compile and `aries-vcx` and make it available on your system. Follow [instructions](../../../libvcx).
2. You need to have mediator agent compatible with `aries-vcx`. See more [info](../../../README.md).
3. Run `npm run demo`. This will run sample scenario where Alice and Faber
    - establish connection, 
    - Faber issues a credential to Alice
    - Faber requests Alice to prove certain information about herself (using the credential). 
    
# Note 
You can also have look at [vcxagent-cli](../vcxagent-cli) - CLI Aries agent based 
on this project.