wahdx-api 1.0.2 → 1.0.3

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 CHANGED
@@ -8,6 +8,7 @@ Package untuk generate QRIS dan cek payment status secara realtime dengan API Or
8
8
  - Generate kode QR dengan nominal tertentu
9
9
  - Cek status pembayaran secara realtime
10
10
  - Generate bukti transaksi (receipt)
11
+ - Kompatibel di semua platform (Windows, Linux, Mac)
11
12
 
12
13
  ## Instalasi
13
14
 
package/dist/index.cjs CHANGED
@@ -24,12 +24,7 @@ class QRISPayment {
24
24
  * @returns {Promise<{qrString: string, qrBuffer: Buffer}>}
25
25
  */
26
26
  async generateQR(amount) {
27
- const qrString = this.qrGenerator.generateQrString(amount);
28
- const qrBuffer = await this.qrGenerator.generateQRWithLogo(qrString);
29
- return {
30
- qrString,
31
- qrBuffer
32
- };
27
+ return await this.qrGenerator.generateQR(amount);
33
28
  }
34
29
 
35
30
  /**
package/dist/index.mjs CHANGED
@@ -24,12 +24,7 @@ class QRISPayment {
24
24
  * @returns {Promise<{qrString: string, qrBuffer: Buffer}>}
25
25
  */
26
26
  async generateQR(amount) {
27
- const qrString = this.qrGenerator.generateQrString(amount);
28
- const qrBuffer = await this.qrGenerator.generateQRWithLogo(qrString);
29
- return {
30
- qrString,
31
- qrBuffer
32
- };
27
+ return await this.qrGenerator.generateQR(amount);
33
28
  }
34
29
 
35
30
  /**
@@ -1,5 +1,4 @@
1
1
  const QRCode = require("qrcode");
2
- const { createCanvas, loadImage } = require("canvas");
3
2
  const fs = require("fs");
4
3
  const sharp = require("sharp");
5
4
  const jsQR = require("jsqr");
@@ -10,7 +9,6 @@ class QRISGenerator {
10
9
  constructor(config = {}) {
11
10
  this.config = {
12
11
  baseQrString: config.baseQrString || '',
13
- logoPath: config.logoPath || null,
14
12
  defaultQrPath: config.defaultQrPath || 'QRIS.png'
15
13
  };
16
14
  }
@@ -84,14 +82,19 @@ class QRISGenerator {
84
82
  }
85
83
  }
86
84
 
87
- async generateQRWithLogo(qrString) {
85
+ /**
86
+ * Generate QR code sebagai PNG buffer
87
+ * @param {string} qrString - String QR code yang akan digenerate
88
+ * @returns {Promise<Buffer>} - Buffer PNG dari QR code
89
+ */
90
+ async generateQRImage(qrString) {
88
91
  try {
89
92
  if (!qrString) {
90
93
  throw new Error('qrString tidak boleh kosong');
91
94
  }
92
- const canvas = createCanvas(500, 500);
93
- const ctx = canvas.getContext('2d');
94
- await QRCode.toCanvas(canvas, qrString, {
95
+
96
+ // Gunakan QRCode.toBuffer langsung tanpa canvas
97
+ const qrBuffer = await QRCode.toBuffer(qrString, {
95
98
  errorCorrectionLevel: 'H',
96
99
  margin: 2,
97
100
  width: 500,
@@ -100,16 +103,8 @@ class QRISGenerator {
100
103
  light: '#ffffff'
101
104
  }
102
105
  });
103
- if (this.config.logoPath && fs.existsSync(this.config.logoPath)) {
104
- const logo = await loadImage(this.config.logoPath);
105
- const logoSize = canvas.width * 0.2;
106
- const logoPosition = (canvas.width - logoSize) / 2;
107
-
108
- ctx.fillStyle = '#FFFFFF';
109
- ctx.fillRect(logoPosition - 5, logoPosition - 5, logoSize + 10, logoSize + 10);
110
- ctx.drawImage(logo, logoPosition, logoPosition, logoSize, logoSize);
111
- }
112
- return canvas.toBuffer('image/png');
106
+
107
+ return qrBuffer;
113
108
  } catch (error) {
114
109
  throw new Error('Gagal generate QR: ' + error.message);
115
110
  }
@@ -136,7 +131,7 @@ class QRISGenerator {
136
131
  const qrString = this.generateQrString(amount);
137
132
 
138
133
  // Generate QR image
139
- const qrBuffer = await this.generateQRWithLogo(qrString);
134
+ const qrBuffer = await this.generateQRImage(qrString);
140
135
 
141
136
  return {
142
137
  qrString,
@@ -147,6 +142,20 @@ class QRISGenerator {
147
142
  }
148
143
  }
149
144
 
145
+ /**
146
+ * Generate QR dengan nominal tertentu
147
+ * @param {number} amount - Nominal pembayaran
148
+ * @returns {Promise<{qrString: string, qrBuffer: Buffer}>}
149
+ */
150
+ async generateQR(amount) {
151
+ const qrString = this.generateQrString(amount);
152
+ const qrBuffer = await this.generateQRImage(qrString);
153
+ return {
154
+ qrString,
155
+ qrBuffer
156
+ };
157
+ }
158
+
150
159
  generateQrString(amount) {
151
160
  try {
152
161
  if (!amount || amount <= 0) {
@@ -1,5 +1,4 @@
1
1
  import QRCode from 'qrcode';
2
- import { createCanvas, loadImage } from 'canvas';
3
2
  import fs from 'fs';
4
3
  import sharp from 'sharp';
5
4
  import jsQR from 'jsqr';
@@ -13,7 +12,6 @@ class QRISGenerator {
13
12
  constructor(config = {}) {
14
13
  this.config = {
15
14
  baseQrString: config.baseQrString || '',
16
- logoPath: config.logoPath || null,
17
15
  defaultQrPath: config.defaultQrPath || 'QRIS.png'
18
16
  };
19
17
  }
@@ -87,14 +85,19 @@ class QRISGenerator {
87
85
  }
88
86
  }
89
87
 
90
- async generateQRWithLogo(qrString) {
88
+ /**
89
+ * Generate QR code sebagai PNG buffer
90
+ * @param {string} qrString - String QR code yang akan digenerate
91
+ * @returns {Promise<Buffer>} - Buffer PNG dari QR code
92
+ */
93
+ async generateQRImage(qrString) {
91
94
  try {
92
95
  if (!qrString) {
93
96
  throw new Error('qrString tidak boleh kosong');
94
97
  }
95
- const canvas = createCanvas(500, 500);
96
- const ctx = canvas.getContext('2d');
97
- await QRCode.toCanvas(canvas, qrString, {
98
+
99
+ // Gunakan QRCode.toBuffer langsung tanpa canvas
100
+ const qrBuffer = await QRCode.toBuffer(qrString, {
98
101
  errorCorrectionLevel: 'H',
99
102
  margin: 2,
100
103
  width: 500,
@@ -103,16 +106,8 @@ class QRISGenerator {
103
106
  light: '#ffffff'
104
107
  }
105
108
  });
106
- if (this.config.logoPath && fs.existsSync(this.config.logoPath)) {
107
- const logo = await loadImage(this.config.logoPath);
108
- const logoSize = canvas.width * 0.2;
109
- const logoPosition = (canvas.width - logoSize) / 2;
110
-
111
- ctx.fillStyle = '#FFFFFF';
112
- ctx.fillRect(logoPosition - 5, logoPosition - 5, logoSize + 10, logoSize + 10);
113
- ctx.drawImage(logo, logoPosition, logoPosition, logoSize, logoSize);
114
- }
115
- return canvas.toBuffer('image/png');
109
+
110
+ return qrBuffer;
116
111
  } catch (error) {
117
112
  throw new Error('Gagal generate QR: ' + error.message);
118
113
  }
@@ -139,7 +134,7 @@ class QRISGenerator {
139
134
  const qrString = this.generateQrString(amount);
140
135
 
141
136
  // Generate QR image
142
- const qrBuffer = await this.generateQRWithLogo(qrString);
137
+ const qrBuffer = await this.generateQRImage(qrString);
143
138
 
144
139
  return {
145
140
  qrString,
@@ -150,6 +145,20 @@ class QRISGenerator {
150
145
  }
151
146
  }
152
147
 
148
+ /**
149
+ * Generate QR dengan nominal tertentu
150
+ * @param {number} amount - Nominal pembayaran
151
+ * @returns {Promise<{qrString: string, qrBuffer: Buffer}>}
152
+ */
153
+ async generateQR(amount) {
154
+ const qrString = this.generateQrString(amount);
155
+ const qrBuffer = await this.generateQRImage(qrString);
156
+ return {
157
+ qrString,
158
+ qrBuffer
159
+ };
160
+ }
161
+
153
162
  generateQrString(amount) {
154
163
  try {
155
164
  if (!amount || amount <= 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wahdx-api",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Package untuk generate QRIS dan cek payment status secara realtime dengan API OrderKuota dari https://api.wahdx.co",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -38,7 +38,6 @@
38
38
  "dependencies": {
39
39
  "@dotenvx/dotenvx": "^1.47.5",
40
40
  "axios": "^1.10.0",
41
- "canvas": "^3.1.2",
42
41
  "jsqr": "^1.4.0",
43
42
  "moment": "^2.29.4",
44
43
  "pdfkit": "^0.13.0",