npm SDK — whatsapp-data-sdk

WhatsApp Data API အတွက် တရားဝင် TypeScript/JavaScript client။ Typed methods၊ zero runtime dependencies၊ cache-first lookups နှင့် clean error taxonomy။

မှီခိုမှု သုည
အပြည့်အစုံ ရိုက်ထည့်ထားသည်
ESM + CJS
npmGitHub

တပ်ဆင်ပါ

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

native fetch ကိုအသုံးပြုသည် — Node 18+၊ Bun၊ Deno နှင့် browser များတွင်အလုပ်လုပ်သည်။ axios၊ polyfills များမလိုအပ်ပါ။

အမြန်စတင်ခြင်း

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)

အထောက်အထားစိစစ်ခြင်းနှင့် သယ်ယူပို့ဆောင်ခြင်း

သင့် API key ကို x-rapidapi-key header တွင် အမြဲပို့ပါသည်။ transport နှင့်အတူ request များ မည်သည့်နေရာသို့ ရောက်သွားသည်ကို ရွေးချယ်ပါ။

transportတိုက်ရိုက်တင်ဆက်သူကက်ရှ် / DB-သာ hostမှတ်စုများ
'proxy' (မူရင်း)whatsapp-proxy.checkleaked.cc/number_cache တူညီတဲ့ host မှာရိုးရှင်းသော — အခြေခံ URL တစ်ခု၊ host header မရှိပါ။
'rapidapi'wp-data.p.rapidapi.comwp-data-db-only.p.rapidapi.comx-rapidapi-host ကို အလိုအလျောက် သတ်မှတ်ပါ။ သင့် RapidAPI key ကို အသုံးပြုပါ။
// RapidAPI marketplace (live + DB-only hosts)
const client = new WhatsAppDataClient({
  apiKey: process.env.RAPIDAPI_KEY!,
  transport: 'rapidapi',
})

baseUrl, cacheBaseUrl, rapidApiHost, rapidApiCacheHost မှတစ်ဆင့် မည်သည့် URL/host ကိုမဆို override လုပ်နိုင်သည်။

ကက်ရှ်ကို ဦးစွာရှာဖွေခြင်း (ငွေစုပါ)

checkCached() သည် cheap cache / DB-only endpoint ကို ဦးစွာဖတ်ပြီး နံပါတ်ကို cache မလုပ်ရသေးသည့်အခါတွင်သာ paid live check သို့ ပြန်လည်ရောက်ရှိသည်။

// 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 transport မှာ ဒါက cache read ကို wp-data-db-only.p.rapidapi.com ကို ပို့ပေးပြီး live fallback ကို wp-data.p.rapidapi.com — two-host money saving flow — ကို ပို့ပေးပါတယ်။

API ကိုးကားချက်

နည်းလမ်းတိုင်းသည် marketplace endpoint သို့ 1:1 ချိတ်ဆက်သည်။

ပရိုဖိုင်နှင့် ပုံများ

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)

"မတွေ့ပါ" သည် ဖြေရှင်းပေးသည် — ၎င်းသည် မပစ်ပါ

WhatsApp မှာမရှိတဲ့ နံပါတ်တစ်ခုဟာ အမှားမဟုတ်ဘဲ ပုံမှန်ရလဒ်ဖြစ်တာကြောင့် ဒါတွေက ဖြေရှင်းပေးပါတယ် (သူတို့ဘယ်တော့မှ ငြင်းပယ်မှာမဟုတ်ဘူး)။

getProfile /getProfileNoPicture /checkCached သည် exists:false (နှင့် code:'NUMBER_NOT_FOUND') ဖြင့် entry တစ်ခုကို ပြန်ပေးသည်။
ကိုက်ညီမှု သုညရှိသော ရှာဖွေမှုသည် ဗလာစာမျက်နှာတစ်ခုကို ပြန်ပေးသည် (success:false, data.docs:[])။
WhatsApp မဟုတ်သော နံပါတ်အတွက် getDeviceCount သည် success:false ကို ပြန်ပေးသည် (deviceCount မပါဝင်ပါ)။
const p = await client.getProfile('14155552671')
if (!p.exists) console.log('not on WhatsApp')

ဘာတွေပစ်ချသလဲ- မမှန်ကန်တဲ့ နံပါတ် (400)၊ auth failure (401/403)၊ rate limit (429)၊ timeout၊ network failure နဲ့ 5xx။

အမှားများ

ငြင်းပယ်မှုအားလုံးသည် WhatsAppDataError ၏ subclass တစ်ခုဖြစ်သောကြောင့် catch တစ်ခုတည်းဖြင့် အရာအားလုံးကို ကိုင်တွယ်သည်။

အတန်းဘယ်တော့လဲ
ValidationErrorမမှန်ကန်သော argument များ (request တစ်ခုခုမတိုင်မီ တစ်ပြိုင်နက်တည်း ပစ်ချခြင်း၊ .status မရှိခြင်း)။
AuthError၄၀၁ / ၄၀၃ — သော့ ပျောက်ဆုံးနေခြင်း၊ မမှန်ကန်ခြင်း သို့မဟုတ် စာရင်းသွင်းမှု ရပ်ဆိုင်းထားခြင်း။
RateLimitError၄၂၉ — ဆာဗာမှ Retry-After ပေးပို့သည့်အခါ retryAfterMs ကို သယ်ဆောင်သည်။
HttpError2xx မဟုတ်သော အခြားမည်သည့်နံပါတ်မဆို (ဥပမာ 400၊ 5xx) တွင် .status နှင့် .body ပါရှိသည်။
TimeoutErrorတောင်းဆိုမှုသည် timeout ကျော်လွန်သွားပါပြီ။
NetworkErrorသယ်ယူပို့ဆောင်ရေး မအောင်မြင်မှု (DNS၊ ချိတ်ဆက်မှု ပြန်လည်သတ်မှတ်ခြင်း၊ ခန္ဓာကိုယ်အလယ်ပိုင်း ပျက်သွားခြင်း)။
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)
})

ဖုန်းနံပါတ်ပုံစံများ

မည်သည့်ပုံစံဖြင့်မဆို Pass နံပါတ်များကို အသုံးပြုနိုင်သည် — SDK သည် ၎င်းတို့ကို normalization လုပ်ပြီးနောက် helper များကို export လုပ်သောကြောင့် သင်သည် တူညီသော normalization ကို ပြန်လည်အသုံးပြုနိုင်သည်။

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

တောင်းဆိုမှုတစ်ခုချင်းစီအတွက် ရွေးချယ်စရာများ

method တိုင်းသည် trailing options object တစ်ခုကိုယူသည် ၎င်းသည် signal၊ timeoutMs နှင့် retries တို့ကိုလည်းလက်ခံသည် — per-call cancellation နှင့် tuning အတွက်-

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 (176 သုံးသပ်ချက်များ)