@crediblemark/buayar 0.1.5 → 0.1.7

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
@@ -10,13 +10,16 @@ Dengan SDK ini, Anda cukup menulis kode satu kali menggunakan struktur API yang
10
10
  ---
11
11
 
12
12
  ## 🚀 Fitur Utama
13
-
13
+
14
14
  - 🔄 **Unified API**: Satu antarmuka (interface) terpadu untuk semua provider payment gateway.
15
+ - ⚡ **Direct Payment Support**: Otomatis mendeteksi `paymentMethod` dan beralih ke Direct Inquiry API (v2/inquiry) Duitku untuk mengembalikan `vaNumber`, `qrString` (EMVCo), dan `paymentCode` secara instan tanpa redirect eksternal.
16
+ - 🏷️ **Pre-Categorization (Accordion Ready)**: Menyediakan pengelompokan pembayaran bawaan (`Virtual Account`, `QRIS`, `E-Wallet`, `Retail / Gerai`, `Lainnya`) langsung dari API response untuk memudahkan implementasi UI accordion.
17
+ - 🎨 **Headless SDK Philosophy**: Dirancang murni sebagai core logic & data manager tanpa overhead UI/styling. Memberikan kebebasan penuh bagi pengembang untuk mendesain UI/Tailwind/dark mode di tingkat aplikasi.
15
18
  - 🛡️ **Tipe Data Kuat (TypeScript)**: Dilengkapi dengan deklarasi tipe data lengkap untuk mencegah *runtime error*.
16
19
  - 🇮🇩 **Dukungan Lokal**: Siap digunakan untuk transaksi di Indonesia (seperti Duitku).
17
20
  - ⚙️ **Modular & Dapat Diperluas**: Memungkinkan penambahan provider baru dengan mewarisi kelas base yang disediakan.
18
21
  - 🔒 **Otomatisasi Signature**: Keamanan transaksi terjamin dengan pembuatan *hash* signature (MD5, SHA-256) otomatis secara internal.
19
-
22
+
20
23
  ---
21
24
 
22
25
  ## 📦 Instalasi
@@ -218,11 +221,26 @@ interface InvoiceResponse {
218
221
  success: boolean;
219
222
  paymentUrl?: string;
220
223
  reference?: string;
224
+ vaNumber?: string; // Nomor Virtual Account (untuk metode Bank VA)
225
+ qrString?: string; // EMVCo QRIS payload mentah (untuk scan langsung)
226
+ qrCodeUrl?: string; // Image URL QRIS dari Duitku
227
+ paymentCode?: string; // Kode pembayaran retail (Indomaret/Alfamart)
221
228
  rawResponse: any;
222
229
  error?: string;
223
230
  }
224
231
  ```
225
232
 
233
+ ### `PaymentMethod`
234
+ ```typescript
235
+ interface PaymentMethod {
236
+ paymentMethod: string;
237
+ paymentName: string;
238
+ paymentImage: string;
239
+ totalFee: string;
240
+ category: "Virtual Account" | "QRIS" | "E-Wallet" | "Retail / Gerai" | "Lainnya";
241
+ }
242
+ ```
243
+
226
244
  ### `VerifyCallbackResult`
227
245
  ```typescript
