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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@haybtech/sdk

v1.0.0

Published

Official Node.js SDK for HayBTech Payment Gateway

Readme

HayBTech Node.js SDK

Official Node.js SDK for the HayBTech Payment Gateway API -- mobile payments across West Africa .

NPM Node License


Installation

npm install @haybtech/sdk

Or with Yarn:

yarn add @haybtech/sdk

Quick Start (Zero-Config)

If you have HAYBTECH_SECRET_KEY set in your environment (e.g. via .env), you can initialize the SDK with zero configuration:

const haybtech = require('@haybtech/sdk')();

(Optional) You can also pass the key explicitly:

const haybtech = require('@haybtech/sdk')('sk_test_your_key');

// Using async/await
async function initiatePayment() {
  try {
    const response = await haybtech.payments.create({
      merchant_ref: 'ORDER-12345',
      amount: 5000,
      currency: 'XOF',
      return_url: 'https://mysite.com/success',
      cancel_url: 'https://mysite.com/cancel',
      callback_url: 'https://mysite.com/webhook'
    });

    console.log('Payment URL:', response.data.payment_url);
    
    // Express.js helper for redirection
    // response.redirect(res); 
  } catch (error) {
    console.error('API Error:', error.message);
  }
}

Webhooks (Express.js)

Securely verify incoming webhooks from HayBTech:

const { Webhook } = require('@haybtech/sdk');

// Important: Use raw body parser for webhook endpoints
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const payload = req.body.toString();
  const signature = req.headers['x-haybtech-signature'];
  const secret = 'whsec_...';

  try {
    const event = Webhook.constructEvent(payload, signature, secret);
    
    switch (event.event) {
      case 'payment.success':
        // Mark order as paid
        break;
      case 'payment.failed':
        // Handle failure
        break;
        break;
    }
    
    res.status(200).send('OK');
  } catch (err) {
    res.status(400).send(`Webhook Error: ${err.message}`);
  }
});

Available Events

| Event | Description | |:--------------------------|:-------------------------| | payment.success | Payment confirmed | | payment.failed | Payment failed | | payment.cancelled | Cancelled by customer | | payment.expired | Payment timed out | | payment.expired | Payment timed out |


Error Handling

try {
  const response = await haybtech.payments.create(params);
} catch (error) {
  console.error(error.message);    // Human-readable message
  console.error(error.statusCode); // HTTP status (400, 422, 500...)
  console.error(error.code);       // e.g., "insufficient_funds"
}

Test Mode

const haybtech = require('@haybtech/sdk')('sk_test_...'); // No real charges


Security Features

This SDK is built for Maximum Security:

  • Zero Dependencies: No third-party libraries (no Axios, no Lodash) to prevent supply chain attacks.
  • Secret Masking: Keys are automatically masked in logs and debug dumps.
  • Memory Protection: Webhook payloads are capped at 1 MB to prevent DoS.
  • Timing Attack Resistance: Uses crypto.timingSafeEqual for signature verification.
  • Immutability: Client configuration is frozen once initialized.
  • CRLF Guard: Prevents HTTP header injection via malformed keys.
  • Replay Protection: 5-minute timestamp tolerance on webhook signatures.

API Resources

| Resource | Description | |:----------------------|:-------------------------------------------| | haybtech.payments | Create, retrieve, list, and verify transactions | | haybtech.webhooks | Manage notification endpoints programmatically |


MIT License