npm package: @reysilvaa12/qris-ts
Description: Make static QRIS to dynamic QRIS with TypeScript and BullMQ support
Author: Reynald Silva
Latest version: 2.0.4

# QRIS Static to QRIS Dynamic Generator (@reysilvaa12/qris-ts)

Library TypeScript/JavaScript untuk mengubah QRIS statis menjadi QRIS dinamis (dengan nominal dan biaya admin) serta menghasilkan gambar QRIS profesional menggunakan template. Proyek ini merupakan fork dari `qris-dinamis` oleh Rachma Azis.

## Fitur Utama
- ✅ **String Generator**: Mengubah string QRIS statis ke dinamis dengan kalkulasi CRC16 otomatis.
- ✅ **Image Generator**: Menghasilkan gambar QRIS bergaya premium (Jimp + Canvas styled).
- ✅ **Fee Support**: Mendukung biaya admin tipe rupiah (fixed) maupun persentase.
- ✅ **BullMQ Ready**: Didesain aman untuk diproses di latar belakang (background jobs).
- ✅ **TypeScript Support**: Dilengkapi dengan definisi tipe data (types) yang lengkap.

---

## Instalasi

Gunakan npm untuk menginstal paket ini:

```bash
npm i @reysilvaa12/qris-ts
```

---

## Contoh Penggunaan

### 1. Membuat String QRIS Dinamis (Hanya Text)
Gunakan `makeString` jika kamu hanya membutuhkan output berupa string QRIS untuk diproses sendiri.

```typescript
import { makeString } from '@reysilvaa12/qris-ts';

const qrisStatis = '00020101021126570011ID........';
const options = {
  nominal: '50000',
  taxtype: 'p', // 'p' untuk persentase, 'r' untuk nilai tetap/rupiah
  fee: '1000'    // Biaya admin
};

const qrisDinamis = makeString(qrisStatis, options);
console.log(qrisDinamis);
```

### 2. Membuat Gambar QRIS (Output File/Base64)
Gunakan `makeFile` untuk menghasilkan file gambar `.jpg` lengkap dengan Nama Merchant, NMID, dan ID.

```typescript
import { makeFile } from '@reysilvaa12/qris-ts';

const generateQR = async () => {
  const qris = '00020101021126570011ID........';
  
  // Output sebagai file JPG
  const filePath = await makeFile(qris, { 
    nominal: '15000',
    path: './output/tagihan-makan.jpg' 
  });
  console.log('QRIS disimpan di:', filePath);

  // Output sebagai Base64
  const base64 = await makeFile(qris, { 
    nominal: '15000',
    base64: true 
  });
  console.log('Base64:', base64);
};

generateQR();
```

---

## Referensi API

### `makeString(qris, options)`
| Parameter | Tipe | Wajib | Deskripsi |
| :--- | :--- | :--- | :--- |
| `qris` | `string` | Ya | String QRIS statis dasar. |
| `options.nominal` | `string` | Ya | Jumlah nominal pembayaran (cth: "5000"). |
| `options.taxtype` | `'p' \| 'r'` | Tidak | `p` = Persentase, `r` = Nilai Tetap (Default: `p`). |
| `options.fee` | `string` | Tidak | Besar biaya admin (Default: "0"). |

### `makeFile(qris, options)`
Selain opsi di atas, `makeFile` juga mendukung:
| Parameter | Tipe | Deskripsi |
| :--- | :--- | :--- |
| `base64` | `boolean` | Jika `true`, mengembalikan string base64. Jika `false`, mengembalikan path file. |
| `path` | `string` | Path file output kustom (Default: folder `output/`). |

---

## Prasyarat (Aset Gambar & Font)
Untuk menggunakan fitur `makeFile`, pastikan kamu memiliki folder `assets` di root project kamu dengan struktur berikut:
```text
/assets
  ├── template.png             # Background QRIS
  └── /font                    # Folder berisi font .fnt
```

---

## Lisensi
Distributed under the MIT License. See `LICENSE` for more information.

## Penulis
- **Maintained by**: [Reynald Silva (reysilvaa)](https://github.com/reysilvaa12)
- **Forked from**: [Rachma Azis (razisek.com)](https://razisek.com)