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

digiflazz-client

v1.0.1

Published

SDK Klien tidak resmi untuk Digiflazz API

Readme

digiflazz-client

NPM VersionLicenseDownloadsBuilt with TypeScript

SDK Klien NodeJS tidak resmi (unofficial) yang modern, ringan, dan type-safe untuk berinteraksi dengan API Buyer Digiflazz.

Disclaimer: Perpustakaan ini dikembangkan secara independen dan tidak berafiliasi, didukung, atau secara resmi terhubung dengan Digiflazz.


Daftar Isi

Fitur Utama

  • Modern & Asynchronous: Dibangun dengan async/await untuk kode yang bersih dan mudah dibaca.
  • 🛡️ Type-Safe: Sepenuhnya ditulis dalam TypeScript, dengan tipe yang diekspor untuk semua request dan response.
  • 📦 Ringan: Hanya memiliki axios sebagai dependensi.
  • 🌐 Cakupan Penuh: Mendukung semua endpoint yang tersedia di dokumentasi API Buyer Digiflazz.
  • 🚨 Penanganan Error Jelas: Menyediakan custom error class (DigiflazzApiError) dengan ResponseCode enum untuk penanganan error yang spesifik.
  • 🇮🇩 Berbahasa Indonesia: Dirancang dengan nama metode dan dokumentasi yang mudah dipahami oleh developer Indonesia.

Instalasi

Gunakan manajer paket favorit Anda untuk menginstal.

# Menggunakan npm
npm install digiflazz-client

# Menggunakan yarn
yarn add digiflazz-client

# Menggunakan pnpm
pnpm add digiflazz-client

Penggunaan Dasar

Impor DigiflazzClient dan inisialisasi dengan username dan production key Anda.

import { DigiflazzClient, DigiflazzApiError } from 'digiflazz-client';
import { randomUUID } from 'crypto'; // Diperlukan untuk membuat ref_id unik

// Ganti dengan kredensial Anda dari dashboard Digiflazz
const USERNAME = 'USERNAME_ANDA';
const API_KEY = 'PRODUCTION_KEY_ANDA';

const client = new DigiflazzClient(USERNAME, API_KEY);

async function jalankanContoh() {
  try {
    // 1. Cek Saldo Anda
    const saldoInfo = await client.cekSaldo();
    console.log(`Saldo Anda saat ini: Rp ${saldoInfo.deposit.toLocaleString('id-ID')}`);

    // 2. Lakukan transaksi (gunakan testing: true agar tidak memotong saldo)
    const refId = randomUUID(); // Selalu gunakan ref_id yang unik untuk setiap transaksi
    const hasilTopUp = await client.topUp({
      buyer_sku_code: 'xld10', // Ganti dengan SKU produk yang valid
      customer_no: '087800001234',
      ref_id: refId,
      testing: true, 
    });

    console.log('Hasil Transaksi:', hasilTopUp);

  } catch (error) {
    if (error instanceof DigiflazzApiError) {
      // Tangani error spesifik dari API Digiflazz
      console.error('Terjadi kesalahan API Digiflazz:');
      console.error(`  Pesan: ${error.message}`);
      console.error(`  Kode Respon (rc): ${error.rc}`);
      console.error(`  Data Lengkap:`, error.responseData);
    } else {
      // Tangani error lain (misal: masalah jaringan)
      console.error('Terjadi kesalahan tidak terduga:', error);
    }
  }
}

jalankanContoh();

Dokumentasi API

Semua metode mengembalikan sebuah Promise.

cekSaldo()

Mengecek sisa saldo deposit Anda.

  • Returns: Promise<CekSaldoResponse>
const saldo = await client.cekSaldo();
// saldo -> { deposit: 1000000 }

daftarHarga(params)

Mendapatkan daftar harga produk prabayar atau pascabayar.

  • Parameters: DaftarHargaRequest (opsional)
    • cmd: 'prepaid' (default) atau 'pasca'.
  • Returns: Promise<HargaProduk[]>
// Mendapatkan semua produk prabayar
const semuaProduk = await client.daftarHarga();

// Mendapatkan semua produk pascabayar
const produkPasca = await client.daftarHarga({ cmd: 'pasca' });

console.log('Contoh Produk:', semuaProduk[0]);

requestDeposit(params)

