@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.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
|
}
|
|
@@ -2909,6 +2966,7 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
2909
2966
|
return {
|
|
2910
2967
|
success: true,
|
|
2911
2968
|
provider: "doku",
|
|
2969
|
+
mode: "va",
|
|
2912
2970
|
orderId: vaData.trxId || orderId,
|
|
2913
2971
|
amount: Number(vaData.totalAmount?.value || amount) || Math.round(amount),
|
|
2914
2972
|
reference: vaData.virtualAccountNo || orderId,
|
|
@@ -2944,6 +3002,7 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
2944
3002
|
return {
|
|
2945
3003
|
success: true,
|
|
2946
3004
|
provider: "doku",
|
|
3005
|
+
mode: "qris",
|
|
2947
3006
|
orderId: data.partnerReferenceNo || orderId,
|
|
2948
3007
|
amount: Number(data.amount?.value || amount) || Math.round(amount),
|
|
2949
3008
|
reference: data.referenceNo || orderId,
|
|
@@ -2989,10 +3048,12 @@ var DokuProvider = class extends BasePaymentProvider {
|
|
|
2989
3048
|
return {
|
|
2990
3049
|
success: true,
|
|
2991
3050
|
provider: "doku",
|
|
3051
|
+
mode: "ewallet",
|
|
2992
3052
|
orderId: data.partnerReferenceNo || orderId,
|
|
2993
3053
|
amount: Number(data.amount?.value || amount) || Math.round(amount),
|
|
2994
3054
|
reference: data.partnerReferenceNo || orderId,
|
|
2995
3055
|
paymentUrl: data.webRedirectUrl || data.paymentUrl,
|
|
3056
|
+
checkoutUrl: data.webRedirectUrl || data.paymentUrl,
|
|
2996
3057
|
rawResponse: data
|
|
2997
3058
|
};
|
|
2998
3059
|
}
|
|
@@ -9417,170 +9478,316 @@ var PaymentManager = class {
|
|
|
9417
9478
|
};
|
|
9418
9479
|
var paymentManager = new PaymentManager();
|
|
9419
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
|
+
|
|
9420
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
|
+
}
|
|
9421
9769
|
function resolveConfigFromEnv(customConfig) {
|
|
9422
9770
|
const env = typeof process !== "undefined" && process?.env ? process.env : {};
|
|
9423
|
-
const
|
|
9424
|
-
let
|
|
9425
|
-
|
|
9426
|
-
|
|
9427
|
-
|
|
9428
|
-
|
|
9429
|
-
|
|
9430
|
-
|
|
9431
|
-
|
|
9432
|
-
|
|
9433
|
-
|
|
9434
|
-
|
|
9435
|
-
|
|
9436
|
-
|
|
9437
|
-
|
|
9438
|
-
|
|
9439
|
-
} else if (env.DOKU_SANDBOX !== void 0) {
|
|
9440
|
-
sandbox = env.DOKU_SANDBOX === "true" || env.DOKU_SANDBOX === "1";
|
|
9441
|
-
} else if (env.PRISMALINK_SANDBOX !== void 0) {
|
|
9442
|
-
sandbox = env.PRISMALINK_SANDBOX === "true" || env.PRISMALINK_SANDBOX === "1";
|
|
9443
|
-
} else if (env.FASPAY_SANDBOX !== void 0) {
|
|
9444
|
-
sandbox = env.FASPAY_SANDBOX === "true" || env.FASPAY_SANDBOX === "1";
|
|
9445
|
-
} else if (env.FINPAY_SANDBOX !== void 0) {
|
|
9446
|
-
sandbox = env.FINPAY_SANDBOX === "true" || env.FINPAY_SANDBOX === "1";
|
|
9447
|
-
} else if (env.NICEPAY_SANDBOX !== void 0) {
|
|
9448
|
-
sandbox = env.NICEPAY_SANDBOX === "true" || env.NICEPAY_SANDBOX === "1";
|
|
9449
|
-
} else if (env.OY_SANDBOX !== void 0) {
|
|
9450
|
-
sandbox = env.OY_SANDBOX === "true" || env.OY_SANDBOX === "1";
|
|
9451
|
-
} else if (env.STRIPE_SANDBOX !== void 0) {
|
|
9452
|
-
sandbox = env.STRIPE_SANDBOX === "true" || env.STRIPE_SANDBOX === "1";
|
|
9453
|
-
} else if (env.PAYPAL_SANDBOX !== void 0) {
|
|
9454
|
-
sandbox = env.PAYPAL_SANDBOX === "true" || env.PAYPAL_SANDBOX === "1";
|
|
9455
|
-
} else if (env.ADYEN_SANDBOX !== void 0) {
|
|
9456
|
-
sandbox = env.ADYEN_SANDBOX === "true" || env.ADYEN_SANDBOX === "1";
|
|
9457
|
-
} else if (env.CHECKOUTCOM_SANDBOX !== void 0) {
|
|
9458
|
-
sandbox = env.CHECKOUTCOM_SANDBOX === "true" || env.CHECKOUTCOM_SANDBOX === "1";
|
|
9459
|
-
} else if (env.RAZORPAY_SANDBOX !== void 0) {
|
|
9460
|
-
sandbox = env.RAZORPAY_SANDBOX === "true" || env.RAZORPAY_SANDBOX === "1";
|
|
9461
|
-
} else if (env.SQUARE_SANDBOX !== void 0) {
|
|
9462
|
-
sandbox = env.SQUARE_SANDBOX === "true" || env.SQUARE_SANDBOX === "1";
|
|
9463
|
-
} else if (env.PAYU_SANDBOX !== void 0) {
|
|
9464
|
-
sandbox = env.PAYU_SANDBOX === "true" || env.PAYU_SANDBOX === "1";
|
|
9465
|
-
} else if (env.BRAINTREE_SANDBOX !== void 0) {
|
|
9466
|
-
sandbox = env.BRAINTREE_SANDBOX === "true" || env.BRAINTREE_SANDBOX === "1";
|
|
9467
|
-
} else if (env.TWOCHECKOUT_SANDBOX !== void 0) {
|
|
9468
|
-
sandbox = env.TWOCHECKOUT_SANDBOX === "true" || env.TWOCHECKOUT_SANDBOX === "1";
|
|
9469
|
-
} else {
|
|
9470
|
-
sandbox = env.NODE_ENV !== "production";
|
|
9471
|
-
}
|
|
9472
|
-
let apiKey = customConfig?.apiKey || customConfig?.serverKey || customConfig?.secretKey;
|
|
9473
|
-
if (!apiKey) {
|
|
9474
|
-
if (provider === "midtrans") {
|
|
9475
|
-
apiKey = env.MIDTRANS_SERVER_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY || env.BUAYAR_SERVER_KEY;
|
|
9476
|
-
} else if (provider === "duitku") {
|
|
9477
|
-
apiKey = env.DUITKU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9478
|
-
} else if (provider === "ipaymu") {
|
|
9479
|
-
apiKey = env.IPAYMU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9480
|
-
} else if (provider === "xendit") {
|
|
9481
|
-
apiKey = env.XENDIT_SECRET_KEY || env.XENDIT_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9482
|
-
} else if (provider === "doku") {
|
|
9483
|
-
apiKey = env.DOKU_SECRET_KEY || env.DOKU_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9484
|
-
} else if (provider === "prismalink") {
|
|
9485
|
-
apiKey = env.PRISMALINK_SECRET_KEY || env.PRISMALINK_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9486
|
-
} else if (provider === "faspay") {
|
|
9487
|
-
apiKey = env.FASPAY_PASSWORD || env.FASPAY_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9488
|
-
} else if (provider === "finpay") {
|
|
9489
|
-
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;
|
|
9490
|
-
} else if (provider === "nicepay") {
|
|
9491
|
-
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;
|
|
9492
|
-
} else if (provider === "oy" || provider === "oyindonesia") {
|
|
9493
|
-
apiKey = env.OY_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9494
|
-
} else if (provider === "stripe") {
|
|
9495
|
-
apiKey = env.STRIPE_SECRET_KEY || env.STRIPE_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9496
|
-
} else if (provider === "paypal") {
|
|
9497
|
-
apiKey = env.PAYPAL_CLIENT_SECRET || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9498
|
-
} else if (provider === "adyen") {
|
|
9499
|
-
apiKey = env.ADYEN_API_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9500
|
-
} else if (provider === "checkoutcom") {
|
|
9501
|
-
apiKey = env.CHECKOUTCOM_SECRET_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9502
|
-
} else if (provider === "razorpay") {
|
|
9503
|
-
apiKey = env.RAZORPAY_KEY_SECRET || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9504
|
-
} else if (provider === "square") {
|
|
9505
|
-
apiKey = env.SQUARE_ACCESS_TOKEN || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9506
|
-
} else if (provider === "payu") {
|
|
9507
|
-
apiKey = env.PAYU_MD5_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9508
|
-
} else if (provider === "braintree") {
|
|
9509
|
-
apiKey = env.BRAINTREE_PRIVATE_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9510
|
-
} else if (provider === "twocheckout" || provider === "2checkout") {
|
|
9511
|
-
apiKey = env.TWOCHECKOUT_SECRET_KEY || env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY;
|
|
9512
|
-
} else {
|
|
9513
|
-
apiKey = env.BUAYAR_API_KEY || env.PG_API_KEY || env.PAYMENT_API_KEY || env.PG_SECRET_KEY || env.BUAYAR_SECRET_KEY;
|
|
9514
|
-
}
|
|
9515
|
-
}
|
|
9516
|
-
let merchantCode = customConfig?.merchantCode;
|
|
9517
|
-
let clientKey = customConfig?.clientKey;
|
|
9518
|
-
let merchantId = customConfig?.merchantId;
|
|
9519
|
-
if (provider === "midtrans") {
|
|
9520
|
-
clientKey = clientKey || env.MIDTRANS_CLIENT_KEY || env.BUAYAR_CLIENT_KEY || env.PG_CLIENT_KEY;
|
|
9521
|
-
merchantId = merchantId || env.MIDTRANS_MERCHANT_ID || env.BUAYAR_MERCHANT_ID || env.PG_MERCHANT_ID;
|
|
9522
|
-
merchantCode = merchantCode || clientKey || merchantId || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE;
|
|
9523
|
-
} else if (provider === "duitku") {
|
|
9524
|
-
merchantCode = merchantCode || env.DUITKU_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9525
|
-
} else if (provider === "ipaymu") {
|
|
9526
|
-
merchantCode = merchantCode || env.IPAYMU_VA || env.IPAYMU_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9527
|
-
} else if (provider === "doku") {
|
|
9528
|
-
merchantCode = merchantCode || env.DOKU_CLIENT_ID || env.DOKU_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9529
|
-
clientKey = clientKey || customConfig?.merchantCode || env.DOKU_CLIENT_ID || env.BUAYAR_CLIENT_KEY;
|
|
9530
|
-
} else if (provider === "prismalink") {
|
|
9531
|
-
merchantCode = merchantCode || env.PRISMALINK_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9532
|
-
merchantId = merchantId || env.PRISMALINK_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9533
|
-
} else if (provider === "faspay") {
|
|
9534
|
-
merchantCode = merchantCode || env.FASPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9535
|
-
merchantId = merchantId || env.FASPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9536
|
-
clientKey = clientKey || env.FASPAY_USER_ID || env.BUAYAR_CLIENT_KEY;
|
|
9537
|
-
} else if (provider === "finpay") {
|
|
9538
|
-
merchantCode = merchantCode || env.FINPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9539
|
-
merchantId = merchantId || env.FINPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_ID;
|
|
9540
|
-
} else if (provider === "nicepay") {
|
|
9541
|
-
merchantCode = merchantCode || env.NICEPAY_IMID || env.NICEPAY_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9542
|
-
merchantId = merchantId || env.NICEPAY_IMID || env.BUAYAR_MERCHANT_ID;
|
|
9543
|
-
} else if (provider === "oy" || provider === "oyindonesia") {
|
|
9544
|
-
merchantCode = merchantCode || env.OY_USERNAME || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9545
|
-
clientKey = clientKey || customConfig?.merchantCode || env.OY_USERNAME || env.BUAYAR_CLIENT_KEY;
|
|
9546
|
-
} else if (provider === "stripe") {
|
|
9547
|
-
clientKey = clientKey || env.STRIPE_PUBLIC_KEY || env.STRIPE_PUBLISHABLE_KEY || env.BUAYAR_CLIENT_KEY || env.BUAYAR_PUBLIC_KEY;
|
|
9548
|
-
merchantCode = merchantCode || clientKey || "stripe";
|
|
9549
|
-
} else if (provider === "paypal") {
|
|
9550
|
-
clientKey = clientKey || env.PAYPAL_CLIENT_ID || env.BUAYAR_CLIENT_KEY;
|
|
9551
|
-
merchantCode = merchantCode || env.PAYPAL_CLIENT_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9552
|
-
} else if (provider === "adyen") {
|
|
9553
|
-
clientKey = clientKey || env.ADYEN_CLIENT_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9554
|
-
merchantCode = merchantCode || env.ADYEN_MERCHANT_ACCOUNT || env.BUAYAR_MERCHANT_CODE;
|
|
9555
|
-
merchantId = merchantId || env.ADYEN_MERCHANT_ACCOUNT || env.BUAYAR_MERCHANT_ID;
|
|
9556
|
-
} else if (provider === "checkoutcom") {
|
|
9557
|
-
clientKey = clientKey || env.CHECKOUTCOM_PUBLIC_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9558
|
-
merchantCode = merchantCode || env.BUAYAR_MERCHANT_CODE;
|
|
9559
|
-
} else if (provider === "razorpay") {
|
|
9560
|
-
clientKey = clientKey || env.RAZORPAY_KEY_ID || env.BUAYAR_CLIENT_KEY;
|
|
9561
|
-
merchantCode = merchantCode || env.RAZORPAY_KEY_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9562
|
-
} else if (provider === "square") {
|
|
9563
|
-
clientKey = clientKey || env.SQUARE_APPLICATION_ID || env.BUAYAR_CLIENT_KEY;
|
|
9564
|
-
merchantCode = merchantCode || env.SQUARE_APPLICATION_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9565
|
-
} else if (provider === "payu") {
|
|
9566
|
-
merchantCode = merchantCode || env.PAYU_POS_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9567
|
-
merchantId = merchantId || env.PAYU_POS_ID;
|
|
9568
|
-
} else if (provider === "braintree") {
|
|
9569
|
-
clientKey = clientKey || env.BRAINTREE_PUBLIC_KEY || env.BUAYAR_CLIENT_KEY;
|
|
9570
|
-
merchantCode = merchantCode || env.BRAINTREE_MERCHANT_ID || env.BUAYAR_MERCHANT_CODE;
|
|
9571
|
-
merchantId = merchantId || env.BRAINTREE_MERCHANT_ID;
|
|
9572
|
-
} else if (provider === "twocheckout" || provider === "2checkout") {
|
|
9573
|
-
merchantCode = merchantCode || env.TWOCHECKOUT_MERCHANT_CODE || env.BUAYAR_MERCHANT_CODE;
|
|
9574
|
-
merchantId = merchantId || env.TWOCHECKOUT_MERCHANT_CODE;
|
|
9575
|
-
} else {
|
|
9576
|
-
merchantCode = merchantCode || env.BUAYAR_MERCHANT_CODE || env.PG_MERCHANT_CODE || env.PAYMENT_MERCHANT_CODE;
|
|
9577
|
-
}
|
|
9578
|
-
const projectId = customConfig?.projectId || env.BUAYAR_PROJECT_ID || env.PG_PROJECT_ID || env.PROJECT_ID || env.SQUARE_LOCATION_ID;
|
|
9579
|
-
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;
|
|
9580
|
-
const privateKey = customConfig?.privateKey || env.BUAYAR_PRIVATE_KEY || env.PG_PRIVATE_KEY || env.PRIVATE_KEY || env.BRAINTREE_PRIVATE_KEY;
|
|
9581
|
-
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
|
+
}
|
|
9582
9787
|
const callbackUrl = customConfig?.callbackUrl || env.BUAYAR_CALLBACK_URL || env.PG_CALLBACK_URL || env.PAYMENT_CALLBACK_URL;
|
|
9583
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);
|
|
9584
9791
|
const extra = {
|
|
9585
9792
|
webhookToken: env.XENDIT_WEBHOOK_TOKEN || env.BUAYAR_WEBHOOK_TOKEN,
|
|
9586
9793
|
webhookSecret: env.STRIPE_WEBHOOK_SECRET || env.CHECKOUTCOM_WEBHOOK_SECRET || env.RAZORPAY_WEBHOOK_SECRET || env.BUAYAR_WEBHOOK_SECRET,
|
|
@@ -9601,15 +9808,16 @@ function resolveConfigFromEnv(customConfig) {
|
|
|
9601
9808
|
secretWord: env.TWOCHECKOUT_SECRET_WORD,
|
|
9602
9809
|
...customConfig?.extra
|
|
9603
9810
|
};
|
|
9811
|
+
const apiKey = cfg.apiKey || cfg.secretKey || cfg.serverKey;
|
|
9604
9812
|
return {
|
|
9605
|
-
provider
|
|
9606
|
-
apiKey
|
|
9813
|
+
provider,
|
|
9814
|
+
apiKey,
|
|
9607
9815
|
serverKey: apiKey || "",
|
|
9608
|
-
secretKey:
|
|
9609
|
-
merchantCode: merchantCode || "",
|
|
9610
|
-
clientKey: clientKey || "",
|
|
9611
|
-
merchantId: merchantId || "",
|
|
9612
|
-
projectId,
|
|
9816
|
+
secretKey: apiKey || "",
|
|
9817
|
+
merchantCode: cfg.merchantCode || "",
|
|
9818
|
+
clientKey: cfg.clientKey || "",
|
|
9819
|
+
merchantId: cfg.merchantId || "",
|
|
9820
|
+
projectId: cfg.projectId || "",
|
|
9613
9821
|
publicKey,
|
|
9614
9822
|
privateKey,
|
|
9615
9823
|
sandbox,
|
|
@@ -9623,8 +9831,10 @@ function resolveConfigFromEnv(customConfig) {
|
|
|
9623
9831
|
var Buayar = class {
|
|
9624
9832
|
manager;
|
|
9625
9833
|
config;
|
|
9626
|
-
|
|
9834
|
+
registry;
|
|
9835
|
+
constructor(config, manager, registry) {
|
|
9627
9836
|
this.manager = manager || paymentManager;
|
|
9837
|
+
this.registry = registry || providerRegistry;
|
|
9628
9838
|
this.config = resolveConfigFromEnv(config);
|
|
9629
9839
|
}
|
|
9630
9840
|
/**
|
|
@@ -9657,6 +9867,62 @@ var Buayar = class {
|
|
|
9657
9867
|
getProvider(name) {
|
|
9658
9868
|
return this.manager.getProvider(name || this.provider);
|
|
9659
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
|
+
}
|
|
9660
9926
|
/**
|
|
9661
9927
|
* Buat transaksi pembayaran baru (Mendukung Semi dan Full Integrasi)
|
|
9662
9928
|
*/
|
|
@@ -9731,47 +9997,8 @@ var Buayar = class {
|
|
|
9731
9997
|
}
|
|
9732
9998
|
}
|
|
9733
9999
|
let providerName = configOverride?.provider || this.provider;
|
|
9734
|
-
|
|
9735
|
-
|
|
9736
|
-
providerName = "midtrans";
|
|
9737
|
-
} else if (payload.merchantCode && payload.merchantOrderId && payload.resultCode) {
|
|
9738
|
-
providerName = "duitku";
|
|
9739
|
-
} else if (payload.trx_id && (payload.sid || payload.reference_id || payload.via)) {
|
|
9740
|
-
providerName = "ipaymu";
|
|
9741
|
-
} else if (payload.service?.id || payload.order?.invoice_number && payload.transaction?.status) {
|
|
9742
|
-
providerName = "doku";
|
|
9743
|
-
} else if (payload.bill_no && (payload.payment_status_code !== void 0 || payload.payment_status_desc)) {
|
|
9744
|
-
providerName = "faspay";
|
|
9745
|
-
} else if (payload.merchant_id && payload.order_id && payload.payment_status) {
|
|
9746
|
-
providerName = "finpay";
|
|
9747
|
-
} else if (payload.tXid && payload.merchantToken && (payload.referenceNo || payload.amt)) {
|
|
9748
|
-
providerName = "nicepay";
|
|
9749
|
-
} else if (payload.partner_tx_id || payload.partner_trx_id) {
|
|
9750
|
-
providerName = "oy";
|
|
9751
|
-
} else if (payload.merchant_id && payload.order_id && payload.signature) {
|
|
9752
|
-
providerName = "prismalink";
|
|
9753
|
-
} else if (payload.object === "event" || payload.type && payload.data?.object && payload.api_version) {
|
|
9754
|
-
providerName = "stripe";
|
|
9755
|
-
} else if (payload.event && payload.payload?.payment?.entity) {
|
|
9756
|
-
providerName = "razorpay";
|
|
9757
|
-
} else if (payload.external_id || payload.event?.startsWith("payment.") || payload.event?.startsWith("qr.") || payload.data?.reference_id) {
|
|
9758
|
-
providerName = "xendit";
|
|
9759
|
-
} else if (payload.event_type && payload.resource && (payload.event_type.startsWith("PAYMENT.") || payload.event_type.startsWith("CHECKOUT.ORDER."))) {
|
|
9760
|
-
providerName = "paypal";
|
|
9761
|
-
} else if (payload.notificationItems || payload.merchantAccountCode && payload.pspReference && payload.eventCode) {
|
|
9762
|
-
providerName = "adyen";
|
|
9763
|
-
} else if (payload.type && payload.data?._links && (payload.type.startsWith("payment_") || payload.type.startsWith("refund_"))) {
|
|
9764
|
-
providerName = "checkoutcom";
|
|
9765
|
-
} else if (payload.type && payload.data?.object?.status && payload.merchant_id) {
|
|
9766
|
-
providerName = "square";
|
|
9767
|
-
} else if (payload.order && payload.order?.status && payload.order?.extOrderId) {
|
|
9768
|
-
providerName = "payu";
|
|
9769
|
-
} else if (payload.kind && payload.subject?.transaction) {
|
|
9770
|
-
providerName = "braintree";
|
|
9771
|
-
} else if (payload.HASH && payload.REFNOEXT && payload.IPN_PID) {
|
|
9772
|
-
providerName = "twocheckout";
|
|
9773
|
-
}
|
|
9774
|
-
}
|
|
10000
|
+
const detected = this.registry.detectFromWebhook(payload);
|
|
10001
|
+
if (detected) providerName = detected;
|
|
9775
10002
|
return this.manager.verifyCallback(providerName, payload, mergedConfig);
|
|
9776
10003
|
}
|
|
9777
10004
|
async handleWebhook(payload, headers, configOverride) {
|
|
@@ -9912,8 +10139,10 @@ export {
|
|
|
9912
10139
|
PayuProvider,
|
|
9913
10140
|
PrismalinkClient,
|
|
9914
10141
|
PrismalinkProvider,
|
|
10142
|
+
ProviderRegistry,
|
|
9915
10143
|
RazorpayClient,
|
|
9916
10144
|
RazorpayProvider,
|
|
10145
|
+
SnapApiError,
|
|
9917
10146
|
SnapClient,
|
|
9918
10147
|
SquareClient,
|
|
9919
10148
|
SquareProvider,
|
|
@@ -9926,6 +10155,7 @@ export {
|
|
|
9926
10155
|
buayar,
|
|
9927
10156
|
buildBraintreeBasicAuth,
|
|
9928
10157
|
buildCoreChargePayload,
|
|
10158
|
+
buildDefaultDescriptors,
|
|
9929
10159
|
buildPaypalBasicAuth,
|
|
9930
10160
|
buildPayuBasicAuth,
|
|
9931
10161
|
buildRazorpayBasicAuth,
|
|
@@ -9950,6 +10180,7 @@ export {
|
|
|
9950
10180
|
minifyJson,
|
|
9951
10181
|
parseCoreChargeResponse,
|
|
9952
10182
|
paymentManager,
|
|
10183
|
+
providerRegistry,
|
|
9953
10184
|
resolveConfigFromEnv,
|
|
9954
10185
|
safeCompare,
|
|
9955
10186
|
serializePaypalParams,
|
|
@@ -9957,6 +10188,7 @@ export {
|
|
|
9957
10188
|
sha256,
|
|
9958
10189
|
sha256Hex,
|
|
9959
10190
|
sha512,
|
|
10191
|
+
snapErrorHint,
|
|
9960
10192
|
snapExternalId,
|
|
9961
10193
|
snapTimestamp,
|
|
9962
10194
|
snapUtcTimestamp,
|