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

bcoins

v1.0.7

Published

client side library for BuyCoins graphql api

Downloads

11

Readme

Bcoins

communicate with BuyCoins Graphql api easily. Integrates easily with vanilla js and other Frameworks like React, Vue e.t.c.

Features

  • low-fat wrapper for BuyCoins graphql api
  • integrates easily into vanilla js and other Frameworks like React, Vue e.t.c.
  • Although client side, also supports integration with server side
  • simple and staight forward with minimal dependencies

Installing

npm i bcoins --save or yarn add bcoins

  • Depends on graphql apollo-boost and node-fetch (for easy testing without having to run the browser).
  • Targets ES5.
  • Built with ES6.
  • Supported in Node and the browser(s) and React Native.

Quick Start

With Vanilla Js

const { setupBCoins } = require("bcoins");

//second parameter is supposed to be the browser fetch, by default it uses node-fetch
const bcoins = setupBCoins({
  publicKey: "pass_public_key",
  secretKey: "pass_secret_key",
}, fetch);

//call an endpoint
//bcoins returns several other methods, see documentation below
bcoins
  .getDynamicPriceExpiry({ status: "open" })
  .then((res) => console.log(res));

In React with @apollo/client

In your root component

import React from 'react';
import { render } from 'react-dom';
import { ApolloProvider } from '@apollo/client';
import { setupBCoins } from 'bcoins';

const bcoins = setupBCoins({
  publicKey: "pass_public_key",
  secretKey: "pass_secret_key",
}, fetch);

function App() {
  return (
    <ApolloProvider client={bcoins.client}>
      <div>
        <h2>My first BuyCoins Apollo app 🚀</h2>
      </div>
    </ApolloProvider>
  );
}

In component where you want query data

import { useQuery } from '@apollo/client';
import { GET_ESTIMATED_NETWORK_FEE } from "bcoins";