228
246
  interface VerifyCallbackResult {
@@ -236,6 +254,19 @@ interface VerifyCallbackResult {
236
254
 
237
255
  ---
238
256
 
257
+ ## 🛠️ Utilitas Tambahan
258
+
259
+ ### `getPaymentMethodCategory(code, name)`
260
+ Mengkategorikan kode dan nama metode pembayaran Duitku ke kategori terstandarisasi untuk UI Accordion.
261
+ ```typescript
262
+ import { getPaymentMethodCategory } from "@crediblemark/buayar";
263
+
264
+ const cat = getPaymentMethodCategory("BT", "Permata VA");
265
+ // Output: "Virtual Account"
266
+ ```
267
+
268
+ ---
269
+
239
270
  ## 📄 Lisensi
240
271
 
241
272
  Proyek ini dilisensikan di bawah **MIT License**. Hak Cipta © 2026 Rasyiqi Crediblemark.
package/dist/index.d.mts CHANGED
@@ -9,11 +9,23 @@ interface CreateInvoiceParams {
9
9
  };
10
10
  returnUrl: string;
11
11
  callbackUrl: string;
12
+ /** Specific Duitku payment method code (e.g. "BCA", "I1", "OV"). If omitted, all methods are available via Duitku's redirect page. */
13
+ paymentMethod?: string;
14
+ /** Provider-specific parameters (e.g., token_id, billing details, custom headers/fields) */
15
+ providerParams?: any;
12
16
  }
13
17
  interface InvoiceResponse {
14
18
  success: boolean;
15
19
  paymentUrl?: string;
16
20
  reference?: string;
21
+ /** Virtual Account number (for bank VA methods) */
22
+ vaNumber?: string;
23
+ /** QRIS string for display in a QR code */
24
+ qrString?: string;
25
+ /** Duitku-hosted QR code image URL */
26
+ qrCodeUrl?: string;
27
+ /** Generic payment code (for retail/minimarket methods like Indomaret) */
28
+ paymentCode?: string;
17
29
  rawResponse: any;
18
30
  error?: string;
19
31
  }
@@ -29,27 +41,149 @@ interface ProviderConfig {
29
41
  apiKey: string;
30
42
  sandbox: boolean;
31
43
  }
44
+ interface GetPaymentMethodsParams {
45
+ /** Transaction amount (integer, no decimal) */
46
+ amount: number;
47
+ }
48
+ interface PaymentMethod {
49
+ /** Provider-specific method code, e.g. "BT", "I1", "OL" */
50
+ paymentMethod: string;
51
+ /** Human-readable name, e.g. "BCA Virtual Account" */
52
+ paymentName: string;
53
+ /** URL to payment method logo/image */
54
+ paymentImage: string;
55
+ /** Total transaction fee in IDR (string from API) */
56
+ totalFee: string;
57
+ /** Categorized payment channel (Virtual Account, QRIS, E-Wallet, Retail / Gerai, Kartu Kredit, Paylater / Cicilan, Lainnya) */
58
+ category: "Virtual Account" | "QRIS" | "E-Wallet" | "Retail / Gerai" | "Kartu Kredit" | "Paylater / Cicilan" | "Lainnya";
59
+ }
60
+ interface GetPaymentMethodsResult {
61
+ success: boolean;
62
+ methods: PaymentMethod[];
63
+ error?: string;
64
+ rawResponse: any;
65
+ }
66
+ interface CheckTransactionParams {
67
+ /** The merchant order ID used when creating the invoice */
68
+ merchantOrderId: string;
69
+ }
70
+ interface CheckTransactionResult {
71
+ success: boolean;
72
+ orderId: string;
73
+ reference: string;
74
+ amount: number;
75
+ /** "00" = success/paid, "01" = pending, "02" = failed/expired */
76
+ statusCode: string;
77
+ status: "paid" | "pending" | "failed";
78
+ statusMessage: string;
79
+ error?: string;
80
+ rawResponse: any;
81
+ }
32
82
 
33
83
  declare abstract class BasePaymentProvider {
34
84
  abstract readonly name: string;
35
85
  abstract createInvoice(params: CreateInvoiceParams, config: ProviderConfig): Promise<InvoiceResponse>;
36
86
  abstract verifyCallback(body: any, config: ProviderConfig): Promise<VerifyCallbackResult>;
87
+ abstract getPaymentMethods(params: GetPaymentMethodsParams, config: ProviderConfig): Promise<GetPaymentMethodsResult>;
88
+ abstract checkTransaction(params: CheckTransactionParams, config: ProviderConfig): Promise<CheckTransactionResult>;
89
+ /** Probe/discover which payment methods are actually enabled/active for the merchant */
90
+ probePaymentMethods?(config: ProviderConfig): Promise<{
91
+ success: boolean;
92
+ enabled: string[];
93
+ error?: string;
94
+ }>;
95
+ }
96
+
97
+ declare class MidtransClient {
98
+ private apiKey;
99
+ private sandbox;
100
+ constructor(config: {
101
+ apiKey: string;
102
+ sandbox: boolean;
103
+ } | ProviderConfig);
104
+ private getApiBaseUrl;
105
+ private request;
106
+ cancelTransaction(orderId: string): Promise<any>;
107
+ refundTransaction(orderId: string, payload: {
108
+ refund_key?: string;
109
+ amount?: number;
110
+ reason?: string;
111
+ }): Promise<any>;
112
+ expireTransaction(orderId: string): Promise<any>;
113
+ approveTransaction(orderId: string): Promise<any>;
114
+ denyTransaction(orderId: string): Promise<any>;
115
+ captureTransaction(transactionId: string, amount?: number): Promise<any>;
116
+ linkPayAccount(payload: any): Promise<any>;
117
+ getPayAccount(accountId: string): Promise<any>;
118
+ unbindPayAccount(accountId: string): Promise<any>;
119
+ getGoPayPromo(accountId: string, grossAmount: number, currency?: string): Promise<any>;
120
+ createSubscription(payload: any): Promise<any>;
121
+ getSubscription(subscriptionId: string): Promise<any>;
122
+ updateSubscription(subscriptionId: string, payload: any): Promise<any>;
123
+ disableSubscription(subscriptionId: string): Promise<any>;
124
+ enableSubscription(subscriptionId: string): Promise<any>;
125
+ createPaymentLink(payload: any): Promise<any>;
126
+ getPaymentLink(paymentLinkId: string): Promise<any>;
127
+ deletePaymentLink(paymentLinkId: string): Promise<any>;
128
+ getBalance(): Promise<any>;
129
+ createBillingInvoice(payload: any): Promise<any>;
130
+ getBillingInvoice(invoiceId: string): Promise<any>;
131
+ voidBillingInvoice(invoiceId: string): Promise<any>;
132
+ convertBillingInvoice(invoiceId: string): Promise<any>;
133
+ }
134
+
135
+ declare class MidtransProvider extends BasePaymentProvider {
136
+ readonly name = "midtrans";
137
+ private getSnapBaseUrl;
138
+ private getApiBaseUrl;
139
+ createInvoice(params: CreateInvoiceParams, config: ProviderConfig): Promise<InvoiceResponse>;
140
+ verifyCallback(body: any, config: ProviderConfig): Promise<VerifyCallbackResult>;
141
+ getPaymentMethods(params: GetPaymentMethodsParams, config: ProviderConfig): Promise<GetPaymentMethodsResult>;
142
+ checkTransaction(params: CheckTransactionParams, config: ProviderConfig): Promise<CheckTransactionResult>;
143
+ /**
144
+ * Get an instance of MidtransClient to perform transaction actions, subscriptions, invoicing, etc.
145
+ */
146
+ getClient(config: ProviderConfig): MidtransClient;
147
+ probePaymentMethods(config: ProviderConfig): Promise<{
148
+ success: boolean;
149
+ enabled: string[];
150
+ error?: string;
151
+ }>;
37
152
  }
38
153
 
39
154
  declare class DuitkuProvider extends BasePaymentProvider {
40
155
  readonly name = "duitku";
156
+ private getBaseUrl;
41
157
  createInvoice(params: CreateInvoiceParams, config: ProviderConfig): Promise<InvoiceResponse>;
42
158
  verifyCallback(body: any, config: ProviderConfig): Promise<VerifyCallbackResult>;
159
+ getPaymentMethods(params: GetPaymentMethodsParams, config: ProviderConfig): Promise<GetPaymentMethodsResult>;
160
+ checkTransaction(params: CheckTransactionParams, config: ProviderConfig): Promise<CheckTransactionResult>;
161
+ probePaymentMethods(config: ProviderConfig): Promise<{
162
+ success: boolean;
163
+ enabled: string[];
164
+ error?: string;
165
+ }>;
43
166
  }
44
167
 
168
+ declare function getPaymentMethodCategory(code: string, name?: string): "Virtual Account" | "QRIS" | "E-Wallet" | "Retail / Gerai" | "Kartu Kredit" | "Paylater / Cicilan" | "Lainnya";
169
+
45
170
  declare class PaymentManager {
46
171
  private providers;
47
172
  constructor();
48
173
  registerProvider(provider: BasePaymentProvider): void;
49
174
  getProvider(name: string): BasePaymentProvider;
175
+ getMidtransProvider(): MidtransProvider;
176
+ getMidtransClient(config: ProviderConfig): MidtransClient;
50
177
  createInvoice(providerName: string, params: CreateInvoiceParams, config: ProviderConfig): Promise<InvoiceResponse>;
51
178
  verifyCallback(providerName: string, body: any, config: ProviderConfig): Promise<VerifyCallbackResult>;
179
+ getPaymentMethods(providerName: string, params: GetPaymentMethodsParams, config: ProviderConfig): Promise<GetPaymentMethodsResult>;
180
+ checkTransaction(providerName: string, params: CheckTransactionParams, config: ProviderConfig): Promise<CheckTransactionResult>;
181
+ probePaymentMethods(providerName: string, config: ProviderConfig): Promise<{
182
+ success: boolean;
183
+ enabled: string[];
184
+ error?: string;
185
+ }>;
52
186
  }
53
187
  declare const paymentManager: PaymentManager;
54
188
 
55
- export { BasePaymentProvider, type CreateInvoiceParams, DuitkuProvider, type InvoiceResponse, PaymentManager, type ProviderConfig, type VerifyCallbackResult, paymentManager };
189
+ export { BasePaymentProvider, type CheckTransactionParams, type CheckTransactionResult, type CreateInvoiceParams, DuitkuProvider, type GetPaymentMethodsParams, type GetPaymentMethodsResult, type InvoiceResponse, MidtransClient, MidtransProvider, PaymentManager, type PaymentMethod, type ProviderConfig, type VerifyCallbackResult, getPaymentMethodCategory, paymentManager };
package/dist/index.d.ts CHANGED
@@ -9,11 +9,23 @@ interface CreateInvoiceParams {
9
9
  };
10
10
  returnUrl: string;
11
11
  callbackUrl: string;
12
+ /** Specific Duitku payment method code (e.g. "BCA", "I1", "OV"). If omitted, all methods are available via Duitku's redirect page. */
13
+ paymentMethod?: string;
14
+ /** Provider-specific parameters (e.g., token_id, billing details, custom headers/fields) */
15
+ providerParams?: any;
12
16
  }
