@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/README.md CHANGED
@@ -61,12 +61,15 @@
61
61
 
62
62
  #### Universal (Recommended)
63
63
  ```env
64
- # Active provider: any of the 19 supported names
65
- PROVIDER_PG=midtrans
64
+ # (optional) Active provider: any of the 19 supported names
65
+ # If empty, the provider is AUTO-DETECTED from filled credentials.
66
+ BUAYAR_PROVIDER=midtrans
66
67
 
67
- # Universal credentials (auto-mapped per provider)
68
+ # Universal credentials (auto-mapped per provider — same set for ALL providers)
68
69
  BUAYAR_API_KEY=your-server-key-or-secret
69
70
  BUAYAR_MERCHANT_CODE=your-merchant-id-or-username
71
+ BUAYAR_CLIENT_KEY=your-client-or-public-key
72
+ BUAYAR_MERCHANT_ID=your-merchant-id
70
73
  BUAYAR_SANDBOX=true
71
74
 
72
75
  # Callback & Return URLs
@@ -74,6 +77,22 @@ BUAYAR_CALLBACK_URL=https://myapp.com/api/payment/webhook
74
77
  BUAYAR_RETURN_URL=https://myapp.com/payment/finish
75
78
  ```
76
79
 
80
+ #### Build-time introspection (portability helpers)
81
+
82
+ Check what a provider actually supports — no docs digging:
83
+
84
+ ```ts
85
+ import { buayar } from "@crediblemark/buayar";
86
+
87
+ buayar.listProviders(); // all 19 registered providers
88
+ buayar.detectProviderFromEnv(process.env); // guess active provider from .env
89
+ buayar.detectProviderFromPayload(payload); // guess provider from webhook payload
90
+ buayar.getCapabilities("duitku");
91
+ // { methods: [...], operations: { refund: false, checkBalance: true, disburse: true } }
92
+ buayar.supports("xendit", "checkBalance"); // true
93
+ buayar.supportsMethod("qris", "stripe"); // true
94
+ ```
95
+
77
96
  #### Provider-Specific Variables
78
97
 
79
98
  | Variable | Provider | Description |