function BuyCoinsPrice() {
  const { loading, error, data } = useQuery(GET_ESTIMATED_NETWORK_FEE({amount: "0.1", cryptocurrency : "bitcoin"}) );

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error :(</p>;

  return (
    <div>
      <p>
        price: {data?.getEstimatedNetworkFee?.estimatedFee:}
      </p>
    </div>
  );
}
### 

In component where you want make a mutuation data

import { PLACING_MARKET_ORDER } from "bcoins";

function AddTodo() {
  let input;
  const [placeMarketOrder, { data }] = useMutation(PLACING_MARKET_ORDER());

  return (
    <div>
      <form
        onSubmit={e => {
          e.preventDefault();
          placeMarketOrder({ variables: { orderSide : "", coinAmount: input.value, cryptocurrency : "litecoin"  } });
          input.value = '';
        }}
      >
        <input
          ref={node => {
            input = node;
          }}
        />
        <button type="submit">Place Market Order</button>
      </form>
    </div>
  );
}
### 

Also Integates seamlessly with Vue and Apollo Client

Documentation

You can check out the official BuyCoins Documentation on their website for more detailed explanations of how each query/mutuation works. This library implements all the possible queries and mutuations in the BuyCoins docs except the webhook section.

In order to support both usage in vanilla js and easy integration with Apollo client and other Js frameworks, the library export a setupBCoins function, which is used for the initial authorization setup and in addition exports all the methods which calls the different graphql queries and mutuations api calls

const { setupBCoins } = require("bcoins");

//second parameter is supposed to the browser fetch, by default it uses node-fetch
const bcoins = setupBCoins({
  publicKey: "pass_public_key",
  secretKey: "pass_secret_key",
}, fetch);

//bcoins returns several other methods
// bcoins = {
//   client,
//   createVirtualDepositAccount: (request) => mutationWrapper(client, CREATE_VIRTUAL_DEPOSIT_ACCOUNT, request) ,
//   getBuyCoinsPrices: (request) => queryWrapper(client, CURRENT_BUYCOINS_PRICE, request),
//   getDynamicPriceExpiry: (request) => queryWrapper(client, DYNAMIC_PRICE_EXPIRY, request),
//   placeLimitingOrder: (request) => mutationWrapper(client, PLACING_LIMIT_ORDER, request),
//   placeMarketOrder: (request) => mutationWrapper(client, PLACING_MARKET_ORDER, request),
//   getOrders: (request) => queryWrapper(client, GET_ORDERS, request),
//   getMarketBook: (request) => queryWrapper(client, GET_MARKET_BOOK, request),
//   getSingleCryptoPrice: (request) => queryWrapper(client, GET_SINGLE_CRYPTO_PRICE,request),
//   getPrices: (request) => queryWrapper(client, GET_PRICES,request),
//   buyCrypto: (request) => mutationWrapper(client, BUY_CRYPTO, request),
//   sellCrypto: (request) => mutationWrapper(client, SELL_CRYPTO, request),
//   getEstimatedNetworkFee: (request) => queryWrapper(client, GET_ESTIMATED_NETWORK_FEE, request),
//   sendCrypto:  (request) => mutationWrapper(client, SEND_CRYPTO, request),
//   getBalances:  (request) => queryWrapper(client, GET_BALANCES, request),
//   createAddress:  (request) => mutationWrapper(client, CREATE_ADDRESS, request),
// };

the client object returned from creating an Apolloclient instance (whcich contains our uri and authorization header is also returned from the setup client function and can be accessed thus:

bcoins.client

Calling The API

//pass in objects with the field specied in each call as keys and with the appropriate values (please refer to the official docs)

//crate virtual deposit account
bcoins.createVirtualDepositAccount({ accountName });

//P2P trading
bcoins.getBuyCoinsPrices({ side, mode, cryptocurrency })
bcoins.getDynamicPriceExpiry({ status })
bcoins.placeLimitingOrder({ orderSide, coinAmount, cryptocurrency, staticPrice, priceType, dynamicExchangeRate  })
bcoins.placeMarketOrder({ orderSide, coinAmount, cryptocurrency })
bcoins.getOrders({ status })
bcoins.getMarketBook()

//placing orders
bcoins.getSingleCryptoPrice({ cryptocurrency })
bcoins.getPrices()
bcoins.buyCrypto({ priceId, coin_amount, cryptocurrency })
bcoins.sellCrypto({ priceId, coin_amount, cryptocurrency })

//sending crypto
bcoins.getEstimatedNetworkFee({ cryptocurrency, amount })
bcoins.sendCrypto({ amount, cryptocurrency, address })
bcoins.getBalances()


//receiving crypto
bcoins.createAddress({ cryptocurrency })

However if you are using React (or any other js framework) and Apollo CLient and which to let Apollo client handle all the data queries and mutuations, you can follow the setup pattern as shown in the React with @apollo/client above. This is made possible cause the library exports each individual graphql queries and mutuations as a function which can be called with arguments as shown in the React with @apollo/client section.

import {
  CREATE_VIRTUAL_DEPOSIT_ACCOUNT, // - mutation -
  CURRENT_BUYCOINS_PRICE,         // - query -
  DYNAMIC_PRICE_EXPIRY,           // - query -
  PLACING_LIMIT_ORDER,            // - mutation -
  PLACING_MARKET_ORDER,           // - mutation -
  GET_ORDERS,                     // - query -
  GET_MARKET_BOOK,                // - query -
  GET_SINGLE_CRYPTO_PRICE,        // - query -
  GET_PRICES,                     // - query -
  BUY_CRYPTO,                     // - mutation -
  SELL_CRYPTO,                    // - mutation -
  GET_ESTIMATED_NETWORK_FEE,      // - query -
  SEND_CRYPTO,                    // - mutation -
  GET_BALANCES,                   // - query -
  CREATE_ADDRESS,                 // - mutation -
}  from 'bcoins';

for the queries call them with the needed arguments and pass result to the useQuery hooks from Apollo client as shown in the React - Apollo section above, while for the mutuations just call them without any arguments and pass the result into the useMutation hook, then the resulting function (the first argument returned from the useMutation hook) will now be used to pass in a variables object. (also refer to the React - Apollo section to see an example.

Contributing

Bugs? Comments? Features? PRs and Issues happily welcomed!

Moving Forward

  • migration to typescript

  • implementation of tests