Membuat tiket untuk permintaan deposit. API akan merespons dengan jumlah yang harus ditransfer (sudah termasuk kode unik) dan berita transfer.

  • Parameters: DepositRequest
    • amount: number (Jumlah yang diinginkan)
    • Bank: 'BCA' | 'MANDIRI' | 'BRI' | 'BNI'
    • owner_name: string (Nama pemilik rekening)
  • Returns: Promise<DepositResponse>
try {
  const tiketDeposit = await client.requestDeposit({
    amount: 50000,
    Bank: 'BCA',
    owner_name: 'Budi Santoso',
  });

  console.log(`Silakan transfer sejumlah: Rp ${tiketDeposit.amount.toLocaleString('id-ID')}`);
  console.log(`Dengan berita transfer: ${tiketDeposit.notes}`);
} catch (error) {
  console.error('Gagal membuat tiket deposit:', error);
}

topUp(params)

Melakukan pembelian produk prabayar.

  • Parameters: BaseTransaksiRequest
    • buyer_sku_code: string
    • customer_no: string
    • ref_id: string (ID transaksi unik dari sisi Anda)
    • testing?: boolean (opsional, set true untuk mode tes)
    • ...opsi lainnya
  • Returns: Promise<TransaksiResponse>
const hasil = await client.topUp({
  buyer_sku_code: 'xld25',
  customer_no: '087800001234',
  ref_id: 'trx-unik-12345',
});

inquiryPasca(params)

Mengecek tagihan produk pascabayar sebelum melakukan pembayaran.

  • Parameters: BaseTransaksiRequest
  • Returns: Promise<InquiryPascaResponse>
const tagihanPln = await client.inquiryPasca({
  buyer_sku_code: 'pln',
  customer_no: '530000000003',
  ref_id: 'inq-pln-67890',
});

console.log(`Nama Pelanggan: ${tagihanPln.customer_name}`);
console.log(`Total Tagihan: ${tagihanPln.selling_price}`);

inquiryPln(params)

Memvalidasi Nomor ID Pelanggan PLN dan mendapatkan detail pelanggan sebelum melakukan transaksi token listrik.

  • Parameters: InquiryPlnRequest
    • customer_no: string (ID Pelanggan PLN)
  • Returns: Promise<InquiryPlnResponse>
try {
  const detailPln = await client.inquiryPln({
    customer_no: '523300817840', // Ganti dengan ID PLN yang valid
  });

  if (detailPln.rc === '00') {
    console.log(`Validasi Sukses untuk: ${detailPln.name}`);
    console.log(`Daya: ${detailPln.segment_power}`);
  }
} catch (error) {
  // Tangani jika ID tidak ditemukan atau error lainnya
  console.error(error);
}

bayarPasca(params)

Melakukan pembayaran tagihan pascabayar setelah inquiry.

Penting: Gunakan ref_id yang sama persis dengan yang digunakan saat inquiryPasca.

  • Parameters: BaseTransaksiRequest
  • Returns: Promise<BayarPascaResponse>
const hasilBayar = await client.bayarPasca({
  buyer_sku_code: 'pln',
  customer_no: '530000000003',
  ref_id: 'inq-pln-67890', // <-- ref_id yang sama dengan inquiry
});

console.log(`Status Pembayaran: ${hasilBayar.message}`);

cekStatus(params)

Mengecek status sebuah transaksi yang sudah ada.

  • Parameters: CekStatusRequest
    • buyer_sku_code: string
    • customer_no: string
    • ref_id: string
  • Returns: Promise<TransaksiResponse>
const status = await client.cekStatus({
  buyer_sku_code: 'xld25',
  customer_no: '087800001234',
  ref_id: 'trx-unik-12345',
});

console.log(`Status transaksi terakhir: ${status.status} - ${status.message}`);

Penanganan Error

Library ini akan melempar DigiflazzApiError jika API mengembalikan respons dengan status selain "Sukses" (rc bukan '00'). Anda bisa menangkap error ini dan mengakses properti-propertinya untuk logic yang lebih detail.

Properti DigiflazzApiError:

  • message: Pesan error dari API.
  • rc: ResponseCode enum (contoh: ResponseCode.SaldoTidakCukup).
  • status: Status transaksi ('Gagal', 'Pending').
  • responseData: Objek respons lengkap dari API.
import { DigiflazzClient, DigiflazzApiError, ResponseCode } from 'digiflazz-client';

const client = new DigiflazzClient('user', 'key');