13
17
  interface InvoiceResponse {
14
18
  success: boolean;
15
19
  paymentUrl?: string;
16
20
  reference?: string;
21
+ /** Virtual Account number (for bank VA methods) */
22
+ vaNumber?: string;
23
+ /** QRIS string for display in a QR code */
24
+ qrString?: string;
25
+ /** Duitku-hosted QR code image URL */
26
+ qrCodeUrl?: string;
27
+ /** Generic payment code (for retail/minimarket methods like Indomaret) */
28
+ paymentCode?: string;
17
29
  rawResponse: any;
18
30
  error?: string;
19
31
  }
@@ -29,27 +41,149 @@ interface ProviderConfig {
29
41
  apiKey: string;
30
42
  sandbox: boolean;
31
43
  }
44
+ interface GetPaymentMethodsParams {
45
+ /** Transaction amount (integer, no decimal) */
46
+ amount: number;
47
+ }
48
+ interface PaymentMethod {
49
+ /** Provider-specific method code, e.g. "BT", "I1", "OL" */
50
+ paymentMethod: string;
51
+ /** Human-readable name, e.g. "BCA Virtual Account" */
52
+ paymentName: string;
53
+ /** URL to payment method logo/image */
54
+ paymentImage: string;
55
+ /** Total transaction fee in IDR (string from API) */
56
+ totalFee: string;
57
+ /** Categorized payment channel (Virtual Account, QRIS, E-Wallet, Retail / Gerai, Kartu Kredit, Paylater / Cicilan, Lainnya) */
58
+ category: "Virtual Account" | "QRIS" | "E-Wallet" | "Retail / Gerai" | "Kartu Kredit" | "Paylater / Cicilan" | "Lainnya";
59
+ }
60
+ interface GetPaymentMethodsResult {
61
+ success: boolean;
62
+ methods: PaymentMethod[];
63
+ error?: string;
64
+ rawResponse: any;
65
+ }
66
+ interface CheckTransactionParams {
67
+ /** The merchant order ID used when creating the invoice */
68
+ merchantOrderId: string;
69
+ }
70
+ interface CheckTransactionResult {
71
+ success: boolean;
72
+ orderId: string;
73
+ reference: string;
74
+ amount: number;
75
+ /** "00" = success/paid, "01" = pending, "02" = failed/expired */
76
+ statusCode: string;
77
+ status: "paid" | "pending" | "failed";
78
+ statusMessage: string;
79
+ error?: string;
80
+ rawResponse: any;
81
+ }
32
82
 