@@ -174,9 +193,10 @@ app.post("/api/payment/webhook", async (req, res) => {
174
193
  #### 5. Zero-Code PG Switch
175
194
  ```env
176
195
  # Switch from Midtrans to Stripe — zero code change required
177
- PROVIDER_PG=stripe
178
- STRIPE_SECRET_KEY=sk_live_...
179
- STRIPE_WEBHOOK_SECRET=whsec_...
196
+ BUAYAR_PROVIDER=stripe
197
+ BUAYAR_API_KEY=sk_live_...
198
+ BUAYAR_WEBHOOK_SECRET=whsec_...
199
+ # (or omit BUAYAR_PROVIDER entirely — provider auto-detected from the credentials)
180
200
  ```
181
201
 
182
202
  ---
@@ -230,12 +250,15 @@ STRIPE_WEBHOOK_SECRET=whsec_...
230
250
 
231
251
  #### Universal (Direkomendasikan)
232
252
  ```env
233
- # Provider aktif (19 pilihan tersedia)
234
- PROVIDER_PG=midtrans
253
+ # (opsional) Provider aktif (19 pilihan). Bila kosong, AUTO-DIDETEKSI
254
+ # dari kredensial yang terisi. Set var ini sama untuk semua provider.
255
+ BUAYAR_PROVIDER=midtrans
235
256
 
236
257
  # Kredensial Universal (dipetakan otomatis per provider)
237
258
  BUAYAR_API_KEY=server-key-atau-secret
238
259
  BUAYAR_MERCHANT_CODE=merchant-id-atau-username
260
+ BUAYAR_CLIENT_KEY=client-atau-public-key
261
+ BUAYAR_MERCHANT_ID=merchant-id
239
262
  BUAYAR_SANDBOX=true
240
263
 
241
264
  # Callback & Return URL
@@ -336,9 +359,10 @@ app.post("/api/payment/webhook", async (req, res) => {
336
359
  #### 5. Zero-Code PG Switch
337
360
  ```env
338
361
  # Ganti dari Midtrans ke Stripe — tanpa ubah satu baris kode pun
339
- PROVIDER_PG=stripe
340
- STRIPE_SECRET_KEY=sk_live_...
341
- STRIPE_WEBHOOK_SECRET=whsec_...
362
+ BUAYAR_PROVIDER=stripe
363
+ BUAYAR_API_KEY=sk_live_...
364
+ BUAYAR_WEBHOOK_SECRET=whsec_...
365
+ # (atau hapus BUAYAR_PROVIDER — provider auto-dideteksi dari kredensial)
342
366
  ```
343
367
 
344
368
  ### 🏷️ Daftar Canonical Payment Methods
package/dist/cli/index.js CHANGED
@@ -30,21 +30,30 @@ var p2 = __toESM(require("@clack/prompts"));
30
30
 
31
31
  // src/cli/templates.ts
32
32
  var DOT_ENV_TEMPLATE = `# \u2500\u2500 @crediblemark/buayar \xB7 Konfigurasi \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
33
- # Provider aktif (salah satu dari 19): midtrans, duitku, ipaymu, xendit, doku,
34
- # prismalink, faspay, finpay, nicepay, oy, stripe, paypal, adyen, checkoutcom,
35
- # razorpay, square, payu, braintree, twocheckout
36
- PROVIDER_PG=midtrans
37
-
38
- # Kredensial Universal (dipetakan otomatis per provider)
39
- BUAYAR_API_KEY=your-server-key-atau-secret
33
+ # CUKUP isi blok universal di bawah. Provider aktif bisa DITENTUKAN sendiri
34
+ # (BUAYAR_PROVIDER) atau DI-AUTODETECT dari kunci kredensial yang terisi.
35
+ # Saat pindah provider, umumnya kode TIDAK berubah \u2014 cukup isi key-nya.
36
+
37
+ # (opsional) Nama provider aktif. Bila dikosongkan, otomatis dideteksi.
38
+ # midtrans | duitku | ipaymu | xendit | doku | prismalink | faspay | finpay
39
+ # nicepay | oy | stripe | paypal | adyen | checkoutcom | razorpay | square
40
+ # payu | braintree | twocheckout
41
+ # BUAYAR_PROVIDER=midtrans
42
+
43
+ # Kredensial Universal \u2014 dipetakan otomatis sesuai provider aktif.
44
+ # Isi sesuai kredensial yang diminta provider itu (umumnya: secret/key/password).
45
+ BUAYAR_API_KEY=server-key-atau-secret
40
46
  BUAYAR_MERCHANT_CODE=merchant-id-atau-username
47
+ BUAYAR_CLIENT_KEY=client-atau-public-key
48
+ BUAYAR_MERCHANT_ID=merchant-id
41
49
  BUAYAR_SANDBOX=true
42
50
 
43
51
  # Callback & Return URL
44
52
  BUAYAR_CALLBACK_URL=http://localhost:3000/api/payment/webhook
45
53
  BUAYAR_RETURN_URL=http://localhost:3000/payment/success
46
54
 
47
- # \u2500\u2500 Kredensial Spesifik Provider (isi sesuai yang aktif saja) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
55
+ # \u2500\u2500 Kredensial Spesifik Provider (opsional & lanjutan) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
56
+ # Bisa diisi bila ingin eksplisit; bila kosong, nilai universal di atas dipakai.
48
57
  # MIDTRANS_SERVER_KEY=
49
58
  # MIDTRANS_CLIENT_KEY=
50
59
  # DUITKU_API_KEY=
@@ -76,6 +85,7 @@ BUAYAR_RETURN_URL=http://localhost:3000/payment/success
76
85
  # ADYEN_MERCHANT_ACCOUNT=
77
86
  # ADYEN_HMAC_KEY=
78
87
  # CHECKOUTCOM_SECRET_KEY=
88
+ # CHECKOUTCOM_PUBLIC_KEY=
79
89
  # CHECKOUTCOM_WEBHOOK_SECRET=
80
90
  # RAZORPAY_KEY_ID=
81
91
  # RAZORPAY_KEY_SECRET=
@@ -290,7 +300,7 @@ var README_PAYMENT_TEMPLATE = (framework, provider) => `# \u{1F4B3} Payment \u20
290
300
 
291
301
  Scaffold dibuat otomatis oleh \`buayar init\`.
292
302
 
293
- - **Provider aktif:** \`${provider}\` (ganti di \`.env\` \u2192 \`PROVIDER_PG\`)
303
+ - **Provider aktif:** \`${provider}\` (ganti di \`.env\` \u2192 \`BUAYAR_PROVIDER\`)
294
304
  - **Framework route:** \`${framework}\`
295
305
 
296
306
  ## Struktur
@@ -308,7 +318,7 @@ src/payment/
308
318
  4. Notifikasi masuk ke \`POST /api/payment/webhook\` \u2192 diverifikasi otomatis.
309
319
 
310
320
  ## Ganti Provider
311
- Ubah \`PROVIDER_PG\` + kredensial di \`.env\`. Kode \`service.ts\`/route **tidak berubah**.
321
+ Ubah \`BUAYAR_PROVIDER\` + kredensial di \`.env\`. Kode \`service.ts\`/route **tidak berubah**.
312
322
 
313
323
  > Dokumentasi lengkap: https://github.com/crediblemark-official/Buayar#readme
314
324
  `;
@@ -474,7 +484,7 @@ function printScaffoldSummary(result) {
474
484
  }
475
485
 
476
486
  // src/cli/index.ts
477
- var VERSION = "0.5.0";
487
+ var VERSION = "0.7.0";
478
488
  function parseArgs(argv) {
479
489
  const flags = [];
480
490
  const rest = [];
package/dist/index.d.mts CHANGED
@@ -33,7 +33,7 @@ interface MandiriBillInfo {
33
33
  }
34
34
  interface InvoiceResponse {
35
35
  success: boolean;
36
- /** Provider yang memproses invoice ini ('midtrans' | 'duitku') */
36
+ /** Provider yang memproses invoice ini ('midtrans' | 'duitku' | 'doku' ...) */
37
37
  provider?: string;
38
38
  /** Order ID unik dari merchant */
39
39
  orderId?: string;
@@ -43,6 +43,8 @@ interface InvoiceResponse {
43
43
  paymentUrl?: string;
44
44
  /** Reference number dari Payment Gateway */
45
45
  reference?: string;
46
+ /** Dimensi hasil kanal spesifik (VA / QRIS / e-Wallet / Checkout) untuk typing strict. */
47
+ mode?: PaymentMode;
46
48
  /** Nomor Virtual Account (untuk metode Bank Transfer / VA) */
47
49
  vaNumber?: string;
48
50
  /** Nama Bank dari Virtual Account (misal: "bca", "bni", "bri", "mandiri", "permata") */
@@ -59,11 +61,32 @@ interface InvoiceResponse {
59
61
  billInfo?: MandiriBillInfo;
60
62
  /** Waktu kedaluwarsa tagihan pembayaran */
61
63
  expiresAt?: Date | string;
62
- /** Raw response asli dari API provider */
64
+ /** Raw response asli dari API provider (termasuk saat gagal) */
63
65
  rawResponse: any;
64
66
  /** Pesan error jika gagal */
65
67
  error?: string;
66
68
  }
69
+ /** Kanal pembayaran hasil invoice — membantu typing strict dan rendering UI. */
70
+ type PaymentMode = "checkout" | "va" | "qris" | "ewallet" | "retail" | "other";
71
+ /** Hasil invoice khusus Virtual Account (mode === 'va'). */
72
+ interface VirtualAccountResponse extends InvoiceResponse {
73
+ mode: "va";
74
+ vaNumber: string;
75
+ vaBank?: string;
76
+ }
77
+ /** Hasil invoice khusus QRIS (mode === 'qris'). */
78
+ interface QrisResponse extends InvoiceResponse {
79
+ mode: "qris";
80
+ qrString: string;
81
+ qrCodeUrl?: string;
82
+ }
83
+ /** Hasil invoice khusus e-Wallet (mode === 'ewallet'). */
84
+ interface EWalletResponse extends InvoiceResponse {
85
+ mode: "ewallet";
86
+ checkoutUrl?: string;
87
+ paymentUrl?: string;
88
+ deeplink?: string;
89
+ }
67
90
  interface VerifyCallbackResult {
68
91
  isValid: boolean;
69
92
  provider?: string;
@@ -1026,10 +1049,52 @@ declare class PaymentManager {
1026
1049
  }
1027
1050
  declare const paymentManager: PaymentManager;
1028
1051
 
1052
+ interface ProviderCapability {
1053
+ /** Metode pembayaran kanonik yang didukung provider ini */
1054
+ methods: string[];
1055
+ /** Operasi lanjutan yang didukung */
1056
+ operations: {
1057
+ refund: boolean;
1058
+ checkBalance: boolean;
1059
+ disburse: boolean;
1060
+ };
1061
+ }
1062
+ interface ProviderDescriptor extends ProviderCapability {
1063
+ name: string;
1064
+ /** Kunci env kredensial yang menandakan provider ini aktif (untuk autodetect) */
1065
+ envKeys: string[];
1066
+ }
1029
1067
  /**
1030
- * Resolver konfigurasi kredensial otomatis dari Environment Variables.
1031
- * Mendukung variabel universal Buayar / PG serta variabel spesifik masing-masing provider.
1032
- */
1068
+ * Pendeteksi / registrar provider dinamis.
1069
+ * Metadata provider terpusat di sini sehingga:
1070
+ * - Daftar provider bisa ditambah tanpa ubah core (register(...)).
1071
+ * - Provider aktif bisa di-autodetect dari kredensial .env.
1072
+ * - Provider pengirim webhook bisa ditebak dari struktur payload.
1073
+ * - Capability (metode + operasi) bisa di-query secara runtime.
1074
+ */
1075
+ declare class ProviderRegistry {
1076
+ private descriptors;
1077
+ constructor(initial?: ProviderDescriptor[]);
1078
+ register(desc: ProviderDescriptor): void;
1079
+ unregister(name: string): boolean;
1080
+ has(name: string): boolean;
1081
+ get(name: string): ProviderDescriptor | undefined;
1082
+ names(): string[];
1083
+ /**
1084
+ * Autodetect provider aktif dari variabel lingkungan.
1085
+ * Mengembalikan nama provider yang kredensial .env-nya terisi penuh,
1086
+ * atau undefined jika tidak ada / ambigu.
1087
+ */
1088
+ detectFromEnv(env: Record<string, string | undefined>): string | undefined;
1089
+ /**
1090
+ * Autodetect provider dari struktur payload webhook.
1091
+ * Mengembalikan nama provider jika dikenali, else undefined.
1092
+ */
1093
+ detectFromWebhook(payload: any): string | undefined;
1094
+ }
1095
+ declare function buildDefaultDescriptors(): ProviderDescriptor[];
1096
+ declare const providerRegistry: ProviderRegistry;
1097
+
1033
1098
  declare function resolveConfigFromEnv(customConfig?: BuayarConfig): BuayarConfig;
1034
1099
 
1035
1100
  /**
@@ -1045,7 +1110,8 @@ declare function resolveConfigFromEnv(customConfig?: BuayarConfig): BuayarConfig
1045
1110
  declare class Buayar {
1046
1111
  private manager;
1047
1112
  private config;
1048
- constructor(config?: BuayarConfig, manager?: PaymentManager);
1113
+ private registry;
1114
+ constructor(config?: BuayarConfig, manager?: PaymentManager, registry?: ProviderRegistry);
1049
1115
  /**
1050
1116
  * Dapatkan salinan konfigurasi aktif saat ini
1051
1117
  */
@@ -1066,6 +1132,40 @@ declare class Buayar {
1066
1132
  * Ambil instance provider kelas dasar
1067
1133
  */
1068
1134
  getProvider(name?: string): BasePaymentProvider;
1135
+ /**
1136
+ * Daftar nama provider yang terdaftar (bawaan + kustom).
1137
+ */
1138
+ listProviders(): string[];
1139
+ /**
1140
+ * Registrasi metadata provider kustom untuk deteksi & capability.
1141
+ * Contoh: buayar.registerProviderDescriptor({ name, envKeys, methods, operations })
1142
+ */
1143
+ registerProviderDescriptor(desc: ProviderDescriptor): void;
1144
+ /**
1145
+ * Cek capability (metode + operasi) provider tertentu — atau provider aktif bila kosong.
1146
+ * Jawab pertanyaan "provider ini dukung apa?" secara runtime, tanpa bongkar dokumen.
1147
+ */
1148
+ getCapabilities(name?: string): ProviderCapability | undefined;
1149
+ /**
1150
+ * Deteksi nama provider dari struktur payload webhook.
1151
+ */
1152
+ detectProviderFromPayload(payload: any): string | undefined;
1153
+ /**
1154
+ * Deteksi nama provider aktif dari variabel lingkungan (kredensial yang terisi).
1155
+ */
1156
+ detectProviderFromEnv(env?: Record<string, string | undefined>): string | undefined;
1157
+ /**
1158
+ * Logika "bisa pakai X dengan provider Y?" — helper untuk portabilitas.
1159
+ */
1160
+ supports(name: string, operation: "refund" | "checkBalance" | "disburse"): boolean;
1161
+ /**
1162
+ * Daftar metode pembayaran yang benar2 tersedia untuk provider aktif.
1163
+ */
1164
+ getSupportedMethods(name?: string): string[];
1165
+ /**
1166
+ * Iterasi CEPAT: apakah provider aktif mendukung method kanonik tertentu?
1167
+ */
1168
+ supportsMethod(method: string, name?: string): boolean;
1069
1169
  /**
1070
1170
  * Buat transaksi pembayaran baru (Mendukung Semi dan Full Integrasi)
1071
1171
  */
@@ -1391,6 +1491,11 @@ declare function snapExternalId(prefix?: string): string;
1391
1491
  * @returns true when the X-SIGNATURE matches.
1392
1492
  */
1393
1493
  declare function verifySnapWebhookSignature(headers: Record<string, string | string[] | undefined>, body: any, clientSecret: string, endpointUrl?: string): boolean;
1494
+ /**
1495
+ * Map a DOKU SNAP error (responseMessage/responseCode) to an actionable hint
1496
+ * for developers, so config gaps (missing BIN / merchantId / keys) are obvious.
1497
+ */
1498
+ declare function snapErrorHint(message: string, code?: string): string | undefined;
1394
1499
 
1395
1500
  /**
1396
1501
  * Generate signature PrismaLink
@@ -1585,6 +1690,21 @@ declare class SnapClient {
1585
1690
  extraHeaders?: Record<string, string>;
1586
1691
  }): Promise<any>;
1587
1692
  }
1693
+ /** DOKU SNAP API error with structured diagnostics (status code + raw response). */
1694
+ declare class SnapApiError extends Error {
1695
+ readonly status: number;
1696
+ readonly responseCode?: string;
1697
+ readonly raw: any;
1698
+ readonly endpoint?: string;
1699
+ readonly method?: string;
1700
+ constructor(message: string, opts: {
1701
+ status: number;
1702
+ code?: string;
1703
+ raw?: any;
1704
+ endpoint?: string;
1705
+ method?: string;
1706
+ });
1707
+ }
1588
1708
 
1589
1709
  /**
1590
1710
  * Generate MD5 hash string (lowercase)
@@ -1615,4 +1735,4 @@ declare function safeCompare(a: string, b: string): boolean;
1615
1735
  */
1616
1736
  declare function getPaymentMethodCategory(code: string, name?: string): "Virtual Account" | "QRIS" | "E-Wallet" | "Retail / Gerai" | "Kartu Kredit" | "Paylater / Cicilan" | "Lainnya";
1617
1737
 
1618
- export { AdyenClient, AdyenProvider, BasePaymentProvider, BraintreeClient, BraintreeProvider, Buayar, type BuayarConfig, CANONICAL_TO_DOKU, CANONICAL_TO_DUITKU, CANONICAL_TO_FASPAY, CANONICAL_TO_FINPAY, CANONICAL_TO_IPAYMU, CANONICAL_TO_MIDTRANS, CANONICAL_TO_NICEPAY, CANONICAL_TO_OY, CANONICAL_TO_PRISMALINK, CANONICAL_TO_STRIPE, CANONICAL_TO_XENDIT, CORE_API_METHODS, type CanonicalPaymentMethod, type CheckBalanceResult, type CheckTransactionParams, type CheckTransactionResult, CheckoutComClient, CheckoutComProvider, type CreateInvoiceParams, type CustomerDetails, DUITKU_TO_CANONICAL, type DisburseParams, type DisburseResult, DokuClient, DokuProvider, DuitkuClient, type DuitkuDisbursementParams, DuitkuProvider, FaspayClient, FaspayProvider, FinpayClient, FinpayProvider, type GetPaymentMethodsParams, type GetPaymentMethodsResult, type InvoiceResponse, IpaymuClient, IpaymuProvider, MIDTRANS_PROBE_PAYLOADS, MIDTRANS_STATIC_METHODS, type MandiriBillInfo, MidtransClient, MidtransProvider, NicepayClient, NicepayProvider, OyClient, OyProvider, PaymentManager, type PaymentMethod, type PaymentMethodItem, PaypalClient, PaypalProvider, PayuClient, PayuProvider, PrismalinkClient, PrismalinkProvider, type ProviderConfig, RazorpayClient, RazorpayProvider, type RefundParams, type RefundResult, SnapClient, type SnapClientOptions, SquareClient, SquareProvider, StripeClient, StripeProvider, TwoCheckoutClient, TwoCheckoutProvider, type VerifyCallbackResult, XenditClient, type XenditDisbursementParams, XenditProvider, buayar, buildBraintreeBasicAuth, buildCoreChargePayload, buildPaypalBasicAuth, buildPayuBasicAuth, buildRazorpayBasicAuth, buildTwoCheckoutAuth, formatNicepayTimestamp, generateDokuHeaders, generateFaspaySignature, generateFinpaySignature, generateIpaymuSignature, generateNicepayToken, generateOyHeaders, generatePrismalinkSignature, generateSnapAsymmetricSignature, generateSnapSymmetricSignature, getDuitkuInquirySignatures, getDuitkuPaymentMethodsSignature, getDuitkuStatusSignatures, getPaymentMethodCategory, getXenditAuthHeader, hmacSha256, md5, minifyJson, parseCoreChargeResponse, paymentManager, resolveConfigFromEnv, safeCompare, serializePaypalParams, serializeStripeParams, sha256, sha256Hex, sha512, snapExternalId, snapTimestamp, snapUtcTimestamp, toCanonicalPaymentMethod, toDokuPaymentMethod, toDuitkuPaymentMethod, toFaspayPaymentMethod, toFinpayPaymentMethod, toIpaymuPaymentMethod, toNicepayPaymentMethod, toOyPaymentMethod, toPrismalinkPaymentMethod, toStripePaymentMethod, toXenditPaymentMethod, verifyAdyenWebhook, verifyBraintreeWebhook, verifyCheckoutComWebhook, verifyDokuWebhookSignature, verifyDuitkuCallbackSignature, verifyFaspaySignature, verifyFinpaySignature, verifyIpaymuCallback, verifyNicepayWebhook, verifyOyWebhook, verifyPaypalWebhookSimple, verifyPayuWebhook, verifyPrismalinkSignature, verifyRazorpayWebhook, verifySnapWebhookSignature, verifySquareWebhook, verifyStripeWebhook, verifyTwoCheckoutWebhook, verifyXenditWebhookToken };
1738
+ export { AdyenClient, AdyenProvider, BasePaymentProvider, BraintreeClient, BraintreeProvider, Buayar, type BuayarConfig, CANONICAL_TO_DOKU, CANONICAL_TO_DUITKU, CANONICAL_TO_FASPAY, CANONICAL_TO_FINPAY, CANONICAL_TO_IPAYMU, CANONICAL_TO_MIDTRANS, CANONICAL_TO_NICEPAY, CANONICAL_TO_OY, CANONICAL_TO_PRISMALINK, CANONICAL_TO_STRIPE, CANONICAL_TO_XENDIT, CORE_API_METHODS, type CanonicalPaymentMethod, type CheckBalanceResult, type CheckTransactionParams, type CheckTransactionResult, CheckoutComClient, CheckoutComProvider, type CreateInvoiceParams, type CustomerDetails, DUITKU_TO_CANONICAL, type DisburseParams, type DisburseResult, DokuClient, DokuProvider, DuitkuClient, type DuitkuDisbursementParams, DuitkuProvider, type EWalletResponse, FaspayClient, FaspayProvider, FinpayClient, FinpayProvider, type GetPaymentMethodsParams, type GetPaymentMethodsResult, type InvoiceResponse, IpaymuClient, IpaymuProvider, MIDTRANS_PROBE_PAYLOADS, MIDTRANS_STATIC_METHODS, type MandiriBillInfo, MidtransClient, MidtransProvider, NicepayClient, NicepayProvider, OyClient, OyProvider, PaymentManager, type PaymentMethod, type PaymentMethodItem, type PaymentMode, PaypalClient, PaypalProvider, PayuClient, PayuProvider, PrismalinkClient, PrismalinkProvider, type ProviderCapability, type ProviderConfig, type ProviderDescriptor, ProviderRegistry, type QrisResponse, RazorpayClient, RazorpayProvider, type RefundParams, type RefundResult, SnapApiError, SnapClient, type SnapClientOptions, SquareClient, SquareProvider, StripeClient, StripeProvider, TwoCheckoutClient, TwoCheckoutProvider, type VerifyCallbackResult, type VirtualAccountResponse, XenditClient, type XenditDisbursementParams, XenditProvider, buayar, buildBraintreeBasicAuth, buildCoreChargePayload, buildDefaultDescriptors, buildPaypalBasicAuth, buildPayuBasicAuth, buildRazorpayBasicAuth, buildTwoCheckoutAuth, formatNicepayTimestamp, generateDokuHeaders, generateFaspaySignature, generateFinpaySignature, generateIpaymuSignature, generateNicepayToken, generateOyHeaders, generatePrismalinkSignature, generateSnapAsymmetricSignature, generateSnapSymmetricSignature, getDuitkuInquirySignatures, getDuitkuPaymentMethodsSignature, getDuitkuStatusSignatures, getPaymentMethodCategory, getXenditAuthHeader, hmacSha256, md5, minifyJson, parseCoreChargeResponse, paymentManager, providerRegistry, resolveConfigFromEnv, safeCompare, serializePaypalParams, serializeStripeParams, sha256, sha256Hex, sha512, snapErrorHint, snapExternalId, snapTimestamp, snapUtcTimestamp, toCanonicalPaymentMethod, toDokuPaymentMethod, toDuitkuPaymentMethod, toFaspayPaymentMethod, toFinpayPaymentMethod, toIpaymuPaymentMethod, toNicepayPaymentMethod, toOyPaymentMethod, toPrismalinkPaymentMethod, toStripePaymentMethod, toXenditPaymentMethod, verifyAdyenWebhook, verifyBraintreeWebhook, verifyCheckoutComWebhook, verifyDokuWebhookSignature, verifyDuitkuCallbackSignature, verifyFaspaySignature, verifyFinpaySignature, verifyIpaymuCallback, verifyNicepayWebhook, verifyOyWebhook, verifyPaypalWebhookSimple, verifyPayuWebhook, verifyPrismalinkSignature, verifyRazorpayWebhook, verifySnapWebhookSignature, verifySquareWebhook, verifyStripeWebhook, verifyTwoCheckoutWebhook, verifyXenditWebhookToken };
package/dist/index.d.ts CHANGED
@@ -33,7 +33,7 @@ interface MandiriBillInfo {
33
33
  }
34
34
  interface InvoiceResponse {
35
35
  success: boolean;
36
- /** Provider yang memproses invoice ini ('midtrans' | 'duitku') */
36
+ /** Provider yang memproses invoice ini ('midtrans' | 'duitku' | 'doku' ...) */
37
37
  provider?: string;
38
38
  /** Order ID unik dari merchant */
39
39
  orderId?: string;
@@ -43,6 +43,8 @@ interface InvoiceResponse {
43
43
  paymentUrl?: string;
44
44
  /** Reference number dari Payment Gateway */
45
45
  reference?: string;
46
+ /** Dimensi hasil kanal spesifik (VA / QRIS / e-Wallet / Checkout) untuk typing strict. */
47
+ mode?: PaymentMode;
46
48
  /** Nomor Virtual Account (untuk metode Bank Transfer / VA) */
47
49
  vaNumber?: string;
48
50
  /** Nama Bank dari Virtual Account (misal: "bca", "bni", "bri", "mandiri", "permata") */
@@ -59,11 +61,32 @@ interface InvoiceResponse {
59
61
  billInfo?: MandiriBillInfo;
60
62
  /** Waktu kedaluwarsa tagihan pembayaran */
61
63
  expiresAt?: Date | string;
62
- /** Raw response asli dari API provider */
64
+ /** Raw response asli dari API provider (termasuk saat gagal) */
63
65
  rawResponse: any;
64
66
  /** Pesan error jika gagal */
65
67
  error?: string;
66
68
  }
69
+ /** Kanal pembayaran hasil invoice — membantu typing strict dan rendering UI. */
70
+ type PaymentMode = "checkout" | "va" | "qris" | "ewallet" | "retail" | "other";
71
+ /** Hasil invoice khusus Virtual Account (mode === 'va'). */
72
+ interface VirtualAccountResponse extends InvoiceResponse {
73
+ mode: "va";
74
+ vaNumber: string;
75
+ vaBank?: string;
76
+ }
77
+ /** Hasil invoice khusus QRIS (mode === 'qris'). */
78
+ interface QrisResponse extends InvoiceResponse {
79
+ mode: "qris";
80
+ qrString: string;
81
+ qrCodeUrl?: string;
82
+ }
83
+ /** Hasil invoice khusus e-Wallet (mode === 'ewallet'). */
84
+ interface EWalletResponse extends InvoiceResponse {
85
+ mode: "ewallet";
86
+ checkoutUrl?: string;
87
+ paymentUrl?: string;
88
+ deeplink?: string;
89
+ }
67
90
  interface VerifyCallbackResult {
68
91
  isValid: boolean;
69
92
  provider?: string;
@@ -1026,10 +1049,52 @@ declare class PaymentManager {
1026
1049
  }
1027
1050
  declare const paymentManager: PaymentManager;
1028
1051
 
1052
+ interface ProviderCapability {
1053
+ /** Metode pembayaran kanonik yang didukung provider ini */
1054
+ methods: string[];
1055
+ /** Operasi lanjutan yang didukung */
1056
+ operations: {
1057
+ refund: boolean;
1058
+ checkBalance: boolean;
1059
+ disburse: boolean;
1060
+ };
1061
+ }
1062
+ interface ProviderDescriptor extends ProviderCapability {
1063
+ name: string;
1064
+ /** Kunci env kredensial yang menandakan provider ini aktif (untuk autodetect) */
1065
+ envKeys: string[];
1066
+ }
1029
1067
  /**
1030
- * Resolver konfigurasi kredensial otomatis dari Environment Variables.
1031
- * Mendukung variabel universal Buayar / PG serta variabel spesifik masing-masing provider.
1032
- */
1068
+ * Pendeteksi / registrar provider dinamis.
1069
+ * Metadata provider terpusat di sini sehingga:
1070
+ * - Daftar provider bisa ditambah tanpa ubah core (register(...)).
1071
+ * - Provider aktif bisa di-autodetect dari kredensial .env.
1072
+ * - Provider pengirim webhook bisa ditebak dari struktur payload.
1073
+ * - Capability (metode + operasi) bisa di-query secara runtime.
1074
+ */
1075
+ declare class ProviderRegistry {
1076
+ private descriptors;
1077
+ constructor(initial?: ProviderDescriptor[]);
1078
+ register(desc: ProviderDescriptor): void;
1079
+ unregister(name: string): boolean;
1080
+ has(name: string): boolean;
1081
+ get(name: string): ProviderDescriptor | undefined;
1082
+ names(): string[];
1083
+ /**
1084
+ * Autodetect provider aktif dari variabel lingkungan.
1085
+ * Mengembalikan nama provider yang kredensial .env-nya terisi penuh,
1086
+ * atau undefined jika tidak ada / ambigu.
1087
+ */
1088
+ detectFromEnv(env: Record<string, string | undefined>): string | undefined;
1089
+ /**
1090
+ * Autodetect provider dari struktur payload webhook.
1091
+ * Mengembalikan nama provider jika dikenali, else undefined.
1092
+ */
1093
+ detectFromWebhook(payload: any): string | undefined;
1094
+ }
1095
+ declare function buildDefaultDescriptors(): ProviderDescriptor[];
1096
+ declare const providerRegistry: ProviderRegistry;
1097
+
1033
1098
  declare function resolveConfigFromEnv(customConfig?: BuayarConfig): BuayarConfig;
1034
1099
 
1035
1100
  /**
@@ -1045,7 +1110,8 @@ declare function resolveConfigFromEnv(customConfig?: BuayarConfig): BuayarConfig
1045
1110
  declare class Buayar {
1046
1111
  private manager;
1047
1112
  private config;
1048
- constructor(config?: BuayarConfig, manager?: PaymentManager);
1113
+ private registry;
1114
+ constructor(config?: BuayarConfig, manager?: PaymentManager, registry?: ProviderRegistry);
1049
1115
  /**
1050
1116
  * Dapatkan salinan konfigurasi aktif saat ini
1051
1117
  */
@@ -1066,6 +1132,40 @@ declare class Buayar {
1066
1132
  * Ambil instance provider kelas dasar
1067
1133
  */
1068
1134
  getProvider(name?: string): BasePaymentProvider;
1135
+ /**
1136
+ * Daftar nama provider yang terdaftar (bawaan + kustom).
1137
+ */
1138
+ listProviders(): string[];
1139
+ /**
1140
+ * Registrasi metadata provider kustom untuk deteksi & capability.
1141
+ * Contoh: buayar.registerProviderDescriptor({ name, envKeys, methods, operations })
1142
+ */
1143
+ registerProviderDescriptor(desc: ProviderDescriptor): void;
1144
+ /**
1145
+ * Cek capability (metode + operasi) provider tertentu — atau provider aktif bila kosong.
1146
+ * Jawab pertanyaan "provider ini dukung apa?" secara runtime, tanpa bongkar dokumen.
1147
+ */
1148
+ getCapabilities(name?: string): ProviderCapability | undefined;
1149
+ /**
1150
+ * Deteksi nama provider dari struktur payload webhook.
1151
+ */
1152
+ detectProviderFromPayload(payload: any): string | undefined;
1153
+ /**
1154
+ * Deteksi nama provider aktif dari variabel lingkungan (kredensial yang terisi).
1155
+ */
1156
+ detectProviderFromEnv(env?: Record<string, string | undefined>): string | undefined;
1157
+ /**
1158
+ * Logika "bisa pakai X dengan provider Y?" — helper untuk portabilitas.
1159
+ */
1160
+ supports(name: string, operation: "refund" | "checkBalance" | "disburse"): boolean;
1161
+ /**
1162
+ * Daftar metode pembayaran yang benar2 tersedia untuk provider aktif.
1163
+ */
1164
+ getSupportedMethods(name?: string): string[];
1165
+ /**
1166
+ * Iterasi CEPAT: apakah provider aktif mendukung method kanonik tertentu?
1167
+ */
1168
+ supportsMethod(method: string, name?: string): boolean;
1069
1169
  /**
1070
1170
  * Buat transaksi pembayaran baru (Mendukung Semi dan Full Integrasi)
1071
1171
  */
@@ -1391,6 +1491,11 @@ declare function snapExternalId(prefix?: string): string;
1391
1491
  * @returns true when the X-SIGNATURE matches.
1392
1492
  */
1393
1493
  declare function verifySnapWebhookSignature(headers: Record<string, string | string[] | undefined>, body: any, clientSecret: string, endpointUrl?: string): boolean;
1494
+ /**
1495
+ * Map a DOKU SNAP error (responseMessage/responseCode) to an actionable hint
1496
+ * for developers, so config gaps (missing BIN / merchantId / keys) are obvious.
1497
+ */
1498
+ declare function snapErrorHint(message: string, code?: string): string | undefined;
1394
1499
 
1395
1500
  /**
1396
1501
  * Generate signature PrismaLink
@@ -1585,6 +1690,21 @@ declare class SnapClient {
1585
1690
  extraHeaders?: Record<string, string>;
1586
1691
  }): Promise<any>;
1587
1692
  }
1693
+ /** DOKU SNAP API error with structured diagnostics (status code + raw response). */
1694
+ declare class SnapApiError extends Error {
1695
+ readonly status: number;
1696
+ readonly responseCode?: string;
1697
+ readonly raw: any;
1698
+ readonly endpoint?: string;
1699
+ readonly method?: string;
1700
+ constructor(message: string, opts: {
1701
+ status: number;
1702
+ code?: string;
1703
+ raw?: any;
1704
+ endpoint?: string;
1705
+ method?: string;
1706
+ });
1707
+ }
1588
1708
 
1589
1709
  /**
1590
1710
  * Generate MD5 hash string (lowercase)
@@ -1615,4 +1735,4 @@ declare function safeCompare(a: string, b: string): boolean;
1615
1735
  */
1616
1736
  declare function getPaymentMethodCategory(code: string, name?: string): "Virtual Account" | "QRIS" | "E-Wallet" | "Retail / Gerai" | "Kartu Kredit" | "Paylater / Cicilan" | "Lainnya";
1617
1737
 
1618
- export { AdyenClient, AdyenProvider, BasePaymentProvider, BraintreeClient, BraintreeProvider, Buayar, type BuayarConfig, CANONICAL_TO_DOKU, CANONICAL_TO_DUITKU, CANONICAL_TO_FASPAY, CANONICAL_TO_FINPAY, CANONICAL_TO_IPAYMU, CANONICAL_TO_MIDTRANS, CANONICAL_TO_NICEPAY, CANONICAL_TO_OY, CANONICAL_TO_PRISMALINK, CANONICAL_TO_STRIPE, CANONICAL_TO_XENDIT, CORE_API_METHODS, type CanonicalPaymentMethod, type CheckBalanceResult, type CheckTransactionParams, type CheckTransactionResult, CheckoutComClient, CheckoutComProvider, type CreateInvoiceParams, type CustomerDetails, DUITKU_TO_CANONICAL, type DisburseParams, type DisburseResult, DokuClient, DokuProvider, DuitkuClient, type DuitkuDisbursementParams, DuitkuProvider, FaspayClient, FaspayProvider, FinpayClient, FinpayProvider, type GetPaymentMethodsParams, type GetPaymentMethodsResult, type InvoiceResponse, IpaymuClient, IpaymuProvider, MIDTRANS_PROBE_PAYLOADS, MIDTRANS_STATIC_METHODS, type MandiriBillInfo, MidtransClient, MidtransProvider, NicepayClient, NicepayProvider, OyClient, OyProvider, PaymentManager, type PaymentMethod, type PaymentMethodItem, PaypalClient, PaypalProvider, PayuClient, PayuProvider, PrismalinkClient, PrismalinkProvider, type ProviderConfig, RazorpayClient, RazorpayProvider, type RefundParams, type RefundResult, SnapClient, type SnapClientOptions, SquareClient, SquareProvider, StripeClient, StripeProvider, TwoCheckoutClient, TwoCheckoutProvider, type VerifyCallbackResult, XenditClient, type XenditDisbursementParams, XenditProvider, buayar, buildBraintreeBasicAuth, buildCoreChargePayload, buildPaypalBasicAuth, buildPayuBasicAuth, buildRazorpayBasicAuth, buildTwoCheckoutAuth, formatNicepayTimestamp, generateDokuHeaders, generateFaspaySignature, generateFinpaySignature, generateIpaymuSignature, generateNicepayToken, generateOyHeaders, generatePrismalinkSignature, generateSnapAsymmetricSignature, generateSnapSymmetricSignature, getDuitkuInquirySignatures, getDuitkuPaymentMethodsSignature, getDuitkuStatusSignatures, getPaymentMethodCategory, getXenditAuthHeader, hmacSha256, md5, minifyJson, parseCoreChargeResponse, paymentManager, resolveConfigFromEnv, safeCompare, serializePaypalParams, serializeStripeParams, sha256, sha256Hex, sha512, snapExternalId, snapTimestamp, snapUtcTimestamp, toCanonicalPaymentMethod, toDokuPaymentMethod, toDuitkuPaymentMethod, toFaspayPaymentMethod, toFinpayPaymentMethod, toIpaymuPaymentMethod, toNicepayPaymentMethod, toOyPaymentMethod, toPrismalinkPaymentMethod, toStripePaymentMethod, toXenditPaymentMethod, verifyAdyenWebhook, verifyBraintreeWebhook, verifyCheckoutComWebhook, verifyDokuWebhookSignature, verifyDuitkuCallbackSignature, verifyFaspaySignature, verifyFinpaySignature, verifyIpaymuCallback, verifyNicepayWebhook, verifyOyWebhook, verifyPaypalWebhookSimple, verifyPayuWebhook, verifyPrismalinkSignature, verifyRazorpayWebhook, verifySnapWebhookSignature, verifySquareWebhook, verifyStripeWebhook, verifyTwoCheckoutWebhook, verifyXenditWebhookToken };
1738
+ export { AdyenClient, AdyenProvider, BasePaymentProvider, BraintreeClient, BraintreeProvider, Buayar, type BuayarConfig, CANONICAL_TO_DOKU, CANONICAL_TO_DUITKU, CANONICAL_TO_FASPAY, CANONICAL_TO_FINPAY, CANONICAL_TO_IPAYMU, CANONICAL_TO_MIDTRANS, CANONICAL_TO_NICEPAY, CANONICAL_TO_OY, CANONICAL_TO_PRISMALINK, CANONICAL_TO_STRIPE, CANONICAL_TO_XENDIT, CORE_API_METHODS, type CanonicalPaymentMethod, type CheckBalanceResult, type CheckTransactionParams, type CheckTransactionResult, CheckoutComClient, CheckoutComProvider, type CreateInvoiceParams, type CustomerDetails, DUITKU_TO_CANONICAL, type DisburseParams, type DisburseResult, DokuClient, DokuProvider, DuitkuClient, type DuitkuDisbursementParams, DuitkuProvider, type EWalletResponse, FaspayClient, FaspayProvider, FinpayClient, FinpayProvider, type GetPaymentMethodsParams, type GetPaymentMethodsResult, type InvoiceResponse, IpaymuClient, IpaymuProvider, MIDTRANS_PROBE_PAYLOADS, MIDTRANS_STATIC_METHODS, type MandiriBillInfo, MidtransClient, MidtransProvider, NicepayClient, NicepayProvider, OyClient, OyProvider, PaymentManager, type PaymentMethod, type PaymentMethodItem, type PaymentMode, PaypalClient, PaypalProvider, PayuClient, PayuProvider, PrismalinkClient, PrismalinkProvider, type ProviderCapability, type ProviderConfig, type ProviderDescriptor, ProviderRegistry, type QrisResponse, RazorpayClient, RazorpayProvider, type RefundParams, type RefundResult, SnapApiError, SnapClient, type SnapClientOptions, SquareClient, SquareProvider, StripeClient, StripeProvider, TwoCheckoutClient, TwoCheckoutProvider, type VerifyCallbackResult, type VirtualAccountResponse, XenditClient, type XenditDisbursementParams, XenditProvider, buayar, buildBraintreeBasicAuth, buildCoreChargePayload, buildDefaultDescriptors, buildPaypalBasicAuth, buildPayuBasicAuth, buildRazorpayBasicAuth, buildTwoCheckoutAuth, formatNicepayTimestamp, generateDokuHeaders, generateFaspaySignature, generateFinpaySignature, generateIpaymuSignature, generateNicepayToken, generateOyHeaders, generatePrismalinkSignature, generateSnapAsymmetricSignature, generateSnapSymmetricSignature, getDuitkuInquirySignatures, getDuitkuPaymentMethodsSignature, getDuitkuStatusSignatures, getPaymentMethodCategory, getXenditAuthHeader, hmacSha256, md5, minifyJson, parseCoreChargeResponse, paymentManager, providerRegistry, resolveConfigFromEnv, safeCompare, serializePaypalParams, serializeStripeParams, sha256, sha256Hex, sha512, snapErrorHint, snapExternalId, snapTimestamp, snapUtcTimestamp, toCanonicalPaymentMethod, toDokuPaymentMethod, toDuitkuPaymentMethod, toFaspayPaymentMethod, toFinpayPaymentMethod, toIpaymuPaymentMethod, toNicepayPaymentMethod, toOyPaymentMethod, toPrismalinkPaymentMethod, toStripePaymentMethod, toXenditPaymentMethod, verifyAdyenWebhook, verifyBraintreeWebhook, verifyCheckoutComWebhook, verifyDokuWebhookSignature, verifyDuitkuCallbackSignature, verifyFaspaySignature, verifyFinpaySignature, verifyIpaymuCallback, verifyNicepayWebhook, verifyOyWebhook, verifyPaypalWebhookSimple, verifyPayuWebhook, verifyPrismalinkSignature, verifyRazorpayWebhook, verifySnapWebhookSignature, verifySquareWebhook, verifyStripeWebhook, verifyTwoCheckoutWebhook, verifyXenditWebhookToken };