JavaScript SDK
The SDK provides a way to programmatically interact with 8Pay's smart contracts.
It allows you to manage the subscriptions to your plans (e.g. trigger billings or terminate them).
Installation is done using the command:
$ npm install @8pay/sdk
This module uses web3 under the hood, which is the most popular library used to interact with the
Web 3.0
.To keep things familiar with
web3
, it follows the same strucure when sending transactions but adds additional functionalities.To get started, import the module and provide it with an instance of
web3
:const Web3 = require('web3');
const EightPaySDK = require('@8pay/sdk');
const web3 = new Web3('<provider-url>');
const eightPay = new EightPaySDK(web3, EightPaySDK.Network.BSC);
There are two ways to sign a transaction before broadcasting it to the blockchain:
- Using an unlocked account (e.g. when using Metamask)
eightPay.fixedRecurring.bill(planId, subscriptionIds)
.send({ from: account })
- With privateKey
eightPay.fixedRecurring.bill(planId, subscriptionIds)
.send({ privateKey: '0x32df7......' })
The gas consumed by a transaction can be estimated using the
estimateGas
function which takes and options
object and returns the amount of gas as number:eightPay.fixedRecurring.bill(planId, subscriptionIds)
.estimateGas(options)
The
send
method accepts the same options available in web3
like gas
, gasPrice
, nonce
and so on.The following events are emitted when sending a transaction:
transactionHash
, receipt
, confirmation
and error
.const receipt = await eightPay.fixedRecurring.bill(planId, subscriptionIds)
.send({ from: account })
.on('transactionHash', hash => {})
.on('receipt', receipt => {})
.on('confirmation', confirmation => {})
.on('error', error => {})
Here is the list of all the available methods for each billing model.
Bills subscriptions of a plan.
Parameters:
- planId - id of the plan
- subscriptionIds - array of subscription ids
const planId = '0x57b2059e526841b3dfd964144513359c9fcfd6d91040b6c47f589c1e032b6bf4';
const subscriptionIds = ['0xe63ba761797e289076f80a7c0916a31740684806aaf507da85f81ee785fec6ba'];
const receipt = await eightPay.fixedRecurring.bill(planId, subscriptionIds)
.send({ from: account })
Forcefully cancels subscriptions of a plan.
The sender account must be the plan's admin or an operational account with terminate permission.
Parameters:
- planId - id of the plan
- subscriptionIds - array of subscription ids
const planId = '0x57b2059e526841b3dfd964144513359c9fcfd6d91040b6c47f589c1e032b6bf4';
const subscriptionIds = ['0xe63ba761797e289076f80a7c0916a31740684806aaf507da85f81ee785fec6ba'];
const receipt = await eightPay.fixedRecurring.terminate(planId, subscriptionIds)
.send({ from: account })
Bills subscriptions of a plan.
The sender account must be the plan's admin or an operational account with bill permission.
Parameters:
- planId - id of the plan
- subscriptionIds - array of subscription ids
- amounts - array of amounts to charge for each subscription
const planId = '0x57b2059e526841b3dfd964144513359c9fcfd6d91040b6c47f589c1e032b6bf4';
const subscriptionIds = ['0xe63ba761797e289076f80a7c0916a31740684806aaf507da85f81ee785fec6ba'];
const amounts = [eightPay.utils.parseAmount('10', '8PAY')];
const receipt = await eightPay.variableRecurring.bill(planId, subscriptionIds, amounts)
.send({ from: account })
Forcefully cancels subscriptions of a plan.
The sender account must be the plan's admin or an operational account with terminate permission.
Parameters:
- planId - id of the plan
- subscriptionIds - array of subscription on-chain ids
const planId = '0x57b2059e526841b3dfd964144513359c9fcfd6d91040b6c47f589c1e032b6bf4';
const subscriptionIds = ['0xe63ba761797e289076f80a7c0916a31740684806aaf507da85f81ee785fec6ba'];
const receipt = await eightPay.variableRecurring.terminate(planId, subscriptionIds)
.send({ from: account })
Bills subscriptions of a plan.
The sender account must be the plan's admin or an operational account with bill permission.
Parameters:
- planId - id of the plan
- subscriptionIds - array of subscription ids
- amounts - array of amounts to charge for each subscription
const planId = '0x57b2059e526841b3dfd964144513359c9fcfd6d91040b6c47f589c1e032b6bf4';
const subscriptionIds = ['0xe63ba761797e289076f80a7c0916a31740684806aaf507da85f81ee785fec6ba'];
const amounts = [eightPay.utils.parseAmount('10', '8PAY')];
const receipt = await eightPay.onDemand.bill(planId, subscriptionIds, amounts)
.send({ from: account })
Forcefully cancels subscriptions of a plan.
The sender account must be the plan's admin or an operational account with terminate permission.
Parameters:
- planId - id of the plan
- subscriptionIds - array of subscription ids
const planId = '0x57b2059e526841b3dfd964144513359c9fcfd6d91040b6c47f589c1e032b6bf4';
const subscriptionIds = ['0xe63ba761797e289076f80a7c0916a31740684806aaf507da85f81ee785fec6ba'];
const receipt = await eightPay.onDemand.terminate(planId, subscriptionIds)
.send({ from: account })
The accounts utility can be used to obtain an account object from a private key or a mnemonic. The account object has two properties:
address
and privateKey
.const privateKey = '<private-key>';
const account = eightPay.accounts.fromPrivateKey(privateKey);
// OR
const mnemonic = '<mnemonic>';
const mnemonicIndex = 0;
const account = eightPay.accounts.fromMnemonic(mnemonic, mnemonicIndex);
console.log(account);
/*
{
address: '0x2F2....',
privateKey: '0x1Ee...'
}
*/
To help in parsing amount from and to ethereum decimals, you can use
addDecimals
and parseDecimals
methods.const parsedAmount = eightPay.utils.parseAmount('1', '8PAY') // 1000000000000000000
const amount = eightPay.utils.formatAmount(parsedAmount, '8PAY') // 1
Last modified 3mo ago