try {
  await client.topUp({
    buyer_sku_code: 'invalid-sku',
    customer_no: '08123',
    ref_id: 'test-error-1',
  });
} catch (error) {
  if (error instanceof DigiflazzApiError) {
    console.error(`Pesan: ${error.message}`);
    console.error(`Kode: ${error.rc}`);
    
    // Contoh logic berdasarkan response code
    if (error.rc === ResponseCode.SaldoTidakCukup) {
      console.log('Mohon isi ulang saldo Anda untuk melanjutkan transaksi.');
    } else if (error.rc === ResponseCode.SkuNotFound) {
      console.log('SKU produk tidak ditemukan atau tidak aktif.');
    }
  }
}

Tipe dan Enum

Untuk pengalaman pengembangan terbaik dengan TypeScript, semua tipe request, response, dan enum ResponseCode diekspor dari library.

import {
  DigiflazzClient,
  ResponseCode,
  HargaProduk,
  TransaksiResponse
} from 'digiflazz-client';

function cetakInfoProduk(produk: HargaProduk) {
  // ...
}

function prosesTransaksi(hasil: TransaksiResponse) {
  if (hasil.rc === ResponseCode.Sukses) {
    // ...
  }
}

Penanganan Webhook

Library ini menyediakan fungsi bantuan untuk menerima dan memverifikasi webhook dari Digiflazz dengan aman.

1. Verifikasi Signature & Parsing Payload

Gunakan fungsi verifyAndParseWebhook untuk memastikan request yang masuk benar-benar berasal dari Digiflazz.

Penting: Anda memerlukan middleware untuk mendapatkan raw body dari request. Contoh di bawah menggunakan express.raw().

Contoh Implementasi dengan Express.js:

import express from 'express';
import { verifyAndParseWebhook, DigiflazzWebhookError, WebhookEvent } from 'digiflazz-client';

const app = express();

// Secret key dari pengaturan webhook di dashboard Digiflazz Anda
const WEBHOOK_SECRET = 'SECRET_KEY_ANDA';

// Endpoint untuk menerima webhook dari Digiflazz
// Gunakan express.raw() agar kita mendapatkan body sebagai buffer/string
app.post(
  '/webhook-handler',
  express.raw({ type: 'application/json' }),
  (req, res) => {
    try {
      const { event, payload } = verifyAndParseWebhook({
        rawBody: req.body,
        headers: req.headers,
        secret: WEBHOOK_SECRET,
      });

      console.log(`Webhook terverifikasi! Event: ${event}`);
      
      // Lakukan sesuatu berdasarkan event
      switch (event) {
        case WebhookEvent.Create:
        case WebhookEvent.Update:
          // 'payload' di sini adalah tipe WebhookTransactionPayload
          console.log(`Transaksi ${payload.ref_id} statusnya menjadi: ${payload.status}`);
          // Contoh: Update status transaksi di database Anda
          break;
        case WebhookEvent.Ping:
          // 'payload' di sini adalah tipe PingEventPayload
          console.log(`Ping event diterima untuk hook ID: ${payload.hook_id}`);
          break;
      }

      res.status(200).send('Webhook diterima');
    } catch (error) {
      if (error instanceof DigiflazzWebhookError) {
        console.error('Error verifikasi webhook:', error.message);
        res.status(400).send(error.message);
      } else {
        console.error('Error tidak terduga:', error);
        res.status(500).send('Internal Server Error');
      }
    }
  }
);

app.listen(3000, () => {
  console.log('Server berjalan di port 3000');
});

2. Memicu Event Ping

Anda dapat secara manual memicu ping event untuk menguji konektivitas webhook Anda menggunakan metode triggerPing.

  • Parameters: webhookId: string
  • Returns: Promise<PingEventPayload>
import { DigiflazzClient } from 'digiflazz-client';

const client = new DigiflazzClient('USERNAME_ANDA', 'API_KEY_ANDA');
const WEBHOOK_ID = 'ID_WEBHOOK_ANDA'; // Dapat dilihat di dashboard

async function testPing() {
  try {
    const pingResult = await client.triggerPing(WEBHOOK_ID);
    console.log('Ping event berhasil dikirim!');
    console.log('Detail Hook:', pingResult.hook);
  } catch (error) {
    console.error('Gagal mengirim ping:', error);
  }
}

testPing();

Lisensi

Dilisensikan di bawah Lisensi MIT