এনপিএম এসডিকে — হোয়াটসঅ্যাপ-ডেটা-এসডিকে

হোয়াটসঅ্যাপ ডেটা এপিআই-এর অফিসিয়াল টাইপস্ক্রিপ্ট/জাভাস্ক্রিপ্ট ক্লায়েন্ট। টাইপড মেথড, কোনো রানটাইম নির্ভরতা নেই, ক্যাশ-ফার্স্ট লুকআপ এবং একটি পরিচ্ছন্ন এরর ট্যাক্সোনমি।

শূন্য নির্ভরতা
সম্পূর্ণ টাইপ করা
ইএসএম + সিজেএস
npmGitHub

ইনস্টল করুন

npm install whatsapp-data-sdk
# or
pnpm add whatsapp-data-sdk
# or
yarn add whatsapp-data-sdk

নেটিভ ফেচ ব্যবহার করে — Node 18+, Bun, Deno, এবং ব্রাউজারে কাজ করে। কোনো axios বা পলিফিলের প্রয়োজন নেই।

দ্রুত শুরু

import { WhatsAppDataClient } from 'whatsapp-data-sdk'

const client = new WhatsAppDataClient({
  apiKey: process.env.WA_API_KEY!, // sent as x-rapidapi-key
})

const profile = await client.getProfile('59898297150')
console.log(profile.exists, profile.about, profile.profilePic)

প্রমাণীকরণ ও পরিবহন

আপনার এপিআই কী সর্বদা x-rapidapi-key হেডারে পাঠানো হয়। ট্রান্সপোর্টের মাধ্যমে অনুরোধগুলো কোথায় যাবে তা বেছে নিন।

transportলাইভ হোস্টক্যাশে / শুধুমাত্র ডেটাবেস হোস্টনোট
'proxy' (ডিফল্ট)whatsapp-proxy.checkleaked.cc/number_cache একই হোস্টেসহজ — একটি মূল ইউআরএল, কোনো হোস্ট হেডার নেই।
'rapidapi'wp-data.p.rapidapi.comwp-data-db-only.p.rapidapi.comস্বয়ংক্রিয়ভাবে x-rapidapi-host সেট করে। আপনার RapidAPI কী ব্যবহার করুন।
// RapidAPI marketplace (live + DB-only hosts)
const client = new WhatsAppDataClient({
  apiKey: process.env.RAPIDAPI_KEY!,
  transport: 'rapidapi',
})

আপনি baseUrl, cacheBaseUrl, rapidApiHost, rapidApiCacheHost-এর মাধ্যমে যেকোনো URL/হোস্ট পরিবর্তন করতে পারেন।

ক্যাশ-ফার্স্ট লুকআপ (টাকা সাশ্রয় করে)

checkCached() প্রথমে সস্তা ক্যাশে / শুধুমাত্র-ডেটাবেস এন্ডপয়েন্টটি পড়ে এবং নম্বরটি তখনও ক্যাশে করা না থাকলে, কেবল তখনই একটি অর্থপ্রদত্ত লাইভ চেকে ফিরে যায়।

// cacheFirst (default): DB first → live only on a miss
const r1 = await client.checkCached('59898297150')
console.log(r1._source) // 'cache' | 'live'

// cacheOnly: never spend on a live check
const r2 = await client.checkCached('59898297150', { mode: 'cacheOnly' })

// live: always fresh
const r3 = await client.checkCached('59898297150', { mode: 'live' })

rapidapi ট্রান্সপোর্টে এই রাউটটি ক্যাশে রিডকে wp-data-db-only.p.rapidapi.com-এ এবং লাইভ ফলব্যাককে wp-data.p.rapidapi.com-এ পাঠায় — যা দুটি হোস্টের মাধ্যমে অর্থ সাশ্রয় করে।

এপিআই রেফারেন্স

প্রতিটি মেথড একটি মার্কেটপ্লেস এন্ডপয়েন্টের সাথে ১:১ ম্যাপ করা থাকে।

