fix(http): add malformed JSON syntax error handling middleware and update dist
CI / Build & Quality Check (push) Has been cancelled
CI / Build & Quality Check (push) Has been cancelled
This commit is contained in:
Vendored
+113
-21
@@ -1,38 +1,130 @@
|
||||
export class FraudRiskEngine {
|
||||
static evaluateRisk(phoneNumber) {
|
||||
/**
|
||||
* 100% Real Live Courier Fraud & Delivery Risk Evaluation
|
||||
* Connects to Steadfast Nationwide Logistics Database (covers millions of BD consignments)
|
||||
*/
|
||||
static async evaluateRisk(phoneNumber, steadfastAdapter) {
|
||||
const cleanPhone = phoneNumber.replace(/[^0-9]/g, "");
|
||||
// Valid BD Phone format check (11 digits starting with 013, 014, 015, 016, 017, 018, 019)
|
||||
// Valid BD Mobile format check (11 digits starting with 013, 014, 015, 016, 017, 018, 019)
|
||||
const isValidBDOperator = /^01[3-9]\d{8}$/.test(cleanPhone);
|
||||
if (!isValidBDOperator) {
|
||||
return {
|
||||
phone: phoneNumber,
|
||||
risk_level: "CRITICAL",
|
||||
delivery_success_rate: "0%",
|
||||
total_parcels: 0,
|
||||
total_delivered: 0,
|
||||
total_cancelled: 0,
|
||||
cancellation_rate: "100%",
|
||||
is_verified_buyer: false,
|
||||
recommendation: "Invalid or suspicious BD phone number format. Do NOT ship parcel without manual verification.",
|
||||
neural_verified: false,
|
||||
recommendation: "ভুল বা অকার্যকর বাংলাদেশি মোবাইল নম্বর। ম্যানুয়াল ভেরিফিকেশন ছাড়া পার্সেল বুক করবেন না।",
|
||||
carrier_source: "operator_prefix_validator",
|
||||
carrier_verified: false,
|
||||
};
|
||||
}
|
||||
// Heuristics for repeated digits / test numbers (e.g. 01711111111, 01800000000)
|
||||
const isRepeatedNumber = /^01[3-9](\d)\1{7}$/.test(cleanPhone);
|
||||
if (isRepeatedNumber) {
|
||||
return {
|
||||
phone: cleanPhone,
|
||||
risk_level: "HIGH",
|
||||
delivery_success_rate: "15%",
|
||||
is_verified_buyer: false,
|
||||
recommendation: "Suspicious patterned phone number detected. Ask for full advance payment before booking.",
|
||||
neural_verified: true,
|
||||
};
|
||||
// Check if live Steadfast adapter is available & configured
|
||||
if (steadfastAdapter && steadfastAdapter.isConfigured()) {
|
||||
try {
|
||||
const liveData = await steadfastAdapter.fraudCheck(cleanPhone);
|
||||
// Steadfast returns status: 200, and parcel count fields
|
||||
const total = Number(liveData?.total_parcels ?? liveData?.data?.total_parcels ?? 0);
|
||||
const delivered = Number(liveData?.total_delivered ?? liveData?.data?.total_delivered ?? 0);
|
||||
const cancelled = Number(liveData?.total_cancelled ?? liveData?.data?.total_cancelled ?? 0);
|
||||
if (total === 0) {
|
||||
return {
|
||||
phone: cleanPhone,
|
||||
risk_level: "NEW_BUYER",
|
||||
delivery_success_rate: "N/A (নতুন ক্রেতা)",
|
||||
total_parcels: 0,
|
||||
total_delivered: 0,
|
||||
total_cancelled: 0,
|
||||
cancellation_rate: "0%",
|
||||
is_verified_buyer: true,
|
||||
recommendation: "সারা দেশের কুরিয়ার ডেটাবেজে কোনো রেকর্ড নেই (নতুন ক্রেতা)। ফোনে ঠিকানা ও অর্ডার কনফার্ম করে ক্যাশ অন ডেলিভারিতে পাঠানো যেতে পারে।",
|
||||
carrier_source: "steadfast_nationwide_api",
|
||||
carrier_verified: true,
|
||||
};
|
||||
}
|
||||
const successRatio = (delivered / total) * 100;
|
||||
const cancelRatio = (cancelled / total) * 100;
|
||||
const successRateStr = `${successRatio.toFixed(1)}%`;
|
||||
const cancelRateStr = `${cancelRatio.toFixed(1)}%`;
|
||||
if (successRatio >= 85) {
|
||||
return {
|
||||
phone: cleanPhone,
|
||||
risk_level: "LOW",
|
||||
delivery_success_rate: successRateStr,
|
||||
total_parcels: total,
|
||||
total_delivered: delivered,
|
||||
total_cancelled: cancelled,
|
||||
cancellation_rate: cancelRateStr,
|
||||
is_verified_buyer: true,
|
||||
recommendation: `কাস্টমার অত্যন্ত নির্ভরযোগ্য (সফল ডেলিভারি: ${delivered}/${total}টি, সাকসেস রেট: ${successRateStr})। ১০০% নির্দ্বিধায় ক্যাশ অন ডেলিভারি (COD) পাঠান।`,
|
||||
carrier_source: "steadfast_nationwide_api",
|
||||
carrier_verified: true,
|
||||
};
|
||||
}
|
||||
else if (successRatio >= 60) {
|
||||
return {
|
||||
phone: cleanPhone,
|
||||
risk_level: "MODERATE",
|
||||
delivery_success_rate: successRateStr,
|
||||
total_parcels: total,
|
||||
total_delivered: delivered,
|
||||
total_cancelled: cancelled,
|
||||
cancellation_rate: cancelRateStr,
|
||||
is_verified_buyer: true,
|
||||
recommendation: `মাঝারি ঝুঁকি (সফল: ${delivered}টি, ক্যানসেল: ${cancelled}টি, ক্যানসেলেশন রেট: ${cancelRateStr})। পার্সেল পাঠানোর আগে কাস্টমারকে ফোন দিয়ে অর্ডার কনফার্ম করুন।`,
|
||||
carrier_source: "steadfast_nationwide_api",
|
||||
carrier_verified: true,
|
||||
};
|
||||
}
|
||||
else {
|
||||
return {
|
||||
phone: cleanPhone,
|
||||
risk_level: "HIGH",
|
||||
delivery_success_rate: successRateStr,
|
||||
total_parcels: total,
|
||||
total_delivered: delivered,
|
||||
total_cancelled: cancelled,
|
||||
cancellation_rate: cancelRateStr,
|
||||
is_verified_buyer: false,
|
||||
recommendation: `উচ্চ ঝুঁকির ক্রেতা! পূর্ববর্তী অর্ডারের ${cancelRateStr} ক্যানসেল/রিটার্ন করেছেন (${cancelled}টি ক্যানসেল)। পার্সেল পাঠানোর আগে ডেলিভারি চার্জ (১৫০৳) অগ্রিম নেওয়ার সুপারিশ করা হচ্ছে।`,
|
||||
carrier_source: "steadfast_nationwide_api",
|
||||
carrier_verified: true,
|
||||
};
|
||||
}
|
||||
}
|
||||
catch (apiErr) {
|
||||
// Transparent error reporting — no fake numbers fabricated
|
||||
return {
|
||||
phone: cleanPhone,
|
||||
risk_level: "MODERATE",
|
||||
delivery_success_rate: "অজানা (API ত্রুটি)",
|
||||
total_parcels: 0,
|
||||
total_delivered: 0,
|
||||
total_cancelled: 0,
|
||||
cancellation_rate: "অজানা",
|
||||
is_verified_buyer: false,
|
||||
recommendation: `সঠিক বাংলাদেশি নম্বর। Steadfast লাইভ ডেটাবেজ চেক করার সময় ত্রুটি ঘটেছে (${apiErr.message})। ফোন করে নিশ্চিত করুন।`,
|
||||
carrier_source: "steadfast_api_error_fallback",
|
||||
carrier_verified: false,
|
||||
};
|
||||
}
|
||||
}
|
||||
// Normal genuine BD number
|
||||
// Honest fallback when no merchant API key is plugged in
|
||||
return {
|
||||
phone: cleanPhone,
|
||||
risk_level: "LOW",
|
||||
delivery_success_rate: "96.4%",
|
||||
is_verified_buyer: true,
|
||||
recommendation: "Genuine Bangladeshi customer. Safe for Cash on Delivery (COD) dispatch.",
|
||||
neural_verified: true,
|
||||
risk_level: "MODERATE",
|
||||
delivery_success_rate: "অজানা (ক্রেডেনশিয়াল প্রয়োজন)",
|
||||
total_parcels: 0,
|
||||
total_delivered: 0,
|
||||
total_cancelled: 0,
|
||||
cancellation_rate: "অজানা",
|
||||
is_verified_buyer: false,
|
||||
recommendation: "সঠিক বাংলাদেশি মোবাইল নম্বর। লাইভ কুরিয়ার হিস্ট্রি ও ফ্রড রেট চেক করতে Steadfast API Key কনফিগার করুন।",
|
||||
carrier_source: "bd_operator_validator_unverified",
|
||||
carrier_verified: false,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user