33
83
  declare abstract class BasePaymentProvider {
34
84
  abstract readonly name: string;
35
85
  abstract createInvoice(params: CreateInvoiceParams, config: ProviderConfig): Promise<InvoiceResponse>;
36
86
  abstract verifyCallback(body: any, config: ProviderConfig): Promise<VerifyCallbackResult>;
87
+ abstract getPaymentMethods(params: GetPaymentMethodsParams, config: ProviderConfig): Promise<GetPaymentMethodsResult>;
88
+ abstract checkTransaction(params: CheckTransactionParams, config: ProviderConfig): Promise<CheckTransactionResult>;
89
+ /** Probe/discover which payment methods are actually enabled/active for the merchant */
90
+ probePaymentMethods?(config: ProviderConfig): Promise<{
91
+ success: boolean;
92
+ enabled: string[];
93
+ error?: string;
94
+ }>;
95
+ }
96
+
97
+ declare class MidtransClient {
98
+ private apiKey;
99
+ private sandbox;
100
+ constructor(config: {
101
+ apiKey: string;
102
+ sandbox: boolean;
103
+ } | ProviderConfig);
104
+ private getApiBaseUrl;
105
+ private request;
106
+ cancelTransaction(orderId: string): Promise<any>;
107
+ refundTransaction(orderId: string, payload: {
108
+ refund_key?: string;
109
+ amount?: number;
110
+ reason?: string;
111
+ }): Promise<any>;
112
+ expireTransaction(orderId: string): Promise<any>;
113
+ approveTransaction(orderId: string): Promise<any>;
114
+ denyTransaction(orderId: string): Promise<any>;
115
+ captureTransaction(transactionId: string, amount?: number): Promise<any>;
116
+ linkPayAccount(payload: any): Promise<any>;
117
+ getPayAccount(accountId: string): Promise<any>;
118
+ unbindPayAccount(accountId: string): Promise<any>;
119
+ getGoPayPromo(accountId: string, grossAmount: number, currency?: string): Promise<any>;
120
+ createSubscription(payload: any): Promise<any>;
121
+ getSubscription(subscriptionId: string): Promise<any>;
122
+ updateSubscription(subscriptionId: string, payload: any): Promise<any>;
123
+ disableSubscription(subscriptionId: string): Promise<any>;
124
+ enableSubscription(subscriptionId: string): Promise<any>;
125
+ createPaymentLink(payload: any): Promise<any>;
126
+ getPaymentLink(paymentLinkId: string): Promise<any>;
127
+ deletePaymentLink(paymentLinkId: string): Promise<any>;
128
+ getBalance(): Promise<any>;
129
+ createBillingInvoice(payload: any): Promise<any>;
130
+ getBillingInvoice(invoiceId: string): Promise<any>;
131
+ voidBillingInvoice(invoiceId: string): Promise<any>;
132
+ convertBillingInvoice(invoiceId: string): Promise<any>;
133
+ }
134
+
135
+ declare class MidtransProvider extends BasePaymentProvider {
136
+ readonly name = "midtrans";
137
+ private getSnapBaseUrl;
138
+ private getApiBaseUrl;
139
+ createInvoice(params: CreateInvoiceParams, config: ProviderConfig): Promise<InvoiceResponse>;
140
+ verifyCallback(body: any, config: ProviderConfig): Promise<VerifyCallbackResult>;
141
+ getPaymentMethods(params: GetPaymentMethodsParams, config: ProviderConfig): Promise<GetPaymentMethodsResult>;
142
+ checkTransaction(params: CheckTransactionParams, config: ProviderConfig): Promise<CheckTransactionResult>;
143
+ /**
144
+ * Get an instance of MidtransClient to perform transaction actions, subscriptions, invoicing, etc.
145
+ */
146
+ getClient(config: ProviderConfig): MidtransClient;
147
+ probePaymentMethods(config: ProviderConfig): Promise<{
148
+ success: boolean;
149
+ enabled: string[];
150
+ error?: string;
151
+ }>;
37
152
  }
