npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@bity/preact-exchange-client

v1.24.15

Published

A user interface to interact with the Bity Exchange API.

Downloads

229

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

It is possible to prefill the amount to be exchanged and the currencies of the exchange by specifying these values in the configuration file:

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

const root = document.querySelector('#root');
const defaultOrderParameters = {
  inputCurrency: 'CHF',
  outputCurrency: 'BTC',
  inputAmount: '200',
};

render(<ExchangeClient defaultOrderParameters={defaultOrderParameters} />, root);

It is also possible to pre-fill the output address of the exchange (ie. The address Bity will send the funds to) when the output is a crypto currency. An address may be specified for each currency. The output address of the exchange will be pre-filled with the address corresponding to the currency selected by the user; Optionally, if an address was specified for this currency, the user may be prevented from modifying it:

defaultOrderParameters: {
  inputCurrency: 'CHF',
  outputCurrency: 'ETH',
  inputAmount: '200',

  // Addresses used to pre-fill the exchange output address.
  outputAddressesForPrefilling: {
    NYM: 'n1qh0mxa7ka8gtxm4zuh2mql0mqn3kgnp7jcsqy3',
    ETH: '0x24305d091f79ee490a34de080b0db5773be5bef4',
  },

  // Whether the user should be prevented from modifying prefilled output addresses.
  lockOutputAddressWhenPrefilled: false,
};

Special care must be taken with these addresses, in particular when the user is prevented from modifying the output address: The exchange client will place the order with the address "as-is". Note that pre-filling an address still requires the user to confirm it.

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.

Mind that the amount and currencies of the exchange must be prefilled if the currencies to send or receive are restricted. Special care must be taken to ensure the prefilled values respect the specified restrictions. Refer to the [corresponding section][#prefilled-information] for instructions on how to prefill these values.

Limit max amount in the exchange UI

Integrators may choose to limit the maximum amount their users can exchange. This can be done through the amountTooLargePredicate property. For example:

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

const root = document.querySelector('#root');
const amountTooLargePredicate = function(amount, currency, direction) {
  if (direction == 'input' && currency == 'ETH')
    return amount > 10;
  if (direction == 'output' && currency == 'CHF')
    return amount > 10000;
  return false;
}

render(<ExchangeClient
          amountTooLargePredicate={amountTooLargePredicate}
          restrictCurrenciesToSend={['ETH']}
        />, root);

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 => { /* ... */ }}