एनपीएम एसडीके — व्हाट्सएप-डेटा-एसडीके
WhatsApp डेटा API के लिए आधिकारिक TypeScript/JavaScript क्लाइंट। टाइप किए गए मेथड, शून्य रनटाइम निर्भरता, कैश-फर्स्ट लुकअप और एक स्पष्ट त्रुटि वर्गीकरण।
स्थापित करना
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)प्रमाणीकरण एवं परिवहन
आपकी API कुंजी हमेशा x-rapidapi-key हेडर में भेजी जाती है। ट्रांसपोर्ट के साथ चुनें कि अनुरोध कहाँ भेजे जाएँगे।
| transport | लाइव होस्ट | कैश / डेटाबेस-ओनली होस्ट | नोट्स |
|---|---|---|---|
'proxy' (गलती करना) | whatsapp-proxy.checkleaked.cc | /number_cache एक ही होस्ट पर | सरल - एक बेस यूआरएल, कोई होस्ट हेडर नहीं। |
'rapidapi' | wp-data.p.rapidapi.com | wp-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 विकल्पों में टेलीग्राम, गूगल, लुकअप, 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)"नहीं मिला" का समाधान हो जाता है — इससे कोई त्रुटि नहीं आती।
किसी नंबर का व्हाट्सएप पर न होना एक सामान्य परिणाम है, त्रुटि नहीं, इसलिए ये समस्याएं हल हो जाती हैं (वे कभी अस्वीकार नहीं होतीं):
const p = await client.getProfile('14155552671')
if (!p.exists) console.log('not on WhatsApp')यह क्या त्रुटि उत्पन्न करता है: एक अमान्य संख्या (400), प्रमाणीकरण विफलता (401/403), दर सीमा (429), टाइमआउट, नेटवर्क विफलता और 5xx।
त्रुटियाँ
सभी अस्वीकरण WhatsAppDataError का एक उपवर्ग हैं, इसलिए एक ही कैच कोड सब कुछ संभाल लेता है।
| कक्षा | कब |
|---|---|
ValidationError | गलत तर्क (किसी भी अनुरोध से पहले, समकालिक रूप से फेंके गए; कोई .status नहीं)। |
AuthError | 401 / 403 — कुंजी गुम, अमान्य या अनसब्सक्राइब की गई है। |
RateLimitError | 429 — सर्वर द्वारा Retry-After भेजे जाने पर retryAfterMs ले जाता है। |
HttpError | कोई अन्य गैर-2xx (जैसे 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संबंधित
हमारे उपयोगकर्ता क्या कहते हैं
हमारे संतुष्ट ग्राहकों की वास्तविक समीक्षाएं