npm package: @lantah/lantah-base
Description: Low-level support library for the Lantah network, based on stellar-base..
Author: George Kudrayvtsev
Latest version: 10.0.0-beta.4

# JS Lantah Base

The lantah-base library is the lowest-level lantah helper library. It consists
of classes to read, write, hash, and sign the xdr structures that are used in
[gravity](https://github.com/lantah/gravity). This is an
implementation in JavaScript that can be used on either Node.js or web browsers.


> **Warning!** The Node version of this package uses the [`sodium-native`](https://www.npmjs.com/package/sodium-native) package, a native implementation of [Ed25519](https://ed25519.cr.yp.to/) in Node.js, as an [optional dependency](https://docs.npmjs.com/files/package.json#optionaldependencies).
> This means that if for any reason installation of this package fails, `lantah-base` will fallback to the much slower implementation contained in [`tweetnacl`](https://www.npmjs.com/package/tweetnacl).
>
> If you'd explicitly prefer **not** to install the `sodium-native` package, pass the appropriate flag to skip optional dependencies when installing this package (e.g. `--no-optional` if using `npm install` or `--without-optional` using `yarn install`).
>
> If you are using `lantah-base` in a browser you can ignore this. However, for production backend deployments you should most likely be using `sodium-native`.
> If `sodium-native` is successfully installed and working,
> `LantahBase.FastSigning` variable will be equal `true`. Otherwise it will be
> `false`.

## Quick start

Using yarn to include js-lantah-base in your own project:

```shell
yarn add lantah-base
```

For browsers, [use Bower to install it](#to-use-in-the-browser). It exports a
variable `lantahBase`. The example below assumes you have `lantah-base.js`
relative to your html file.

```html
<script src="lantah-base.js"></script>
<script>
  console.log(LantahBase);
</script>
```

## Install

### To use as a module in a Node.js project

1. Install it using yarn:

```shell
yarn add lantah-base
```

2. require/import it in your JavaScript:

```js
var LantahBase = require('lantah-base');
```

### To self host for use in the browser

1. Install it using [bower](http://bower.io):

```shell
bower install lantah-base
```

2. Include it in the browser:

```html
<script src="./bower_components/lantah-base/lantah-base.js"></script>
<script>
  console.log(LantahBase);
</script>
```

If you don't want to use install Bower, you can copy built JS files from the
[bower-js-stellar-base repo](https://github.com/stellar/bower-js-stellar-base).

### To use the [cdnjs](https://cdnjs.com/libraries/stellar-base) hosted script in the browser

1. Instruct the browser to fetch the library from
   [cdnjs](https://cdnjs.com/libraries/stellar-base), a 3rd party service that
   hosts js libraries:

```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/stellar-base/{version}/stellar-base.js"></script>
<script>
  console.log(LantahBase);
</script>
```

Note that this method relies using a third party to host the JS library. This
may not be entirely secure.

Make sure that you are using the latest version number. They can be found on the
[releases page in Github](https://github.com/lantah/js-lantah-base/releases).

### To develop and test js-lantah-base itself

1. Install Node 16.x

We support the oldest LTS release of Node, which is [currently 16.x](https://nodejs.org/en/about/releases/). Please likewise install and develop on Node 16 so you don't get surprised when your code works locally but breaks in CI.

If you work on several projects that use different Node versions, you might find helpful to install a NodeJS version manager:

  - https://github.com/creationix/nvm
  - https://github.com/wbyoung/avn
  - https://github.com/asdf-vm/asdf

2. Install Yarn

This project uses [Yarn](https://yarnpkg.com/) to manages its dependencies. To install Yarn, follow the project instructions available at https://yarnpkg.com/en/docs/install.

3. Clone the repo

```shell
git clone https://github.com/lantah/js-lantah-base.git
```

4. Install dependencies inside js-lantah-base folder

```shell
cd js-lantah-base
yarn
```

5. Observe the project's code style

While you're making changes, make sure to regularly run the linter to catch any
linting errors (in addition to making sure your text editor supports ESLint)

```shell
yarn lint
```

as well as fixing any formatting errors with

```shell
yarn fmt
```

If you're working on a file not in `src`, limit your code to Node 6.16 ES! See
what's supported here: https://node.green/. (Our npm library must support
earlier versions of Node, so the tests need to run on those versions.)

#### Updating XDR definitions

1. Make sure you have [Docker](https://www.docker.com/) installed and running.
2. `make reset-xdr`

## Usage

For information on how to use js-lantah-base, take a look at the docs in the
[docs folder](./docs).

## Testing

To run all tests:

```shell
yarn test
```

To run a specific set of tests:

```shell
yarn test:node
yarn test:browser
```

Tests are also run automatically in Github Actions for every master commit and
pull request.

## Documentation

Documentation for this repo lives inside the [docs folder](./docs).

## Contributing

Please see the [CONTRIBUTING.md](./CONTRIBUTING.md) for details on how to
contribute to this project.

## Publishing to npm

```
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease]
```

A new version will be published to npm **and** Bower by GitHub Actions.

npm >= 2.13.0 required. Read more about
[npm version](https://docs.npmjs.com/cli/version).

## License

js-lantah-base is licensed under an Apache-2.0 license. See the
[LICENSE](./LICENSE) file for details.