zakkistore-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +774 -0
  2. package/index.d.ts +204 -0
  3. package/index.js +426 -0
  4. package/package.json +42 -0
package/README.md ADDED
@@ -0,0 +1,774 @@
1
+ <div align="center">
2
+ <img src="https://qris.zakki.store/icon.webp" width="120" alt="Zakki Store Logo" style="border-radius: 20px; box-shadow: 0 8px 24px rgba(0,0,0,0.12);">
3
+ <h1>🔌 Zakkistore SDK</h1>
4
+ <p><b>Node.js Official B2B Client Library</b></p>
5
+
6
+ [![Zakki Store Web Docs](https://img.shields.io/badge/ZAKKI%20STORE-WEB%20DOCS-6C5CE7?style=for-the-badge&logo=gitbook&logoColor=white)](https://qris.zakki.store)
7
+ [![GitHub Repository](https://img.shields.io/badge/GitHub-Repository-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/MrLow12/zakkistore-sdk)
8
+
9
+ [![WhatsApp](https://img.shields.io/badge/WHATSAPP-CHAT%20SUPPORT-25D366?style=for-the-badge&logo=whatsapp&logoColor=white)](https://wa.me/6283844082339)
10
+ [![Telegram](https://img.shields.io/badge/TELEGRAM-DEV%20CONTACT-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/zakki_store)
11
+ </div>
12
+
13
+ `zakkistore-sdk` adalah pustaka klien Node.js resmi yang dirancang untuk mempermudah integrasi sistem Host-to-Host (H2H) produk prabayar/pascabayar, gerbang pembayaran (Payment Gateway QRIS), layanan perbankan (Virtual Account & Transfer), sistem penambangan koin (Mining), serta layanan OTP nomor virtual (Noktel) Zakki Store ke dalam aplikasi Anda.
14
+
15
+ > [!NOTE]
16
+ > **🚀 Hubungi Developer untuk Akses API & Whitelist IP:**
17
+ > Pendaftaran IP partner B2B, pembukaan whitelist, atau keluhan error `[IP BLOCKED / UNREGISTERED]` dapat diselesaikan secara instan dengan menghubungi tim Developer Zakki Store via tombol **WhatsApp** atau **Telegram** di atas.
18
+
19
+ > [!TIP]
20
+ > **📦 Repositori Kode Sumber Terbuka (GitHub):**
21
+ > SDK Node.js ini bersifat open-source dan dikembangkan secara aktif. Anda dapat melihat kode sumber, melaporkan masalah, berkontribusi, atau melihat riwayat perubahan di **[GitHub Repository MrLow12/zakkistore-sdk](https://github.com/MrLow12/zakkistore-sdk)**.
22
+
23
+ ---
24
+
25
+ ## 🚀 Instalasi & Inisialisasi
26
+
27
+ Pasang pustaka SDK resmi melalui manajer paket NPM:
28
+
29
+ ```bash
30
+ npm install zakkistore-sdk
31
+ ```
32
+
33
+ Kemudian inisialisasi SDK di dalam project Node.js Anda:
34
+
35
+ ```javascript
36
+ const ZakkiStore = require('zakkistore-sdk');
37
+
38
+ // Inisialisasi SDK dengan parameter konfigurasi
39
+ const zakki = new ZakkiStore({
40
+ baseUrl: 'https://qris.zakki.store', // URL API Server Zakki Store Resmi
41
+ token: 'fake_api_token_abc123xyz', // Token API member Anda
42
+ iduser: 'IBO99', // ID User member Anda
43
+ email: 'b2b_partner@example.com', // Email terdaftar
44
+ pin: '123456', // PIN transaksi (wajib untuk tarik & tabung)
45
+ autoWithdraw: true // SET TRUE: Aktifkan penarikan saldo bank otomatis ke saldo apk!
46
+ });
47
+ ```
48
+
49
+ ---
50
+
51
+ ## 🛠️ Dukungan Kompatibilitas Multi-Modul (CJS, ESM, & TypeScript)
52
+
53
+ SDK ini didesain menggunakan arsitektur modern berkinerja tinggi, sangat ramah bagi pengembang, serta mendukung penuh berbagai macam lingkungan kerja JavaScript populer saat ini:
54
+
55
+ ### 1. CommonJS (CJS) - Node.js Tradisional
56
+ Sangat kompatibel untuk backend Express.js lama, bot Whatsapp/Telegram, maupun skrip server backend konvensional.
57
+ ```javascript
58
+ const ZakkiStore = require('zakkistore-sdk');
59
+
60
+ const zakki = new ZakkiStore({ ... });
61
+ ```
62
+
63
+ ### 2. ES Modules (ESM) - Node.js Modern
64
+ Mendukung penuh framework Node.js terbaru dengan `"type": "module"` di `package.json` atau skrip berbasis berkas `.mjs`.
65
+ ```javascript
66
+ import ZakkiStore from 'zakkistore-sdk';
67
+
68
+ const zakki = new ZakkiStore({ ... });
69
+ ```
70
+
71
+ ### 3. TypeScript (TS) & Bundlers (Vite/Next.js/Webpack)
72
+ Dilengkapi dengan berkas deklarasi tipe data bawaan secara resmi (`index.d.ts`), menyajikan fitur **100% Autocomplete & Intellisense**, deskripsi hover fungsi, serta validasi tipe data statis demi mempercepat waktu pengembangan.
73
+ ```typescript
74
+ import ZakkiStore from 'zakkistore-sdk';
75
+
76
+ const zakki = new ZakkiStore({
77
+ baseUrl: 'https://qris.zakki.store',
78
+ token: 'token_api_member',
79
+ autoWithdraw: true
80
+ });
81
+ ```
82
+
83
+ ---
84
+
85
+ ## 🌐 Arsitektur Fleksibel untuk Pembangunan Web Topup Otomatis
86
+
87
+ Pustaka `zakkistore-sdk` dirancang serbaguna dan fleksibel, menjadikannya pilihan ideal tidak hanya untuk bot pesan instan (WhatsApp & Telegram), melainkan juga sebagai mesin backend utama platform **Web Topup Saldo / Store Layanan Game (H2H)** milik Anda.
88
+
89
+ > [!CAUTION]
90
+ > ### 🛡️ PANDUAN PENTING KEAMANAN API UNTUK WEB TOPUP:
91
+ > Jangan pernah menginstansiasi SDK dan menyertakan token API Anda langsung di **sisi klien / browser publik (Client-side frontend)** pada aplikasi web Anda (seperti memanggilnya langsung di React, Vue, Svelte, atau berkas Javascript HTML biasa).
92
+ > - **⚠️ Bahaya Keamanan:** Token API Rahasia (`token`) dan PIN transaksi Anda akan mudah terlihat secara transparan oleh publik melalui tab *Network Inspector* browser, memungkinkan pihak luar mencuri seluruh saldo Anda.
93
+ > - **✅ Rekomendasi Solusi Keamanan:**
94
+ > Selalu pasang dan jalankan SDK ini di **sisi server backend** Anda:
95
+ > - **Next.js:** Integrasikan SDK di dalam rute API (`pages/api/*` atau `app/api/*`).
96
+ > - **Nuxt.js / SvelteKit:** Gunakan di dalam berkas server endpoints.
97
+ > - **Express.js / NestJS:** Panggil SDK di dalam Controller/Service server mandiri.
98
+ >
99
+ > *Buatkan rute jembatan khusus (contoh: `/api/pay-qris`) dari frontend web Anda yang mengarah ke server backend Anda secara terenkripsi.*
100
+
101
+ ---
102
+
103
+ ## 📑 Daftar Referensi Metode Lengkap & Struktur Output
104
+
105
+ Berikut adalah seluruh **22 fungsi resmi** yang didukung secara penuh oleh SDK beserta struktur respons JSON asli yang dikembalikan oleh API Server:
106
+
107
+ ---
108
+
109
+ ### 1. ⚡ Layanan Payment Gateway (QRIS Topup)
110
+
111
+ > [!TIP]
112
+ > **💡 Mengapa Memilih Payment Gateway QRIS Zakki Store?**
113
+ > - **⚡ Instant Settlement & Callback Real-time:** Setiap pembayaran QRIS diproses secara otomatis dalam milidetik. Begitu dana ditransfer oleh konsumen, saldo Anda langsung bertambah detik itu juga.
114
+ > - **🛡️ Sistem Validasi Kode Unik Berakurasi Tinggi:** Transaksi diverifikasi otomatis menggunakan nominal pencocokan kode unik tiga angka di akhir (contoh: nominal Rp 5.000 menjadi Rp 5.182), mencegah potensi kecurangan serta meniadakan proses verifikasi struk transfer manual.
115
+ > - **🧩 Fleksibilitas Integrasi Frontend Maksimal:** Server tidak hanya mengembalikan tautan gambar QR (`qris_image`), melainkan juga payload teks mentah (`qris_content` / raw string QRIS). Ini memberi Anda fleksibilitas luar biasa untuk merender QR code secara lokal di web/aplikasi Anda menggunakan pustaka Canvas, SVG, atau kustomisasi UI visual lainnya.
116
+ > - **💸 Bebas Setup Fee & Biaya Pemeliharaan:** Layanan gerbang pembayaran kelas enterprise ini dapat digunakan secara cuma-cuma tanpa ada biaya langganan bulanan tersembunyi bagi partner B2B.
117
+
118
+ #### A. Membuat Transaksi QRIS (`topup`)
119
+ Membuat QRIS dinamis untuk pembayaran atau pengisian saldo secara instan dan otomatis.
120
+ - **Sintaks:** `zakki.topup(nominal)`
121
+ - **Contoh:**
122
+ ```javascript
123
+ const res = await zakki.topup(5000);
124
+ ```
125
+ - **Struktur Output JSON Sukses (`code 201`):**
126
+ ```json
127
+ {
128
+ "code": 201,
129
+ "status": "success",
130
+ "message": "Silakan bayar sesuai TOTAL dalam 5 menit.",
131
+ "data": {
132
+ "id_transaksi": "topup-0a1b2c3d-IBO99",
133
+ "rincian": {
134
+ "nominal_request": 5000,
135
+ "kode_unik": 182,
136
+ "total_bayar": 5182
137
+ },
138
+ "expired_at": "2026-05-31T17:15:00.000Z",
139
+ "qris_image": "https://qris.zakki.store/images/qris_sample.png",
140
+ "qris_content": "00020101021226670016COM.NOBUBANK.WWW...",
141
+ "cancel_url": "https://qris.zakki.store/cancel?id_transaksi=topup-0a1b2c3d-IBO99",
142
+ "cektopup_url": "https://qris.zakki.store/cektopup?idtopup=topup-0a1b2c3d-IBO99",
143
+ "petunjuk_cek": "Simpan ID 'topup-0a1b2c3d-IBO99' untuk cek status nanti."
144
+ }
145
+ }
146
+ ```
147
+
148
+ #### B. Cek Status Pembayaran QRIS (`cektopup`)
149
+ Memeriksa status pembayaran dari ID topup QRIS.
150
+ - **Sintaks:** `zakki.cektopup(idtopup)`
151
+ - **Contoh:**
152
+ ```javascript
153
+ const res = await zakki.cektopup('topup-0a1b2c3d-IBO99');
154
+ ```
155
+ - **Struktur Output JSON (`code 200`):**
156
+ ```json
157
+ {
158
+ "code": 200,
159
+ "status": "found",
160
+ "kategori_status": "SUCCESS",
161
+ "message": "Transaksi ditemukan di Riwayat SUCCESS.",
162
+ "file_id": "topup-0a1b2c3d-IBO99",
163
+ "data": {
164
+ "id_transaksi": "topup-0a1b2c3d-IBO99",
165
+ "id_user": "IBO99",
166
+ "tipe": "TOPUP",
167
+ "nominal_asli": 5000,
168
+ "kode_unik": 182,
169
+ "nominal_total": 5182,
170
+ "status": "SUCCESS",
171
+ "created_at": "2026-05-31T17:10:00.000Z",
172
+ "expired_at": "2026-05-31T17:15:00.000Z",
173
+ "BotNotif": "Sukses"
174
+ }
175
+ }
176
+ ```
177
+
178
+ #### C. Membatalkan & Mengecek Transaksi Pending (`cancel`)
179
+ Fungsi `cancel` pada API nyata memiliki **3 Mode Operasi** yang sangat dinamis berdasarkan parameter yang dikirimkan:
180
+
181
+ - **Sintaks:** `zakki.cancel(id_transaksi, all)`
182
+ - **Parameter:**
183
+ - `id_transaksi` (String|null): ID transaksi spesifik (bisa ID penuh `'topup-0a1b2c3d-IBO99'` atau cukup ID tengahnya saja `'0a1b2c3d'`).
184
+ - `all` (Boolean): Jika `true`, membatalkan semua transaksi pending.
185
+
186
+ ---
187
+
188
+ ##### 🔹 MODE 1: Cek & Dapatkan Daftar Transaksi Pending Aktif (List Pending)
189
+ Jika Anda **tidak mengirimkan** `id_transaksi` dan mengisi parameter `all` sebagai `false` (atau mengosongkan keduanya).
190
+ - **Contoh Penggunaan:**
191
+ ```javascript
192
+ const res = await zakki.cancel(); // Mengambil daftar transaksi pending aktif
193
+ ```
194
+ - **Struktur Output JSON (`code 200`):**
195
+ ```json
196
+ {
197
+ "code": 200,
198
+ "status": "success",
199
+ "message": "Berhasil memuat daftar transaksi pending aktif.",
200
+ "pending_list": [
201
+ {
202
+ "id_transaksi": "topup-0a1b2c3d-IBO99",
203
+ "total_bayar": 5182,
204
+ "expired_at": "2026-05-31T17:15:00.000Z",
205
+ "qris_image": "https://qris.zakki.store/images/qris_sample.png"
206
+ }
207
+ ]
208
+ }
209
+ ```
210
+
211
+ ##### 🔹 MODE 2: Membatalkan Transaksi Tertentu (Specific Cancel)
212
+ Jika Anda mengisi `id_transaksi` (bisa ID penuh atau hanya bagian tengah UUID uniknya), dan `all` bernilai `false`.
213
+ - **Contoh Penggunaan:**
214
+ ```javascript
215
+ // Membatalkan transaksi tertentu secara spesifik
216
+ const res = await zakki.cancel('topup-0a1b2c3d-IBO99');
217
+ // Atau menggunakan UUID tengah saja (sistem backend akan otomatis mencarikan filenya):
218
+ const res = await zakki.cancel('0a1b2c3d');
219
+ ```
220
+ - **Struktur Output JSON (`code 200`):**
221
+ ```json
222
+ {
223
+ "code": 200,
224
+ "status": "success",
225
+ "message": "Transaksi pending 'topup-0a1b2c3d-IBO99' berhasil dihapus."
226
+ }
227
+ ```
228
+
229
+ ##### 🔹 MODE 3: Membatalkan Semua Transaksi Pending Sekaligus (Mass Cancel)
230
+ Membatalkan seluruh transaksi pending sekaligus secara praktis.
231
+ - **Contoh Penggunaan:**
232
+ ```javascript
233
+ const res = await zakki.cancel(true); // Membatalkan masal seluruh transaksi pending
234
+ ```
235
+ - **Struktur Output JSON (`code 200`):**
236
+ ```json
237
+ {
238
+ "code": 200,
239
+ "status": "success",
240
+ "message": "Berhasil membatalkan 3 transaksi pending."
241
+ }
242
+ ```
243
+
244
+ ---
245
+
246
+ ### 🛒 2. Layanan Transaksi H2H (Host-to-Host)
247
+
248
+ #### A. Membuka Katalog Produk (`listkode`)
249
+ Mencari daftar kode produk aktif, rincian keterangan, dan harga termurah.
250
+ - **Sintaks:** `zakki.listkode(jenis, type)`
251
+ - **Contoh:**
252
+ ```javascript
253
+ const res = await zakki.listkode('pulsa', 'telkomsel');
254
+ ```
255
+ - **Struktur Output JSON (`code 200`):**
256
+ ```json
257
+ {
258
+ "code": 200,
259
+ "status": "success",
260
+ "data": [
261
+ {
262
+ "kode": "S5",
263
+ "produk": "Telkomsel",
264
+ "keterangan": "Telkomsel Rp 5.000",
265
+ "harga": 5350,
266
+ "kategori": "Pulsa Reguler",
267
+ "status": "1",
268
+ "active": true
269
+ },
270
+ {
271
+ "kode": "S10",
272
+ "produk": "Telkomsel",
273
+ "keterangan": "Telkomsel Rp 10.000",
274
+ "harga": 10250,
275
+ "kategori": "Pulsa Reguler",
276
+ "status": "1",
277
+ "active": true
278
+ }
279
+ ]
280
+ }
281
+ ```
282
+
283
+ #### B. Mengirim Order Transaksi (`h2h`)
284
+ Melakukan pengiriman pembelian pulsa, paket kuota, token, atau pembayaran tagihan pascabayar.
285
+ - **Sintaks:** `zakki.h2h({ kode, tujuan, refID })`
286
+ - **Contoh:**
287
+ ```javascript
288
+ const res = await zakki.h2h({
289
+ kode: 'S5',
290
+ tujuan: '081234567890',
291
+ refID: 'PARTNER-TRX-00199'
292
+ });
293
+ ```
294
+ - **Struktur Output JSON (`code 200`):**
295
+ ```json
296
+ {
297
+ "code": 200,
298
+ "status": "success",
299
+ "message": "Transaksi H2H diproses.",
300
+ "data": {
301
+ "id_transaksi": "H2H-20260531-99882",
302
+ "refID": "PARTNER-TRX-00199",
303
+ "kode_produk": "S5",
304
+ "tujuan": "081234567890",
305
+ "status": "PROCESS",
306
+ "harga": 5350
307
+ }
308
+ }
309
+ ```
310
+
311
+ > [!IMPORTANT]
312
+ > **💡 DUAL-FLOW TRANSAKSI PASCABAYAR (CEK vs BAYAR TAGIHAN):**
313
+ > Layanan Pascabayar H2H (seperti PLN Tagihan, BPJS, PDAM, Indihome) menggunakan alur dua langkah yang sangat aman dan presisi:
314
+ >
315
+ > 1. **Langkah 1: Cek Tagihan / Inquiry (Lookup)**
316
+ > Gunakan kode produk cek/inquiry (biasanya berawalan `INQ`, `REV`, atau `C`, contoh: `INQPLN`). Pada langkah ini, **cukup kirimkan ID Pelanggan saja** pada parameter `tujuan`.
317
+ > * *Contoh:* `zakki.h2h({ kode: 'INQPLN', tujuan: '122345678901', refID: 'TRX-01' })` -> *Mengembalikan jumlah tagihan asli dari server.*
318
+ >
319
+ > 2. **Langkah 2: Eksekusi Pembayaran Tagihan (Payment)**
320
+ > Setelah mendapatkan jumlah nominal tagihan asli dari Langkah 1 (contoh: `Rp 125.000`), untuk mengeksekusi pembayaran resmi, Anda **wajib** menggabungkan ID Pelanggan dengan nominal tagihan tersebut menggunakan pemisah titik: **`[ID_Pelanggan].[Nominal_Tagihan]`** agar pemotongan saldo aman dan akurat di awal.
321
+ > * *Contoh:* `zakki.h2h({ kode: 'BPLN', tujuan: '122345678901.125000', refID: 'TRX-02' })` -> *Pembayaran diproses, saldo dipotong presisi.*
322
+ >
323
+ > ---
324
+ >
325
+ > **💡 FORMAT TRANSAKSI PRODUK BEBAS NOMINAL (CUSTOM AMOUNT):**
326
+ > Khusus untuk produk kategori **Bebas Nominal** (seperti Topup kustom saldo E-Wallet DANA, OVO, atau Gopay dengan nominal bebas yang ditentukan sendiri), Anda wajib menggabungkan nomor/ID tujuan dengan nominal transfer menggunakan pemisah tanda titik: **`[Tujuan].[Nominal]`** (Minimal Rp 10.000).
327
+ > - **Contoh:** `zakki.h2h({ kode: 'DANA_BEBAS', tujuan: '081234567890.25000', refID: 'TRX-03' })`
328
+
329
+ #### C. Cek Status Transaksi H2H (`cekh2h`)
330
+ Memeriksa status pengisian, serial number (SN), serta detail harga beli.
331
+ - **Sintaks:** `zakki.cekh2h(id)`
332
+ - **Contoh:**
333
+ ```javascript
334
+ const res = await zakki.cekh2h('PARTNER-TRX-00199');
335
+ ```
336
+ - **Struktur Output JSON (`code 200`):**
337
+ ```json
338
+ {
339
+ "code": 200,
340
+ "status": "success",
341
+ "data": {
342
+ "id_transaksi": "H2H-20260531-99882",
343
+ "refID": "PARTNER-TRX-00199",
344
+ "kode_produk": "S5",
345
+ "tujuan": "081234567890",
346
+ "status": "SUCCESS",
347
+ "sn": "629981882772927299",
348
+ "harga": 5350
349
+ }
350
+ }
351
+ ```
352
+
353
+ #### D. Riwayat Transaksi H2H Pribadi (`myh2h`)
354
+ Membuka daftar 20 riwayat pembelian H2H terupdate milik Anda.
355
+ - **Sintaks:** `zakki.myh2h()`
356
+ - **Struktur Output JSON (`code 200`):**
357
+ ```json
358
+ {
359
+ "code": 200,
360
+ "status": "success",
361
+ "total": 1,
362
+ "data": [
363
+ {
364
+ "id_transaksi": "H2H-20260531-99882",
365
+ "refID": "PARTNER-TRX-00199",
366
+ "kode": "S5",
367
+ "tujuan": "081234567890",
368
+ "status": "SUCCESS",
369
+ "sn": "629981882772927299",
370
+ "harga": 5350
371
+ }
372
+ ]
373
+ }
374
+ ```
375
+
376
+ ---
377
+
378
+ ### 🏦 3. Layanan Perbankan & Transfer Saldo
379
+
380
+ #### A. Cek Detail Saldo & Bank VA (`checkbank`)
381
+ Melihat sisa saldo aktif, no Virtual Account unik member, serta 20 riwayat mutasi.
382
+
383
+ > [!IMPORTANT]
384
+ > **🚀 FITUR UNGGULAN: Auto-Withdraw / Tarik Saldo Otomatis**
385
+ > SDK ini dilengkapi dengan sistem auto-withdraw yang sangat fleksibel dan efisien. Jika Anda mengaktifkan opsi `autoWithdraw: true` saat inisialisasi (atau memanggil `zakki.enableAutoWithdraw(true)`), maka setiap kali fungsi `checkbank()` dipanggil:
386
+ > 1. SDK akan otomatis mendeteksi jika saldo rekening virtual bank Anda lebih dari Rp 0 (`bank_detail.balance > 0`).
387
+ > 2. Tanpa perlu dipanggil manual oleh pengembang, SDK akan langsung memicu eksekusi internal fungsi `tarik()` di latar belakang untuk menarik seluruh dana bank tersebut masuk ke saldo utama aplikasi (BukaOlshop).
388
+ > 3. Hasil akhirnya, objek respon `checkbank()` akan disisipkan bendera sukses `auto_withdraw_executed: true` beserta jumlah yang ditarik, membuat siklus transaksi menjadi instan dan otomatis secara total!
389
+
390
+ - **Sintaks:** `zakki.checkbank()`
391
+ - **Mengaktifkan Secara Dinamis via Fungsi:** `zakki.enableAutoWithdraw(true)` (mengaktifkan) atau `zakki.enableAutoWithdraw(false)` (menonaktifkan).
392
+ - **Struktur Output JSON Biasa (`code 200`):**
393
+ ```json
394
+ {
395
+ "code": 200,
396
+ "status": "success",
397
+ "data": {
398
+ "bank_detail": {
399
+ "bank_name": "BANK ZAKKI STORE",
400
+ "account_holder": "zakkiXD",
401
+ "virtual_account": "888000000IBO99",
402
+ "balance": 150000,
403
+ "currency": "IDR",
404
+ "status": "ACTIVE"
405
+ },
406
+ "user_detail": {
407
+ "telegram_id": "1125495152",
408
+ "nama": "B2B Partner",
409
+ "email": "b2b_partner@example.com",
410
+ "poin": 25,
411
+ "total_h2h": 142
412
+ },
413
+ "riwayat_transaksi": [
414
+ {
415
+ "id_transaksi": "topup-0a1b2c3d-IBO99",
416
+ "tipe": "TOPUP",
417
+ "nominal_total": 5182,
418
+ "status": "SUCCESS",
419
+ "created_at": "2026-05-31T17:10:00.000Z"
420
+ }
421
+ ]
422
+ }
423
+ }
424
+ ```
425
+
426
+ - **Struktur Output JSON saat Auto-Withdraw Otomatis Berhasil Mengeksekusi Penarikan:**
427
+ ```json
428
+ {
429
+ "code": 200,
430
+ "status": "success",
431
+ "auto_withdraw_executed": true,
432
+ "auto_withdraw_amount": 150000,
433
+ "auto_withdraw_message": "Penarikan berhasil diproses.",
434
+ "data": {
435
+ "bank_detail": {
436
+ "bank_name": "BANK ZAKKI STORE",
437
+ "account_holder": "zakkiXD",
438
+ "virtual_account": "888000000IBO99",
439
+ "balance": 0,
440
+ "currency": "IDR",
441
+ "status": "ACTIVE"
442
+ },
443
+ "user_detail": {
444
+ "telegram_id": "1125495152",
445
+ "nama": "B2B Partner",
446
+ "email": "b2b_partner@example.com",
447
+ "poin": 25,
448
+ "total_h2h": 142
449
+ },
450
+ "riwayat_transaksi": [
451
+ {
452
+ "id_transaksi": "topup-0a1b2c3d-IBO99",
453
+ "tipe": "TOPUP",
454
+ "nominal_total": 5182,
455
+ "status": "SUCCESS",
456
+ "created_at": "2026-05-31T17:10:00.000Z"
457
+ }
458
+ ]
459
+ }
460
+ }
461
+ ```
462
+
463
+ #### B. Cek Nama Virtual Account Penerima (`checkname`)
464
+ Memverifikasi nama asli penerima sebelum melakukan transfer saldo antar member.
465
+ - **Sintaks:** `zakki.checkname(number)`
466
+ - **Contoh:**
467
+ ```javascript
468
+ const res = await zakki.checkname('888000000IBO01');
469
+ ```
470
+ - **Struktur Output JSON (`code 200`):**
471
+ ```json
472
+ {
473
+ "code": 200,
474
+ "status": "success",
475
+ "data": {
476
+ "virtual_account": "888000000IBO01",
477
+ "nama_user": "Ahmad Zakki",
478
+ "email_user": "ahmad.zakki@example.com"
479
+ }
480
+ }
481
+ ```
482
+
483
+ #### C. Transfer Saldo Antar VA Member (`transfer`)
484
+ Mengirim saldo dari dompet Anda ke nomor Virtual Account partner lain secara instan.
485
+ - **Sintaks:** `zakki.transfer({ to, amount })`
486
+ - **Contoh:**
487
+ ```javascript
488
+ const res = await zakki.transfer({
489
+ to: '888000000IBO01',
490
+ amount: 10000
491
+ });
492
+ ```
493
+ - **Struktur Output JSON (`code 200`):**
494
+ ```json
495
+ {
496
+ "code": 200,
497
+ "status": "success",
498
+ "message": "Transfer berhasil sebesar Rp 10.000 ke rekening 888000000IBO01."
499
+ }
500
+ ```
501
+
502
+ #### D. Menabung / Deposit ke Bank Terhubung (`tabung`)
503
+ - **Sintaks:** `zakki.tabung(jumlah)` *(Memerlukan PIN dalam inisialisasi)*
504
+ - **Contoh:** `await zakki.tabung(25000);`
505
+ - **Output:** `{ "code": 200, "message": "Tabungan berhasil diproses." }`
506
+
507
+ #### E. Menarik Dana dari Bank Terhubung (`tarik`)
508
+ - **Sintaks:** `zakki.tarik(jumlah)` *(Memerlukan PIN dalam inisialisasi)*
509
+ - **Contoh:** `await zakki.tarik(15000);`
510
+ - **Output:** `{ "code": 200, "message": "Penarikan berhasil diproses." }`
511
+
512
+ ---
513
+
514
+ ### 📱 4. Layanan Noktel (Beli Nomor & OTP)
515
+
516
+ #### A. Cek Persediaan Stok Ready (`noktelStok`)
517
+ Melihat seluruh stok nomor yang ready untuk dipesan.
518
+ - **Sintaks:** `zakki.noktelStok()`
519
+ - **Struktur Output JSON (`code 200`):**
520
+ ```json
521
+ {
522
+ "code": 200,
523
+ "status": "success",
524
+ "data": [
525
+ {
526
+ "id": "telegram-112233",
527
+ "phone": "+6289999999999",
528
+ "status": "available",
529
+ "price": 5000
530
+ }
531
+ ]
532
+ }
533
+ ```
534
+
535
+ #### B. Membeli Nomor OTP Baru (`noktelBuy`)
536
+ Membeli nomor virtual berdasarkan kategori/layanan.
537
+ - **Sintaks:** `zakki.noktelBuy(category)`
538
+ - **Contoh:**
539
+ ```javascript
540
+ const res = await zakki.noktelBuy('telegram');
541
+ ```
542
+ - **Struktur Output JSON (`code 200`):**
543
+ ```json
544
+ {
545
+ "code": 200,
546
+ "status": "success",
547
+ "message": "Pembelian nomor berhasil.",
548
+ "data": {
549
+ "success": true,
550
+ "invoice_id": "INV-171717171-IBO99",
551
+ "account": {
552
+ "id": "telegram-112233",
553
+ "phone": "+6289999999999",
554
+ "status": "sold",
555
+ "price": 5000,
556
+ "sold_to": "IBO99",
557
+ "sold_at": "2026-05-31T17:15:20.000Z"
558
+ },
559
+ "current_balance": 145000
560
+ }
561
+ }
562
+ ```
563
+
564
+ #### C. Tarik Kode OTP Telegram (`noktelGetOtp`)
565
+ Menarik kode OTP dari nomor yang dibeli.
566
+ - **Sintaks:** `zakki.noktelGetOtp(account_id)`
567
+ - **Contoh:**
568
+ ```javascript
569
+ const res = await zakki.noktelGetOtp('telegram-112233');
570
+ ```
571
+ - **Struktur Output JSON jika Sukses / Diterima:**
572
+ ```json
573
+ {
574
+ "code": 200,
575
+ "status": "success",
576
+ "data": {
577
+ "success": true,
578
+ "code": "84729",
579
+ "otp": "84729",
580
+ "new_device": "Telegram for Desktop",
581
+ "login_detected": true
582
+ }
583
+ }
584
+ ```
585
+
586
+ > [!CAUTION]
587
+ > **🔒 ANTI-FRAUD LOCKED RULES:**
588
+ > Demi menjaga keamanan saldo pemilik stok, **Invoice pembelian NOKTEL tidak dapat dibatalkan (Cancel / Refund) apabila kode OTP terdeteksi sudah berhasil masuk/terkirim ke pengguna**, baik pengguna sudah berhasil menyelesaikan proses login maupun belum.
589
+ > - **Status OTP Pending:** Refund diizinkan (`zakki.noktelCancel(inv)`)
590
+ > - **Status OTP Success:** Refund dikunci mati / ditolak.
591
+
592
+ #### D. Batalkan Pesanan & Refund (`noktelCancel`)
593
+ Membatalkan nomor yang masih pending OTP dan melakukan auto-refund saldo.
594
+ - **Sintaks:** `zakki.noktelCancel(invoice_id)`
595
+ - **Contoh:**
596
+ ```javascript
597
+ const res = await zakki.noktelCancel('INV-171717171-IBO99');
598
+ ```
599
+ - **Struktur Output JSON (`code 200`):**
600
+ ```json
601
+ {
602
+ "code": 200,
603
+ "status": "success",
604
+ "message": "Pembelian dibatalkan, saldo dikembalikan."
605
+ }
606
+ ```
607
+
608
+ #### E. Riwayat Transaksi Noktel (`noktelHistory`)
609
+ - **Sintaks:** `zakki.noktelHistory()`
610
+ - **Output:**
611
+ ```json
612
+ {
613
+ "code": 200,
614
+ "status": "success",
615
+ "data": [
616
+ {
617
+ "id": "INV-171717171-IBO99",
618
+ "account_id": "telegram-112233",
619
+ "phone": "+6289999999999",
620
+ "price": 5000,
621
+ "status": "sukses",
622
+ "timestamp": "2026-05-31T17:15:20.000Z",
623
+ "type": "NOKTEL"
624
+ }
625
+ ]
626
+ }
627
+ ```
628
+
629
+ ---
630
+
631
+ ### ⛏️ 5. Layanan Komputasi & Game (Mining & Gacha)
632
+
633
+ #### A. Cek Status Mining Global (`cekmining`)
634
+ Melihat status, tingkat kesulitan, serta parameter global dari sistem Mining koin secara realtime.
635
+ - **Sintaks:** `zakki.cekmining()`
636
+ - **Struktur Output JSON (`code 200`):**
637
+ ```json
638
+ {
639
+ "code": 200,
640
+ "status": "success",
641
+ "data": {
642
+ "difficulty": 4,
643
+ "block_reward": 50,
644
+ "total_mined": 12500,
645
+ "active_miners": 8,
646
+ "status": "ACTIVE"
647
+ }
648
+ }
649
+ ```
650
+
651
+ #### B. Cek Statistik Koin Mining Member (`mymining`)
652
+ - **Sintaks:** `zakki.mymining()`
653
+ - **Struktur Output JSON (`code 200`):**
654
+ ```json
655
+ {
656
+ "code": 200,
657
+ "status": "success",
658
+ "total": 22,
659
+ "data": [
660
+ {
661
+ "id_transfer": "Mining-7C3F81",
662
+ "amount": 200,
663
+ "timestamp": "2026-05-24T22:38:00.000Z",
664
+ "type": "terima",
665
+ "to": { "id_user": "IBO99", "name": "B2B Partner" }
666
+ }
667
+ ]
668
+ }
669
+ ```
670
+
671
+ #### C. Cek Status Keberuntungan Gacha (`cekgacha`)
672
+ - **Sintaks:** `zakki.cekgacha()`
673
+ - **Output:** `{ "code": 200, "status": "success", "total_points": 1420 }`
674
+
675
+ ---
676
+
677
+ ### 🛡️ 6. Layanan Keamanan API (Whitelist IP)
678
+
679
+ #### A. Mendaftarkan Whitelist IP Server (`whitelistip`)
680
+ Mendaftarkan IP host server B2B Anda agar diizinkan melakukan transaksi H2H via API.
681
+ - **Sintaks:** `zakki.whitelistip(ip)`
682
+ - **Contoh:**
683
+ ```javascript
684
+ const res = await zakki.whitelistip('123.45.67.89');
685
+ ```
686
+ - **Struktur Output JSON (`code 200`):**
687
+ ```json
688
+ {
689
+ "code": 200,
690
+ "status": "success",
691
+ "message": "IP '123.45.67.89' berhasil ditambahkan ke whitelist."
692
+ }
693
+ ```
694
+
695
+ #### B. Menghapus Whitelist IP Server (`delwhitelistip`)
696
+ - **Sintaks:** `zakki.delwhitelistip(ip)`
697
+ - **Contoh:** `await zakki.delwhitelistip('123.45.67.89');`
698
+ - **Output:** `{ "code": 200, "message": "IP berhasil dihapus." }`
699
+
700
+ ---
701
+
702
+ ### 📊 7. Layanan Analisis & Statistik Global (Leaderboard & Status)
703
+
704
+ #### A. Mengambil Data Leaderboard Topup Member (`leaderboard`)
705
+ Melihat daftar peringkat topup member teraktif berdasarkan total nilai topup dan jumlah transaksi dalam periode tertentu.
706
+ - **Sintaks:** `zakki.leaderboard(limit, period)`
707
+ - **Parameter:**
708
+ - `limit` (Number, default `10`): Batas jumlah user teratas yang ingin ditampilkan.
709
+ - `period` (String, default `'all'`): Periode akumulasi peringkat (`'all'`, `'today'`, `'month'`).
710
+ - **Contoh:**
711
+ ```javascript
712
+ const res = await zakki.leaderboard(5, 'month');
713
+ ```
714
+ - **Struktur Output JSON (`code 200`):**
715
+ ```json
716
+ {
717
+ "code": 200,
718
+ "status": "success",
719
+ "meta": {
720
+ "periode": "month",
721
+ "total_participants": 24,
722
+ "generated_at": "2026-05-31T17:40:00.000Z"
723
+ },
724
+ "leaderboard": [
725
+ {
726
+ "rank": 1,
727
+ "user_info": {
728
+ "nama": "Ahmad Zakki",
729
+ "id_user": "IBO01",
730
+ "virtual_account": "888000000IBO01"
731
+ },
732
+ "stats": {
733
+ "total_topup": 2500000,
734
+ "total_topup_formatted": "Rp 2.500.000",
735
+ "jumlah_transaksi": 45,
736
+ "terakhir_topup": "2026-05-31T17:35:00.000Z"
737
+ }
738
+ }
739
+ ]
740
+ }
741
+ ```
742
+
743
+ #### B. Mengambil Status Kesehatan & Statistik Global Sistem (`status`)
744
+ Melihat rangkuman total volume, laba/rugi, peredaran koin, jumlah transaksi aktif, dan audit status seluruh sistem.
745
+ - **Sintaks:** `zakki.status()`
746
+ - **Contoh:**
747
+ ```javascript
748
+ const res = await zakki.status();
749
+ ```
750
+ - **Struktur Output JSON (`code 200`):**
751
+ ```json
752
+ {
753
+ "total_users": 28,
754
+ "financials": {
755
+ "total_saldo_bank": 4500000,
756
+ "total_saldo_bukaolshop": 4520000,
757
+ "system_profit": 250000,
758
+ "total_injection": 5000000,
759
+ "total_loss": 5000
760
+ },
761
+ "h2h_metrics": {
762
+ "total_transactions": 1420,
763
+ "total_volume": 12500000,
764
+ "success_ratio": "98.4%"
765
+ },
766
+ "mining_metrics": {
767
+ "total_blocks_mined": 250,
768
+ "total_koin_mined": 12500
769
+ },
770
+ "status": "HEALTHY",
771
+ "timestamp": "2026-05-31T17:40:00.000Z"
772
+ }
773
+ ```
774
+