38
153
 
39
154
  declare class DuitkuProvider extends BasePaymentProvider {
40
155
  readonly name = "duitku";
156
+ private getBaseUrl;
41
157
  createInvoice(params: CreateInvoiceParams, config: ProviderConfig): Promise<InvoiceResponse>;
42
158
  verifyCallback(body: any, config: ProviderConfig): Promise<VerifyCallbackResult>;
159
+ getPaymentMethods(params: GetPaymentMethodsParams, config: ProviderConfig): Promise<GetPaymentMethodsResult>;
160
+ checkTransaction(params: CheckTransactionParams, config: ProviderConfig): Promise<CheckTransactionResult>;
161
+ probePaymentMethods(config: ProviderConfig): Promise<{
162
+ success: boolean;
163
+ enabled: string[];
164
+ error?: string;
165
+ }>;
43
166
  }
44
167
 
168
+ declare function getPaymentMethodCategory(code: string, name?: string): "Virtual Account" | "QRIS" | "E-Wallet" | "Retail / Gerai" | "Kartu Kredit" | "Paylater / Cicilan" | "Lainnya";
169
+
45
170
  declare class PaymentManager {
46
171
  private providers;
47
172
  constructor();
48
173
  registerProvider(provider: BasePaymentProvider): void;
49
174
  getProvider(name: string): BasePaymentProvider;
175
+ getMidtransProvider(): MidtransProvider;
176
+ getMidtransClient(config: ProviderConfig): MidtransClient;
50
177
  createInvoice(providerName: string, params: CreateInvoiceParams, config: ProviderConfig): Promise<InvoiceResponse>;
51
178
  verifyCallback(providerName: string, body: any, config: ProviderConfig): Promise<VerifyCallbackResult>;
179
+ getPaymentMethods(providerName: string, params: GetPaymentMethodsParams, config: ProviderConfig): Promise<GetPaymentMethodsResult>;
180
+ checkTransaction(providerName: string, params: CheckTransactionParams, config: ProviderConfig): Promise<CheckTransactionResult>;
181
+ probePaymentMethods(providerName: string, config: ProviderConfig): Promise<{
182
+ success: boolean;
183
+ enabled: string[];
184
+ error?: string;
185
+ }>;
52
186
  }
53
187
  declare const paymentManager: PaymentManager;
54
188
 
55
- export { BasePaymentProvider, type CreateInvoiceParams, DuitkuProvider, type InvoiceResponse, PaymentManager, type ProviderConfig, type VerifyCallbackResult, paymentManager };
189
+ export { BasePaymentProvider, type CheckTransactionParams, type CheckTransactionResult, type CreateInvoiceParams, DuitkuProvider, type GetPaymentMethodsParams, type GetPaymentMethodsResult, type InvoiceResponse, MidtransClient, MidtransProvider, PaymentManager, type PaymentMethod, type ProviderConfig, type VerifyCallbackResult, getPaymentMethodCategory, paymentManager };