প্রোফাইল ও ছবি

await client.getProfile(number, options?)            // Get Profile Information
await client.getProfileNoPicture(number, options?)   // Get Profile Information (No profile pic)
await client.getLastPicture(number)                  // Get Last Saved Picture (JPEG bytes)
await client.getDeviceCount(number)                  // Device count
await client.getOsintInfo(number)                    // OSINT Info

getProfile অপশনগুলোর মধ্যে রয়েছে telegram, google, lookup, includeCarrier, base64, geminiFaceAnalysis, reverseImageSearch, fullAiReport, includeDeviceCount, onlyCheck, useCache, forceBypassCache, এবং আরও অনেক কিছু।

const pic = await client.getLastPicture('59898297150')
// pic.bytes: Uint8Array, pic.contentType: string
htmlImg.src = pic.toDataUri()

ফোন লঙ্ঘন

await client.getPhoneBreaches(number, { limit, offset }) // Get Phone Breaches (no external key)
await client.getPhoneBreachesExternal(number, apiKey)     // Get Phone Breaches (your checkleaked.cc key)

অনুসন্ধান ও ডেটাবেস

await client.search({ countryCode: 'UY', isBusiness: true, limit: 20 })   // Search
await client.searchGoogleMaps({ latitude: -34.9, longitude: -56.16, radius: 2000 }) // Search in Google Maps

// Bulk downloads return a Google Drive link to the full dataset (MEGA tier only)
const leaks = await client.getLeakedNumbersInfo()   // Leaked Numbers (500M database)
console.log(leaks.driveFolder.url)

const backup = await client.downloadEntireDatabase() // Download the Entire DB
console.log(backup.driveFolder.url)

বাল্ক চেক

await client.bulkCheck(numbers, { includeBusiness, noBanStatus }) // Bulk Check (live, max 50)
await client.bulkCheckDbBasic(numbers)                            // Basic Check (DB, max 1000)
await client.bulkCheckDbFull(numbers)                            // Full Check (DB, max 1000)

টেলিগ্রাম ও বাহক

// Telegram (experimental)
await client.getTelegramProfile('59898297150')            // single
await client.getTelegramProfile(['num1', 'num2'])         // batch

// Carrier
await client.carrierLookup(number)              // Carrier Lookup
await client.carrierLookupAlt(number)           // Carrier Lookup Alternative (spam-report signals)
await client.carrierLookupAlt(number, { page: 2 }) // page through the reports (response has a `pagination` block)

"খুঁজে পাওয়া যায়নি" সমাধান করা হয় — এটি কোনো ত্রুটি দেখায় না।

কোনো নম্বর হোয়াটসঅ্যাপে না থাকা একটি স্বাভাবিক ফলাফল, কোনো ত্রুটি নয়, তাই এগুলি সমাধান হয়ে যায় (কখনোই বাতিল হয় না):

getProfile / getProfileNoPicture / checkCached এমন একটি এন্ট্রি ফেরত দেয় যার exists:false (এবং code:'NUMBER_NOT_FOUND') থাকে।
শূন্য মিল সহ অনুসন্ধান একটি খালি পৃষ্ঠা ফেরত দেয় (সফলতা: মিথ্যা, data.docs:[])।
হোয়াটসঅ্যাপ নয় এমন নম্বরের জন্য getDeviceCount ব্যবহার করলে success:false রিটার্ন করে (যদি deviceCount অনুপস্থিত থাকে)।
const p = await client.getProfile('14155552671')
if (!p.exists) console.log('not on WhatsApp')

যেসব ত্রুটি দেখা দেয়: অবৈধ নম্বর (400), প্রমাণীকরণ ব্যর্থতা (401/403), রেট লিমিট (429), টাইমআউট, নেটওয়ার্ক ব্যর্থতা, এবং 5xx।

ত্রুটি

সমস্ত রিজেকশনই WhatsAppDataError-এর একটি সাবক্লাস, তাই একটিমাত্র ক্যাচ ব্লকই সবকিছু সামলে নেয়।

