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.
- package/README.md +774 -0
- package/index.d.ts +204 -0
- package/index.js +426 -0
- package/package.json +42 -0
package/index.d.ts
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
declare class ZakkiStore {
|
|
2
|
+
/**
|
|
3
|
+
* Inisialisasi SDK Zakki Store
|
|
4
|
+
* @param config Konfigurasi kredensial utama partner B2B
|
|
5
|
+
*/
|
|
6
|
+
constructor(config: {
|
|
7
|
+
/** URL API Server Zakki Store Resmi (contoh: https://qris.zakki.store) */
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
/** Token API member Anda */
|
|
10
|
+
token: string;
|
|
11
|
+
/** ID User member Anda (opsional, dibutuhkan untuk beberapa endpoint) */
|
|
12
|
+
iduser?: string;
|
|
13
|
+
/** Email member Anda (opsional, dapat digunakan sebagai alternatif iduser) */
|
|
14
|
+
email?: string;
|
|
15
|
+
/** PIN transaksi member (opsional, dibutuhkan untuk penarikan/tabungan) */
|
|
16
|
+
pin?: string | number;
|
|
17
|
+
/** Fitur auto-withdrawal saldo bank otomatis ke saldo utama aplikasi (Default: false) */
|
|
18
|
+
autoWithdraw?: boolean;
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
baseUrl: string;
|
|
22
|
+
token: string;
|
|
23
|
+
iduser?: string;
|
|
24
|
+
email?: string;
|
|
25
|
+
pin?: string | number;
|
|
26
|
+
isAutoWithdraw: boolean;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Mengaktifkan atau menonaktifkan fitur Auto-Withdraw (Tarik Otomatis) secara dinamis
|
|
30
|
+
* @param status true untuk mengaktifkan, false untuk menonaktifkan
|
|
31
|
+
*/
|
|
32
|
+
enableAutoWithdraw(status: boolean): void;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 1. Create QRIS Topup
|
|
36
|
+
* Membuat transaksi QRIS dinamis untuk pembayaran atau pengisian saldo
|
|
37
|
+
* @param nominal Nominal topup (Min Rp 1.000)
|
|
38
|
+
*/
|
|
39
|
+
topup(nominal: number | string): Promise<any>;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 2. Cek Status Topup
|
|
43
|
+
* Memverifikasi pembayaran / status transaksi topup QRIS
|
|
44
|
+
* @param idtopup ID transaksi topup (contoh: topup-xxxx-xxxx)
|
|
45
|
+
*/
|
|
46
|
+
cektopup(idtopup: string): Promise<any>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 3. Buka/Cari Katalog Produk & Harga H2H
|
|
50
|
+
* Menampilkan semua jenis kode & harga produk yang aktif
|
|
51
|
+
* @param jenis Nama folder/kategori produk (contoh: pulsa, ewallet, pln)
|
|
52
|
+
* @param type Nama operator/tipe produk (contoh: axis, telkomsel, DANA)
|
|
53
|
+
*/
|
|
54
|
+
listkode(jenis?: string, type?: string): Promise<any>;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* 4. Kirim Order H2H (Host-to-Host)
|
|
58
|
+
* Melakukan pembelian pulsa, kuota, token, atau pembayaran tagihan
|
|
59
|
+
* @param payload Payload transaksi
|
|
60
|
+
*/
|
|
61
|
+
h2h(payload: {
|
|
62
|
+
/** Kode produk H2H (contoh: A5, BBSDN, BPLA) */
|
|
63
|
+
kode: string;
|
|
64
|
+
/** Nomor HP / ID Pelanggan. Untuk postpaid/nominal bebas wajib gunakan format: [Tujuan].[Nominal] */
|
|
65
|
+
tujuan: string;
|
|
66
|
+
/** RefID unik transaksi dari sistem Anda */
|
|
67
|
+
refID: string;
|
|
68
|
+
}): Promise<any>;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* 5. Cek Status Transaksi H2H
|
|
72
|
+
* Memverifikasi status order H2H (sukses, gagal, pending, SN, dll)
|
|
73
|
+
* @param id RefID unik, server ID, atau full ID transaksi H2H
|
|
74
|
+
*/
|
|
75
|
+
cekh2h(id: string): Promise<any>;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 6. Cek Riwayat H2H Member (20 Transaksi Terakhir)
|
|
79
|
+
*/
|
|
80
|
+
myh2h(): Promise<any>;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* 7. Cancel Transaksi Pending
|
|
84
|
+
* Membatalkan transaksi H2H atau topup QRIS yang masih dalam status pending/process
|
|
85
|
+
* @param id_transaksi ID transaksi yang ingin dibatalkan
|
|
86
|
+
* @param all Set true jika ingin membatalkan semua transaksi pending sekaligus
|
|
87
|
+
*/
|
|
88
|
+
cancel(id_transaksi?: string | null, all?: boolean): Promise<any>;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* 8. Tambah Whitelist IP API Member (Maksimal 3 IP)
|
|
92
|
+
* Mendaftarkan IP server/host Anda agar diizinkan melakukan transaksi H2H via API
|
|
93
|
+
* @param ip Alamat IP yang ingin didaftarkan (contoh: 123.45.67.89)
|
|
94
|
+
*/
|
|
95
|
+
whitelistip(ip: string): Promise<any>;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* 9. Hapus Whitelist IP API Member
|
|
99
|
+
* Menghapus alamat IP dari daftar whitelist akses API H2H
|
|
100
|
+
* @param ip Alamat IP yang ingin dihapus (contoh: 123.45.67.89)
|
|
101
|
+
*/
|
|
102
|
+
delwhitelistip(ip: string): Promise<any>;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* 10. Tabung (Deposit ke Akun Bank Terhubung)
|
|
106
|
+
* Mentransfer saldo aplikasi masuk ke rekening bank yang terhubung (Membutuhkan PIN)
|
|
107
|
+
* @param jumlah Nominal yang didepositkan ke bank
|
|
108
|
+
*/
|
|
109
|
+
tabung(jumlah: number | string): Promise<any>;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* 11. Tarik (Penarikan Saldo dari Bank Terhubung)
|
|
113
|
+
* Menarik dana dari rekening bank terhubung masuk ke saldo aplikasi (Membutuhkan PIN)
|
|
114
|
+
* @param jumlah Nominal penarikan dana
|
|
115
|
+
*/
|
|
116
|
+
tarik(jumlah: number | string): Promise<any>;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* 12. Transfer Saldo Antar Member
|
|
120
|
+
* Mentransfer sebagian saldo Anda ke rekening VA member/user Zakki Store lainnya
|
|
121
|
+
* @param payload Payload transfer
|
|
122
|
+
*/
|
|
123
|
+
transfer(payload: {
|
|
124
|
+
/** Nomor Virtual Account (VA) tujuan penerima */
|
|
125
|
+
to: string;
|
|
126
|
+
/** Jumlah saldo yang ditransfer */
|
|
127
|
+
amount: number | string;
|
|
128
|
+
}): Promise<any>;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* 13. Cek Nama Pemilik Virtual Account (VA)
|
|
132
|
+
* Memverifikasi nama asli pemegang nomor Virtual Account (VA) tujuan sebelum melakukan transfer
|
|
133
|
+
* @param number Nomor Virtual Account (VA) tujuan
|
|
134
|
+
*/
|
|
135
|
+
checkname(number: string): Promise<any>;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* 14. Check Bank / Cek Rekening & Mutasi Terhubung
|
|
139
|
+
* Melihat detail data rekening, nama bank, sisa saldo bank, serta 20 mutasi terakhir
|
|
140
|
+
*/
|
|
141
|
+
checkbank(): Promise<any>;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* 15. Cek Riwayat & Keuntungan Gacha Member
|
|
145
|
+
*/
|
|
146
|
+
cekgacha(): Promise<any>;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* 16. Cek Status Mining Global
|
|
150
|
+
*/
|
|
151
|
+
cekmining(): Promise<any>;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* 17. Cek Statistik Mining Pribadi
|
|
155
|
+
*/
|
|
156
|
+
mymining(): Promise<any>;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* 18. Cek Stok Nomor Telepon (Noktel)
|
|
160
|
+
*/
|
|
161
|
+
noktelStok(): Promise<any>;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* 19. Beli Nomor Telepon (Noktel)
|
|
165
|
+
* Melakukan pembelian nomor OTP untuk kategori/layanan tertentu
|
|
166
|
+
* @param category Kategori/layanan nomor (contoh: WhatsApp, Telegram, dll)
|
|
167
|
+
*/
|
|
168
|
+
noktelBuy(category: string): Promise<any>;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* 20. Batalkan Pembelian Nomor Telepon (Noktel)
|
|
172
|
+
* Membatalkan pembelian nomor dan mengembalikan saldo
|
|
173
|
+
* @param invoice_id ID Invoice pembelian yang ingin di-refund
|
|
174
|
+
*/
|
|
175
|
+
noktelCancel(invoice_id: string): Promise<any>;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* 21. Cek Riwayat Pembelian Nomor (Noktel)
|
|
179
|
+
*/
|
|
180
|
+
noktelHistory(): Promise<any>;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* 22. Mengambil OTP Terkini Nomor (Noktel)
|
|
184
|
+
* Melakukan request pengambilan kode OTP Telegram dari nomor yang dibeli
|
|
185
|
+
* @param account_id ID Akun nomor yang terdaftar
|
|
186
|
+
*/
|
|
187
|
+
noktelGetOtp(account_id: string): Promise<any>;
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* 23. Mendapatkan Leaderboard Topup Member
|
|
191
|
+
* Melihat peringkat topup member berdasarkan total transaksi, hari ini, atau bulan ini
|
|
192
|
+
* @param limit Jumlah pengguna teratas yang ingin dimuat (Default: 10)
|
|
193
|
+
* @param period Periode leaderboard ('all' | 'today' | 'month')
|
|
194
|
+
*/
|
|
195
|
+
leaderboard(limit?: number, period?: 'all' | 'today' | 'month' | string): Promise<any>;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* 24. Cek Status Kesehatan & Statistik Global Sistem
|
|
199
|
+
* Mengambil rangkuman statistik global sistem (total saldo, total pengguna, total volume H2H, dll)
|
|
200
|
+
*/
|
|
201
|
+
status(): Promise<any>;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export = ZakkiStore;
|
package/index.js
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
const http = require('http');
|
|
2
|
+
const https = require('https');
|
|
3
|
+
|
|
4
|
+
class ZakkiStore {
|
|
5
|
+
/**
|
|
6
|
+
* Inisialisasi SDK Zakki Store
|
|
7
|
+
* @param {Object} config Config credentials utama
|
|
8
|
+
* @param {string} config.baseUrl URL API Server Zakki Store (contoh: https://qris.zakki.store)
|
|
9
|
+
* @param {string} config.token Token API member Anda
|
|
10
|
+
* @param {string} [config.iduser] ID User member Anda (opsional, dibutuhkan untuk beberapa endpoint)
|
|
11
|
+
* @param {string} [config.email] Email member Anda (opsional, dapat digunakan sebagai alternatif iduser)
|
|
12
|
+
* @param {string|number} [config.pin] PIN transaksi member (opsional, dibutuhkan untuk tarik & tabung)
|
|
13
|
+
* @param {boolean} [config.autoWithdraw=false] Fitur auto-withdrawal saldo bank ke saldo aplikasi
|
|
14
|
+
*/
|
|
15
|
+
constructor({ baseUrl, token, iduser, email, pin, autoWithdraw = false }) {
|
|
16
|
+
if (!baseUrl) throw new Error('baseUrl wajib disertakan dalam konfigurasi SDK.');
|
|
17
|
+
if (!token) throw new Error('token wajib disertakan dalam konfigurasi SDK.');
|
|
18
|
+
|
|
19
|
+
this.baseUrl = baseUrl.replace(/\/$/, ''); // Buang trailing slash jika ada
|
|
20
|
+
this.token = token;
|
|
21
|
+
this.iduser = iduser;
|
|
22
|
+
this.email = email;
|
|
23
|
+
this.pin = pin;
|
|
24
|
+
this.isAutoWithdraw = !!autoWithdraw;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Internal request helper
|
|
29
|
+
* @private
|
|
30
|
+
*/
|
|
31
|
+
async _request(endpoint, method = 'GET', data = null) {
|
|
32
|
+
const url = `${this.baseUrl}${endpoint}`;
|
|
33
|
+
const options = {
|
|
34
|
+
method: method,
|
|
35
|
+
headers: {}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
if (data) {
|
|
39
|
+
if (method === 'GET') {
|
|
40
|
+
// Untuk GET, ubah data objek menjadi query string
|
|
41
|
+
const queryParams = new URLSearchParams(data).toString();
|
|
42
|
+
return this._request(`${endpoint}?${queryParams}`, 'GET');
|
|
43
|
+
} else {
|
|
44
|
+
// Untuk POST/PUT/DELETE, kirim sebagai JSON
|
|
45
|
+
options.headers['Content-Type'] = 'application/json';
|
|
46
|
+
options.body = JSON.stringify(data);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
const response = await fetch(url, options);
|
|
52
|
+
const resJson = await response.json();
|
|
53
|
+
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
let errMsg = resJson.message || `HTTP Error! Status: ${response.status}`;
|
|
56
|
+
if (response.status === 403 || errMsg.toLowerCase().includes('ip')) {
|
|
57
|
+
errMsg += `\n⚠️ [IP BLOCKED / UNREGISTERED] IP Anda diblokir atau belum terdaftar di whitelist API. Silakan hubungi developer via WhatsApp (https://wa.me/6283844082339) atau Telegram (https://t.me/zakki_store) untuk mendapatkan bantuan.`;
|
|
58
|
+
}
|
|
59
|
+
throw new Error(errMsg);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return resJson;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
if (error.message.includes('[ZakkiStore SDK Error]')) {
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
throw new Error(`[ZakkiStore SDK Error] ${error.message}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* 1. Create QRIS Topup
|
|
73
|
+
* Membuat transaksi QRIS dinamis untuk topup saldo
|
|
74
|
+
* @param {number|string} nominal Nominal topup (Min Rp 1.000)
|
|
75
|
+
* @returns {Promise<Object>} Respon detail transaksi QRIS
|
|
76
|
+
*/
|
|
77
|
+
async topup(nominal) {
|
|
78
|
+
return this._request('/topup', 'POST', {
|
|
79
|
+
token: this.token,
|
|
80
|
+
nominal: parseInt(nominal)
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* 2. Cek Status Topup
|
|
86
|
+
* Memverifikasi pembayaran / status transaksi topup QRIS
|
|
87
|
+
* @param {string} idtopup ID transaksi topup (contoh: topup-xxxx-xxxx)
|
|
88
|
+
* @returns {Promise<Object>} Respon status transaksi topup
|
|
89
|
+
*/
|
|
90
|
+
async cektopup(idtopup) {
|
|
91
|
+
return this._request('/cektopup', 'GET', {
|
|
92
|
+
idtopup: idtopup
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* 3. Buka/Cari Katalog Produk & Harga H2H
|
|
98
|
+
* Menampilkan semua jenis kode & harga produk yang aktif
|
|
99
|
+
* @param {string} [jenis] Nama folder/kategori produk (contoh: pulsa, ewallet, pln)
|
|
100
|
+
* @param {string} [type] Nama operator/tipe produk (contoh: axis, telkomsel, DANA)
|
|
101
|
+
* @returns {Promise<Object>} Daftar list kode produk & harga terupdate
|
|
102
|
+
*/
|
|
103
|
+
async listkode(jenis, type) {
|
|
104
|
+
const params = {};
|
|
105
|
+
if (jenis) params.jenis = jenis;
|
|
106
|
+
if (type) params.type = type;
|
|
107
|
+
return this._request('/listkode', 'GET', params);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* 4. Kirim Order H2H (Host-to-Host)
|
|
112
|
+
* Melakukan pembelian pulsa, kuota, token, atau pembayaran tagihan
|
|
113
|
+
* @param {Object} payload Payload transaksi
|
|
114
|
+
* @param {string} payload.kode Kode produk H2H (contoh: A5, BBSDN, BPLA)
|
|
115
|
+
* @param {string} payload.tujuan Nomor HP / ID Pelanggan. Untuk eksekusi bayar tagihan pascabayar & produk bebas nominal, wajib gunakan format: [Tujuan].[Nominal]
|
|
116
|
+
* @param {string} payload.refID RefID unik transaksi dari sistem Anda
|
|
117
|
+
* @returns {Promise<Object>} Respon awal penempatan transaksi
|
|
118
|
+
*/
|
|
119
|
+
async h2h({ kode, tujuan, refID }) {
|
|
120
|
+
return this._request('/h2h', 'POST', {
|
|
121
|
+
token: this.token,
|
|
122
|
+
kode,
|
|
123
|
+
tujuan,
|
|
124
|
+
refID
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* 5. Cek Status Transaksi H2H
|
|
130
|
+
* Memverifikasi status order H2H (sukses, gagal, pending, SN, dll)
|
|
131
|
+
* @param {string} id RefID unik, server ID, atau full ID transaksi H2H
|
|
132
|
+
* @returns {Promise<Object>} Respon status transaksi H2H
|
|
133
|
+
*/
|
|
134
|
+
async cekh2h(id) {
|
|
135
|
+
return this._request('/cekh2h', 'GET', {
|
|
136
|
+
id: id
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* 6. Cek Riwayat H2H Member (20 Transaksi Terakhir)
|
|
142
|
+
* Melihat daftar 20 riwayat transaksi H2H milik Anda
|
|
143
|
+
* @returns {Promise<Object>} Respon daftar transaksi H2H terupdate
|
|
144
|
+
*/
|
|
145
|
+
async myh2h() {
|
|
146
|
+
return this._request('/myh2h', 'GET', {
|
|
147
|
+
token: this.token
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* 7. Cancel Transaksi Pending
|
|
153
|
+
* Membatalkan transaksi H2H yang masih dalam status pending/process
|
|
154
|
+
* @param {string} [id_transaksi] ID transaksi H2H yang ingin dibatalkan
|
|
155
|
+
* @param {boolean} [all=false] Set true jika ingin membatalkan semua transaksi pending sekaligus
|
|
156
|
+
* @returns {Promise<Object>} Respon pembatalan transaksi
|
|
157
|
+
*/
|
|
158
|
+
async cancel(id_transaksi, all = false) {
|
|
159
|
+
const payload = { token: this.token };
|
|
160
|
+
|
|
161
|
+
// Fleksibilitas Pintar: Jika parameter pertama dikirim sebagai boolean (true/false)
|
|
162
|
+
if (typeof id_transaksi === 'boolean') {
|
|
163
|
+
all = id_transaksi;
|
|
164
|
+
id_transaksi = null;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (id_transaksi) payload.id_transaksi = id_transaksi;
|
|
168
|
+
if (all) payload.all = true;
|
|
169
|
+
return this._request('/cancel', 'POST', payload);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* 8. Tambah Whitelist IP API Member (Maksimal 3 IP)
|
|
174
|
+
* Mendaftarkan IP server/host Anda agar diizinkan melakukan transaksi H2H via API
|
|
175
|
+
* @param {string} ip Alamat IP yang ingin didaftarkan (contoh: 123.45.67.89)
|
|
176
|
+
* @returns {Promise<Object>} Respon status penambahan IP whitelist
|
|
177
|
+
*/
|
|
178
|
+
async whitelistip(ip) {
|
|
179
|
+
return this._request('/whitelistip', 'POST', {
|
|
180
|
+
token: this.token,
|
|
181
|
+
ip: String(ip).trim()
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* 9. Hapus Whitelist IP API Member
|
|
187
|
+
* Menghapus alamat IP dari daftar whitelist akses API H2H
|
|
188
|
+
* @param {string} ip Alamat IP yang ingin dihapus (contoh: 123.45.67.89)
|
|
189
|
+
* @returns {Promise<Object>} Respon status penghapusan IP whitelist
|
|
190
|
+
*/
|
|
191
|
+
async delwhitelistip(ip) {
|
|
192
|
+
return this._request('/delwhitelistip', 'POST', {
|
|
193
|
+
token: this.token,
|
|
194
|
+
ip: String(ip).trim()
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* 10. Tabung (Deposit ke Akun Bank Terhubung)
|
|
200
|
+
* Mentransfer saldo aplikasi masuk ke rekening bank yang terhubung
|
|
201
|
+
* @param {number|string} jumlah Nominal yang didepositkan ke bank
|
|
202
|
+
* @returns {Promise<Object>} Respon pemrosesan tabungan
|
|
203
|
+
*/
|
|
204
|
+
async tabung(jumlah) {
|
|
205
|
+
if (!this.pin) throw new Error('PIN transaksi diperlukan untuk melakukan transaksi tabung.');
|
|
206
|
+
const payload = {
|
|
207
|
+
token: this.token,
|
|
208
|
+
jumlah: parseInt(jumlah),
|
|
209
|
+
pin: this.pin
|
|
210
|
+
};
|
|
211
|
+
if (this.iduser) payload.iduser = this.iduser;
|
|
212
|
+
if (this.email) payload.email = this.email;
|
|
213
|
+
return this._request('/tabung', 'POST', payload);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* 11. Tarik (Penarikan Saldo dari Bank Terhubung)
|
|
218
|
+
* Menarik dana dari rekening bank terhubung masuk ke saldo aplikasi
|
|
219
|
+
* @param {number|string} jumlah Nominal penarikan dana
|
|
220
|
+
* @returns {Promise<Object>} Respon pemrosesan penarikan
|
|
221
|
+
*/
|
|
222
|
+
async tarik(jumlah) {
|
|
223
|
+
if (!this.pin) throw new Error('PIN transaksi diperlukan untuk melakukan transaksi tarik.');
|
|
224
|
+
const payload = {
|
|
225
|
+
token: this.token,
|
|
226
|
+
jumlah: parseInt(jumlah),
|
|
227
|
+
pin: this.pin
|
|
228
|
+
};
|
|
229
|
+
if (this.iduser) payload.iduser = this.iduser;
|
|
230
|
+
if (this.email) payload.email = this.email;
|
|
231
|
+
return this._request('/tarik', 'POST', payload);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* 12. Transfer Saldo Antar Member
|
|
236
|
+
* Mentransfer sebagian saldo Anda ke rekening VA member/user Zakki Store lainnya
|
|
237
|
+
* @param {Object} payload Payload transfer
|
|
238
|
+
* @param {string} payload.to Nomor Virtual Account (VA) tujuan penerima
|
|
239
|
+
* @param {number|string} payload.amount Jumlah saldo yang ditransfer
|
|
240
|
+
* @returns {Promise<Object>} Respon sukses/gagal transfer
|
|
241
|
+
*/
|
|
242
|
+
async transfer({ to, amount }) {
|
|
243
|
+
return this._request('/transfer', 'POST', {
|
|
244
|
+
token: this.token,
|
|
245
|
+
to,
|
|
246
|
+
amount: parseInt(amount)
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* 13. Cek Nama Pemilik Virtual Account (VA)
|
|
252
|
+
* Memverifikasi nama asli pemegang nomor Virtual Account (VA) tujuan sebelum melakukan transfer
|
|
253
|
+
* @param {string} number Nomor Virtual Account (VA) tujuan
|
|
254
|
+
* @returns {Promise<Object>} Detail Virtual Account & Nama Pemegang Rekening
|
|
255
|
+
*/
|
|
256
|
+
async checkname(number) {
|
|
257
|
+
return this._request('/checkname', 'GET', {
|
|
258
|
+
number: String(number).trim()
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Mengaktifkan atau menonaktifkan fitur Auto-Withdraw (Tarik Otomatis)
|
|
264
|
+
* @param {boolean} status true untuk mengaktifkan, false untuk menonaktifkan
|
|
265
|
+
*/
|
|
266
|
+
enableAutoWithdraw(status) {
|
|
267
|
+
this.isAutoWithdraw = !!status;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* 14. Check Bank / Cek Rekening & Mutasi Terhubung
|
|
272
|
+
* Melihat detail data rekening, nama bank, sisa saldo bank, serta 20 mutasi terakhir.
|
|
273
|
+
* Jika auto-withdraw aktif dan saldo bank > 0, akan otomatis ditarik ke saldo aplikasi.
|
|
274
|
+
* @returns {Promise<Object>} Detail mutasi dan informasi bank
|
|
275
|
+
*/
|
|
276
|
+
async checkbank() {
|
|
277
|
+
const payload = { token: this.token };
|
|
278
|
+
if (this.iduser) payload.iduser = this.iduser;
|
|
279
|
+
if (this.email) payload.email = this.email;
|
|
280
|
+
|
|
281
|
+
let bankRes = await this._request('/checkbank', 'GET', payload);
|
|
282
|
+
|
|
283
|
+
// Logika Auto-Withdraw otomatis tanpa dipanggil manual
|
|
284
|
+
if (this.isAutoWithdraw && bankRes.data && bankRes.data.bank_detail && bankRes.data.bank_detail.balance > 0) {
|
|
285
|
+
const balanceToWithdraw = bankRes.data.bank_detail.balance;
|
|
286
|
+
try {
|
|
287
|
+
// Eksekusi fungsi penarikan otomatis
|
|
288
|
+
const withdrawRes = await this.tarik(balanceToWithdraw);
|
|
289
|
+
|
|
290
|
+
// Ambil kembali informasi bank terbaru setelah berhasil ditarik
|
|
291
|
+
bankRes = await this._request('/checkbank', 'GET', payload);
|
|
292
|
+
|
|
293
|
+
// Sematkan flag sukses auto-withdraw ke dalam respon data
|
|
294
|
+
bankRes.auto_withdraw_executed = true;
|
|
295
|
+
bankRes.auto_withdraw_amount = balanceToWithdraw;
|
|
296
|
+
bankRes.auto_withdraw_message = withdrawRes.message || 'Auto-withdraw berhasil dijalankan.';
|
|
297
|
+
} catch (err) {
|
|
298
|
+
// Sematkan flag gagal ke dalam respon data
|
|
299
|
+
bankRes.auto_withdraw_executed = false;
|
|
300
|
+
bankRes.auto_withdraw_error = err.message;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
return bankRes;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* 15. Cek Riwayat & Keuntungan Gacha Member
|
|
309
|
+
* Melihat riwayat penukaran gacha serta total keuntungan koin gacha Anda
|
|
310
|
+
* @returns {Promise<Object>} Detail riwayat & total bonus gacha
|
|
311
|
+
*/
|
|
312
|
+
async cekgacha() {
|
|
313
|
+
return this._request('/cekgacha', 'GET', {
|
|
314
|
+
token: this.token
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* 16. Cek Status Mining Global
|
|
320
|
+
* Melihat status, tingkat kesulitan, serta parameter global dari sistem Mining koin
|
|
321
|
+
* @returns {Promise<Object>} Detail status mining server
|
|
322
|
+
*/
|
|
323
|
+
async cekmining() {
|
|
324
|
+
return this._request('/cekmining', 'GET', {
|
|
325
|
+
token: this.token
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* 17. Cek Statistik Mining Pribadi
|
|
331
|
+
* Melihat data statistik dan pencapaian mining koin milik Anda pribadi
|
|
332
|
+
* @returns {Promise<Object>} Detail statistik mining user
|
|
333
|
+
*/
|
|
334
|
+
async mymining() {
|
|
335
|
+
return this._request('/mymining', 'GET', {
|
|
336
|
+
token: this.token
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* 18. Cek Stok Nomor Telepon (Noktel)
|
|
342
|
+
* Mengambil daftar nomor telepon (stok) yang tersedia untuk dibeli
|
|
343
|
+
* @returns {Promise<Object>} Respon stok nomor telepon yang ready
|
|
344
|
+
*/
|
|
345
|
+
async noktelStok() {
|
|
346
|
+
return this._request('/noktel/stok', 'GET', {
|
|
347
|
+
token: this.token
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* 19. Beli Nomor Telepon (Noktel)
|
|
353
|
+
* Melakukan pembelian nomor OTP untuk kategori/layanan tertentu
|
|
354
|
+
* @param {string} category Kategori/layanan nomor (contoh: WhatsApp, Telegram, dll)
|
|
355
|
+
* @returns {Promise<Object>} Respon status pembelian nomor
|
|
356
|
+
*/
|
|
357
|
+
async noktelBuy(category) {
|
|
358
|
+
return this._request('/noktel/buy', 'POST', {
|
|
359
|
+
token: this.token,
|
|
360
|
+
category: String(category).trim()
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* 20. Batalkan Pembelian Nomor Telepon (Noktel)
|
|
366
|
+
* Membatalkan pembelian nomor dan mengembalikan saldo
|
|
367
|
+
* @param {string} invoice_id ID Invoice pembelian yang ingin di-refund
|
|
368
|
+
* @returns {Promise<Object>} Respon status pembatalan dan refund
|
|
369
|
+
*/
|
|
370
|
+
async noktelCancel(invoice_id) {
|
|
371
|
+
return this._request('/noktel/cancel', 'POST', {
|
|
372
|
+
token: this.token,
|
|
373
|
+
invoice_id: String(invoice_id).trim()
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* 21. Cek Riwayat Pembelian Nomor (Noktel)
|
|
379
|
+
* Mengambil seluruh daftar riwayat transaksi nomor Anda
|
|
380
|
+
* @returns {Promise<Object>} Daftar invoice pembelian nomor
|
|
381
|
+
*/
|
|
382
|
+
async noktelHistory() {
|
|
383
|
+
return this._request('/noktel/history', 'GET', {
|
|
384
|
+
token: this.token
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* 22. Mengambil OTP Terkini Nomor (Noktel)
|
|
390
|
+
* Melakukan request pengambilan kode OTP Telegram dari nomor yang dibeli
|
|
391
|
+
* @param {string} account_id ID Akun nomor yang terdaftar
|
|
392
|
+
* @returns {Promise<Object>} Detail kode OTP terbaru
|
|
393
|
+
*/
|
|
394
|
+
async noktelGetOtp(account_id) {
|
|
395
|
+
return this._request('/noktel/getotp', 'GET', {
|
|
396
|
+
token: this.token,
|
|
397
|
+
account_id: String(account_id).trim()
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* 23. Mendapatkan Leaderboard Topup Member
|
|
403
|
+
* Melihat peringkat topup member berdasarkan total transaksi, hari ini, atau bulan ini
|
|
404
|
+
* @param {number} [limit=10] Jumlah pengguna teratas yang ingin dimuat
|
|
405
|
+
* @param {string} [period='all'] Periode leaderboard ('all', 'today', 'month')
|
|
406
|
+
* @returns {Promise<Object>} Respon peringkat leaderboard
|
|
407
|
+
*/
|
|
408
|
+
async leaderboard(limit = 10, period = 'all') {
|
|
409
|
+
return this._request('/leaderboard', 'GET', {
|
|
410
|
+
limit: parseInt(limit),
|
|
411
|
+
period: String(period).trim()
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* 24. Cek Status Kesehatan & Statistik Global Sistem
|
|
417
|
+
* Mengambil rangkuman statistik global sistem (total saldo, total pengguna, total volume H2H, dll)
|
|
418
|
+
* @returns {Promise<Object>} Respon data statistik global sistem
|
|
419
|
+
*/
|
|
420
|
+
async status() {
|
|
421
|
+
return this._request('/status', 'GET');
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
module.exports = ZakkiStore;
|
|
426
|
+
module.exports.default = ZakkiStore;
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "zakkistore-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "SDK Node.js Resmi untuk Integrasi Layanan Payment Gateway QRIS & Host-to-Host (H2H) Zakki Store",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./index.d.ts",
|
|
10
|
+
"require": "./index.js",
|
|
11
|
+
"import": "./index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/MrLow12/zakkistore-sdk.git"
|
|
20
|
+
},
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/MrLow12/zakkistore-sdk/issues"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/MrLow12/zakkistore-sdk#readme",
|
|
25
|
+
"keywords": [
|
|
26
|
+
"qris",
|
|
27
|
+
"payment",
|
|
28
|
+
"gateway",
|
|
29
|
+
"h2h",
|
|
30
|
+
"zakki",
|
|
31
|
+
"zakkixd",
|
|
32
|
+
"zakkistore",
|
|
33
|
+
"store",
|
|
34
|
+
"pulsa",
|
|
35
|
+
"postpaid",
|
|
36
|
+
"utility",
|
|
37
|
+
"sdk"
|
|
38
|
+
],
|
|
39
|
+
"author": "zakkixd",
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"dependencies": {}
|
|
42
|
+
}
|