@bity/preact-exchange-client

A user interface to interact with the Bity Exchange API.

Usage no npm install needed!

<script type="module">
  import bityPreactExchangeClient from 'https://cdn.skypack.dev/@bity/preact-exchange-client';
</script>

README

@bity/preact-exchange-client

A user interface to interact with the Bity Exchange API.

Installation

npm install @bity/preact-exchange-client preact@8 @bity/styles @bity/api

Deploy as an interfacing service

It is possible to deploy the component as an interfacing service. node serve.js starts a very simple web server which reads a configuration file from /etc/bity-preact-exchange-client/config.js. This configuration file is the configuration object which is used by the component. This path is currently not configurable.

There is a pre-configured example-interfacing-service.config.js which changes can be made to. It is commented explaining what the fields mean.

Be sure to place the component under the same domain as where you will integrate it. Because of web security policies, authentication will not work if you don't.

For example, if there is a web dashboard which is available on https://my.bity.com, the interfacing service should be hosted under it, for example: https://my.bity.com/exchange-client .

Again, do not under any circumstance host it any other way. Hosting it on its own sub-domain will cause authentication issues.

Usage

index.jsx:

import { h, render } from 'preact';
import ExchangeClient from '@bity/preact-exchange-client';

const root = document.querySelector('#root');

render(<ExchangeClient
  exchangeApiUrl="https://exchange.api.bity.com"
  legacyV2ApiUrl="https://bity.com"
/>, root);

index.html:

<html>
<head>
  <title></title>
  <!-- Bity's base styles - without this, everything would look horrible. -->
  <link rel="stylesheet" href="./node_modules/@bity/styles/index.css"/>
  <!-- Yes, you read that right: preact. This react component is built on it, so we pull its built styles from there. -->
  <link rel="stylesheet" href="./node_modules/@bity/preact-exchange-client/index.css"/>
  </head>

  <body>
    <div id="root"></div>
    <script src="./index.js"></script>
  </body>
</html>

Prefilled information

To pass in prefilled information, all you need is to create an order object from @bity/api/models and pass it to the ExchangeClient component:

import { h, render } from 'preact';
import { Order } from '@bity/api/models';
import ExchangeClient from '@bity/preact-exchange-client';

// Look at @bity/api/models for more details
const order = new Order();

order
  .setContactEmail('me@example.org')
  .setInput('ETH', 1)
  .input
  .setCryptoAddress('0xaebd912312841deaebe82939281');

const root = document.querySelector('#root');
render(<ExchangeClient order={order} />, root);

Restrict inputs to certain currencies

Some companies only choose to support certain currencies for various reasons. To restrict the type of currencies a user can send and receive, the following properties can be passed (examples):

restrictCurrenciesToSend={['CHF']}
restrictCurrenciesToReceive={['ETH']}

This will restrict trading to the single pair CHF → ETH.

Bity dashboard URL

Specify the dashboard URL to navigate to. This will display a "dashboard" button.

bityDashboardUrl="https://my.bity.com"

Configuring to ask user for login

Depending on the context, sometimes it's not necessary to ask the user to chose if they want to login as a Bity user or a guest. In order to determine this, you can pass a function which returns true or false.

shouldAskForLogin={(): boolean => { /* true or false */ }}

Events

Below are a list of events which can be hooked into.

onOrderCreated={(order: Order): void => { /* ... */ }}
onOrderCreationFailure={(errors: { message: string }[]): void => { /* ... */ }}