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

fire-open-payments

v1.0.1

Published

A Node.js package to interact with the Fire.com API, including payment requests, transaction listings, and webhook handling.

Downloads

6

Readme

FireAPI

FireAPI is a Node.js package that provides a convenient interface to interact with the Fire.com API. It allows you to create payment requests, check payment statuses, list transactions for accounts, and handle webhooks. The package handles authentication and API requests, making it easier to integrate Fire.com services into your applications.

Features

  • Generate access tokens for secure API communication
  • Create payment requests
  • Retrieve details of payment requests
  • Check the status of payments
  • List transactions for an account
  • Handle webhooks for event notifications

Installation

To install the package, use npm:

npm install fire-open-payments

Usage

Importing the Module

To use the FireAPI module in your project, import it as follows:

const FireAPI = require("fire-open-payments");

Initializing the FireAPI Class

To initialize the FireAPI class, you need to provide a configuration object with the following properties:

  • fire_client_id (string): Your Fire.com client ID
  • fire_client_key (string): Your Fire.com client key
  • fire_refresh_token (string): Your Fire.com refresh token
  • fire_mode (string): The mode of operation, either "live" or "sandbox"
const config = {
  fire_client_id: "your_client_id",
  fire_client_key: "your_client_key",
  fire_refresh_token: "your_refresh_token",
  fire_mode: "sandbox", // or 'live'
};

const fireAPI = new FireAPI(config);

Generating an Access Token

You can generate an access token using the getAccessToken method. This token is automatically used for subsequent API requests.

const accessToken = await fireAPI.getAccessToken();
console.log(accessToken);

Creating a Payment Request

To create a payment request, use the createPaymentRequest method. This method requires several parameters:

  • request_title (string): The title of the payment request.
  • amount (number): The amount to be paid.
  • details (string): Details about the payment.
  • currency (string): The currency code (e.g., 'EUR').
  • return_url (string, optional): The URL to redirect to after payment.
  • fire_account_no (string): The Fire account number to receive the payment.
  • reference (string): A reference for the payment.
  • expiry (string, optional): The expiry date of the payment request in ISO format.
const paymentRequestURL = await fireAPI.createPaymentRequest(
  "Payment Title",
  100.0,
  "Payment details",
  "EUR",
  "https://your-return-url.com",
  "fire_account_no", // account number to receive payment according to currency
  "reference123"
);
console.log(paymentRequestURL);

Retrieving a Payment Request

To retrieve the details of a specific payment request, use the getPaymentRequest method with the payment ID.

const paymentRequest = await fireAPI.getPaymentRequest("payment_id");
console.log(paymentRequest);

Checking Payment Status

To check the status of a payment, use the getPaymentRequestStatus method with the payment UUID.

const paymentStatus = await fireAPI.getPaymentRequestStatus("payment_uuid");
console.log(paymentStatus);

Listing Transactions

To list transactions for an account, use the getTransactions method with the account ID.

const transactions = await fireAPI.getTransactions("account_id");
console.log(transactions);

Handling Webhooks

Webhooks allow you to be notified of events as they happen on your Fire.com accounts. This is useful if you have systems that need to know when things happen on your account, such as payments or withdrawals.

Configuring Your Webhook Settings

You can set up webhooks in the Fire business application. There are a set of Webhook API Tokens in the Profile > Webhooks section. The key ID (kid) in the JWT header will be the webhooks public token, and you should use the corresponding private token as the secret to verify the signature on the JWT.

Designing Your Webhook Processing

In general, webhooks do not guarantee data integrity, as communication or errors on the sender/receiver side can occur. To address these potential issues, both the sender and the receiver applications need to provide for idempotency. Idempotency ensures that an operation can be executed "at least once" and "at most once", resulting in the same outcome each time.

To implement idempotency on the sender side, retrying failed webhook requests might be necessary to ensure that the operation is executed "at least once", and our system is designed to automatically retry failed requests three to five times, with a one-minute interval between each attempt.

To achieve idempotency on your (the receiver) side, you need to ensure the "at most once" principle by disregarding duplicates. This can be done by enforcing a unique constraint on the payload data, such as Txn_id.

Receiving a Webhook at Your Server

You will receive an array of events as they occur. In general, there will be only one event per message, but as your volume increases, we will gather all events in a short time-window into one call to your webhook. This reduces the load on your server.

When the data is sent to your webhook endpoint it will be signed and encoded using JWT (JSON Web Token). JWT is a compact URL-safe means of representing data to be transferred between two parties (see JWT.io for more details and to get a code library for your programming environment). The signature is created using a shared secret that only you and Fire.com have access to, so you can be sure that it came from us.

A JWT looks like this:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0TY3ODkwI...ibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

This needs to be decoded using the library from JWT.io. You should ensure that the signature is valid by checking the HS256 signature included in the JWT was created using the private token corresponding to the key ID (kid) in the header.

Example

Here is an example of a simple Express server that handles Fire.com webhooks:

const express = require("express");
const bodyParser = require("body-parser");
const jwt = require("jsonwebtoken");

const app = express();
app.use(bodyParser.json());

app.post("/webhook", (req, res) => {
  try {
    let token = req.body.toString("utf-8");
    const decoded = jwt.decode(token);
    if (decoded.status == "PAID" || decoded.status == "SETTLED") {
      //Handle payment success here
    } else if (decoded.status == "NOT_AUTHORISED") {
      //Handle payment failure here
    } else {
      //Handle other statuses here
    }

    res.status(200).send("OK");
  } catch (error) {
    res.status(401).send("Unauthorized");
  }
});

app.listen(3000, () => {
  console.log("Server is listening on port 3000");
});

Error Handling

Errors are logged to the console with detailed information. Ensure proper error handling in production environments.

try {
  const accessToken = await fireAPI.getAccessToken();
} catch (error) {
  console.error("Error generating access token:", error);
}

API Reference

Constructor

new FireAPI(config)

Creates an instance of the FireAPI class.

  • config (object): The configuration object containing required fields.

Methods

async getAccessToken()

Generates and returns an access token for API communication.

async createPaymentRequest(request_title, amount, details, currency, return_url, fire_account_no, reference, expiry)

Creates a payment request and returns the payment URL.

  • request_title (string): The title of the payment request.
  • amount (number): The amount to be paid.
  • details (string): Details about the payment.
  • currency (string): The currency code.
  • return_url (string, optional): The return URL after payment.
  • fire_account_no (string): The Fire account number.
  • reference (string): A reference for the payment.
  • expiry (string, optional): The expiry date in ISO format.

async getPaymentRequest(payment_id)

Retrieves details of a specific payment request.

  • payment_id (string): The ID of the payment request.

async getPaymentRequestStatus(payment_uuid)

Checks the status of a payment.

  • payment_uuid (string): The UUID of the payment.

async getTransactions(account_id)

Lists transactions for a specific account.

  • account_id (string): The ID of the account.

Contributing

Contributions are welcome! Please submit a pull request or open an issue to discuss changes.

License

This package is licensed under the MIT License.

Contact

For any questions or support, please contact [[email protected]].


Enjoy using FireAPI! If you have any feedback or issues, please don't hesitate to reach out.