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/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
+ }