@crediblemark/buayar 0.6.1 → 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 +35 -11
- package/dist/cli/index.js +21 -11
- package/dist/index.d.mts +127 -7
- package/dist/index.d.ts +127 -7
- package/dist/index.js +453 -215
- package/dist/index.mjs +448 -215
- package/docs/guide.md +92 -9
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -76,8 +76,10 @@ __export(index_exports, {
|
|
|
76
76
|
PayuProvider: () => PayuProvider,
|
|
77
77
|
PrismalinkClient: () => PrismalinkClient,
|
|
78
78
|
PrismalinkProvider: () => PrismalinkProvider,
|
|
79
|
+
ProviderRegistry: () => ProviderRegistry,
|
|
79
80
|
RazorpayClient: () => RazorpayClient,
|
|
80
81
|
RazorpayProvider: () => RazorpayProvider,
|
|
82
|
+
SnapApiError: () => SnapApiError,
|
|
81
83
|
SnapClient: () => SnapClient,
|
|
82
84
|
SquareClient: () => SquareClient,
|
|
83
85
|
SquareProvider: () => SquareProvider,
|
|
@@ -90,6 +92,7 @@ __export(index_exports, {
|
|
|
90
92
|
buayar: () => buayar,
|
|
91
93
|
buildBraintreeBasicAuth: () => buildBraintreeBasicAuth,
|
|
92
94
|
buildCoreChargePayload: () => buildCoreChargePayload,
|
|
95
|
+
buildDefaultDescriptors: () => buildDefaultDescriptors,
|
|
93
96
|
buildPaypalBasicAuth: () => buildPaypalBasicAuth,
|
|
94
97
|
buildPayuBasicAuth: () => buildPayuBasicAuth,
|
|
95
98
|
buildRazorpayBasicAuth: () => buildRazorpayBasicAuth,
|
|
@@ -114,6 +117,7 @@ __export(index_exports, {
|
|
|
114
117
|
minifyJson: () => minifyJson,
|
|
115
118
|
parseCoreChargeResponse: () => parseCoreChargeResponse,
|
|
116
119
|
paymentManager: () => paymentManager,
|
|
120
|
+
providerRegistry: () => providerRegistry,
|
|
117
121
|
resolveConfigFromEnv: () => resolveConfigFromEnv,
|
|
118
122
|
safeCompare: () => safeCompare,
|
|
119
123
|
serializePaypalParams: () => serializePaypalParams,
|
|
@@ -121,6 +125,7 @@ __export(index_exports, {
|
|
|
121
125
|
sha256: () => sha256,
|
|
122
126
|
sha256Hex: () => sha256Hex,
|
|
123
127
|
sha512: () => sha512,
|
|
128
|
+
snapErrorHint: () => snapErrorHint,
|
|
124
129
|
snapExternalId: () => snapExternalId,
|
|
125
130
|
snapTimestamp: () => snapTimestamp,
|
|
126
131
|
snapUtcTimestamp: () => snapUtcTimestamp,
|
|
@@ -2627,6 +2632,29 @@ function verifySnapWebhookSignature(headers, body, clientSecret, endpointUrl = "
|
|
|
2627
2632
|
);
|
|
2628
2633
|
return safeCompare(incoming, computed);
|
|
2629
2634
|
}
|
|
2635
|
+
function snapErrorHint(message, code) {
|
|
2636
|
+
const m = (message || "").toLowerCase();
|
|
2637
|
+
const c = (code || "").toLowerCase();
|
|
2638
|
+
if (m.includes("unknown client") || c.includes("4017300") || c.includes("4017400")) {
|
|
2639
|
+
return "Client ID tidak dikenali DOKU. Pastikan clientId benar & kanal SNAP aktif untuk akun ini.";
|
|
2640
|
+
}
|
|
2641
|
+
if (m.includes("signature") || c.startsWith("401")) {
|
|
2642
|
+
return "Signature ditolak DOKU. Pastikan (a) Merchant Public Key yang di-upload sesuai dengan private key yang dipakai, dan (b) Get Token memakai timestamp UTC (Z).";
|
|
2643
|
+
}
|
|
2644
|
+
if (m.includes("bin") || m.includes("not configured") && m.includes("identifier")) {
|
|
2645
|
+
return "Akun belum punya BIN/partnerServiceId VA yang aktif. Sediakan nilai di config.extra.partnerServiceId (atau DOKU_PARTNER_SERVICE_ID) setelah di-assign di dashboard/sales.";
|
|
2646
|
+
}
|
|
2647
|
+
if (m.includes("merchantid") || m.includes("merchant id")) {
|
|
2648
|
+
return "QRIS/e-Wallet butuh merchantId. Isi config.extra.merchantId (atau DOKU_MERCHANT_ID) dari dashboard.";
|
|
2649
|
+
}
|
|
2650
|
+
if (m.includes("partner service id") || m.includes("partnerServiceId")) {
|
|
2651
|
+
return "partnerServiceId tidak valid. Harus 8 karakter left-padded (BIN/company code DOKU).";
|
|
2652
|
+
}
|
|
2653
|
+
if (m.includes("customer no") || m.includes("customerno")) {
|
|
2654
|
+
return "customerNo tidak valid (maks 20 digit unik). Cek config.extra.customerNo.";
|
|
2655
|
+
}
|
|
2656
|
+
return void 0;
|
|
2657
|
+
}
|
|
2630
2658
|
|
|
2631
2659
|
// src/clients/snap.ts
|
|
2632
2660
|
var SnapClient = class {
|
|
@@ -2683,7 +2711,16 @@ var SnapClient = class {
|
|
|
2683
2711
|
} catch {
|
|
2684
2712
|
}
|
|
2685
2713
|
if (!response.ok || !data?.accessToken) {
|
|
2686
|
-
|
|
2714
|
+
const baseMessage = data?.responseMessage || data?.message || `DOKU SNAP get-token failed: HTTP ${response.status}`;
|
|
2715
|
+
const hint = snapErrorHint(baseMessage, data?.responseCode);
|
|
2716
|
+
const err = new SnapApiError(`${baseMessage}${data?.responseCode ? ` (${data.responseCode})` : ""}${hint ? ` \u2014 ${hint}` : ""}`, {
|
|
2717
|
+
status: response.status,
|
|
2718
|
+
code: data?.responseCode,
|
|
2719
|
+
raw: data,
|
|
2720
|
+
endpoint,
|
|
2721
|
+
method: "POST"
|
|
2722
|
+
});
|
|
2723
|
+
throw err;
|
|
2687
2724
|
}
|
|
2688
2725
|
if (!clientSecret) {
|
|
2689
2726
|
}
|
|
@@ -2744,12 +2781,37 @@ var SnapClient = class {
|
|
|
2744
2781
|
} catch {
|
|
2745
2782
|
}
|
|
2746
2783
|
if (!response.ok) {
|
|
2747
|
-
const
|
|
2748
|
-
|
|
2784
|
+
const baseMessage = data?.responseMessage || data?.error?.message || data?.message || `HTTP ${response.status}`;
|
|
2785
|
+
const hint = snapErrorHint(baseMessage, data?.responseCode);
|
|
2786
|
+
const message = `${baseMessage}${data?.responseCode ? ` (${data.responseCode})` : ""}${hint ? ` \u2014 ${hint}` : ""}`;
|
|
2787
|
+
const err = new SnapApiError(message, {
|
|
2788
|
+
status: response.status,
|
|
2789
|
+
code: data?.responseCode,
|
|
2790
|
+
raw: data,
|
|
2791
|
+
endpoint,
|
|
2792
|
+
method
|
|
2793
|
+
});
|
|
2794
|
+
throw err;
|
|
2749
2795
|
}
|
|
2750
2796
|
return data;
|
|
2751
2797
|
}
|
|
2752
2798
|
};
|
|
2799
|
+
var SnapApiError = class extends Error {
|
|
2800
|
+
status;
|
|
2801
|
+
responseCode;
|
|
2802
|
+
raw;
|
|
2803
|
+
endpoint;
|
|
2804
|
+
method;
|
|
2805
|
+
constructor(message, opts) {
|
|
2806
|
+
super(message);
|
|
2807
|
+
this.name = "SnapApiError";
|
|
2808
|
+
this.status = opts.status;
|
|
2809
|
+
this.responseCode = opts.code;
|
|
2810
|
+
this.raw = opts.raw;
|
|
2811
|
+
this.endpoint = opts.endpoint;
|
|
2812
|
+
this.method = opts.method;
|
|
2813
|
+
}
|
|
2814
|
+
};
|
|
2753
2815
|
|
|
2754
2816
|
// src/providers/doku/provider.ts
|
|
2755
2817
|
var DokuProvider = class extends BasePaymentProvider {
|
|
@@ -3026,8 +3088,8 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
3026
3088
|
provider: "doku",
|
|
3027
3089
|
orderId,
|
|
3028
3090
|
amount: integerAmount,
|
|
3029
|
-
rawResponse: null,
|
|
3030
|
-
error: e
|
|
3091
|
+
rawResponse: e?.raw ?? e?.rawResponse ?? null,
|
|
3092
|
+
error: e?.message || "Failed to make SNAP request to DOKU API"
|
|
3031
3093
|
};
|
|
3032
3094
|
}
|
|
3033
3095
|
}
|
|
@@ -3037,8 +3099,9 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
3037
3099
|
const method = String(params.paymentMethod || "").toLowerCase();
|
|
3038
3100
|
const bankKey = method.replace(/_va$/, "");
|
|
3039
3101
|
const channel = config.extra?.vaChannel || bankMap[bankKey] || `VIRTUAL_ACCOUNT_${bankKey.toUpperCase()}`;
|
|
3040
|
-
const
|
|
3041
|
-
const
|
|
3102
|
+
const rawPartnerServiceId = (config.extra?.partnerServiceId || "").replace(/\s/g, "");
|
|
3103
|
+
const partnerServiceId = rawPartnerServiceId.padStart(8, " ").slice(0, 8);
|
|
3104
|
+
const customerNo = (config.extra?.customerNo || "").replace(/\s/g, "").slice(0, 20) || String(Date.now()).slice(-12);
|
|
3042
3105
|
const virtualAccountNo = (partnerServiceId + customerNo).slice(0, 28);
|
|
3043
3106
|
const reusable = config.extra?.reusableStatus === true;
|
|
3044
3107
|
const currency = params.currency || "IDR";
|
|
@@ -3067,6 +3130,7 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
3067
3130
|
return {
|
|
3068
3131
|
success: true,
|
|
3069
3132
|
provider: "doku",
|
|
3133
|
+
mode: "va",
|
|
3070
3134
|
orderId: vaData.trxId || orderId,
|
|
3071
3135
|
amount: Number(vaData.totalAmount?.value || amount) || Math.round(amount),
|
|
3072
3136
|
reference: vaData.virtualAccountNo || orderId,
|
|
@@ -3102,6 +3166,7 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
3102
3166
|
return {
|
|
3103
3167
|
success: true,
|
|
3104
3168
|
provider: "doku",
|
|
3169
|
+
mode: "qris",
|
|
3105
3170
|
orderId: data.partnerReferenceNo || orderId,
|
|
3106
3171
|
amount: Number(data.amount?.value || amount) || Math.round(amount),
|
|
3107
3172
|
reference: data.referenceNo || orderId,
|
|
@@ -3147,10 +3212,12 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
3147
3212
|
return {
|
|
3148
3213
|
success: true,
|
|
3149
3214
|
provider: "doku",
|
|
3215
|
+
mode: "ewallet",
|
|
3150
3216
|
orderId: data.partnerReferenceNo || orderId,
|
|
3151
3217
|
amount: Number(data.amount?.value || amount) || Math.round(amount),
|
|
3152
3218
|
reference: data.partnerReferenceNo || orderId,
|
|
3153
3219
|
paymentUrl: data.webRedirectUrl || data.paymentUrl,
|
|
3220
|
+
checkoutUrl: data.webRedirectUrl || data.paymentUrl,
|
|
3154
3221
|
rawResponse: data
|
|
3155
3222
|
};
|
|
3156
3223
|
}
|
|
@@ -9575,170 +9642,316 @@ var PaymentManager = class {
|
|
|
9575
9642
|
};
|
|
9576
9643
|
var paymentManager = new PaymentManager();
|
|
9577
9644
|
|
|
9645
|
+
// src/core/providerRegistry.ts
|
|
9646
|
+
var ProviderRegistry = class {
|
|
9647
|
+
descriptors = /* @__PURE__ */ new Map();
|
|
9648
|
+
constructor(initial) {
|
|
9649
|
+
for (const d of initial || []) this.register(d);
|
|
9650
|
+
}
|
|
9651
|
+
register(desc) {
|
|
9652
|
+
this.descriptors.set(desc.name.toLowerCase().trim(), desc);
|
|
9653
|
+
}
|
|
9654
|
+
unregister(name) {
|
|
9655
|
+
return this.descriptors.delete(name.toLowerCase().trim());
|
|
9656
|
+
}
|
|
9657
|
+
has(name) {
|
|
9658
|
+
return this.descriptors.has(name.toLowerCase().trim());
|
|
9659
|
+
}
|
|
9660
|
+
get(name) {
|
|
9661
|
+
return this.descriptors.get(name.toLowerCase().trim());
|
|
9662
|
+
}
|
|
9663
|
+
names() {
|
|
9664
|
+
return [...this.descriptors.keys()];
|
|
9665
|
+
}
|
|
9666
|
+
/**
|
|
9667
|
+
* Autodetect provider aktif dari variabel lingkungan.
|
|
9668
|
+
* Mengembalikan nama provider yang kredensial .env-nya terisi penuh,
|
|
9669
|
+
* atau undefined jika tidak ada / ambigu.
|
|
9670
|
+
*/
|
|
9671
|
+
detectFromEnv(env) {
|
|
9672
|
+
const present = [];
|
|
9673
|
+
for (const [name, desc] of this.descriptors) {
|
|
9674
|
+
const filled = desc.envKeys.filter((k) => {
|
|
9675
|
+
const v = env[k];
|
|
9676
|
+
return typeof v === "string" && v.trim().length > 0;
|
|
9677
|
+
});
|
|
9678
|
+
if (filled.length > 0) present.push({ name, count: filled.length });
|
|
9679
|
+
}
|
|
9680
|
+
if (present.length === 0) return void 0;
|
|
9681
|
+
present.sort((a, b) => b.count - a.count);
|
|
9682
|
+
const top = present[0];
|
|
9683
|
+
const ties = present.filter((p) => p.count === top.count);
|
|
9684
|
+
return ties.length === 1 ? top.name : void 0;
|
|
9685
|
+
}
|
|
9686
|
+
/**
|
|
9687
|
+
* Autodetect provider dari struktur payload webhook.
|
|
9688
|
+
* Mengembalikan nama provider jika dikenali, else undefined.
|
|
9689
|
+
*/
|
|
9690
|
+
detectFromWebhook(payload) {
|
|
9691
|
+
if (!payload) return void 0;
|
|
9692
|
+
const p = payload;
|
|
9693
|
+
if (p.signature_key && p.transaction_status) return "midtrans";
|
|
9694
|
+
if (p.merchantCode && p.merchantOrderId && p.resultCode) return "duitku";
|
|
9695
|
+
if (p.trx_id && (p.sid || p.reference_id || p.via)) return "ipaymu";
|
|
9696
|
+
if (p.service?.id || p.order?.invoice_number && p.transaction?.status) return "doku";
|
|
9697
|
+
if (p.bill_no && (p.payment_status_code !== void 0 || p.payment_status_desc)) return "faspay";
|
|
9698
|
+
if (p.merchant_id && p.order_id && p.payment_status) return "finpay";
|
|
9699
|
+
if (p.tXid && p.merchantToken && (p.referenceNo || p.amt)) return "nicepay";
|
|
9700
|
+
if (p.partner_tx_id || p.partner_trx_id) return "oy";
|
|
9701
|
+
if (p.merchant_id && p.order_id && p.signature) return "prismalink";
|
|
9702
|
+
if (p.object === "event" || p.type && p.data?.object && p.api_version) return "stripe";
|
|
9703
|
+
if (p.event && p.payload?.payment?.entity) return "razorpay";
|
|
9704
|
+
if (p.external_id || p.event?.startsWith("payment.") || p.event?.startsWith("qr.") || p.data?.reference_id) return "xendit";
|
|
9705
|
+
if (p.event_type && p.resource && (p.event_type.startsWith("PAYMENT.") || p.event_type.startsWith("CHECKOUT.ORDER."))) return "paypal";
|
|
9706
|
+
if (p.notificationItems || p.merchantAccountCode && p.pspReference && p.eventCode) return "adyen";
|
|
9707
|
+
if (p.type && p.data?._links && (p.type.startsWith("payment_") || p.type.startsWith("refund_"))) return "checkoutcom";
|
|
9708
|
+
if (p.type && p.data?.object?.status && p.merchant_id) return "square";
|
|
9709
|
+
if (p.order && p.order?.status && p.order?.extOrderId) return "payu";
|
|
9710
|
+
if (p.kind && p.subject?.transaction) return "braintree";
|
|
9711
|
+
if (p.HASH && p.REFNOEXT && p.IPN_PID) return "twocheckout";
|
|
9712
|
+
return void 0;
|
|
9713
|
+
}
|
|
9714
|
+
};
|
|
9715
|
+
var ENV_KEYS = {
|
|
9716
|
+
midtrans: ["MIDTRANS_SERVER_KEY", "MIDTRANS_CLIENT_KEY"],
|
|
9717
|
+
duitku: ["DUITKU_API_KEY", "DUITKU_MERCHANT_CODE"],
|
|
9718
|
+
ipaymu: ["IPAYMU_API_KEY", "IPAYMU_VA"],
|
|
9719
|
+
xendit: ["XENDIT_SECRET_KEY", "XENDIT_WEBHOOK_TOKEN"],
|
|
9720
|
+
doku: ["DOKU_CLIENT_ID", "DOKU_SECRET_KEY"],
|
|
9721
|
+
prismalink: ["PRISMALINK_MERCHANT_ID", "PRISMALINK_SECRET_KEY"],
|
|
9722
|
+
faspay: ["FASPAY_MERCHANT_ID", "FASPAY_USER_ID", "FASPAY_PASSWORD"],
|
|
9723
|
+
finpay: ["FINPAY_MERCHANT_ID", "FINPAY_MERCHANT_KEY"],
|
|
9724
|
+
nicepay: ["NICEPAY_IMID", "NICEPAY_KEY"],
|
|
9725
|
+
oy: ["OY_USERNAME", "OY_API_KEY"],
|
|
9726
|
+
stripe: ["STRIPE_SECRET_KEY", "STRIPE_PUBLIC_KEY", "STRIPE_WEBHOOK_SECRET"],
|
|
9727
|
+
paypal: ["PAYPAL_CLIENT_ID", "PAYPAL_CLIENT_SECRET", "PAYPAL_WEBHOOK_ID"],
|
|
9728
|
+
adyen: ["ADYEN_API_KEY", "ADYEN_MERCHANT_ACCOUNT", "ADYEN_HMAC_KEY"],
|
|
9729
|
+
checkoutcom: ["CHECKOUTCOM_SECRET_KEY", "CHECKOUTCOM_PUBLIC_KEY", "CHECKOUTCOM_WEBHOOK_SECRET"],
|
|
9730
|
+
razorpay: ["RAZORPAY_KEY_ID", "RAZORPAY_KEY_SECRET", "RAZORPAY_WEBHOOK_SECRET"],
|
|
9731
|
+
square: ["SQUARE_ACCESS_TOKEN", "SQUARE_LOCATION_ID", "SQUARE_WEBHOOK_SIGNATURE_KEY"],
|
|
9732
|
+
payu: ["PAYU_POS_ID", "PAYU_MD5_KEY"],
|
|
9733
|
+
braintree: ["BRAINTREE_MERCHANT_ID", "BRAINTREE_PUBLIC_KEY", "BRAINTREE_PRIVATE_KEY"],
|
|
9734
|
+
twocheckout: ["TWOCHECKOUT_MERCHANT_CODE", "TWOCHECKOUT_SECRET_KEY", "TWOCHECKOUT_SECRET_WORD"]
|
|
9735
|
+
};
|
|
9736
|
+
var WORKING_METHODS = {
|
|
9737
|
+
midtrans: Object.keys(CANONICAL_TO_MIDTRANS),
|
|
9738
|
+
duitku: Object.keys(CANONICAL_TO_DUITKU),
|
|
9739
|
+
ipaymu: Object.keys(CANONICAL_TO_IPAYMU),
|
|
9740
|
+
xendit: Object.keys(CANONICAL_TO_XENDIT),
|
|
9741
|
+
doku: Object.keys(CANONICAL_TO_DOKU),
|
|
9742
|
+
prismalink: Object.keys(CANONICAL_TO_PRISMALINK),
|
|
9743
|
+
faspay: Object.keys(CANONICAL_TO_FASPAY),
|
|
9744
|
+
finpay: Object.keys(CANONICAL_TO_FINPAY),
|
|
9745
|
+
nicepay: Object.keys(CANONICAL_TO_NICEPAY),
|
|
9746
|
+
oy: Object.keys(CANONICAL_TO_OY),
|
|
9747
|
+
stripe: Object.keys(CANONICAL_TO_STRIPE),
|
|
9748
|
+
paypal: ["credit_card", "paylater", "paypal", "bank_transfer"],
|
|
9749
|
+
adyen: ["credit_card", "paypal", "qris", "apple_pay", "google_pay", "klarna", "sepa"],
|
|
9750
|
+
checkoutcom: ["credit_card", "paypal", "apple_pay", "google_pay", "klarna", "sofort", "bank_transfer"],
|
|
9751
|
+
razorpay: ["credit_card", "wallet", "upi", "netbanking", "emi", "bank_transfer"],
|
|
9752
|
+
square: ["credit_card", "apple_pay", "google_pay", "afterpay", "cash_app"],
|
|
9753
|
+
payu: ["credit_card", "bank_transfer", "apple_pay", "google_pay", "blik", "installment"],
|
|
9754
|
+
braintree: ["credit_card", "paypal", "apple_pay", "google_pay", "venmo"],
|
|
9755
|
+
twocheckout: ["credit_card", "paypal", "paylater", "wire_transfer"]
|
|
9756
|
+
};
|
|
9757
|
+
var OPERATIONS = {
|
|
9758
|
+
midtrans: { refund: true, checkBalance: true, disburse: false },
|
|
9759
|
+
duitku: { refund: false, checkBalance: true, disburse: true },
|
|
9760
|
+
ipaymu: { refund: false, checkBalance: true, disburse: false },
|
|
9761
|
+
xendit: { refund: false, checkBalance: true, disburse: true },
|
|
9762
|
+
doku: { refund: false, checkBalance: false, disburse: false },
|
|
9763
|
+
prismalink: { refund: false, checkBalance: false, disburse: false },
|
|
9764
|
+
faspay: { refund: false, checkBalance: false, disburse: false },
|
|
9765
|
+
finpay: { refund: false, checkBalance: false, disburse: false },
|
|
9766
|
+
nicepay: { refund: false, checkBalance: false, disburse: false },
|
|
9767
|
+
oy: { refund: false, checkBalance: true, disburse: true },
|
|
9768
|
+
stripe: { refund: true, checkBalance: true, disburse: false },
|
|
9769
|
+
paypal: { refund: true, checkBalance: true, disburse: false },
|
|
9770
|
+
adyen: { refund: true, checkBalance: false, disburse: false },
|
|
9771
|
+
checkoutcom: { refund: true, checkBalance: true, disburse: false },
|
|
9772
|
+
razorpay: { refund: true, checkBalance: true, disburse: false },
|
|
9773
|
+
square: { refund: true, checkBalance: true, disburse: false },
|
|
9774
|
+
payu: { refund: true, checkBalance: false, disburse: false },
|
|
9775
|
+
braintree: { refund: true, checkBalance: false, disburse: false },
|
|
9776
|
+
twocheckout: { refund: true, checkBalance: false, disburse: false }
|
|
9777
|
+
};
|
|
9778
|
+
function buildDefaultDescriptors() {
|
|
9779
|
+
return Object.keys(ENV_KEYS).map((name) => ({
|
|
9780
|
+
name,
|
|
9781
|
+
envKeys: ENV_KEYS[name],
|
|
9782
|
+
methods: WORKING_METHODS[name] || [],
|
|
9783
|
+
operations: OPERATIONS[name] || { refund: false, checkBalance: false, disburse: false }
|
|
9784
|
+
}));
|
|
9785
|
+
}
|
|
9786
|
+
var providerRegistry = new ProviderRegistry(buildDefaultDescriptors());
|
|
9787
|
+
|
|
9578
9788
|
// src/core/config.ts
|
|
9789
|
+
var UNIVERSAL = {
|
|
9790
|
+
apiKey: ["BUAYAR_API_KEY", "BUAYAR_SERVER_KEY", "PG_API_KEY", "PAYMENT_API_KEY"],
|
|
9791
|
+
clientKey: ["BUAYAR_CLIENT_KEY", "PG_CLIENT_KEY"],
|
|
9792
|
+
merchantCode: ["BUAYAR_MERCHANT_CODE", "PG_MERCHANT_CODE", "PAYMENT_MERCHANT_CODE"],
|
|
9793
|
+
merchantId: ["BUAYAR_MERCHANT_ID", "PG_MERCHANT_ID"],
|
|
9794
|
+
secretKey: ["BUAYAR_SECRET_KEY", "PG_SECRET_KEY", "SECRET_KEY"],
|
|
9795
|
+
serverKey: ["BUAYAR_SERVER_KEY", "PG_SECRET_KEY"],
|
|
9796
|
+
projectId: ["BUAYAR_PROJECT_ID", "PG_PROJECT_ID", "PROJECT_ID"]
|
|
9797
|
+
};
|
|
9798
|
+
var SPECIFIC = {
|
|
9799
|
+
midtrans: {
|
|
9800
|
+
apiKey: ["MIDTRANS_SERVER_KEY"],
|
|
9801
|
+
clientKey: ["MIDTRANS_CLIENT_KEY"],
|
|
9802
|
+
merchantId: ["MIDTRANS_MERCHANT_ID"]
|
|
9803
|
+
},
|
|
9804
|
+
duitku: {
|
|
9805
|
+
apiKey: ["DUITKU_API_KEY"],
|
|
9806
|
+
merchantCode: ["DUITKU_MERCHANT_CODE"]
|
|
9807
|
+
},
|
|
9808
|
+
ipaymu: {
|
|
9809
|
+
apiKey: ["IPAYMU_API_KEY"],
|
|
9810
|
+
merchantCode: ["IPAYMU_VA", "IPAYMU_MERCHANT_CODE"]
|
|
9811
|
+
},
|
|
9812
|
+
xendit: {
|
|
9813
|
+
apiKey: ["XENDIT_SECRET_KEY", "XENDIT_API_KEY"]
|
|
9814
|
+
},
|
|
9815
|
+
doku: {
|
|
9816
|
+
apiKey: ["DOKU_SECRET_KEY", "DOKU_API_KEY"],
|
|
9817
|
+
clientKey: ["DOKU_CLIENT_ID"],
|
|
9818
|
+
merchantCode: ["DOKU_CLIENT_ID", "DOKU_MERCHANT_ID"],
|
|
9819
|
+
merchantId: ["DOKU_MERCHANT_ID"]
|
|
9820
|
+
},
|
|
9821
|
+
prismalink: {
|
|
9822
|
+
apiKey: ["PRISMALINK_SECRET_KEY", "PRISMALINK_API_KEY"],
|
|
9823
|
+
merchantCode: ["PRISMALINK_MERCHANT_ID"],
|
|
9824
|
+
merchantId: ["PRISMALINK_MERCHANT_ID"]
|
|
9825
|
+
},
|
|
9826
|
+
faspay: {
|
|
9827
|
+
apiKey: ["FASPAY_PASSWORD", "FASPAY_API_KEY"],
|
|
9828
|
+
clientKey: ["FASPAY_USER_ID"],
|
|
9829
|
+
merchantCode: ["FASPAY_MERCHANT_ID"],
|
|
9830
|
+
merchantId: ["FASPAY_MERCHANT_ID"]
|
|
9831
|
+
},
|
|
9832
|
+
finpay: {
|
|
9833
|
+
apiKey: ["FINPAY_MERCHANT_KEY", "FINPAY_SECRET_KEY", "FINPAY_API_KEY"],
|
|
9834
|
+
merchantCode: ["FINPAY_MERCHANT_ID"],
|
|
9835
|
+
merchantId: ["FINPAY_MERCHANT_ID"]
|
|
9836
|
+
},
|
|
9837
|
+
nicepay: {
|
|
9838
|
+
apiKey: ["NICEPAY_KEY", "NICEPAY_SECRET_KEY", "NICEPAY_API_KEY"],
|
|
9839
|
+
merchantCode: ["NICEPAY_IMID", "NICEPAY_MERCHANT_ID"],
|
|
9840
|
+
merchantId: ["NICEPAY_IMID"]
|
|
9841
|
+
},
|
|
9842
|
+
oy: {
|
|
9843
|
+
apiKey: ["OY_API_KEY"],
|
|
9844
|
+
clientKey: ["OY_USERNAME"],
|
|
9845
|
+
merchantCode: ["OY_USERNAME"]
|
|
9846
|
+
},
|
|
9847
|
+
stripe: {
|
|
9848
|
+
apiKey: ["STRIPE_SECRET_KEY", "STRIPE_KEY"],
|
|
9849
|
+
clientKey: ["STRIPE_PUBLIC_KEY", "STRIPE_PUBLISHABLE_KEY"]
|
|
9850
|
+
},
|
|
9851
|
+
paypal: {
|
|
9852
|
+
apiKey: ["PAYPAL_CLIENT_SECRET"],
|
|
9853
|
+
clientKey: ["PAYPAL_CLIENT_ID"],
|
|
9854
|
+
merchantCode: ["PAYPAL_CLIENT_ID"]
|
|
9855
|
+
},
|
|
9856
|
+
adyen: {
|
|
9857
|
+
apiKey: ["ADYEN_API_KEY"],
|
|
9858
|
+
clientKey: ["ADYEN_CLIENT_KEY"],
|
|
9859
|
+
merchantCode: ["ADYEN_MERCHANT_ACCOUNT"],
|
|
9860
|
+
merchantId: ["ADYEN_MERCHANT_ACCOUNT"]
|
|
9861
|
+
},
|
|
9862
|
+
checkoutcom: {
|
|
9863
|
+
apiKey: ["CHECKOUTCOM_SECRET_KEY"],
|
|
9864
|
+
clientKey: ["CHECKOUTCOM_PUBLIC_KEY"]
|
|
9865
|
+
},
|
|
9866
|
+
razorpay: {
|
|
9867
|
+
apiKey: ["RAZORPAY_KEY_SECRET"],
|
|
9868
|
+
clientKey: ["RAZORPAY_KEY_ID"],
|
|
9869
|
+
merchantCode: ["RAZORPAY_KEY_ID"]
|
|
9870
|
+
},
|
|
9871
|
+
square: {
|
|
9872
|
+
apiKey: ["SQUARE_ACCESS_TOKEN"],
|
|
9873
|
+
clientKey: ["SQUARE_APPLICATION_ID"],
|
|
9874
|
+
merchantCode: ["SQUARE_APPLICATION_ID"],
|
|
9875
|
+
projectId: ["SQUARE_LOCATION_ID"]
|
|
9876
|
+
},
|
|
9877
|
+
payu: {
|
|
9878
|
+
apiKey: ["PAYU_MD5_KEY"],
|
|
9879
|
+
clientKey: ["PAYU_POS_ID"],
|
|
9880
|
+
merchantCode: ["PAYU_POS_ID"],
|
|
9881
|
+
merchantId: ["PAYU_POS_ID"]
|
|
9882
|
+
},
|
|
9883
|
+
braintree: {
|
|
9884
|
+
apiKey: ["BRAINTREE_PRIVATE_KEY"],
|
|
9885
|
+
clientKey: ["BRAINTREE_PUBLIC_KEY"],
|
|
9886
|
+
merchantCode: ["BRAINTREE_MERCHANT_ID"],
|
|
9887
|
+
merchantId: ["BRAINTREE_MERCHANT_ID"]
|
|
9888
|
+
},
|
|
9889
|
+
twocheckout: {
|
|
9890
|
+
apiKey: ["TWOCHECKOUT_SECRET_KEY"],
|
|
9891
|
+
merchantCode: ["TWOCHECKOUT_MERCHANT_CODE"],
|
|
9892
|
+
merchantId: ["TWOCHECKOUT_MERCHANT_CODE"]
|
|
9893
|
+
}
|
|
9894
|
+
};
|
|
9895
|
+
function firstDefined(env, keys) {
|
|
9896
|
+
for (const k of keys) {
|
|
9897
|
+
const v = env[k];
|
|
9898
|
+
if (typeof v === "string" && v.trim().length > 0) return v.trim();
|
|
9899
|
+
}
|
|
9900
|
+
return void 0;
|
|
9901
|
+
}
|
|
9902
|
+
function resolveSandbox(env, provider) {
|
|
9903
|
+
const universal = firstDefined(env, ["BUAYAR_SANDBOX", "PG_SANDBOX", "PAYMENT_SANDBOX"]);
|
|
9904
|
+
if (universal !== void 0) return universal === "true" || universal === "1";
|
|
9905
|
+
const specificMap = {
|
|
9906
|
+
midtrans: ["MIDTRANS_IS_PRODUCTION"],
|
|
9907
|
+
duitku: ["DUITKU_SANDBOX"],
|
|
9908
|
+
ipaymu: ["IPAYMU_SANDBOX"],
|
|
9909
|
+
doku: ["DOKU_SANDBOX"],
|
|
9910
|
+
prismalink: ["PRISMALINK_SANDBOX"],
|
|
9911
|
+
faspay: ["FASPAY_SANDBOX"],
|
|
9912
|
+
finpay: ["FINPAY_SANDBOX"],
|
|
9913
|
+
nicepay: ["NICEPAY_SANDBOX"],
|
|
9914
|
+
oy: ["OY_SANDBOX"],
|
|
9915
|
+
stripe: ["STRIPE_SANDBOX"],
|
|
9916
|
+
paypal: ["PAYPAL_SANDBOX"],
|
|
9917
|
+
adyen: ["ADYEN_SANDBOX"],
|
|
9918
|
+
checkoutcom: ["CHECKOUTCOM_SANDBOX"],
|
|
9919
|
+
razorpay: ["RAZORPAY_SANDBOX"],
|
|
9920
|
+
square: ["SQUARE_SANDBOX"],
|
|
9921
|
+
payu: ["PAYU_SANDBOX"],
|
|
9922
|
+
braintree: ["BRAINTREE_SANDBOX"],
|
|
9923
|
+
twocheckout: ["TWOCHECKOUT_SANDBOX"],
|
|
9924
|
+
xendit: ["XENDIT_SANDBOX"]
|
|
9925
|
+
};
|
|
9926
|
+
const specific = firstDefined(env, specificMap[provider]);
|
|
9927
|
+
if (specific !== void 0) {
|
|
9928
|
+
if (provider === "midtrans") return specific !== "true" && specific !== "1";
|
|
9929
|
+
return specific === "true" || specific === "1";
|
|
9930
|
+
}
|
|
9931
|
+
return env.NODE_ENV !== "production";
|
|
9932
|
+
}
|
|
9579
9933
|
function resolveConfigFromEnv(customConfig) {
|
|
9580
9934
|
const env = typeof process !== "undefined" && process?.env ? process.env : {};
|
|
9581
|
-
const
|
|
9582
|
-
let
|
|
9583
|
-
|
|
9584
|
-
|
|
9585
|
-
|
|
9586
|
-
|
|
9587
|
-
|
|
9588
|
-
|
|
9589
|
-
|
|
9590
|
-
|
|
9591
|
-
|
|
9592
|
-
|
|
9593
|
-
|
|
9594
|
-
|
|
9595
|
-
|
|
9596
|
-
|
|
9597
|
-
} else if (env.DOKU_SANDBOX !== void 0) {
|
|
9598
|
-
sandbox = env.DOKU_SANDBOX === "true" || env.DOKU_SANDBOX === "1";
|
|
9599
|
-
} else if (env.PRISMALINK_SANDBOX !== void 0) {
|
|
9600
|
-
sandbox = env.PRISMALINK_SANDBOX === "true" || env.PRISMALINK_SANDBOX === "1";
|
|
9601
|
-
} else if (env.FASPAY_SANDBOX !== void 0) {
|
|
9602
|
-
sandbox = env.FASPAY_SANDBOX === "true" || env.FASPAY_SANDBOX === "1";
|
|
9603
|
-
} else if (env.FINPAY_SANDBOX !== void 0) {
|
|
9604
|
-
sandbox = env.FINPAY_SANDBOX === "true" || env.FINPAY_SANDBOX === "1";
|
|
9605
|
-
} else if (env.NICEPAY_SANDBOX !== void 0) {
|
|
9606
|
-
sandbox = env.NICEPAY_SANDBOX === "true" || env.NICEPAY_SANDBOX === "1";
|
|
9607
|
-
} else if (env.OY_SANDBOX !== void 0) {
|
|
9608
|
-
sandbox = env.OY_SANDBOX === "true" || env.OY_SANDBOX === "1";
|
|
9609
|
-
} else if (env.STRIPE_SANDBOX !== void 0) {
|
|
9610
|
-
sandbox = env.STRIPE_SANDBOX === "true" || env.STRIPE_SANDBOX === "1";
|
|
9611
|
-
} else if (env.PAYPAL_SANDBOX !== void 0) {
|
|
9612
|
-
sandbox = env.PAYPAL_SANDBOX === "true" || env.PAYPAL_SANDBOX === "1";
|
|
9613
|
-
} else if (env.ADYEN_SANDBOX !== void 0) {
|
|
9614
|
-
sandbox = env.ADYEN_SANDBOX === "true" || env.ADYEN_SANDBOX === "1";
|
|
9615
|
-
} else if (env.CHECKOUTCOM_SANDBOX !== void 0) {
|
|
9616
|
-
sandbox = env.CHECKOUTCOM_SANDBOX === "true" || env.CHECKOUTCOM_SANDBOX === "1";
|
|
9617
|
-
} else if (env.RAZORPAY_SANDBOX !== void 0) {
|
|
9618
|
-
sandbox = env.RAZORPAY_SANDBOX === "true" || env.RAZORPAY_SANDBOX === "1";
|
|
9619
|
-
} else if (env.SQUARE_SANDBOX !== void 0) {
|
|
9620
|
-
sandbox = env.SQUARE_SANDBOX === "true" || env.SQUARE_SANDBOX === "1";
|
|
9621
|
-
} else if (env.PAYU_SANDBOX !== void 0) {
|
|
9622
|
-
sandbox = env.PAYU_SANDBOX === "true" || env.PAYU_SANDBOX === "1";
|
|
9623
|
-
} else if (env.BRAINTREE_SANDBOX !== void 0) {
|
|
9624
|
-
sandbox = env.BRAINTREE_SANDBOX === "true" || env.BRAINTREE_SANDBOX === "1";
|
|
9625
|
-
} else if (env.TWOCHECKOUT_SANDBOX !== void 0) {
|
|
9626
|
-
sandbox = env.TWOCHECKOUT_SANDBOX === "true" || env.TWOCHECKOUT_SANDBOX === "1";
|
|
9627
|
-
} else {
|
|
9628
|
-
sandbox = env.NODE_ENV !== "production";
|
|
9629
|
-
}
|
|
9630
|
-
let apiKey = customConfig?.apiKey || customConfig?.serverKey || customConfig?.secretKey;
|
|
9631
|
-
if (!apiKey) {
|
|
9632
|
-
if (provider === "midtrans") {
|
|
9633
|
-
apiKey = env.MIDTRANS_SERVER_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY || env.BUAYAR_SERVER_KEY;
|
|
9634
|
-
} else if (provider === "duitku") {
|
|
9635
|
-
apiKey = env.DUITKU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9636
|
-
} else if (provider === "ipaymu") {
|
|
9637
|
-
apiKey = env.IPAYMU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9638
|
-
} else if (provider === "xendit") {
|
|
9639
|
-
apiKey = env.XENDIT_SECRET_KEY || env.XENDIT_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9640
|
-
} else if (provider === "doku") {
|
|
9641
|
-
apiKey = env.DOKU_SECRET_KEY || env.DOKU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9642
|
-
} else if (provider === "prismalink") {
|
|
9643
|
-
apiKey = env.PRISMALINK_SECRET_KEY || env.PRISMALINK_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9644
|
-
} else if (provider === "faspay") {
|
|
9645
|
-
apiKey = env.FASPAY_PASSWORD || env.FASPAY_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9646
|
-
} else if (provider === "finpay") {
|
|
9647
|
-
apiKey = env.FINPAY_MERCHANT_KEY || env.FINPAY_SECRET_KEY || env.FINPAY_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9648
|
-
} else if (provider === "nicepay") {
|
|
9649
|
-
apiKey = env.NICEPAY_KEY || env.NICEPAY_MERCHANT_KEY || env.NICEPAY_SECRET_KEY || env.NICEPAY_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9650
|
-
} else if (provider === "oy" || provider === "oyindonesia") {
|
|
9651
|
-
apiKey = env.OY_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9652
|
-
} else if (provider === "stripe") {
|
|
9653
|
-
apiKey = env.STRIPE_SECRET_KEY || env.STRIPE_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9654
|
-
} else if (provider === "paypal") {
|
|
9655
|
-
apiKey = env.PAYPAL_CLIENT_SECRET || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9656
|
-
} else if (provider === "adyen") {
|
|
9657
|
-
apiKey = env.ADYEN_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9658
|
-
} else if (provider === "checkoutcom") {
|
|
9659
|
-
apiKey = env.CHECKOUTCOM_SECRET_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9660
|
-
} else if (provider === "razorpay") {
|
|
9661
|
-
apiKey = env.RAZORPAY_KEY_SECRET || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9662
|
-
} else if (provider === "square") {
|
|
9663
|
-
apiKey = env.SQUARE_ACCESS_TOKEN || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9664
|
-
} else if (provider === "payu") {
|
|
9665
|
-
apiKey = env.PAYU_MD5_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9666
|
-
} else if (provider === "braintree") {
|
|
9667
|
-
apiKey = env.BRAINTREE_PRIVATE_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9668
|
-
} else if (provider === "twocheckout" || provider === "2checkout") {
|
|
9669
|
-
apiKey = env.TWOCHECKOUT_SECRET_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9670
|
-
} else {
|
|
9671
|
-
apiKey = env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY || env.PG_SECRET_KEY || env.BUAYAR_SECRET_KEY;
|
|
9672
|
-
}
|
|
9673
|
-
}
|
|
9674
|
-
let merchantCode = customConfig?.merchantCode;
|
|
9675
|
-
let clientKey = customConfig?.clientKey;
|
|
9676
|
-
let merchantId = customConfig?.merchantId;
|
|
9677
|
-
if (provider === "midtrans") {
|
|
9678
|
-
clientKey = clientKey || env.MIDTRANS_CLIENT_KEY || env.BUAYAR_CLIENT_KEY || env.PG_CLIENT_KEY;
|
|
9679
|
-
merchantId = merchantId || env.MIDTRANS_MERCHANT_ID || env.BUAYAR_MERCHANT_ID || env.PG_MERCHANT_ID;
|
|
9680
|
-
merchantCode = merchantCode || clientKey || merchantId || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE;
|
|
9681
|
-
} else if (provider === "duitku") {
|
|
9682
|
-
merchantCode = merchantCode || env.DUITKU_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9683
|
-
} else if (provider === "ipaymu") {
|
|
9684
|
-
merchantCode = merchantCode || env.IPAYMU_VA || env.IPAYMU_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9685
|
-
} else if (provider === "doku") {
|
|
9686
|
-
merchantCode = merchantCode || env.DOKU_CLIENT_ID || env.DOKU_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9687
|
-
clientKey = clientKey || customConfig?.merchantCode || env.DOKU_CLIENT_ID || env.BUAYAR_CLIENT_KEY;
|
|
9688
|
-
} else if (provider === "prismalink") {
|
|
9689
|
-
merchantCode = merchantCode || env.PRISMALINK_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9690
|
-
merchantId = merchantId || env.PRISMALINK_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9691
|
-
} else if (provider === "faspay") {
|
|
9692
|
-
merchantCode = merchantCode || env.FASPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9693
|
-
merchantId = merchantId || env.FASPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9694
|
-
clientKey = clientKey || env.FASPAY_USER_ID || env.BUAYAR_CLIENT_KEY;
|
|
9695
|
-
} else if (provider === "finpay") {
|
|
9696
|
-
merchantCode = merchantCode || env.FINPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9697
|
-
merchantId = merchantId || env.FINPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9698
|
-
} else if (provider === "nicepay") {
|
|
9699
|
-
merchantCode = merchantCode || env.NICEPAY_IMID || env.NICEPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9700
|
-
merchantId = merchantId || env.NICEPAY_IMID || env.BUAYAR_MERCHANT_ID;
|
|
9701
|
-
} else if (provider === "oy" || provider === "oyindonesia") {
|
|
9702
|
-
merchantCode = merchantCode || env.OY_USERNAME || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9703
|
-
clientKey = clientKey || customConfig?.merchantCode || env.OY_USERNAME || env.BUAYAR_CLIENT_KEY;
|
|
9704
|
-
} else if (provider === "stripe") {
|
|
9705
|
-
clientKey = clientKey || env.STRIPE_PUBLIC_KEY || env.STRIPE_PUBLISHABLE_KEY || env.BUAYAR_CLIENT_KEY || env.BUAYAR_PUBLIC_KEY;
|
|
9706
|
-
merchantCode = merchantCode || clientKey || "stripe";
|
|
9707
|
-
} else if (provider === "paypal") {
|
|
9708
|
-
clientKey = clientKey || env.PAYPAL_CLIENT_ID || env.BUAYAR_CLIENT_KEY;
|
|
9709
|
-
merchantCode = merchantCode || env.PAYPAL_CLIENT_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9710
|
-
} else if (provider === "adyen") {
|
|
9711
|
-
clientKey = clientKey || env.ADYEN_CLIENT_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9712
|
-
merchantCode = merchantCode || env.ADYEN_MERCHANT_ACCOUNT || env.BUAYAR_MERCHANT_CODE;
|
|
9713
|
-
merchantId = merchantId || env.ADYEN_MERCHANT_ACCOUNT || env.BUAYAR_MERCHANT_ID;
|
|
9714
|
-
} else if (provider === "checkoutcom") {
|
|
9715
|
-
clientKey = clientKey || env.CHECKOUTCOM_PUBLIC_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9716
|
-
merchantCode = merchantCode || env.BUAYAR_MERCHANT_CODE;
|
|
9717
|
-
} else if (provider === "razorpay") {
|
|
9718
|
-
clientKey = clientKey || env.RAZORPAY_KEY_ID || env.BUAYAR_CLIENT_KEY;
|
|
9719
|
-
merchantCode = merchantCode || env.RAZORPAY_KEY_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9720
|
-
} else if (provider === "square") {
|
|
9721
|
-
clientKey = clientKey || env.SQUARE_APPLICATION_ID || env.BUAYAR_CLIENT_KEY;
|
|
9722
|
-
merchantCode = merchantCode || env.SQUARE_APPLICATION_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9723
|
-
} else if (provider === "payu") {
|
|
9724
|
-
merchantCode = merchantCode || env.PAYU_POS_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9725
|
-
merchantId = merchantId || env.PAYU_POS_ID;
|
|
9726
|
-
} else if (provider === "braintree") {
|
|
9727
|
-
clientKey = clientKey || env.BRAINTREE_PUBLIC_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9728
|
-
merchantCode = merchantCode || env.BRAINTREE_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9729
|
-
merchantId = merchantId || env.BRAINTREE_MERCHANT_ID;
|
|
9730
|
-
} else if (provider === "twocheckout" || provider === "2checkout") {
|
|
9731
|
-
merchantCode = merchantCode || env.TWOCHECKOUT_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE;
|
|
9732
|
-
merchantId = merchantId || env.TWOCHECKOUT_MERCHANT_CODE;
|
|
9733
|
-
} else {
|
|
9734
|
-
merchantCode = merchantCode || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9735
|
-
}
|
|
9736
|
-
const projectId = customConfig?.projectId || env.BUAYAR_PROJECT_ID || env.PG_PROJECT_ID || env.PROJECT_ID || env.SQUARE_LOCATION_ID;
|
|
9737
|
-
const publicKey = customConfig?.publicKey || env.BUAYAR_PUBLIC_KEY || env.PG_PUBLIC_KEY || env.PUBLIC_KEY || env.STRIPE_PUBLIC_KEY || env.STRIPE_PUBLISHABLE_KEY || env.CHECKOUTCOM_PUBLIC_KEY;
|
|
9738
|
-
const privateKey = customConfig?.privateKey || env.BUAYAR_PRIVATE_KEY || env.PG_PRIVATE_KEY || env.PRIVATE_KEY || env.BRAINTREE_PRIVATE_KEY;
|
|
9739
|
-
const secretKey = customConfig?.secretKey || customConfig?.apiKey || customConfig?.serverKey || env.BUAYAR_SECRET_KEY || env.PG_SECRET_KEY || env.SECRET_KEY || env.XENDIT_SECRET_KEY || env.DOKU_SECRET_KEY || env.PRISMALINK_SECRET_KEY || env.FASPAY_PASSWORD || env.FINPAY_MERCHANT_KEY || env.NICEPAY_KEY || env.OY_API_KEY || env.STRIPE_SECRET_KEY || env.PAYPAL_CLIENT_SECRET || env.CHECKOUTCOM_SECRET_KEY || env.RAZORPAY_KEY_SECRET || env.SQUARE_ACCESS_TOKEN || env.BRAINTREE_PRIVATE_KEY || env.TWOCHECKOUT_SECRET_KEY;
|
|
9935
|
+
const explicit = (customConfig?.provider || env.PROVIDER_PG || env.PG_PROVIDER || env.BUAYAR_PROVIDER || env.PAYMENT_PROVIDER || "").toLowerCase().trim();
|
|
9936
|
+
let provider = explicit || providerRegistry.detectFromEnv(env) || "midtrans";
|
|
9937
|
+
provider = provider.replace("oyindonesia", "oy").replace("2checkout", "twocheckout");
|
|
9938
|
+
const sandbox = customConfig?.sandbox ?? resolveSandbox(env, provider);
|
|
9939
|
+
const spec = SPECIFIC[provider] || {};
|
|
9940
|
+
const cfg = {};
|
|
9941
|
+
const fields = ["apiKey", "clientKey", "merchantCode", "merchantId", "secretKey", "serverKey", "projectId"];
|
|
9942
|
+
for (const f of fields) {
|
|
9943
|
+
const universalKeys = UNIVERSAL[f] || [];
|
|
9944
|
+
const specificKeys = spec[f] || [];
|
|
9945
|
+
const universal = firstDefined(env, universalKeys);
|
|
9946
|
+
const specific = firstDefined(env, specificKeys);
|
|
9947
|
+
const value = universal || specific;
|
|
9948
|
+
const explicitValue = customConfig?.[f] || customConfig && (f === "apiKey" ? customConfig.secretKey || customConfig.serverKey : void 0);
|
|
9949
|
+
cfg[f] = explicitValue || value || "";
|
|
9950
|
+
}
|
|
9740
9951
|
const callbackUrl = customConfig?.callbackUrl || env.BUAYAR_CALLBACK_URL || env.PG_CALLBACK_URL || env.PAYMENT_CALLBACK_URL;
|
|
9741
9952
|
const returnUrl = customConfig?.returnUrl || env.BUAYAR_RETURN_URL || env.PG_RETURN_URL || env.PAYMENT_RETURN_URL;
|
|
9953
|
+
const publicKey = customConfig?.publicKey || firstDefined(env, ["BUAYAR_PUBLIC_KEY", "PG_PUBLIC_KEY", "PUBLIC_KEY"]) || cfg.clientKey;
|
|
9954
|
+
const privateKey = customConfig?.privateKey || firstDefined(env, ["BUAYAR_PRIVATE_KEY", "PG_PRIVATE_KEY", "PRIVATE_KEY"]) || (provider === "braintree" ? cfg.apiKey : void 0);
|
|
9742
9955
|
const extra = {
|
|
9743
9956
|
webhookToken: env.XENDIT_WEBHOOK_TOKEN || env.BUAYAR_WEBHOOK_TOKEN,
|
|
9744
9957
|
webhookSecret: env.STRIPE_WEBHOOK_SECRET || env.CHECKOUTCOM_WEBHOOK_SECRET || env.RAZORPAY_WEBHOOK_SECRET || env.BUAYAR_WEBHOOK_SECRET,
|
|
@@ -9759,15 +9972,16 @@ function resolveConfigFromEnv(customConfig) {
|
|
|
9759
9972
|
secretWord: env.TWOCHECKOUT_SECRET_WORD,
|
|
9760
9973
|
...customConfig?.extra
|
|
9761
9974
|
};
|
|
9975
|
+
const apiKey = cfg.apiKey || cfg.secretKey || cfg.serverKey;
|
|
9762
9976
|
return {
|
|
9763
|
-
provider
|
|
9764
|
-
apiKey
|
|
9977
|
+
provider,
|
|
9978
|
+
apiKey,
|
|
9765
9979
|
serverKey: apiKey || "",
|
|
9766
|
-
secretKey:
|
|
9767
|
-
merchantCode: merchantCode || "",
|
|
9768
|
-
clientKey: clientKey || "",
|
|
9769
|
-
merchantId: merchantId || "",
|
|
9770
|
-
projectId,
|
|
9980
|
+
secretKey: apiKey || "",
|
|
9981
|
+
merchantCode: cfg.merchantCode || "",
|
|
9982
|
+
clientKey: cfg.clientKey || "",
|
|
9983
|
+
merchantId: cfg.merchantId || "",
|
|
9984
|
+
projectId: cfg.projectId || "",
|
|
9771
9985
|
publicKey,
|
|
9772
9986
|
privateKey,
|
|
9773
9987
|
sandbox,
|
|
@@ -9781,8 +9995,10 @@ function resolveConfigFromEnv(customConfig) {
|
|
|
9781
9995
|
var Buayar = class {
|
|
9782
9996
|
manager;
|
|
9783
9997
|
config;
|
|
9784
|
-
|
|
9998
|
+
registry;
|
|
9999
|
+
constructor(config, manager, registry) {
|
|
9785
10000
|
this.manager = manager || paymentManager;
|
|
10001
|
+
this.registry = registry || providerRegistry;
|
|
9786
10002
|
this.config = resolveConfigFromEnv(config);
|
|
9787
10003
|
}
|
|
9788
10004
|
/**
|
|
@@ -9815,6 +10031,62 @@ var Buayar = class {
|
|
|
9815
10031
|
getProvider(name) {
|
|
9816
10032
|
return this.manager.getProvider(name || this.provider);
|
|
9817
10033
|
}
|
|
10034
|
+
/**
|
|
10035
|
+
* Daftar nama provider yang terdaftar (bawaan + kustom).
|
|
10036
|
+
*/
|
|
10037
|
+
listProviders() {
|
|
10038
|
+
return this.registry.names();
|
|
10039
|
+
}
|
|
10040
|
+
/**
|
|
10041
|
+
* Registrasi metadata provider kustom untuk deteksi & capability.
|
|
10042
|
+
* Contoh: buayar.registerProviderDescriptor({ name, envKeys, methods, operations })
|
|
10043
|
+
*/
|
|
10044
|
+
registerProviderDescriptor(desc) {
|
|
10045
|
+
this.registry.register(desc);
|
|
10046
|
+
}
|
|
10047
|
+
/**
|
|
10048
|
+
* Cek capability (metode + operasi) provider tertentu — atau provider aktif bila kosong.
|
|
10049
|
+
* Jawab pertanyaan "provider ini dukung apa?" secara runtime, tanpa bongkar dokumen.
|
|
10050
|
+
*/
|
|
10051
|
+
getCapabilities(name) {
|
|
10052
|
+
const n = name || this.provider;
|
|
10053
|
+
const desc = this.registry.get(n);
|
|
10054
|
+
if (!desc) return void 0;
|
|
10055
|
+
return { methods: desc.methods, operations: desc.operations };
|
|
10056
|
+
}
|
|
10057
|
+
/**
|
|
10058
|
+
* Deteksi nama provider dari struktur payload webhook.
|
|
10059
|
+
*/
|
|
10060
|
+
detectProviderFromPayload(payload) {
|
|
10061
|
+
return this.registry.detectFromWebhook(payload);
|
|
10062
|
+
}
|
|
10063
|
+
/**
|
|
10064
|
+
* Deteksi nama provider aktif dari variabel lingkungan (kredensial yang terisi).
|
|
10065
|
+
*/
|
|
10066
|
+
detectProviderFromEnv(env) {
|
|
10067
|
+
return this.registry.detectFromEnv(env || process.env);
|
|
10068
|
+
}
|
|
10069
|
+
/**
|
|
10070
|
+
* Logika "bisa pakai X dengan provider Y?" — helper untuk portabilitas.
|
|
10071
|
+
*/
|
|
10072
|
+
supports(name, operation) {
|
|
10073
|
+
const desc = this.registry.get(name);
|
|
10074
|
+
return desc ? desc.operations[operation] : false;
|
|
10075
|
+
}
|
|
10076
|
+
/**
|
|
10077
|
+
* Daftar metode pembayaran yang benar2 tersedia untuk provider aktif.
|
|
10078
|
+
*/
|
|
10079
|
+
getSupportedMethods(name) {
|
|
10080
|
+
const n = name || this.provider;
|
|
10081
|
+
return this.registry.get(n)?.methods || [];
|
|
10082
|
+
}
|
|
10083
|
+
/**
|
|
10084
|
+
* Iterasi CEPAT: apakah provider aktif mendukung method kanonik tertentu?
|
|
10085
|
+
*/
|
|
10086
|
+
supportsMethod(method, name) {
|
|
10087
|
+
const n = name || this.provider;
|
|
10088
|
+
return this.registry.get(n)?.methods.includes(method) ?? false;
|
|
10089
|
+
}
|
|
9818
10090
|
/**
|
|
9819
10091
|
* Buat transaksi pembayaran baru (Mendukung Semi dan Full Integrasi)
|
|
9820
10092
|
*/
|
|
@@ -9889,47 +10161,8 @@ var Buayar = class {
|
|
|
9889
10161
|
}
|
|
9890
10162
|
}
|
|
9891
10163
|
let providerName = configOverride?.provider || this.provider;
|
|
9892
|
-
|
|
9893
|
-
|
|
9894
|
-
providerName = "midtrans";
|
|
9895
|
-
} else if (payload.merchantCode && payload.merchantOrderId && payload.resultCode) {
|
|
9896
|
-
providerName = "duitku";
|
|
9897
|
-
} else if (payload.trx_id && (payload.sid || payload.reference_id || payload.via)) {
|
|
9898
|
-
providerName = "ipaymu";
|
|
9899
|
-
} else if (payload.service?.id || payload.order?.invoice_number && payload.transaction?.status) {
|
|
9900
|
-
providerName = "doku";
|
|
9901
|
-
} else if (payload.bill_no && (payload.payment_status_code !== void 0 || payload.payment_status_desc)) {
|
|
9902
|
-
providerName = "faspay";
|
|
9903
|
-
} else if (payload.merchant_id && payload.order_id && payload.payment_status) {
|
|
9904
|
-
providerName = "finpay";
|
|
9905
|
-
} else if (payload.tXid && payload.merchantToken && (payload.referenceNo || payload.amt)) {
|
|
9906
|
-
providerName = "nicepay";
|
|
9907
|
-
} else if (payload.partner_tx_id || payload.partner_trx_id) {
|
|
9908
|
-
providerName = "oy";
|
|
9909
|
-
} else if (payload.merchant_id && payload.order_id && payload.signature) {
|
|
9910
|
-
providerName = "prismalink";
|
|
9911
|
-
} else if (payload.object === "event" || payload.type && payload.data?.object && payload.api_version) {
|
|
9912
|
-
providerName = "stripe";
|
|
9913
|
-
} else if (payload.event && payload.payload?.payment?.entity) {
|
|
9914
|
-
providerName = "razorpay";
|
|
9915
|
-
} else if (payload.external_id || payload.event?.startsWith("payment.") || payload.event?.startsWith("qr.") || payload.data?.reference_id) {
|
|
9916
|
-
providerName = "xendit";
|
|
9917
|
-
} else if (payload.event_type && payload.resource && (payload.event_type.startsWith("PAYMENT.") || payload.event_type.startsWith("CHECKOUT.ORDER."))) {
|
|
9918
|
-
providerName = "paypal";
|
|
9919
|
-
} else if (payload.notificationItems || payload.merchantAccountCode && payload.pspReference && payload.eventCode) {
|
|
9920
|
-
providerName = "adyen";
|
|
9921
|
-
} else if (payload.type && payload.data?._links && (payload.type.startsWith("payment_") || payload.type.startsWith("refund_"))) {
|
|
9922
|
-
providerName = "checkoutcom";
|
|
9923
|
-
} else if (payload.type && payload.data?.object?.status && payload.merchant_id) {
|
|
9924
|
-
providerName = "square";
|
|
9925
|
-
} else if (payload.order && payload.order?.status && payload.order?.extOrderId) {
|
|
9926
|
-
providerName = "payu";
|
|
9927
|
-
} else if (payload.kind && payload.subject?.transaction) {
|
|
9928
|
-
providerName = "braintree";
|
|
9929
|
-
} else if (payload.HASH && payload.REFNOEXT && payload.IPN_PID) {
|
|
9930
|
-
providerName = "twocheckout";
|
|
9931
|
-
}
|
|
9932
|
-
}
|
|
10164
|
+
const detected = this.registry.detectFromWebhook(payload);
|
|
10165
|
+
if (detected) providerName = detected;
|
|
9933
10166
|
return this.manager.verifyCallback(providerName, payload, mergedConfig);
|
|
9934
10167
|
}
|
|
9935
10168
|
async handleWebhook(payload, headers, configOverride) {
|
|
@@ -10071,8 +10304,10 @@ var buayar = new Buayar();
|
|
|
10071
10304
|
PayuProvider,
|
|
10072
10305
|
PrismalinkClient,
|
|
10073
10306
|
PrismalinkProvider,
|
|
10307
|
+
ProviderRegistry,
|
|
10074
10308
|
RazorpayClient,
|
|
10075
10309
|
RazorpayProvider,
|
|
10310
|
+
SnapApiError,
|
|
10076
10311
|
SnapClient,
|
|
10077
10312
|
SquareClient,
|
|
10078
10313
|
SquareProvider,
|
|
@@ -10085,6 +10320,7 @@ var buayar = new Buayar();
|
|
|
10085
10320
|
buayar,
|
|
10086
10321
|
buildBraintreeBasicAuth,
|
|
10087
10322
|
buildCoreChargePayload,
|
|
10323
|
+
buildDefaultDescriptors,
|
|
10088
10324
|
buildPaypalBasicAuth,
|
|
10089
10325
|
buildPayuBasicAuth,
|
|
10090
10326
|
buildRazorpayBasicAuth,
|
|
@@ -10109,6 +10345,7 @@ var buayar = new Buayar();
|
|
|
10109
10345
|
minifyJson,
|
|
10110
10346
|
parseCoreChargeResponse,
|
|
10111
10347
|
paymentManager,
|
|
10348
|
+
providerRegistry,
|
|
10112
10349
|
resolveConfigFromEnv,
|
|
10113
10350
|
safeCompare,
|
|
10114
10351
|
serializePaypalParams,
|
|
@@ -10116,6 +10353,7 @@ var buayar = new Buayar();
|
|
|
10116
10353
|
sha256,
|
|
10117
10354
|
sha256Hex,
|
|
10118
10355
|
sha512,
|
|
10356
|
+
snapErrorHint,
|
|
10119
10357
|
snapExternalId,
|
|
10120
10358
|
snapTimestamp,
|
|
10121
10359
|
snapUtcTimestamp,
|