শ্রেণীযখন
ValidationErrorত্রুটিপূর্ণ আর্গুমেন্ট (যেকোনো অনুরোধের আগে, একযোগে নিক্ষেপ করা হয়; কোনো .status নেই)।
AuthError৪০১ / ৪০৩ — কী অনুপস্থিত, অবৈধ, বা আনসাবস্ক্রাইব করা হয়েছে।
RateLimitError429 — যখন সার্ভার Retry-After পাঠায়, তখন এটি retryAfterMs বহন করে।
HttpError2xx ছাড়া অন্য যেকোনো নম্বর (যেমন 400, 5xx); এর সাথে .status এবং .body যুক্ত থাকে।
TimeoutErrorঅনুরোধটি নির্ধারিত সময়সীমা (টাইমআউট) অতিক্রম করেছে।
NetworkErrorপরিবহন ব্যর্থতা (ডিএনএস, সংযোগ রিসেট, মাঝপথে বাতিল)।
WhatsAppDataErrorউপরোক্ত সবগুলোর জন্য ভিত্তি ক্লাস।
import { AuthError, RateLimitError, TimeoutError, WhatsAppDataError } from 'whatsapp-data-sdk'

try {
  await client.getProfile('59898297150')
} catch (err) {
  if (err instanceof AuthError) {/* 401/403 — bad/unsubscribed key */}
  else if (err instanceof RateLimitError) {/* 429 — err.retryAfterMs */}
  else if (err instanceof TimeoutError) {/* request timed out */}
  else if (err instanceof WhatsAppDataError) {
    console.error(err.status, err.body)
  }
}

কনফিগারেশন

new WhatsAppDataClient({
  apiKey: '...',           // required
  transport: 'proxy',      // 'proxy' | 'rapidapi'
  timeoutMs: 60000,        // request timeout (bounds headers AND body read)
  retries: 2,              // retry 5xx / 429 / network / timeout (GET only) with backoff
  retryDelayMs: 500,       // exponential base; 429 honors Retry-After when longer
  baseUrl: '...',          // override live base URL
  cacheBaseUrl: '...',     // override cache/DB-only base URL
  rapidApiHost: '...',     // override live x-rapidapi-host
  rapidApiCacheHost: '...',// override cache x-rapidapi-host
  userAgent: '...',        // custom User-Agent
  fetch: globalThis.fetch, // inject a custom fetch (tests / polyfills)
})

ফোন নম্বর ফরম্যাট

যেকোনো ফরম্যাটে সংখ্যা দিন — SDK সেগুলোকে নর্মালাইজ করে এবং হেল্পারগুলো এক্সপোর্ট করে, যাতে আপনি একই নর্মালাইজেশন পুনরায় ব্যবহার করতে পারেন:

import { toDigits, toE164 } from 'whatsapp-data-sdk'
toDigits('+598 98 297 150') // '59898297150'  (path & live endpoints)
toE164('59898297150')       // '+59898297150' (bulk-DB endpoints; their validator requires it)
// both throw ValidationError on input with no digits

প্রতি-অনুরোধ বিকল্প

প্রতিটি মেথড একটি ট্রেলিং অপশনস অবজেক্ট গ্রহণ করে, যা সিগন্যাল, টাইমআউটএমএস এবং রিট্রাইসও গ্রহণ করে — প্রতি-কল বাতিলকরণ এবং টিউনিংয়ের জন্য:

const controller = new AbortController()
const p = client.getProfile('59898297150', {
  telegram: true,
  signal: controller.signal, // cancel this specific request
  timeoutMs: 5000,           // override the client timeout for this call
})
controller.abort() // rejects with WhatsAppDataError

সম্পর্কিত

আমাদের ব্যবহারকারীরা যা বলেন

আমাদের সন্তুষ্ট গ্রাহকদের কাছ থেকে আসল পর্যালোচনা

4.5/5 (179 পর্যালোচনা)