@crediblemark/buayar 0.6.2 → 0.7.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/docs/guide.md CHANGED
@@ -16,8 +16,10 @@ Panduan ini adalah **satu-satunya** panduan yang Anda butuhkan untuk mengintegra
16
16
  6. [Webhook Universal](#-webhook-universal)
17
17
  7. [Refund / Saldo / Payout Unified](#-refund--saldo--payout-unified)
18
18
  8. [Zero-Code PG Switch](#-zero-code-pg-switch)
19
- 9. [Fitur Khusus Provider (`<X>Client`)](#-fitur-khusus-provider-xclient)
20
- 10. [Kamus Variabel `.env` per Provider](#-kamus-variabel-env-per-provider)
19
+ 9. [Provider Dinamis & Autodetect](#-provider-dinamis--autodetect)
20
+ 10. [Cek Capability Provider (Portabilitas)](#-cek-capability-provider-portabilitas)
21
+ 11. [Fitur Khusus Provider (`<X>Client`)](#-fitur-khusus-provider-xclient)
22
+ 12. [Kamus Variabel `.env` per Provider](#-kamus-variabel-env-per-provider)
21
23
 
22
24
  ---
23
25
 
@@ -44,15 +46,20 @@ Semua metode pembayaran memakai **kode canonical universal** (`bca_va`, `qris`,
44
46
 
45
47
  ### 1. Zero-Config (baca dari `.env`) — **Direkomendasikan**
46
48
 
49
+ Cukup isi **variabel universal** yang sama untuk semua provider. SDK otomatis memetakannya ke kredensial yang dibutuhkan provider aktif.
50
+
47
51
  ```env
48
- # Pilih provider aktif: midtrans, duitku, ipaymu, xendit, doku, prismalink,
52
+ # (opsional) Provider aktif: midtrans, duitku, ipaymu, xendit, doku, prismalink,
49
53
  # faspay, finpay, nicepay, oy, stripe, paypal, adyen, checkoutcom,
50
54
  # razorpay, square, payu, braintree, twocheckout
51
- PROVIDER_PG=midtrans
55
+ # Bila dikosongkan, provider AUTO-DIDETEKSI dari kredensial yang terisi.
56
+ BUAYAR_PROVIDER=midtrans
52
57
 
53
58
  # Kredensial Universal (dipetakan otomatis per provider)
54
59
  BUAYAR_API_KEY=your-server-key-atau-secret
55
60
  BUAYAR_MERCHANT_CODE=merchant-id-atau-username
61
+ BUAYAR_CLIENT_KEY=client-atau-public-key # bila provider butuh
62
+ BUAYAR_MERCHANT_ID=merchant-id # bila berbeda dari code
56
63
  BUAYAR_SANDBOX=true
57
64
 
58
65
  # Callback & Return URL
@@ -65,6 +72,8 @@ import { buayar } from "@crediblemark/buayar";
65
72
  // Konfigurasi ter-baca otomatis dari process.env. Selesai.
66
73
  ```
67
74
 
75
+ > **🪄 Autodetect:** Jika `BUAYAR_PROVIDER` dikosongkan, Buayar menebak provider aktif dari kredensial yang terisi di `.env` (mis. `STRIPE_SECRET_KEY` → Stripe, `DUITKU_API_KEY` → Duitku). Anda bahkan bisa **tidak menyebut nama provider sama sekali**.
76
+
68
77
  ### 2. Inisialisasi Manual (programatik)
69
78
 
70
79
  ```typescript
@@ -81,6 +90,23 @@ const buayar = new Buayar({
81
90
 
82
91
  > 💡 Banyak `get<X>Client()` juga bisa dipakai dengan meneruskan `provider` di `configOverride` agar menargetkan provider tertentu dari satu instance `buayar`.
83
92
 
93
+ ### Variable Environment: Universal vs Spesifik
94
+
95
+ Setiap provider punya kredensial yang **berbeda-beda** (`MIDTRANS_SERVER_KEY` vs `DUITKU_API_KEY` vs `FASPAY_PASSWORD`, dst.). Itu sebabnya Buayar menyediakan **variabel universal** yang sama untuk semua provider, jadi Anda tidak perlu menghafal perbedaan tiap PG:
96
+
97
+ | Variabel Universal | Dipakai sebagai |
98
+ | :--- | :--- |
99
+ | `BUAYAR_PROVIDER` | nama provider aktif (opsional → autodetect) |
100
+ | `BUAYAR_API_KEY` | secret / server key / password provider |
101
+ | `BUAYAR_MERCHANT_CODE` | merchant id / va / username / imid / client id |
102
+ | `BUAYAR_CLIENT_KEY` | client / public / publishable key |
103
+ | `BUAYAR_MERCHANT_ID` | merchant id (bila beda dari code) |
104
+ | `BUAYAR_SANDBOX` | mode sandbox (`true`/`false`) |
105
+ | `BUAYAR_CALLBACK_URL` / `BUAYAR_RETURN_URL` | URL webhook & redirect |
106
+ | `BUAYAR_WEBHOOK_SECRET` / `BUAYAR_WEBHOOK_TOKEN` | secret webhook |
107
+
108
+ > 🔧 Variabel spesifik per provider (`MIDTRANS_SERVER_KEY`, `DUITKU_API_KEY`, dll.) **tetap didukung** sebagai fallback. Prioritas konfigurasi: `config` eksplisit → `BUAYAR_*` → variabel spesifik → default.
109
+
84
110
  ---
85
111
 
86
112
  ## 🛠️ Membuat Transaksi
@@ -265,15 +291,72 @@ Beralih provider **tanpa mengubah satu baris pun** di controller/service Anda
265
291
 
266
292
  ```env
267
293
  # Sebelum: Midtrans
268
- PROVIDER_PG=midtrans
269
- MIDTRANS_SERVER_KEY=SB-Mid-server-xxxx
294
+ BUAYAR_PROVIDER=midtrans
295
+ BUAYAR_API_KEY=SB-Mid-server-xxxx
270
296
 
271
297
  # Sesudah: Stripe — kode aplikasi TIDAK berubah
272
- PROVIDER_PG=stripe
273
- STRIPE_SECRET_KEY=sk_test_51...
274
- STRIPE_WEBHOOK_SECRET=whsec_...
298
+ BUAYAR_PROVIDER=stripe
299
+ BUAYAR_API_KEY=sk_test_51...
300
+ BUAYAR_WEBHOOK_SECRET=whsec_...
301
+ ```
302
+
303
+ Bahkan bisa **tanpa `BUAYAR_PROVIDER`** — cukup ganti kredensial, dan provider terdeteksi otomatis:
304
+
305
+ ```env
306
+ # Auto: cukup isi key-nya, provider tertelan
307
+ BUAYAR_API_KEY=sk_test_51... # berubah ke Stripe
308
+ ```
309
+
310
+ ---
311
+
312
+ ## 🌐 Provider Dinamis & Autodetect
313
+
314
+ Registry provider **dinamis**: Anda bisa menambah/mendaftarkan provider kustom tanpa mengedit core SDK, sekaligus memanfaatkan autodetect.
315
+
316
+ ### 1. Autodetect dari `.env`
317
+ Tanpa menyebut `BUAYAR_PROVIDER`, SDK menebak provider dari kredensial yang terisi:
318
+ ```typescript
319
+ const b = new Buayar();
320
+ b.detectProviderFromEnv(process.env); // "stripe" | "duitku" | ... | undefined
275
321
  ```
276
322
 
323
+ ### 2. Autodetect dari payload webhook
324
+ ```typescript
325
+ b.detectProviderFromPayload({
326
+ signature_key: "x", transaction_status: "settlement",
327
+ }); // "midtrans"
328
+ ```
329
+
330
+ ### 3. Daftar provider terdaftar & registrasi kustom
331
+ ```typescript
332
+ b.listProviders(); // ["midtrans","duitku",...]
333
+ b.registerProvider(new MyCustomProvider()); // untuk eksekusi
334
+ b.registerProviderDescriptor({
335
+ name: "mypg",
336
+ envKeys: ["MYPG_SECRET"], // untuk autodetect
337
+ methods: ["qris", "bca_va"], // untuk capability
338
+ operations: { refund: true, checkBalance: true, disburse: true },
339
+ });
340
+ ```
341
+
342
+ ---
343
+
344
+ ## 🔎 Cek Capability Provider (Portabilitas)
345
+
346
+ Jawab pertanyaan "provider ini dukung fitur & metode apa?" secara **runtime** — berguna untuk memutuskan migrasi atau menampilkan channel yang valid.
347
+
348
+ ```typescript
349
+ b.getCapabilities("duitku");
350
+ // { methods: ["bca_va","qris",...], operations: { refund: false, checkBalance: true, disburse: true } }
351
+
352
+ b.supports("xendit", "checkBalance"); // true
353
+ b.supports("doku", "refund"); // false
354
+ b.supportsMethod("qris", "stripe"); // true
355
+ b.getSupportedMethods("midtrans"); // ["bca_va","bni_va",...]
356
+ ```
357
+
358
+ > 💡 Ini berguna untuk skenario **migrasi anti-lock-in**: cek dulu apakah provider target punya metode/op yang Anda butuhkan sebelum pindah. Provider yang tidak mendukung suatu operasi tetap mengembalikan `{ supported: false }` (bukan error), bukan crash.
359
+
277
360
  ---
278
361
 
279
362
  ## 🏦 Fitur Khusus Provider (`<X>Client`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crediblemark/buayar",
3
- "version": "0.6.2",
3
+ "version": "0.7.0",
4
4
  "description": "Unified Payment Gateway SDK for Node.js & TypeScript — 19 providers (Midtrans, Xendit, Duitku, Stripe, PayPal, Adyen, Razorpay, Square, Checkout.com, PayU, Braintree, 2Checkout, DOKU, iPaymu, PrismaLink, Faspay, Finpay, Nicepay, OY!) with zero-code switching via .env",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",