@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.mjs
CHANGED
|
@@ -2468,6 +2468,29 @@ function verifySnapWebhookSignature(headers, body, clientSecret, endpointUrl = "
|
|
|
2468
2468
|
);
|
|
2469
2469
|
return safeCompare(incoming, computed);
|
|
2470
2470
|
}
|
|
2471
|
+
function snapErrorHint(message, code) {
|
|
2472
|
+
const m = (message || "").toLowerCase();
|
|
2473
|
+
const c = (code || "").toLowerCase();
|
|
2474
|
+
if (m.includes("unknown client") || c.includes("4017300") || c.includes("4017400")) {
|
|
2475
|
+
return "Client ID tidak dikenali DOKU. Pastikan clientId benar & kanal SNAP aktif untuk akun ini.";
|
|
2476
|
+
}
|
|
2477
|
+
if (m.includes("signature") || c.startsWith("401")) {
|
|
2478
|
+
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).";
|
|
2479
|
+
}
|
|
2480
|
+
if (m.includes("bin") || m.includes("not configured") && m.includes("identifier")) {
|
|
2481
|
+
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.";
|
|
2482
|
+
}
|
|
2483
|
+
if (m.includes("merchantid") || m.includes("merchant id")) {
|
|
2484
|
+
return "QRIS/e-Wallet butuh merchantId. Isi config.extra.merchantId (atau DOKU_MERCHANT_ID) dari dashboard.";
|
|
2485
|
+
}
|
|
2486
|
+
if (m.includes("partner service id") || m.includes("partnerServiceId")) {
|
|
2487
|
+
return "partnerServiceId tidak valid. Harus 8 karakter left-padded (BIN/company code DOKU).";
|
|
2488
|
+
}
|
|
2489
|
+
if (m.includes("customer no") || m.includes("customerno")) {
|
|
2490
|
+
return "customerNo tidak valid (maks 20 digit unik). Cek config.extra.customerNo.";
|
|
2491
|
+
}
|
|
2492
|
+
return void 0;
|
|
2493
|
+
}
|
|
2471
2494
|
|
|
2472
2495
|
// src/clients/snap.ts
|
|
2473
2496
|
var SnapClient = class {
|
|
@@ -2524,7 +2547,16 @@ var SnapClient = class {
|
|
|
2524
2547
|
} catch {
|
|
2525
2548
|
}
|
|
2526
2549
|
if (!response.ok || !data?.accessToken) {
|
|
2527
|
-
|
|
2550
|
+
const baseMessage = data?.responseMessage || data?.message || `DOKU SNAP get-token failed: HTTP ${response.status}`;
|
|
2551
|
+
const hint = snapErrorHint(baseMessage, data?.responseCode);
|
|
2552
|
+
const err = new SnapApiError(`${baseMessage}${data?.responseCode ? ` (${data.responseCode})` : ""}${hint ? ` \u2014 ${hint}` : ""}`, {
|
|
2553
|
+
status: response.status,
|
|
2554
|
+
code: data?.responseCode,
|
|
2555
|
+
raw: data,
|
|
2556
|
+
endpoint,
|
|
2557
|
+
method: "POST"
|
|
2558
|
+
});
|
|
2559
|
+
throw err;
|
|
2528
2560
|
}
|
|
2529
2561
|
if (!clientSecret) {
|
|
2530
2562
|
}
|
|
@@ -2585,12 +2617,37 @@ var SnapClient = class {
|
|
|
2585
2617
|
} catch {
|
|
2586
2618
|
}
|
|
2587
2619
|
if (!response.ok) {
|
|
2588
|
-
const
|
|
2589
|
-
|
|
2620
|
+
const baseMessage = data?.responseMessage || data?.error?.message || data?.message || `HTTP ${response.status}`;
|
|
2621
|
+
const hint = snapErrorHint(baseMessage, data?.responseCode);
|
|
2622
|
+
const message = `${baseMessage}${data?.responseCode ? ` (${data.responseCode})` : ""}${hint ? ` \u2014 ${hint}` : ""}`;
|
|
2623
|
+
const err = new SnapApiError(message, {
|
|
2624
|
+
status: response.status,
|
|
2625
|
+
code: data?.responseCode,
|
|
2626
|
+
raw: data,
|
|
2627
|
+
endpoint,
|
|
2628
|
+
method
|
|
2629
|
+
});
|
|
2630
|
+
throw err;
|
|
2590
2631
|
}
|
|
2591
2632
|
return data;
|
|
2592
2633
|
}
|
|
2593
2634
|
};
|
|
2635
|
+
var SnapApiError = class extends Error {
|
|
2636
|
+
status;
|
|
2637
|
+
responseCode;
|
|
2638
|
+
raw;
|
|
2639
|
+
endpoint;
|
|
2640
|
+
method;
|
|
2641
|
+
constructor(message, opts) {
|
|
2642
|
+
super(message);
|
|
2643
|
+
this.name = "SnapApiError";
|
|
2644
|
+
this.status = opts.status;
|
|
2645
|
+
this.responseCode = opts.code;
|
|
2646
|
+
this.raw = opts.raw;
|
|
2647
|
+
this.endpoint = opts.endpoint;
|
|
2648
|
+
this.method = opts.method;
|
|
2649
|
+
}
|
|
2650
|
+
};
|
|
2594
2651
|
|
|
2595
2652
|
// src/providers/doku/provider.ts
|
|
2596
2653
|
var DokuProvider = class extends BasePaymentProvider {
|
|
@@ -2867,8 +2924,8 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
2867
2924
|
provider: "doku",
|
|
2868
2925
|
orderId,
|
|
2869
2926
|
amount: integerAmount,
|
|
2870
|
-
rawResponse: null,
|
|
2871
|
-
error: e
|
|
2927
|
+
rawResponse: e?.raw ?? e?.rawResponse ?? null,
|
|
2928
|
+
error: e?.message || "Failed to make SNAP request to DOKU API"
|
|
2872
2929
|
};
|
|
2873
2930
|
}
|
|
2874
2931
|
}
|
|
@@ -2878,8 +2935,9 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
2878
2935
|
const method = String(params.paymentMethod || "").toLowerCase();
|
|
2879
2936
|
const bankKey = method.replace(/_va$/, "");
|
|
2880
2937
|
const channel = config.extra?.vaChannel || bankMap[bankKey] || `VIRTUAL_ACCOUNT_${bankKey.toUpperCase()}`;
|
|
2881
|
-
const
|
|
2882
|
-
const
|
|
2938
|
+
const rawPartnerServiceId = (config.extra?.partnerServiceId || "").replace(/\s/g, "");
|
|
2939
|
+
const partnerServiceId = rawPartnerServiceId.padStart(8, " ").slice(0, 8);
|
|
2940
|
+
const customerNo = (config.extra?.customerNo || "").replace(/\s/g, "").slice(0, 20) || String(Date.now()).slice(-12);
|
|
2883
2941
|
const virtualAccountNo = (partnerServiceId + customerNo).slice(0, 28);
|
|
2884
2942
|
const reusable = config.extra?.reusableStatus === true;
|
|
2885
2943
|
const currency = params.currency || "IDR";
|
|
@@ -2908,6 +2966,7 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
2908
2966
|
return {
|
|
2909
2967
|
success: true,
|
|
2910
2968
|
provider: "doku",
|
|
2969
|
+
mode: "va",
|
|
2911
2970
|
orderId: vaData.trxId || orderId,
|
|
2912
2971
|
amount: Number(vaData.totalAmount?.value || amount) || Math.round(amount),
|
|
2913
2972
|
reference: vaData.virtualAccountNo || orderId,
|
|
@@ -2943,6 +3002,7 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
2943
3002
|
return {
|
|
2944
3003
|
success: true,
|
|
2945
3004
|
provider: "doku",
|
|
3005
|
+
mode: "qris",
|
|
2946
3006
|
orderId: data.partnerReferenceNo || orderId,
|
|
2947
3007
|
amount: Number(data.amount?.value || amount) || Math.round(amount),
|
|
2948
3008
|
reference: data.referenceNo || orderId,
|
|
@@ -2988,10 +3048,12 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
2988
3048
|
return {
|
|
2989
3049
|
success: true,
|
|
2990
3050
|
provider: "doku",
|
|
3051
|
+
mode: "ewallet",
|
|
2991
3052
|
orderId: data.partnerReferenceNo || orderId,
|
|
2992
3053
|
amount: Number(data.amount?.value || amount) || Math.round(amount),
|
|
2993
3054
|
reference: data.partnerReferenceNo || orderId,
|
|
2994
3055
|
paymentUrl: data.webRedirectUrl || data.paymentUrl,
|
|
3056
|
+
checkoutUrl: data.webRedirectUrl || data.paymentUrl,
|
|
2995
3057
|
rawResponse: data
|
|
2996
3058
|
};
|
|
2997
3059
|
}
|
|
@@ -9416,170 +9478,316 @@ var PaymentManager = class {
|
|
|
9416
9478
|
};
|
|
9417
9479
|
var paymentManager = new PaymentManager();
|
|
9418
9480
|
|
|
9481
|
+
// src/core/providerRegistry.ts
|
|
9482
|
+
var ProviderRegistry = class {
|
|
9483
|
+
descriptors = /* @__PURE__ */ new Map();
|
|
9484
|
+
constructor(initial) {
|
|
9485
|
+
for (const d of initial || []) this.register(d);
|
|
9486
|
+
}
|
|
9487
|
+
register(desc) {
|
|
9488
|
+
this.descriptors.set(desc.name.toLowerCase().trim(), desc);
|
|
9489
|
+
}
|
|
9490
|
+
unregister(name) {
|
|
9491
|
+
return this.descriptors.delete(name.toLowerCase().trim());
|
|
9492
|
+
}
|
|
9493
|
+
has(name) {
|
|
9494
|
+
return this.descriptors.has(name.toLowerCase().trim());
|
|
9495
|
+
}
|
|
9496
|
+
get(name) {
|
|
9497
|
+
return this.descriptors.get(name.toLowerCase().trim());
|
|
9498
|
+
}
|
|
9499
|
+
names() {
|
|
9500
|
+
return [...this.descriptors.keys()];
|
|
9501
|
+
}
|
|
9502
|
+
/**
|
|
9503
|
+
* Autodetect provider aktif dari variabel lingkungan.
|
|
9504
|
+
* Mengembalikan nama provider yang kredensial .env-nya terisi penuh,
|
|
9505
|
+
* atau undefined jika tidak ada / ambigu.
|
|
9506
|
+
*/
|
|
9507
|
+
detectFromEnv(env) {
|
|
9508
|
+
const present = [];
|
|
9509
|
+
for (const [name, desc] of this.descriptors) {
|
|
9510
|
+
const filled = desc.envKeys.filter((k) => {
|
|
9511
|
+
const v = env[k];
|
|
9512
|
+
return typeof v === "string" && v.trim().length > 0;
|
|
9513
|
+
});
|
|
9514
|
+
if (filled.length > 0) present.push({ name, count: filled.length });
|
|
9515
|
+
}
|
|
9516
|
+
if (present.length === 0) return void 0;
|
|
9517
|
+
present.sort((a, b) => b.count - a.count);
|
|
9518
|
+
const top = present[0];
|
|
9519
|
+
const ties = present.filter((p) => p.count === top.count);
|
|
9520
|
+
return ties.length === 1 ? top.name : void 0;
|
|
9521
|
+
}
|
|
9522
|
+
/**
|
|
9523
|
+
* Autodetect provider dari struktur payload webhook.
|
|
9524
|
+
* Mengembalikan nama provider jika dikenali, else undefined.
|
|
9525
|
+
*/
|
|
9526
|
+
detectFromWebhook(payload) {
|
|
9527
|
+
if (!payload) return void 0;
|
|
9528
|
+
const p = payload;
|
|
9529
|
+
if (p.signature_key && p.transaction_status) return "midtrans";
|
|
9530
|
+
if (p.merchantCode && p.merchantOrderId && p.resultCode) return "duitku";
|
|
9531
|
+
if (p.trx_id && (p.sid || p.reference_id || p.via)) return "ipaymu";
|
|
9532
|
+
if (p.service?.id || p.order?.invoice_number && p.transaction?.status) return "doku";
|
|
9533
|
+
if (p.bill_no && (p.payment_status_code !== void 0 || p.payment_status_desc)) return "faspay";
|
|
9534
|
+
if (p.merchant_id && p.order_id && p.payment_status) return "finpay";
|
|
9535
|
+
if (p.tXid && p.merchantToken && (p.referenceNo || p.amt)) return "nicepay";
|
|
9536
|
+
if (p.partner_tx_id || p.partner_trx_id) return "oy";
|
|
9537
|
+
if (p.merchant_id && p.order_id && p.signature) return "prismalink";
|
|
9538
|
+
if (p.object === "event" || p.type && p.data?.object && p.api_version) return "stripe";
|
|
9539
|
+
if (p.event && p.payload?.payment?.entity) return "razorpay";
|
|
9540
|
+
if (p.external_id || p.event?.startsWith("payment.") || p.event?.startsWith("qr.") || p.data?.reference_id) return "xendit";
|
|
9541
|
+
if (p.event_type && p.resource && (p.event_type.startsWith("PAYMENT.") || p.event_type.startsWith("CHECKOUT.ORDER."))) return "paypal";
|
|
9542
|
+
if (p.notificationItems || p.merchantAccountCode && p.pspReference && p.eventCode) return "adyen";
|
|
9543
|
+
if (p.type && p.data?._links && (p.type.startsWith("payment_") || p.type.startsWith("refund_"))) return "checkoutcom";
|
|
9544
|
+
if (p.type && p.data?.object?.status && p.merchant_id) return "square";
|
|
9545
|
+
if (p.order && p.order?.status && p.order?.extOrderId) return "payu";
|
|
9546
|
+
if (p.kind && p.subject?.transaction) return "braintree";
|
|
9547
|
+
if (p.HASH && p.REFNOEXT && p.IPN_PID) return "twocheckout";
|
|
9548
|
+
return void 0;
|
|
9549
|
+
}
|
|
9550
|
+
};
|
|
9551
|
+
var ENV_KEYS = {
|
|
9552
|
+
midtrans: ["MIDTRANS_SERVER_KEY", "MIDTRANS_CLIENT_KEY"],
|
|
9553
|
+
duitku: ["DUITKU_API_KEY", "DUITKU_MERCHANT_CODE"],
|
|
9554
|
+
ipaymu: ["IPAYMU_API_KEY", "IPAYMU_VA"],
|
|
9555
|
+
xendit: ["XENDIT_SECRET_KEY", "XENDIT_WEBHOOK_TOKEN"],
|
|
9556
|
+
doku: ["DOKU_CLIENT_ID", "DOKU_SECRET_KEY"],
|
|
9557
|
+
prismalink: ["PRISMALINK_MERCHANT_ID", "PRISMALINK_SECRET_KEY"],
|
|
9558
|
+
faspay: ["FASPAY_MERCHANT_ID", "FASPAY_USER_ID", "FASPAY_PASSWORD"],
|
|
9559
|
+
finpay: ["FINPAY_MERCHANT_ID", "FINPAY_MERCHANT_KEY"],
|
|
9560
|
+
nicepay: ["NICEPAY_IMID", "NICEPAY_KEY"],
|
|
9561
|
+
oy: ["OY_USERNAME", "OY_API_KEY"],
|
|
9562
|
+
stripe: ["STRIPE_SECRET_KEY", "STRIPE_PUBLIC_KEY", "STRIPE_WEBHOOK_SECRET"],
|
|
9563
|
+
paypal: ["PAYPAL_CLIENT_ID", "PAYPAL_CLIENT_SECRET", "PAYPAL_WEBHOOK_ID"],
|
|
9564
|
+
adyen: ["ADYEN_API_KEY", "ADYEN_MERCHANT_ACCOUNT", "ADYEN_HMAC_KEY"],
|
|
9565
|
+
checkoutcom: ["CHECKOUTCOM_SECRET_KEY", "CHECKOUTCOM_PUBLIC_KEY", "CHECKOUTCOM_WEBHOOK_SECRET"],
|
|
9566
|
+
razorpay: ["RAZORPAY_KEY_ID", "RAZORPAY_KEY_SECRET", "RAZORPAY_WEBHOOK_SECRET"],
|
|
9567
|
+
square: ["SQUARE_ACCESS_TOKEN", "SQUARE_LOCATION_ID", "SQUARE_WEBHOOK_SIGNATURE_KEY"],
|
|
9568
|
+
payu: ["PAYU_POS_ID", "PAYU_MD5_KEY"],
|
|
9569
|
+
braintree: ["BRAINTREE_MERCHANT_ID", "BRAINTREE_PUBLIC_KEY", "BRAINTREE_PRIVATE_KEY"],
|
|
9570
|
+
twocheckout: ["TWOCHECKOUT_MERCHANT_CODE", "TWOCHECKOUT_SECRET_KEY", "TWOCHECKOUT_SECRET_WORD"]
|
|
9571
|
+
};
|
|
9572
|
+
var WORKING_METHODS = {
|
|
9573
|
+
midtrans: Object.keys(CANONICAL_TO_MIDTRANS),
|
|
9574
|
+
duitku: Object.keys(CANONICAL_TO_DUITKU),
|
|
9575
|
+
ipaymu: Object.keys(CANONICAL_TO_IPAYMU),
|
|
9576
|
+
xendit: Object.keys(CANONICAL_TO_XENDIT),
|
|
9577
|
+
doku: Object.keys(CANONICAL_TO_DOKU),
|
|
9578
|
+
prismalink: Object.keys(CANONICAL_TO_PRISMALINK),
|
|
9579
|
+
faspay: Object.keys(CANONICAL_TO_FASPAY),
|
|
9580
|
+
finpay: Object.keys(CANONICAL_TO_FINPAY),
|
|
9581
|
+
nicepay: Object.keys(CANONICAL_TO_NICEPAY),
|
|
9582
|
+
oy: Object.keys(CANONICAL_TO_OY),
|
|
9583
|
+
stripe: Object.keys(CANONICAL_TO_STRIPE),
|
|
9584
|
+
paypal: ["credit_card", "paylater", "paypal", "bank_transfer"],
|
|
9585
|
+
adyen: ["credit_card", "paypal", "qris", "apple_pay", "google_pay", "klarna", "sepa"],
|
|
9586
|
+
checkoutcom: ["credit_card", "paypal", "apple_pay", "google_pay", "klarna", "sofort", "bank_transfer"],
|
|
9587
|
+
razorpay: ["credit_card", "wallet", "upi", "netbanking", "emi", "bank_transfer"],
|
|
9588
|
+
square: ["credit_card", "apple_pay", "google_pay", "afterpay", "cash_app"],
|
|
9589
|
+
payu: ["credit_card", "bank_transfer", "apple_pay", "google_pay", "blik", "installment"],
|
|
9590
|
+
braintree: ["credit_card", "paypal", "apple_pay", "google_pay", "venmo"],
|
|
9591
|
+
twocheckout: ["credit_card", "paypal", "paylater", "wire_transfer"]
|
|
9592
|
+
};
|
|
9593
|
+
var OPERATIONS = {
|
|
9594
|
+
midtrans: { refund: true, checkBalance: true, disburse: false },
|
|
9595
|
+
duitku: { refund: false, checkBalance: true, disburse: true },
|
|
9596
|
+
ipaymu: { refund: false, checkBalance: true, disburse: false },
|
|
9597
|
+
xendit: { refund: false, checkBalance: true, disburse: true },
|
|
9598
|
+
doku: { refund: false, checkBalance: false, disburse: false },
|
|
9599
|
+
prismalink: { refund: false, checkBalance: false, disburse: false },
|
|
9600
|
+
faspay: { refund: false, checkBalance: false, disburse: false },
|
|
9601
|
+
finpay: { refund: false, checkBalance: false, disburse: false },
|
|
9602
|
+
nicepay: { refund: false, checkBalance: false, disburse: false },
|
|
9603
|
+
oy: { refund: false, checkBalance: true, disburse: true },
|
|
9604
|
+
stripe: { refund: true, checkBalance: true, disburse: false },
|
|
9605
|
+
paypal: { refund: true, checkBalance: true, disburse: false },
|
|
9606
|
+
adyen: { refund: true, checkBalance: false, disburse: false },
|
|
9607
|
+
checkoutcom: { refund: true, checkBalance: true, disburse: false },
|
|
9608
|
+
razorpay: { refund: true, checkBalance: true, disburse: false },
|
|
9609
|
+
square: { refund: true, checkBalance: true, disburse: false },
|
|
9610
|
+
payu: { refund: true, checkBalance: false, disburse: false },
|
|
9611
|
+
braintree: { refund: true, checkBalance: false, disburse: false },
|
|
9612
|
+
twocheckout: { refund: true, checkBalance: false, disburse: false }
|
|
9613
|
+
};
|
|
9614
|
+
function buildDefaultDescriptors() {
|
|
9615
|
+
return Object.keys(ENV_KEYS).map((name) => ({
|
|
9616
|
+
name,
|
|
9617
|
+
envKeys: ENV_KEYS[name],
|
|
9618
|
+
methods: WORKING_METHODS[name] || [],
|
|
9619
|
+
operations: OPERATIONS[name] || { refund: false, checkBalance: false, disburse: false }
|
|
9620
|
+
}));
|
|
9621
|
+
}
|
|
9622
|
+
var providerRegistry = new ProviderRegistry(buildDefaultDescriptors());
|
|
9623
|
+
|
|
9419
9624
|
// src/core/config.ts
|
|
9625
|
+
var UNIVERSAL = {
|
|
9626
|
+
apiKey: ["BUAYAR_API_KEY", "BUAYAR_SERVER_KEY", "PG_API_KEY", "PAYMENT_API_KEY"],
|
|
9627
|
+
clientKey: ["BUAYAR_CLIENT_KEY", "PG_CLIENT_KEY"],
|
|
9628
|
+
merchantCode: ["BUAYAR_MERCHANT_CODE", "PG_MERCHANT_CODE", "PAYMENT_MERCHANT_CODE"],
|
|
9629
|
+
merchantId: ["BUAYAR_MERCHANT_ID", "PG_MERCHANT_ID"],
|
|
9630
|
+
secretKey: ["BUAYAR_SECRET_KEY", "PG_SECRET_KEY", "SECRET_KEY"],
|
|
9631
|
+
serverKey: ["BUAYAR_SERVER_KEY", "PG_SECRET_KEY"],
|
|
9632
|
+
projectId: ["BUAYAR_PROJECT_ID", "PG_PROJECT_ID", "PROJECT_ID"]
|
|
9633
|
+
};
|
|
9634
|
+
var SPECIFIC = {
|
|
9635
|
+
midtrans: {
|
|
9636
|
+
apiKey: ["MIDTRANS_SERVER_KEY"],
|
|
9637
|
+
clientKey: ["MIDTRANS_CLIENT_KEY"],
|
|
9638
|
+
merchantId: ["MIDTRANS_MERCHANT_ID"]
|
|
9639
|
+
},
|
|
9640
|
+
duitku: {
|
|
9641
|
+
apiKey: ["DUITKU_API_KEY"],
|
|
9642
|
+
merchantCode: ["DUITKU_MERCHANT_CODE"]
|
|
9643
|
+
},
|
|
9644
|
+
ipaymu: {
|
|
9645
|
+
apiKey: ["IPAYMU_API_KEY"],
|
|
9646
|
+
merchantCode: ["IPAYMU_VA", "IPAYMU_MERCHANT_CODE"]
|
|
9647
|
+
},
|
|
9648
|
+
xendit: {
|
|
9649
|
+
apiKey: ["XENDIT_SECRET_KEY", "XENDIT_API_KEY"]
|
|
9650
|
+
},
|
|
9651
|
+
doku: {
|
|
9652
|
+
apiKey: ["DOKU_SECRET_KEY", "DOKU_API_KEY"],
|
|
9653
|
+
clientKey: ["DOKU_CLIENT_ID"],
|
|
9654
|
+
merchantCode: ["DOKU_CLIENT_ID", "DOKU_MERCHANT_ID"],
|
|
9655
|
+
merchantId: ["DOKU_MERCHANT_ID"]
|
|
9656
|
+
},
|
|
9657
|
+
prismalink: {
|
|
9658
|
+
apiKey: ["PRISMALINK_SECRET_KEY", "PRISMALINK_API_KEY"],
|
|
9659
|
+
merchantCode: ["PRISMALINK_MERCHANT_ID"],
|
|
9660
|
+
merchantId: ["PRISMALINK_MERCHANT_ID"]
|
|
9661
|
+
},
|
|
9662
|
+
faspay: {
|
|
9663
|
+
apiKey: ["FASPAY_PASSWORD", "FASPAY_API_KEY"],
|
|
9664
|
+
clientKey: ["FASPAY_USER_ID"],
|
|
9665
|
+
merchantCode: ["FASPAY_MERCHANT_ID"],
|
|
9666
|
+
merchantId: ["FASPAY_MERCHANT_ID"]
|
|
9667
|
+
},
|
|
9668
|
+
finpay: {
|
|
9669
|
+
apiKey: ["FINPAY_MERCHANT_KEY", "FINPAY_SECRET_KEY", "FINPAY_API_KEY"],
|
|
9670
|
+
merchantCode: ["FINPAY_MERCHANT_ID"],
|
|
9671
|
+
merchantId: ["FINPAY_MERCHANT_ID"]
|
|
9672
|
+
},
|
|
9673
|
+
nicepay: {
|
|
9674
|
+
apiKey: ["NICEPAY_KEY", "NICEPAY_SECRET_KEY", "NICEPAY_API_KEY"],
|
|
9675
|
+
merchantCode: ["NICEPAY_IMID", "NICEPAY_MERCHANT_ID"],
|
|
9676
|
+
merchantId: ["NICEPAY_IMID"]
|
|
9677
|
+
},
|
|
9678
|
+
oy: {
|
|
9679
|
+
apiKey: ["OY_API_KEY"],
|
|
9680
|
+
clientKey: ["OY_USERNAME"],
|
|
9681
|
+
merchantCode: ["OY_USERNAME"]
|
|
9682
|
+
},
|
|
9683
|
+
stripe: {
|
|
9684
|
+
apiKey: ["STRIPE_SECRET_KEY", "STRIPE_KEY"],
|
|
9685
|
+
clientKey: ["STRIPE_PUBLIC_KEY", "STRIPE_PUBLISHABLE_KEY"]
|
|
9686
|
+
},
|
|
9687
|
+
paypal: {
|
|
9688
|
+
apiKey: ["PAYPAL_CLIENT_SECRET"],
|
|
9689
|
+
clientKey: ["PAYPAL_CLIENT_ID"],
|
|
9690
|
+
merchantCode: ["PAYPAL_CLIENT_ID"]
|
|
9691
|
+
},
|
|
9692
|
+
adyen: {
|
|
9693
|
+
apiKey: ["ADYEN_API_KEY"],
|
|
9694
|
+
clientKey: ["ADYEN_CLIENT_KEY"],
|
|
9695
|
+
merchantCode: ["ADYEN_MERCHANT_ACCOUNT"],
|
|
9696
|
+
merchantId: ["ADYEN_MERCHANT_ACCOUNT"]
|
|
9697
|
+
},
|
|
9698
|
+
checkoutcom: {
|
|
9699
|
+
apiKey: ["CHECKOUTCOM_SECRET_KEY"],
|
|
9700
|
+
clientKey: ["CHECKOUTCOM_PUBLIC_KEY"]
|
|
9701
|
+
},
|
|
9702
|
+
razorpay: {
|
|
9703
|
+
apiKey: ["RAZORPAY_KEY_SECRET"],
|
|
9704
|
+
clientKey: ["RAZORPAY_KEY_ID"],
|
|
9705
|
+
merchantCode: ["RAZORPAY_KEY_ID"]
|
|
9706
|
+
},
|
|
9707
|
+
square: {
|
|
9708
|
+
apiKey: ["SQUARE_ACCESS_TOKEN"],
|
|
9709
|
+
clientKey: ["SQUARE_APPLICATION_ID"],
|
|
9710
|
+
merchantCode: ["SQUARE_APPLICATION_ID"],
|
|
9711
|
+
projectId: ["SQUARE_LOCATION_ID"]
|
|
9712
|
+
},
|
|
9713
|
+
payu: {
|
|
9714
|
+
apiKey: ["PAYU_MD5_KEY"],
|
|
9715
|
+
clientKey: ["PAYU_POS_ID"],
|
|
9716
|
+
merchantCode: ["PAYU_POS_ID"],
|
|
9717
|
+
merchantId: ["PAYU_POS_ID"]
|
|
9718
|
+
},
|
|
9719
|
+
braintree: {
|
|
9720
|
+
apiKey: ["BRAINTREE_PRIVATE_KEY"],
|
|
9721
|
+
clientKey: ["BRAINTREE_PUBLIC_KEY"],
|
|
9722
|
+
merchantCode: ["BRAINTREE_MERCHANT_ID"],
|
|
9723
|
+
merchantId: ["BRAINTREE_MERCHANT_ID"]
|
|
9724
|
+
},
|
|
9725
|
+
twocheckout: {
|
|
9726
|
+
apiKey: ["TWOCHECKOUT_SECRET_KEY"],
|
|
9727
|
+
merchantCode: ["TWOCHECKOUT_MERCHANT_CODE"],
|
|
9728
|
+
merchantId: ["TWOCHECKOUT_MERCHANT_CODE"]
|
|
9729
|
+
}
|
|
9730
|
+
};
|
|
9731
|
+
function firstDefined(env, keys) {
|
|
9732
|
+
for (const k of keys) {
|
|
9733
|
+
const v = env[k];
|
|
9734
|
+
if (typeof v === "string" && v.trim().length > 0) return v.trim();
|
|
9735
|
+
}
|
|
9736
|
+
return void 0;
|
|
9737
|
+
}
|
|
9738
|
+
function resolveSandbox(env, provider) {
|
|
9739
|
+
const universal = firstDefined(env, ["BUAYAR_SANDBOX", "PG_SANDBOX", "PAYMENT_SANDBOX"]);
|
|
9740
|
+
if (universal !== void 0) return universal === "true" || universal === "1";
|
|
9741
|
+
const specificMap = {
|
|
9742
|
+
midtrans: ["MIDTRANS_IS_PRODUCTION"],
|
|
9743
|
+
duitku: ["DUITKU_SANDBOX"],
|
|
9744
|
+
ipaymu: ["IPAYMU_SANDBOX"],
|
|
9745
|
+
doku: ["DOKU_SANDBOX"],
|
|
9746
|
+
prismalink: ["PRISMALINK_SANDBOX"],
|
|
9747
|
+
faspay: ["FASPAY_SANDBOX"],
|
|
9748
|
+
finpay: ["FINPAY_SANDBOX"],
|
|
9749
|
+
nicepay: ["NICEPAY_SANDBOX"],
|
|
9750
|
+
oy: ["OY_SANDBOX"],
|
|
9751
|
+
stripe: ["STRIPE_SANDBOX"],
|
|
9752
|
+
paypal: ["PAYPAL_SANDBOX"],
|
|
9753
|
+
adyen: ["ADYEN_SANDBOX"],
|
|
9754
|
+
checkoutcom: ["CHECKOUTCOM_SANDBOX"],
|
|
9755
|
+
razorpay: ["RAZORPAY_SANDBOX"],
|
|
9756
|
+
square: ["SQUARE_SANDBOX"],
|
|
9757
|
+
payu: ["PAYU_SANDBOX"],
|
|
9758
|
+
braintree: ["BRAINTREE_SANDBOX"],
|
|
9759
|
+
twocheckout: ["TWOCHECKOUT_SANDBOX"],
|
|
9760
|
+
xendit: ["XENDIT_SANDBOX"]
|
|
9761
|
+
};
|
|
9762
|
+
const specific = firstDefined(env, specificMap[provider]);
|
|
9763
|
+
if (specific !== void 0) {
|
|
9764
|
+
if (provider === "midtrans") return specific !== "true" && specific !== "1";
|
|
9765
|
+
return specific === "true" || specific === "1";
|
|
9766
|
+
}
|
|
9767
|
+
return env.NODE_ENV !== "production";
|
|
9768
|
+
}
|
|
9420
9769
|
function resolveConfigFromEnv(customConfig) {
|
|
9421
9770
|
const env = typeof process !== "undefined" && process?.env ? process.env : {};
|
|
9422
|
-
const
|
|
9423
|
-
let
|
|
9424
|
-
|
|
9425
|
-
|
|
9426
|
-
|
|
9427
|
-
|
|
9428
|
-
|
|
9429
|
-
|
|
9430
|
-
|
|
9431
|
-
|
|
9432
|
-
|
|
9433
|
-
|
|
9434
|
-
|
|
9435
|
-
|
|
9436
|
-
|
|
9437
|
-
|
|
9438
|
-
} else if (env.DOKU_SANDBOX !== void 0) {
|
|
9439
|
-
sandbox = env.DOKU_SANDBOX === "true" || env.DOKU_SANDBOX === "1";
|
|
9440
|
-
} else if (env.PRISMALINK_SANDBOX !== void 0) {
|
|
9441
|
-
sandbox = env.PRISMALINK_SANDBOX === "true" || env.PRISMALINK_SANDBOX === "1";
|
|
9442
|
-
} else if (env.FASPAY_SANDBOX !== void 0) {
|
|
9443
|
-
sandbox = env.FASPAY_SANDBOX === "true" || env.FASPAY_SANDBOX === "1";
|
|
9444
|
-
} else if (env.FINPAY_SANDBOX !== void 0) {
|
|
9445
|
-
sandbox = env.FINPAY_SANDBOX === "true" || env.FINPAY_SANDBOX === "1";
|
|
9446
|
-
} else if (env.NICEPAY_SANDBOX !== void 0) {
|
|
9447
|
-
sandbox = env.NICEPAY_SANDBOX === "true" || env.NICEPAY_SANDBOX === "1";
|
|
9448
|
-
} else if (env.OY_SANDBOX !== void 0) {
|
|
9449
|
-
sandbox = env.OY_SANDBOX === "true" || env.OY_SANDBOX === "1";
|
|
9450
|
-
} else if (env.STRIPE_SANDBOX !== void 0) {
|
|
9451
|
-
sandbox = env.STRIPE_SANDBOX === "true" || env.STRIPE_SANDBOX === "1";
|
|
9452
|
-
} else if (env.PAYPAL_SANDBOX !== void 0) {
|
|
9453
|
-
sandbox = env.PAYPAL_SANDBOX === "true" || env.PAYPAL_SANDBOX === "1";
|
|
9454
|
-
} else if (env.ADYEN_SANDBOX !== void 0) {
|
|
9455
|
-
sandbox = env.ADYEN_SANDBOX === "true" || env.ADYEN_SANDBOX === "1";
|
|
9456
|
-
} else if (env.CHECKOUTCOM_SANDBOX !== void 0) {
|
|
9457
|
-
sandbox = env.CHECKOUTCOM_SANDBOX === "true" || env.CHECKOUTCOM_SANDBOX === "1";
|
|
9458
|
-
} else if (env.RAZORPAY_SANDBOX !== void 0) {
|
|
9459
|
-
sandbox = env.RAZORPAY_SANDBOX === "true" || env.RAZORPAY_SANDBOX === "1";
|
|
9460
|
-
} else if (env.SQUARE_SANDBOX !== void 0) {
|
|
9461
|
-
sandbox = env.SQUARE_SANDBOX === "true" || env.SQUARE_SANDBOX === "1";
|
|
9462
|
-
} else if (env.PAYU_SANDBOX !== void 0) {
|
|
9463
|
-
sandbox = env.PAYU_SANDBOX === "true" || env.PAYU_SANDBOX === "1";
|
|
9464
|
-
} else if (env.BRAINTREE_SANDBOX !== void 0) {
|
|
9465
|
-
sandbox = env.BRAINTREE_SANDBOX === "true" || env.BRAINTREE_SANDBOX === "1";
|
|
9466
|
-
} else if (env.TWOCHECKOUT_SANDBOX !== void 0) {
|
|
9467
|
-
sandbox = env.TWOCHECKOUT_SANDBOX === "true" || env.TWOCHECKOUT_SANDBOX === "1";
|
|
9468
|
-
} else {
|
|
9469
|
-
sandbox = env.NODE_ENV !== "production";
|
|
9470
|
-
}
|
|
9471
|
-
let apiKey = customConfig?.apiKey || customConfig?.serverKey || customConfig?.secretKey;
|
|
9472
|
-
if (!apiKey) {
|
|
9473
|
-
if (provider === "midtrans") {
|
|
9474
|
-
apiKey = env.MIDTRANS_SERVER_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY || env.BUAYAR_SERVER_KEY;
|
|
9475
|
-
} else if (provider === "duitku") {
|
|
9476
|
-
apiKey = env.DUITKU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9477
|
-
} else if (provider === "ipaymu") {
|
|
9478
|
-
apiKey = env.IPAYMU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9479
|
-
} else if (provider === "xendit") {
|
|
9480
|
-
apiKey = env.XENDIT_SECRET_KEY || env.XENDIT_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9481
|
-
} else if (provider === "doku") {
|
|
9482
|
-
apiKey = env.DOKU_SECRET_KEY || env.DOKU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9483
|
-
} else if (provider === "prismalink") {
|
|
9484
|
-
apiKey = env.PRISMALINK_SECRET_KEY || env.PRISMALINK_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9485
|
-
} else if (provider === "faspay") {
|
|
9486
|
-
apiKey = env.FASPAY_PASSWORD || env.FASPAY_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9487
|
-
} else if (provider === "finpay") {
|
|
9488
|
-
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;
|
|
9489
|
-
} else if (provider === "nicepay") {
|
|
9490
|
-
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;
|
|
9491
|
-
} else if (provider === "oy" || provider === "oyindonesia") {
|
|
9492
|
-
apiKey = env.OY_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9493
|
-
} else if (provider === "stripe") {
|
|
9494
|
-
apiKey = env.STRIPE_SECRET_KEY || env.STRIPE_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9495
|
-
} else if (provider === "paypal") {
|
|
9496
|
-
apiKey = env.PAYPAL_CLIENT_SECRET || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9497
|
-
} else if (provider === "adyen") {
|
|
9498
|
-
apiKey = env.ADYEN_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9499
|
-
} else if (provider === "checkoutcom") {
|
|
9500
|
-
apiKey = env.CHECKOUTCOM_SECRET_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9501
|
-
} else if (provider === "razorpay") {
|
|
9502
|
-
apiKey = env.RAZORPAY_KEY_SECRET || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9503
|
-
} else if (provider === "square") {
|
|
9504
|
-
apiKey = env.SQUARE_ACCESS_TOKEN || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9505
|
-
} else if (provider === "payu") {
|
|
9506
|
-
apiKey = env.PAYU_MD5_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9507
|
-
} else if (provider === "braintree") {
|
|
9508
|
-
apiKey = env.BRAINTREE_PRIVATE_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9509
|
-
} else if (provider === "twocheckout" || provider === "2checkout") {
|
|
9510
|
-
apiKey = env.TWOCHECKOUT_SECRET_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9511
|
-
} else {
|
|
9512
|
-
apiKey = env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY || env.PG_SECRET_KEY || env.BUAYAR_SECRET_KEY;
|
|
9513
|
-
}
|
|
9514
|
-
}
|
|
9515
|
-
let merchantCode = customConfig?.merchantCode;
|
|
9516
|
-
let clientKey = customConfig?.clientKey;
|
|
9517
|
-
let merchantId = customConfig?.merchantId;
|
|
9518
|
-
if (provider === "midtrans") {
|
|
9519
|
-
clientKey = clientKey || env.MIDTRANS_CLIENT_KEY || env.BUAYAR_CLIENT_KEY || env.PG_CLIENT_KEY;
|
|
9520
|
-
merchantId = merchantId || env.MIDTRANS_MERCHANT_ID || env.BUAYAR_MERCHANT_ID || env.PG_MERCHANT_ID;
|
|
9521
|
-
merchantCode = merchantCode || clientKey || merchantId || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE;
|
|
9522
|
-
} else if (provider === "duitku") {
|
|
9523
|
-
merchantCode = merchantCode || env.DUITKU_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9524
|
-
} else if (provider === "ipaymu") {
|
|
9525
|
-
merchantCode = merchantCode || env.IPAYMU_VA || env.IPAYMU_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9526
|
-
} else if (provider === "doku") {
|
|
9527
|
-
merchantCode = merchantCode || env.DOKU_CLIENT_ID || env.DOKU_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9528
|
-
clientKey = clientKey || customConfig?.merchantCode || env.DOKU_CLIENT_ID || env.BUAYAR_CLIENT_KEY;
|
|
9529
|
-
} else if (provider === "prismalink") {
|
|
9530
|
-
merchantCode = merchantCode || env.PRISMALINK_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9531
|
-
merchantId = merchantId || env.PRISMALINK_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9532
|
-
} else if (provider === "faspay") {
|
|
9533
|
-
merchantCode = merchantCode || env.FASPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9534
|
-
merchantId = merchantId || env.FASPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9535
|
-
clientKey = clientKey || env.FASPAY_USER_ID || env.BUAYAR_CLIENT_KEY;
|
|
9536
|
-
} else if (provider === "finpay") {
|
|
9537
|
-
merchantCode = merchantCode || env.FINPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9538
|
-
merchantId = merchantId || env.FINPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9539
|
-
} else if (provider === "nicepay") {
|
|
9540
|
-
merchantCode = merchantCode || env.NICEPAY_IMID || env.NICEPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9541
|
-
merchantId = merchantId || env.NICEPAY_IMID || env.BUAYAR_MERCHANT_ID;
|
|
9542
|
-
} else if (provider === "oy" || provider === "oyindonesia") {
|
|
9543
|
-
merchantCode = merchantCode || env.OY_USERNAME || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9544
|
-
clientKey = clientKey || customConfig?.merchantCode || env.OY_USERNAME || env.BUAYAR_CLIENT_KEY;
|
|
9545
|
-
} else if (provider === "stripe") {
|
|
9546
|
-
clientKey = clientKey || env.STRIPE_PUBLIC_KEY || env.STRIPE_PUBLISHABLE_KEY || env.BUAYAR_CLIENT_KEY || env.BUAYAR_PUBLIC_KEY;
|
|
9547
|
-
merchantCode = merchantCode || clientKey || "stripe";
|
|
9548
|
-
} else if (provider === "paypal") {
|
|
9549
|
-
clientKey = clientKey || env.PAYPAL_CLIENT_ID || env.BUAYAR_CLIENT_KEY;
|
|
9550
|
-
merchantCode = merchantCode || env.PAYPAL_CLIENT_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9551
|
-
} else if (provider === "adyen") {
|
|
9552
|
-
clientKey = clientKey || env.ADYEN_CLIENT_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9553
|
-
merchantCode = merchantCode || env.ADYEN_MERCHANT_ACCOUNT || env.BUAYAR_MERCHANT_CODE;
|
|
9554
|
-
merchantId = merchantId || env.ADYEN_MERCHANT_ACCOUNT || env.BUAYAR_MERCHANT_ID;
|
|
9555
|
-
} else if (provider === "checkoutcom") {
|
|
9556
|
-
clientKey = clientKey || env.CHECKOUTCOM_PUBLIC_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9557
|
-
merchantCode = merchantCode || env.BUAYAR_MERCHANT_CODE;
|
|
9558
|
-
} else if (provider === "razorpay") {
|
|
9559
|
-
clientKey = clientKey || env.RAZORPAY_KEY_ID || env.BUAYAR_CLIENT_KEY;
|
|
9560
|
-
merchantCode = merchantCode || env.RAZORPAY_KEY_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9561
|
-
} else if (provider === "square") {
|
|
9562
|
-
clientKey = clientKey || env.SQUARE_APPLICATION_ID || env.BUAYAR_CLIENT_KEY;
|
|
9563
|
-
merchantCode = merchantCode || env.SQUARE_APPLICATION_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9564
|
-
} else if (provider === "payu") {
|
|
9565
|
-
merchantCode = merchantCode || env.PAYU_POS_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9566
|
-
merchantId = merchantId || env.PAYU_POS_ID;
|
|
9567
|
-
} else if (provider === "braintree") {
|
|
9568
|
-
clientKey = clientKey || env.BRAINTREE_PUBLIC_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9569
|
-
merchantCode = merchantCode || env.BRAINTREE_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9570
|
-
merchantId = merchantId || env.BRAINTREE_MERCHANT_ID;
|
|
9571
|
-
} else if (provider === "twocheckout" || provider === "2checkout") {
|
|
9572
|
-
merchantCode = merchantCode || env.TWOCHECKOUT_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE;
|
|
9573
|
-
merchantId = merchantId || env.TWOCHECKOUT_MERCHANT_CODE;
|
|
9574
|
-
} else {
|
|
9575
|
-
merchantCode = merchantCode || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9576
|
-
}
|
|
9577
|
-
const projectId = customConfig?.projectId || env.BUAYAR_PROJECT_ID || env.PG_PROJECT_ID || env.PROJECT_ID || env.SQUARE_LOCATION_ID;
|
|
9578
|
-
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;
|
|
9579
|
-
const privateKey = customConfig?.privateKey || env.BUAYAR_PRIVATE_KEY || env.PG_PRIVATE_KEY || env.PRIVATE_KEY || env.BRAINTREE_PRIVATE_KEY;
|
|
9580
|
-
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;
|
|
9771
|
+
const explicit = (customConfig?.provider || env.PROVIDER_PG || env.PG_PROVIDER || env.BUAYAR_PROVIDER || env.PAYMENT_PROVIDER || "").toLowerCase().trim();
|
|
9772
|
+
let provider = explicit || providerRegistry.detectFromEnv(env) || "midtrans";
|
|
9773
|
+
provider = provider.replace("oyindonesia", "oy").replace("2checkout", "twocheckout");
|
|
9774
|
+
const sandbox = customConfig?.sandbox ?? resolveSandbox(env, provider);
|
|
9775
|
+
const spec = SPECIFIC[provider] || {};
|
|
9776
|
+
const cfg = {};
|
|
9777
|
+
const fields = ["apiKey", "clientKey", "merchantCode", "merchantId", "secretKey", "serverKey", "projectId"];
|
|
9778
|
+
for (const f of fields) {
|
|
9779
|
+
const universalKeys = UNIVERSAL[f] || [];
|
|
9780
|
+
const specificKeys = spec[f] || [];
|
|
9781
|
+
const universal = firstDefined(env, universalKeys);
|
|
9782
|
+
const specific = firstDefined(env, specificKeys);
|
|
9783
|
+
const value = universal || specific;
|
|
9784
|
+
const explicitValue = customConfig?.[f] || customConfig && (f === "apiKey" ? customConfig.secretKey || customConfig.serverKey : void 0);
|
|
9785
|
+
cfg[f] = explicitValue || value || "";
|
|
9786
|
+
}
|
|
9581
9787
|
const callbackUrl = customConfig?.callbackUrl || env.BUAYAR_CALLBACK_URL || env.PG_CALLBACK_URL || env.PAYMENT_CALLBACK_URL;
|
|
9582
9788
|
const returnUrl = customConfig?.returnUrl || env.BUAYAR_RETURN_URL || env.PG_RETURN_URL || env.PAYMENT_RETURN_URL;
|
|
9789
|
+
const publicKey = customConfig?.publicKey || firstDefined(env, ["BUAYAR_PUBLIC_KEY", "PG_PUBLIC_KEY", "PUBLIC_KEY"]) || cfg.clientKey;
|
|
9790
|
+
const privateKey = customConfig?.privateKey || firstDefined(env, ["BUAYAR_PRIVATE_KEY", "PG_PRIVATE_KEY", "PRIVATE_KEY"]) || (provider === "braintree" ? cfg.apiKey : void 0);
|
|
9583
9791
|
const extra = {
|
|
9584
9792
|
webhookToken: env.XENDIT_WEBHOOK_TOKEN || env.BUAYAR_WEBHOOK_TOKEN,
|
|
9585
9793
|
webhookSecret: env.STRIPE_WEBHOOK_SECRET || env.CHECKOUTCOM_WEBHOOK_SECRET || env.RAZORPAY_WEBHOOK_SECRET || env.BUAYAR_WEBHOOK_SECRET,
|
|
@@ -9600,15 +9808,16 @@ function resolveConfigFromEnv(customConfig) {
|
|
|
9600
9808
|
secretWord: env.TWOCHECKOUT_SECRET_WORD,
|
|
9601
9809
|
...customConfig?.extra
|
|
9602
9810
|
};
|
|
9811
|
+
const apiKey = cfg.apiKey || cfg.secretKey || cfg.serverKey;
|
|
9603
9812
|
return {
|
|
9604
|
-
provider
|
|
9605
|
-
apiKey
|
|
9813
|
+
provider,
|
|
9814
|
+
apiKey,
|
|
9606
9815
|
serverKey: apiKey || "",
|
|
9607
|
-
secretKey:
|
|
9608
|
-
merchantCode: merchantCode || "",
|
|
9609
|
-
clientKey: clientKey || "",
|
|
9610
|
-
merchantId: merchantId || "",
|
|
9611
|
-
projectId,
|
|
9816
|
+
secretKey: apiKey || "",
|
|
9817
|
+
merchantCode: cfg.merchantCode || "",
|
|
9818
|
+
clientKey: cfg.clientKey || "",
|
|
9819
|
+
merchantId: cfg.merchantId || "",
|
|
9820
|
+
projectId: cfg.projectId || "",
|
|
9612
9821
|
publicKey,
|
|
9613
9822
|
privateKey,
|
|
9614
9823
|
sandbox,
|
|
@@ -9622,8 +9831,10 @@ function resolveConfigFromEnv(customConfig) {
|
|
|
9622
9831
|
var Buayar = class {
|
|
9623
9832
|
manager;
|
|
9624
9833
|
config;
|
|
9625
|
-
|
|
9834
|
+
registry;
|
|
9835
|
+
constructor(config, manager, registry) {
|
|
9626
9836
|
this.manager = manager || paymentManager;
|
|
9837
|
+
this.registry = registry || providerRegistry;
|
|
9627
9838
|
this.config = resolveConfigFromEnv(config);
|
|
9628
9839
|
}
|
|
9629
9840
|
/**
|
|
@@ -9656,6 +9867,62 @@ var Buayar = class {
|
|
|
9656
9867
|
getProvider(name) {
|
|
9657
9868
|
return this.manager.getProvider(name || this.provider);
|
|
9658
9869
|
}
|
|
9870
|
+
/**
|
|
9871
|
+
* Daftar nama provider yang terdaftar (bawaan + kustom).
|
|
9872
|
+
*/
|
|
9873
|
+
listProviders() {
|
|
9874
|
+
return this.registry.names();
|
|
9875
|
+
}
|
|
9876
|
+
/**
|
|
9877
|
+
* Registrasi metadata provider kustom untuk deteksi & capability.
|
|
9878
|
+
* Contoh: buayar.registerProviderDescriptor({ name, envKeys, methods, operations })
|
|
9879
|
+
*/
|
|
9880
|
+
registerProviderDescriptor(desc) {
|
|
9881
|
+
this.registry.register(desc);
|
|
9882
|
+
}
|
|
9883
|
+
/**
|
|
9884
|
+
* Cek capability (metode + operasi) provider tertentu — atau provider aktif bila kosong.
|
|
9885
|
+
* Jawab pertanyaan "provider ini dukung apa?" secara runtime, tanpa bongkar dokumen.
|
|
9886
|
+
*/
|
|
9887
|
+
getCapabilities(name) {
|
|
9888
|
+
const n = name || this.provider;
|
|
9889
|
+
const desc = this.registry.get(n);
|
|
9890
|
+
if (!desc) return void 0;
|
|
9891
|
+
return { methods: desc.methods, operations: desc.operations };
|
|
9892
|
+
}
|
|
9893
|
+
/**
|
|
9894
|
+
* Deteksi nama provider dari struktur payload webhook.
|
|
9895
|
+
*/
|
|
9896
|
+
detectProviderFromPayload(payload) {
|
|
9897
|
+
return this.registry.detectFromWebhook(payload);
|
|
9898
|
+
}
|
|
9899
|
+
/**
|
|
9900
|
+
* Deteksi nama provider aktif dari variabel lingkungan (kredensial yang terisi).
|
|
9901
|
+
*/
|
|
9902
|
+
detectProviderFromEnv(env) {
|
|
9903
|
+
return this.registry.detectFromEnv(env || process.env);
|
|
9904
|
+
}
|
|
9905
|
+
/**
|
|
9906
|
+
* Logika "bisa pakai X dengan provider Y?" — helper untuk portabilitas.
|
|
9907
|
+
*/
|
|
9908
|
+
supports(name, operation) {
|
|
9909
|
+
const desc = this.registry.get(name);
|
|
9910
|
+
return desc ? desc.operations[operation] : false;
|
|
9911
|
+
}
|
|
9912
|
+
/**
|
|
9913
|
+
* Daftar metode pembayaran yang benar2 tersedia untuk provider aktif.
|
|
9914
|
+
*/
|
|
9915
|
+
getSupportedMethods(name) {
|
|
9916
|
+
const n = name || this.provider;
|
|
9917
|
+
return this.registry.get(n)?.methods || [];
|
|
9918
|
+
}
|
|
9919
|
+
/**
|
|
9920
|
+
* Iterasi CEPAT: apakah provider aktif mendukung method kanonik tertentu?
|
|
9921
|
+
*/
|
|
9922
|
+
supportsMethod(method, name) {
|
|
9923
|
+
const n = name || this.provider;
|
|
9924
|
+
return this.registry.get(n)?.methods.includes(method) ?? false;
|
|
9925
|
+
}
|
|
9659
9926
|
/**
|
|
9660
9927
|
* Buat transaksi pembayaran baru (Mendukung Semi dan Full Integrasi)
|
|
9661
9928
|
*/
|
|
@@ -9730,47 +9997,8 @@ var Buayar = class {
|
|
|
9730
9997
|
}
|
|
9731
9998
|
}
|
|
9732
9999
|
let providerName = configOverride?.provider || this.provider;
|
|
9733
|
-
|
|
9734
|
-
|
|
9735
|
-
providerName = "midtrans";
|
|
9736
|
-
} else if (payload.merchantCode && payload.merchantOrderId && payload.resultCode) {
|
|
9737
|
-
providerName = "duitku";
|
|
9738
|
-
} else if (payload.trx_id && (payload.sid || payload.reference_id || payload.via)) {
|
|
9739
|
-
providerName = "ipaymu";
|
|
9740
|
-
} else if (payload.service?.id || payload.order?.invoice_number && payload.transaction?.status) {
|
|
9741
|
-
providerName = "doku";
|
|
9742
|
-
} else if (payload.bill_no && (payload.payment_status_code !== void 0 || payload.payment_status_desc)) {
|
|
9743
|
-
providerName = "faspay";
|
|
9744
|
-
} else if (payload.merchant_id && payload.order_id && payload.payment_status) {
|
|
9745
|
-
providerName = "finpay";
|
|
9746
|
-
} else if (payload.tXid && payload.merchantToken && (payload.referenceNo || payload.amt)) {
|
|
9747
|
-
providerName = "nicepay";
|
|
9748
|
-
} else if (payload.partner_tx_id || payload.partner_trx_id) {
|
|
9749
|
-
providerName = "oy";
|
|
9750
|
-
} else if (payload.merchant_id && payload.order_id && payload.signature) {
|
|
9751
|
-
providerName = "prismalink";
|
|
9752
|
-
} else if (payload.object === "event" || payload.type && payload.data?.object && payload.api_version) {
|
|
9753
|
-
providerName = "stripe";
|
|
9754
|
-
} else if (payload.event && payload.payload?.payment?.entity) {
|
|
9755
|
-
providerName = "razorpay";
|
|
9756
|
-
} else if (payload.external_id || payload.event?.startsWith("payment.") || payload.event?.startsWith("qr.") || payload.data?.reference_id) {
|
|
9757
|
-
providerName = "xendit";
|
|
9758
|
-
} else if (payload.event_type && payload.resource && (payload.event_type.startsWith("PAYMENT.") || payload.event_type.startsWith("CHECKOUT.ORDER."))) {
|
|
9759
|
-
providerName = "paypal";
|
|
9760
|
-
} else if (payload.notificationItems || payload.merchantAccountCode && payload.pspReference && payload.eventCode) {
|
|
9761
|
-
providerName = "adyen";
|
|
9762
|
-
} else if (payload.type && payload.data?._links && (payload.type.startsWith("payment_") || payload.type.startsWith("refund_"))) {
|
|
9763
|
-
providerName = "checkoutcom";
|
|
9764
|
-
} else if (payload.type && payload.data?.object?.status && payload.merchant_id) {
|
|
9765
|
-
providerName = "square";
|
|
9766
|
-
} else if (payload.order && payload.order?.status && payload.order?.extOrderId) {
|
|
9767
|
-
providerName = "payu";
|
|
9768
|
-
} else if (payload.kind && payload.subject?.transaction) {
|
|
9769
|
-
providerName = "braintree";
|
|
9770
|
-
} else if (payload.HASH && payload.REFNOEXT && payload.IPN_PID) {
|
|
9771
|
-
providerName = "twocheckout";
|
|
9772
|
-
}
|
|
9773
|
-
}
|
|
10000
|
+
const detected = this.registry.detectFromWebhook(payload);
|
|
10001
|
+
if (detected) providerName = detected;
|
|
9774
10002
|
return this.manager.verifyCallback(providerName, payload, mergedConfig);
|
|
9775
10003
|
}
|
|
9776
10004
|
async handleWebhook(payload, headers, configOverride) {
|
|
@@ -9911,8 +10139,10 @@ export {
|
|
|
9911
10139
|
PayuProvider,
|
|
9912
10140
|
PrismalinkClient,
|
|
9913
10141
|
PrismalinkProvider,
|
|
10142
|
+
ProviderRegistry,
|
|
9914
10143
|
RazorpayClient,
|
|
9915
10144
|
RazorpayProvider,
|
|
10145
|
+
SnapApiError,
|
|
9916
10146
|
SnapClient,
|
|
9917
10147
|
SquareClient,
|
|
9918
10148
|
SquareProvider,
|
|
@@ -9925,6 +10155,7 @@ export {
|
|
|
9925
10155
|
buayar,
|
|
9926
10156
|
buildBraintreeBasicAuth,
|
|
9927
10157
|
buildCoreChargePayload,
|
|
10158
|
+
buildDefaultDescriptors,
|
|
9928
10159
|
buildPaypalBasicAuth,
|
|
9929
10160
|
buildPayuBasicAuth,
|
|
9930
10161
|
buildRazorpayBasicAuth,
|
|
@@ -9949,6 +10180,7 @@ export {
|
|
|
9949
10180
|
minifyJson,
|
|
9950
10181
|
parseCoreChargeResponse,
|
|
9951
10182
|
paymentManager,
|
|
10183
|
+
providerRegistry,
|
|
9952
10184
|
resolveConfigFromEnv,
|
|
9953
10185
|
safeCompare,
|
|
9954
10186
|
serializePaypalParams,
|
|
@@ -9956,6 +10188,7 @@ export {
|
|
|
9956
10188
|
sha256,
|
|
9957
10189
|
sha256Hex,
|
|
9958
10190
|
sha512,
|
|
10191
|
+
snapErrorHint,
|
|
9959
10192
|
snapExternalId,
|
|
9960
10193
|
snapTimestamp,
|
|
9961
10194
|
snapUtcTimestamp,
|