edge-core-js
Version:
Edge account & wallet management library
94 lines (64 loc) • 4.47 kB
Markdown
# Edge Core
This library implements the Edge login system. It runs inside a client application, and provides zero-knowledge backup for cryptographic keys and other secrets via a familiar password-based login system.
[](https://travis-ci.com/EdgeApp/edge-core-js)
[](https://standardjs.com)
[](https://github.com/prettier/prettier)
## Documentation
We have documentation at https://developer.airbitz.co/javascript/, but our [Flow types](./src/types/types.js) are the best, most up-to-date reference for what this library contains.
## Account Management UI
To quickly get up and running with the UI for account creation, login, and management, use [edge-login-ui-web](https://github.com/EdgeApp/edge-login-ui/tree/develop/packages/edge-login-ui-web) for the web or [edge-login-ui-rn](https://github.com/EdgeApp/edge-login-ui/tree/develop/packages/edge-login-ui-rn) for React Native.
## Setup
Add this library to your project using `npm install --save edge-core-js`.
### Node.js & Browsers
To create an `EdgeContext` object, which provides various methods for logging in and creating account, do something like this:
```javascript
const context = await makeEdgeContext({
apiKey: '...', // Get this from our support team
appId: 'com.your-app',
plugins: {
// Configure currencies, exchange rates, and swap providers you want to use:
'bitcoin': true
}
})
```
The core uses various plugins to provide its currency, exchange rate, and swap features. These plugins ship separately, and are designed to load in parallel with the core:
```js
import { addEdgeCorePlugins, lockEdgeCorePlugins } from 'edge-core-js'
import exchangePlugins from 'edge-exchange-plugins'
import bitcoinPlugins from 'edge-currency-bitcoin'
import currencyPlugins from 'edge-currency-accountbased'
addEdgeCorePlugins(exchangePlugins)
addEdgeCorePlugins(bitcoinPlugins)
addEdgeCorePlugins(currencyPlugins)
lockEdgeCorePlugins()
```
If the core seems to hang forever when logging in, you probably forgot to call `lockEdgeCorePlugins`.
Please note that edge-core-js uses modern JavaScript syntax features such as `async`, so you may need to run the library through [Babel](https://babeljs.io/) if you plan to run it in a browser. Node 10+ supports these features natively.
### React Native
Edge-core-js directly supports React Native v0.60+ with autolinking. Simply add edge-core-js to your application, and React Native will link the necessary native modules & assets.
To create an `EdgeContext` object, you need to mount a component:
```jsx
<MakeEdgeContext
// Get this from our support team:
apiKey="..."
appId="com.your-app"
// Configure currencies and swap providers you want to use:
plugins={{
'bitcoin': true
}}
pluginUris={[
"edge-currency-plugins.js",
"edge-exchange-plugins.js"
]}
// Called when the core is done loading:
onLoad={edgeContext => {}}
onError={error => {}}
/>
```
The core itself runs inside a hidden WebView, which this `MakeEdgeContext` component mounts & manages.
The core creates a `<script>` tag for each source file in the `pluginUris` array. For this to work, you need to add these plugin files to your app's native asset bundle, which is located at `/android/app/src/main/assets/` on Android. For iOS, drag these files into the "Resources" section of your Xcode project.
To debug the core, run `yarn start` inside the edge-core-js project, and then pass a `debug={true}` property to the `MakeEdgeContext` component. This tells the WebView to load the core from a local development server.
## Contributing
Run `yarn` to download dependencies, and then run `yarn prepare` to build the library.
Use `yarn verify` to run all our code-quality tools. All sources are in the [JavaScript Standard Style](http://standardjs.com/) + [Prettier](https://prettier.io/). We check files prior to each commit, so if you have formatting issues, you can run `yarn fix` to fix them automatically.
If you use Visual Studio Code, consider installing the [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) extension. This will give you nice error highlighting as you work, along with quick fixes for formatting issues.