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

cakkatrok-orkutapie

v1.5.1

Published

Library QRIS dan OrderKuota dengan login OTP, mutasi langsung, payment checker, dan payment link.

Readme

cakkatrok-orkutapie

Library Node.js untuk QRIS dinamis dan integrasi OrderKuota: generate QRIS nominal unik, buat link gambar QRIS, login OTP, ambil mutasi QRIS, dan cek status pembayaran.

Endpoint OrderKuota yang dipakai bukan API publik resmi. Perubahan endpoint, parameter, autentikasi, atau rate limit dapat terjadi kapan saja. Gunakan hanya untuk akun milik sendiri dan ikuti ketentuan layanan yang berlaku.

Credit dan contact person resmi: t.me/rintisdep. Tidak ada pihak lain yang mewakili package ini.

Fitur

  • Generate QRIS dinamis dari BASE_QRIS
  • Tambah kode unik otomatis pada nominal pembayaran
  • Buat gambar QRIS PNG dan link upload
  • Login OTP OrderKuota
  • Ambil mutasi QRIS langsung dari akun OrderKuota
  • Cek pembayaran berdasarkan nominal, referensi, atau window waktu
  • Support CommonJS, ESM, dan TypeScript declaration

Instalasi

npm install cakkatrok-orkutapie

Minimal runtime:

node >= 18

Keamanan

Package ini tidak membawa credential bawaan dan tidak membaca .env otomatis. Semua data sensitif harus dikirim dari aplikasi pemakai.

Data yang wajib disimpan aman:

  • BASE_QRIS
  • ORKUT_USERNAME
  • ORKUT_PASSWORD
  • ORKUT_TOKEN
  • ORKUT_DEVICE_SEED
  • session login OrderKuota

Simpan credential di environment variable, secret manager, database terenkripsi, atau storage aman lain. Jangan commit .env, session JSON, QRIS asli, token, atau hasil mutasi berisi data user.

Source package juga tidak menulis endpoint/secret default sebagai plain text penuh. Nilai default tertentu dipacking sebagai byte array, memakai key terpecah, lalu didecode saat runtime. Ini obfuscation untuk mengurangi kebocoran tidak sengaja dan scan string sederhana, bukan pengganti secret manager.

Environment

Contoh .env di aplikasi user:

BASE_QRIS=000201010211...
ORKUT_USERNAME=username_orderkuota
ORKUT_PASSWORD=password_orderkuota
ORKUT_DEVICE_SEED=device_seed_tetap
ORKUT_TOKEN=123456:token_rahasia

Jika memakai dotenv, load dari aplikasi user:

require('dotenv').config();

Package ini sengaja tidak memanggil dotenv.config() agar bisa dipakai di server, worker, CLI, atau platform deployment yang berbeda.

Quick Start

CommonJS:

const { QRISPaymentLink } = require('cakkatrok-orkutapie');

const paymentLink = new QRISPaymentLink({
  baseQrString: process.env.BASE_QRIS,
  expiredMs: 24 * 60 * 60 * 1000
});

const result = await paymentLink.create(50_000);

console.log({
  id: result.data.id,
  imageurl: result.data.imageurl,
  totalbayar: result.data.totalbayar,
  expired_at: result.data.expired_at
});

ESM:

import { QRISPaymentLink } from 'cakkatrok-orkutapie';

const paymentLink = new QRISPaymentLink({
  baseQrString: process.env.BASE_QRIS
});

const result = await paymentLink.create(50_000);
console.log(result.data.imageurl);

TypeScript:

import { QRISPaymentLink, type QRISPaymentLinkResponse } from 'cakkatrok-orkutapie';

const paymentLink = new QRISPaymentLink({
  baseQrString: process.env.BASE_QRIS!
});

const result: QRISPaymentLinkResponse = await paymentLink.create(50_000);
console.log(result.data.totalbayar);

Contoh response:

{
  "status": true,
  "data": {
    "id": "QRIS-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "status": "PENDING",
    "imageurl": "https://domain-upload.example/qr/xxxx.png",
    "nominal": 50000,
    "kodeunik": 606,
    "totalbayar": 50606,
    "created_at": "2026-07-06T00:00:00.000Z",
    "expired_at": "2026-07-07T00:00:00.000Z"
  },
  "code": 201
}

Generate QRIS Manual

const { QRISGenerator } = require('cakkatrok-orkutapie');

const generator = new QRISGenerator({
  baseQrString: process.env.BASE_QRIS
});

const payment = generator.generateQrStringWithUniqueCode(50_000, {
  min: 1,
  max: 999
});

console.log({
  nominal: payment.baseAmount,
  kodeunik: payment.uniqueCode,
  totalbayar: payment.totalAmount
});

Login OTP OrderKuota

const {
  OrderKuotaAuth,
  createOrderKuotaSessionData,
  redactSessionData
} = require('cakkatrok-orkutapie');

const auth = new OrderKuotaAuth({
  username: process.env.ORKUT_USERNAME,
  password: process.env.ORKUT_PASSWORD,
  deviceSeed: process.env.ORKUT_DEVICE_SEED
});

const request = await auth.requestOtp();
console.log('OTP dikirim ke:', request.destination);

const session = await auth.verifyOtp('123456');

const sessionData = createOrderKuotaSessionData({
  username: process.env.ORKUT_USERNAME,
  token: session.token,
  deviceSeed: process.env.ORKUT_DEVICE_SEED,
  deviceSeedSource: 'env'
});

console.log(redactSessionData(sessionData));

redactSessionData() hanya untuk log/preview. Simpan sessionData asli di storage aman aplikasi.

Cek Mutasi dan Pembayaran

const { PaymentChecker } = require('cakkatrok-orkutapie');

const checker = new PaymentChecker({
  auth_username: process.env.ORKUT_USERNAME,
  auth_token: process.env.ORKUT_TOKEN,
  deviceSeed: process.env.ORKUT_DEVICE_SEED,
  allowAmountOnly: true
});

const result = await checker.waitForPayment({
  reference: 'ORDER-123',
  amount: 50_606,
  startedAt: new Date(),
  matchMode: 'amount'
}, {
  intervalMs: 5_000,
  timeoutMs: 24 * 60 * 60 * 1000
});

console.log(result);

Custom Upload Endpoint

QRISPaymentLink memakai uploader default bawaan. Untuk production, sebaiknya pakai uploader milik aplikasi sendiri agar file QRIS berada di storage yang kamu kontrol.

const paymentLink = new QRISPaymentLink({
  baseQrString: process.env.BASE_QRIS,
  upload: async (image, fileName) => {
    await myStorage.put(fileName, image, { contentType: 'image/png' });
    return myStorage.publicUrl(fileName);
  }
});

Menjalankan Example

npm run example:payment-link:cjs
npm run example:payment-link:mjs
npm run example:payment-link:tsx

Git Bash:

export BASE_QRIS='000201010211...'
npm run example:payment-link:cjs

Load .env manual di Git Bash:

set -a
source .env
set +a
npm run example:payment-link:cjs

Test

npm test

Dry-run package sebelum publish:

npm run pack:check

Catatan

  • ORKUT_DEVICE_SEED disarankan stabil per user/perangkat agar identitas device konsisten.
  • Jika ORKUT_DEVICE_SEED kosong pada example tertentu, package dapat memakai IP jaringan lokal atau fallback.
  • Jangan tampilkan token penuh di log. Gunakan maskSecret() atau redactSessionData() untuk preview aman.
  • Credit/contact resmi hanya t.me/rintisdep.

Lisensi

MIT