@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 +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 +450 -213
- package/dist/index.mjs +445 -213
- 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
|
}
|
|
@@ -3068,6 +3130,7 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
3068
3130
|
return {
|
|
3069
3131
|
success: true,
|
|
3070
3132
|
provider: "doku",
|
|
3133
|
+
mode: "va",
|
|
3071
3134
|
orderId: vaData.trxId || orderId,
|
|
3072
3135
|
amount: Number(vaData.totalAmount?.value || amount) || Math.round(amount),
|
|
3073
3136
|
reference: vaData.virtualAccountNo || orderId,
|
|
@@ -3103,6 +3166,7 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
3103
3166
|
return {
|
|
3104
3167
|
success: true,
|
|
3105
3168
|
provider: "doku",
|
|
3169
|
+
mode: "qris",
|
|
3106
3170
|
orderId: data.partnerReferenceNo || orderId,
|
|
3107
3171
|
amount: Number(data.amount?.value || amount) || Math.round(amount),
|
|
3108
3172
|
reference: data.referenceNo || orderId,
|
|
@@ -3148,10 +3212,12 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
3148
3212
|
return {
|
|
3149
3213
|
success: true,
|
|
3150
3214
|
provider: "doku",
|
|
3215
|
+
mode: "ewallet",
|
|
3151
3216
|
orderId: data.partnerReferenceNo || orderId,
|
|
3152
3217
|
amount: Number(data.amount?.value || amount) || Math.round(amount),
|
|
3153
3218
|
reference: data.partnerReferenceNo || orderId,
|
|
3154
3219
|
paymentUrl: data.webRedirectUrl || data.paymentUrl,
|
|
3220
|
+
checkoutUrl: data.webRedirectUrl || data.paymentUrl,
|
|
3155
3221
|
rawResponse: data
|
|
3156
3222
|
};
|
|
3157
3223
|
}
|
|
@@ -9576,170 +9642,316 @@ var PaymentManager = class {
|
|
|
9576
9642
|
};
|
|
9577
9643
|
var paymentManager = new PaymentManager();
|
|
9578
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
|
+
|
|
9579
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
|
+
}
|
|
9580
9933
|
function resolveConfigFromEnv(customConfig) {
|
|
9581
9934
|
const env = typeof process !== "undefined" && process?.env ? process.env : {};
|
|
9582
|
-
const
|
|
9583
|
-
let
|
|
9584
|
-
|
|
9585
|
-
|
|
9586
|
-
|
|
9587
|
-
|
|
9588
|
-
|
|
9589
|
-
|
|
9590
|
-
|
|
9591
|
-
|
|
9592
|
-
|
|
9593
|
-
|
|
9594
|
-
|
|
9595
|
-
|
|
9596
|
-
|
|
9597
|
-
|
|
9598
|
-
} else if (env.DOKU_SANDBOX !== void 0) {
|
|
9599
|
-
sandbox = env.DOKU_SANDBOX === "true" || env.DOKU_SANDBOX === "1";
|
|
9600
|
-
} else if (env.PRISMALINK_SANDBOX !== void 0) {
|
|
9601
|
-
sandbox = env.PRISMALINK_SANDBOX === "true" || env.PRISMALINK_SANDBOX === "1";
|
|
9602
|
-
} else if (env.FASPAY_SANDBOX !== void 0) {
|
|
9603
|
-
sandbox = env.FASPAY_SANDBOX === "true" || env.FASPAY_SANDBOX === "1";
|
|
9604
|
-
} else if (env.FINPAY_SANDBOX !== void 0) {
|
|
9605
|
-
sandbox = env.FINPAY_SANDBOX === "true" || env.FINPAY_SANDBOX === "1";
|
|
9606
|
-
} else if (env.NICEPAY_SANDBOX !== void 0) {
|
|
9607
|
-
sandbox = env.NICEPAY_SANDBOX === "true" || env.NICEPAY_SANDBOX === "1";
|
|
9608
|
-
} else if (env.OY_SANDBOX !== void 0) {
|
|
9609
|
-
sandbox = env.OY_SANDBOX === "true" || env.OY_SANDBOX === "1";
|
|
9610
|
-
} else if (env.STRIPE_SANDBOX !== void 0) {
|
|
9611
|
-
sandbox = env.STRIPE_SANDBOX === "true" || env.STRIPE_SANDBOX === "1";
|
|
9612
|
-
} else if (env.PAYPAL_SANDBOX !== void 0) {
|
|
9613
|
-
sandbox = env.PAYPAL_SANDBOX === "true" || env.PAYPAL_SANDBOX === "1";
|
|
9614
|
-
} else if (env.ADYEN_SANDBOX !== void 0) {
|
|
9615
|
-
sandbox = env.ADYEN_SANDBOX === "true" || env.ADYEN_SANDBOX === "1";
|
|
9616
|
-
} else if (env.CHECKOUTCOM_SANDBOX !== void 0) {
|
|
9617
|
-
sandbox = env.CHECKOUTCOM_SANDBOX === "true" || env.CHECKOUTCOM_SANDBOX === "1";
|
|
9618
|
-
} else if (env.RAZORPAY_SANDBOX !== void 0) {
|
|
9619
|
-
sandbox = env.RAZORPAY_SANDBOX === "true" || env.RAZORPAY_SANDBOX === "1";
|
|
9620
|
-
} else if (env.SQUARE_SANDBOX !== void 0) {
|
|
9621
|
-
sandbox = env.SQUARE_SANDBOX === "true" || env.SQUARE_SANDBOX === "1";
|
|
9622
|
-
} else if (env.PAYU_SANDBOX !== void 0) {
|
|
9623
|
-
sandbox = env.PAYU_SANDBOX === "true" || env.PAYU_SANDBOX === "1";
|
|
9624
|
-
} else if (env.BRAINTREE_SANDBOX !== void 0) {
|
|
9625
|
-
sandbox = env.BRAINTREE_SANDBOX === "true" || env.BRAINTREE_SANDBOX === "1";
|
|
9626
|
-
} else if (env.TWOCHECKOUT_SANDBOX !== void 0) {
|
|
9627
|
-
sandbox = env.TWOCHECKOUT_SANDBOX === "true" || env.TWOCHECKOUT_SANDBOX === "1";
|
|
9628
|
-
} else {
|
|
9629
|
-
sandbox = env.NODE_ENV !== "production";
|
|
9630
|
-
}
|
|
9631
|
-
let apiKey = customConfig?.apiKey || customConfig?.serverKey || customConfig?.secretKey;
|
|
9632
|
-
if (!apiKey) {
|
|
9633
|
-
if (provider === "midtrans") {
|
|
9634
|
-
apiKey = env.MIDTRANS_SERVER_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY || env.BUAYAR_SERVER_KEY;
|
|
9635
|
-
} else if (provider === "duitku") {
|
|
9636
|
-
apiKey = env.DUITKU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9637
|
-
} else if (provider === "ipaymu") {
|
|
9638
|
-
apiKey = env.IPAYMU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9639
|
-
} else if (provider === "xendit") {
|
|
9640
|
-
apiKey = env.XENDIT_SECRET_KEY || env.XENDIT_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9641
|
-
} else if (provider === "doku") {
|
|
9642
|
-
apiKey = env.DOKU_SECRET_KEY || env.DOKU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9643
|
-
} else if (provider === "prismalink") {
|
|
9644
|
-
apiKey = env.PRISMALINK_SECRET_KEY || env.PRISMALINK_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9645
|
-
} else if (provider === "faspay") {
|
|
9646
|
-
apiKey = env.FASPAY_PASSWORD || env.FASPAY_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9647
|
-
} else if (provider === "finpay") {
|
|
9648
|
-
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;
|
|
9649
|
-
} else if (provider === "nicepay") {
|
|
9650
|
-
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;
|
|
9651
|
-
} else if (provider === "oy" || provider === "oyindonesia") {
|
|
9652
|
-
apiKey = env.OY_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9653
|
-
} else if (provider === "stripe") {
|
|
9654
|
-
apiKey = env.STRIPE_SECRET_KEY || env.STRIPE_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9655
|
-
} else if (provider === "paypal") {
|
|
9656
|
-
apiKey = env.PAYPAL_CLIENT_SECRET || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9657
|
-
} else if (provider === "adyen") {
|
|
9658
|
-
apiKey = env.ADYEN_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9659
|
-
} else if (provider === "checkoutcom") {
|
|
9660
|
-
apiKey = env.CHECKOUTCOM_SECRET_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9661
|
-
} else if (provider === "razorpay") {
|
|
9662
|
-
apiKey = env.RAZORPAY_KEY_SECRET || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9663
|
-
} else if (provider === "square") {
|
|
9664
|
-
apiKey = env.SQUARE_ACCESS_TOKEN || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9665
|
-
} else if (provider === "payu") {
|
|
9666
|
-
apiKey = env.PAYU_MD5_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9667
|
-
} else if (provider === "braintree") {
|
|
9668
|
-
apiKey = env.BRAINTREE_PRIVATE_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9669
|
-
} else if (provider === "twocheckout" || provider === "2checkout") {
|
|
9670
|
-
apiKey = env.TWOCHECKOUT_SECRET_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9671
|
-
} else {
|
|
9672
|
-
apiKey = env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY || env.PG_SECRET_KEY || env.BUAYAR_SECRET_KEY;
|
|
9673
|
-
}
|
|
9674
|
-
}
|
|
9675
|
-
let merchantCode = customConfig?.merchantCode;
|
|
9676
|
-
let clientKey = customConfig?.clientKey;
|
|
9677
|
-
let merchantId = customConfig?.merchantId;
|
|
9678
|
-
if (provider === "midtrans") {
|
|
9679
|
-
clientKey = clientKey || env.MIDTRANS_CLIENT_KEY || env.BUAYAR_CLIENT_KEY || env.PG_CLIENT_KEY;
|
|
9680
|
-
merchantId = merchantId || env.MIDTRANS_MERCHANT_ID || env.BUAYAR_MERCHANT_ID || env.PG_MERCHANT_ID;
|
|
9681
|
-
merchantCode = merchantCode || clientKey || merchantId || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE;
|
|
9682
|
-
} else if (provider === "duitku") {
|
|
9683
|
-
merchantCode = merchantCode || env.DUITKU_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9684
|
-
} else if (provider === "ipaymu") {
|
|
9685
|
-
merchantCode = merchantCode || env.IPAYMU_VA || env.IPAYMU_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9686
|
-
} else if (provider === "doku") {
|
|
9687
|
-
merchantCode = merchantCode || env.DOKU_CLIENT_ID || env.DOKU_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9688
|
-
clientKey = clientKey || customConfig?.merchantCode || env.DOKU_CLIENT_ID || env.BUAYAR_CLIENT_KEY;
|
|
9689
|
-
} else if (provider === "prismalink") {
|
|
9690
|
-
merchantCode = merchantCode || env.PRISMALINK_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9691
|
-
merchantId = merchantId || env.PRISMALINK_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9692
|
-
} else if (provider === "faspay") {
|
|
9693
|
-
merchantCode = merchantCode || env.FASPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9694
|
-
merchantId = merchantId || env.FASPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9695
|
-
clientKey = clientKey || env.FASPAY_USER_ID || env.BUAYAR_CLIENT_KEY;
|
|
9696
|
-
} else if (provider === "finpay") {
|
|
9697
|
-
merchantCode = merchantCode || env.FINPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9698
|
-
merchantId = merchantId || env.FINPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9699
|
-
} else if (provider === "nicepay") {
|
|
9700
|
-
merchantCode = merchantCode || env.NICEPAY_IMID || env.NICEPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9701
|
-
merchantId = merchantId || env.NICEPAY_IMID || env.BUAYAR_MERCHANT_ID;
|
|
9702
|
-
} else if (provider === "oy" || provider === "oyindonesia") {
|
|
9703
|
-
merchantCode = merchantCode || env.OY_USERNAME || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9704
|
-
clientKey = clientKey || customConfig?.merchantCode || env.OY_USERNAME || env.BUAYAR_CLIENT_KEY;
|
|
9705
|
-
} else if (provider === "stripe") {
|
|
9706
|
-
clientKey = clientKey || env.STRIPE_PUBLIC_KEY || env.STRIPE_PUBLISHABLE_KEY || env.BUAYAR_CLIENT_KEY || env.BUAYAR_PUBLIC_KEY;
|
|
9707
|
-
merchantCode = merchantCode || clientKey || "stripe";
|
|
9708
|
-
} else if (provider === "paypal") {
|
|
9709
|
-
clientKey = clientKey || env.PAYPAL_CLIENT_ID || env.BUAYAR_CLIENT_KEY;
|
|
9710
|
-
merchantCode = merchantCode || env.PAYPAL_CLIENT_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9711
|
-
} else if (provider === "adyen") {
|
|
9712
|
-
clientKey = clientKey || env.ADYEN_CLIENT_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9713
|
-
merchantCode = merchantCode || env.ADYEN_MERCHANT_ACCOUNT || env.BUAYAR_MERCHANT_CODE;
|
|
9714
|
-
merchantId = merchantId || env.ADYEN_MERCHANT_ACCOUNT || env.BUAYAR_MERCHANT_ID;
|
|
9715
|
-
} else if (provider === "checkoutcom") {
|
|
9716
|
-
clientKey = clientKey || env.CHECKOUTCOM_PUBLIC_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9717
|
-
merchantCode = merchantCode || env.BUAYAR_MERCHANT_CODE;
|
|
9718
|
-
} else if (provider === "razorpay") {
|
|
9719
|
-
clientKey = clientKey || env.RAZORPAY_KEY_ID || env.BUAYAR_CLIENT_KEY;
|
|
9720
|
-
merchantCode = merchantCode || env.RAZORPAY_KEY_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9721
|
-
} else if (provider === "square") {
|
|
9722
|
-
clientKey = clientKey || env.SQUARE_APPLICATION_ID || env.BUAYAR_CLIENT_KEY;
|
|
9723
|
-
merchantCode = merchantCode || env.SQUARE_APPLICATION_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9724
|
-
} else if (provider === "payu") {
|
|
9725
|
-
merchantCode = merchantCode || env.PAYU_POS_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9726
|
-
merchantId = merchantId || env.PAYU_POS_ID;
|
|
9727
|
-
} else if (provider === "braintree") {
|
|
9728
|
-
clientKey = clientKey || env.BRAINTREE_PUBLIC_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9729
|
-
merchantCode = merchantCode || env.BRAINTREE_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9730
|
-
merchantId = merchantId || env.BRAINTREE_MERCHANT_ID;
|
|
9731
|
-
} else if (provider === "twocheckout" || provider === "2checkout") {
|
|
9732
|
-
merchantCode = merchantCode || env.TWOCHECKOUT_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE;
|
|
9733
|
-
merchantId = merchantId || env.TWOCHECKOUT_MERCHANT_CODE;
|
|
9734
|
-
} else {
|
|
9735
|
-
merchantCode = merchantCode || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9736
|
-
}
|
|
9737
|
-
const projectId = customConfig?.projectId || env.BUAYAR_PROJECT_ID || env.PG_PROJECT_ID || env.PROJECT_ID || env.SQUARE_LOCATION_ID;
|
|
9738
|
-
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;
|
|
9739
|
-
const privateKey = customConfig?.privateKey || env.BUAYAR_PRIVATE_KEY || env.PG_PRIVATE_KEY || env.PRIVATE_KEY || env.BRAINTREE_PRIVATE_KEY;
|
|
9740
|
-
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
|
+
}
|
|
9741
9951
|
const callbackUrl = customConfig?.callbackUrl || env.BUAYAR_CALLBACK_URL || env.PG_CALLBACK_URL || env.PAYMENT_CALLBACK_URL;
|
|
9742
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);
|
|
9743
9955
|
const extra = {
|
|
9744
9956
|
webhookToken: env.XENDIT_WEBHOOK_TOKEN || env.BUAYAR_WEBHOOK_TOKEN,
|
|
9745
9957
|
webhookSecret: env.STRIPE_WEBHOOK_SECRET || env.CHECKOUTCOM_WEBHOOK_SECRET || env.RAZORPAY_WEBHOOK_SECRET || env.BUAYAR_WEBHOOK_SECRET,
|
|
@@ -9760,15 +9972,16 @@ function resolveConfigFromEnv(customConfig) {
|
|
|
9760
9972
|
secretWord: env.TWOCHECKOUT_SECRET_WORD,
|
|
9761
9973
|
...customConfig?.extra
|
|
9762
9974
|
};
|
|
9975
|
+
const apiKey = cfg.apiKey || cfg.secretKey || cfg.serverKey;
|
|
9763
9976
|
return {
|
|
9764
|
-
provider
|
|
9765
|
-
apiKey
|
|
9977
|
+
provider,
|
|
9978
|
+
apiKey,
|
|
9766
9979
|
serverKey: apiKey || "",
|
|
9767
|
-
secretKey:
|
|
9768
|
-
merchantCode: merchantCode || "",
|
|
9769
|
-
clientKey: clientKey || "",
|
|
9770
|
-
merchantId: merchantId || "",
|
|
9771
|
-
projectId,
|
|
9980
|
+
secretKey: apiKey || "",
|
|
9981
|
+
merchantCode: cfg.merchantCode || "",
|
|
9982
|
+
clientKey: cfg.clientKey || "",
|
|
9983
|
+
merchantId: cfg.merchantId || "",
|
|
9984
|
+
projectId: cfg.projectId || "",
|
|
9772
9985
|
publicKey,
|
|
9773
9986
|
privateKey,
|
|
9774
9987
|
sandbox,
|
|
@@ -9782,8 +9995,10 @@ function resolveConfigFromEnv(customConfig) {
|
|
|
9782
9995
|
var Buayar = class {
|
|
9783
9996
|
manager;
|
|
9784
9997
|
config;
|
|
9785
|
-
|
|
9998
|
+
registry;
|
|
9999
|
+
constructor(config, manager, registry) {
|
|
9786
10000
|
this.manager = manager || paymentManager;
|
|
10001
|
+
this.registry = registry || providerRegistry;
|
|
9787
10002
|
this.config = resolveConfigFromEnv(config);
|
|
9788
10003
|
}
|
|
9789
10004
|
/**
|
|
@@ -9816,6 +10031,62 @@ var Buayar = class {
|
|
|
9816
10031
|
getProvider(name) {
|
|
9817
10032
|
return this.manager.getProvider(name || this.provider);
|
|
9818
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
|
+
}
|
|
9819
10090
|
/**
|
|
9820
10091
|
* Buat transaksi pembayaran baru (Mendukung Semi dan Full Integrasi)
|
|
9821
10092
|
*/
|
|
@@ -9890,47 +10161,8 @@ var Buayar = class {
|
|
|
9890
10161
|
}
|
|
9891
10162
|
}
|
|
9892
10163
|
let providerName = configOverride?.provider || this.provider;
|
|
9893
|
-
|
|
9894
|
-
|
|
9895
|
-
providerName = "midtrans";
|
|
9896
|
-
} else if (payload.merchantCode && payload.merchantOrderId && payload.resultCode) {
|
|
9897
|
-
providerName = "duitku";
|
|
9898
|
-
} else if (payload.trx_id && (payload.sid || payload.reference_id || payload.via)) {
|
|
9899
|
-
providerName = "ipaymu";
|
|
9900
|
-
} else if (payload.service?.id || payload.order?.invoice_number && payload.transaction?.status) {
|
|
9901
|
-
providerName = "doku";
|
|
9902
|
-
} else if (payload.bill_no && (payload.payment_status_code !== void 0 || payload.payment_status_desc)) {
|
|
9903
|
-
providerName = "faspay";
|
|
9904
|
-
} else if (payload.merchant_id && payload.order_id && payload.payment_status) {
|
|
9905
|
-
providerName = "finpay";
|
|
9906
|
-
} else if (payload.tXid && payload.merchantToken && (payload.referenceNo || payload.amt)) {
|
|
9907
|
-
providerName = "nicepay";
|
|
9908
|
-
} else if (payload.partner_tx_id || payload.partner_trx_id) {
|
|
9909
|
-
providerName = "oy";
|
|
9910
|
-
} else if (payload.merchant_id && payload.order_id && payload.signature) {
|
|
9911
|
-
providerName = "prismalink";
|
|
9912
|
-
} else if (payload.object === "event" || payload.type && payload.data?.object && payload.api_version) {
|
|
9913
|
-
providerName = "stripe";
|
|
9914
|
-
} else if (payload.event && payload.payload?.payment?.entity) {
|
|
9915
|
-
providerName = "razorpay";
|
|
9916
|
-
} else if (payload.external_id || payload.event?.startsWith("payment.") || payload.event?.startsWith("qr.") || payload.data?.reference_id) {
|
|
9917
|
-
providerName = "xendit";
|
|
9918
|
-
} else if (payload.event_type && payload.resource && (payload.event_type.startsWith("PAYMENT.") || payload.event_type.startsWith("CHECKOUT.ORDER."))) {
|
|
9919
|
-
providerName = "paypal";
|
|
9920
|
-
} else if (payload.notificationItems || payload.merchantAccountCode && payload.pspReference && payload.eventCode) {
|
|
9921
|
-
providerName = "adyen";
|
|
9922
|
-
} else if (payload.type && payload.data?._links && (payload.type.startsWith("payment_") || payload.type.startsWith("refund_"))) {
|
|
9923
|
-
providerName = "checkoutcom";
|
|
9924
|
-
} else if (payload.type && payload.data?.object?.status && payload.merchant_id) {
|
|
9925
|
-
providerName = "square";
|
|
9926
|
-
} else if (payload.order && payload.order?.status && payload.order?.extOrderId) {
|
|
9927
|
-
providerName = "payu";
|
|
9928
|
-
} else if (payload.kind && payload.subject?.transaction) {
|
|
9929
|
-
providerName = "braintree";
|
|
9930
|
-
} else if (payload.HASH && payload.REFNOEXT && payload.IPN_PID) {
|
|
9931
|
-
providerName = "twocheckout";
|
|
9932
|
-
}
|
|
9933
|
-
}
|
|
10164
|
+
const detected = this.registry.detectFromWebhook(payload);
|
|
10165
|
+
if (detected) providerName = detected;
|
|
9934
10166
|
return this.manager.verifyCallback(providerName, payload, mergedConfig);
|
|
9935
10167
|
}
|
|
9936
10168
|
async handleWebhook(payload, headers, configOverride) {
|
|
@@ -10072,8 +10304,10 @@ var buayar = new Buayar();
|
|
|
10072
10304
|
PayuProvider,
|
|
10073
10305
|
PrismalinkClient,
|
|
10074
10306
|
PrismalinkProvider,
|
|
10307
|
+
ProviderRegistry,
|
|
10075
10308
|
RazorpayClient,
|
|
10076
10309
|
RazorpayProvider,
|
|
10310
|
+
SnapApiError,
|
|
10077
10311
|
SnapClient,
|
|
10078
10312
|
SquareClient,
|
|
10079
10313
|
SquareProvider,
|
|
@@ -10086,6 +10320,7 @@ var buayar = new Buayar();
|
|
|
10086
10320
|
buayar,
|
|
10087
10321
|
buildBraintreeBasicAuth,
|
|
10088
10322
|
buildCoreChargePayload,
|
|
10323
|
+
buildDefaultDescriptors,
|
|
10089
10324
|
buildPaypalBasicAuth,
|
|
10090
10325
|
buildPayuBasicAuth,
|
|
10091
10326
|
buildRazorpayBasicAuth,
|
|
@@ -10110,6 +10345,7 @@ var buayar = new Buayar();
|
|
|
10110
10345
|
minifyJson,
|
|
10111
10346
|
parseCoreChargeResponse,
|
|
10112
10347
|
paymentManager,
|
|
10348
|
+
providerRegistry,
|
|
10113
10349
|
resolveConfigFromEnv,
|
|
10114
10350
|
safeCompare,
|
|
10115
10351
|
serializePaypalParams,
|
|
@@ -10117,6 +10353,7 @@ var buayar = new Buayar();
|
|
|
10117
10353
|
sha256,
|
|
10118
10354
|
sha256Hex,
|
|
10119
10355
|
sha512,
|
|
10356
|
+
snapErrorHint,
|
|
10120
10357
|
snapExternalId,
|
|
10121
10358
|
snapTimestamp,
|
|
10122
10359
|
snapUtcTimestamp,
|