AWS Lambda में Node.js SDK का उपयोग करें
Node.js 22 या बाद का संस्करण इस्तेमाल करें और आधिकारिक SDK को अपने हैंडलर के साथ बंडल करें। SDK की समय-सीमा Lambda के बचे हुए एक्ज़ीक्यूशन समय से कम रखें, ताकि फ़ंक्शन के पास टास्क और त्रुटि ID लौटाने का समय हो।
इस पेज पर
SDK पैकेज करें और लक्ष्य कॉन्फ़िगर करें
- 1.
डिपेंडेंसी इंस्टॉल करें
एक साफ़ बिल्ड डायरेक्टरी में npm पैकेज इनिशियलाइज़ करें।
https://solvethree.com/downloads/solvethree-sdk-0.1.0.tgzपर उपलब्ध आधिकारिक टारबॉल इंस्टॉल करने के लिए npm इस्तेमाल करें। यह@solvethree/sdkइम्पोर्ट उपलब्ध कराता है; यह न मानें कि npm रजिस्ट्री में कोई रिलीज़ है। - 2.
वर्कस्पेस और लक्ष्य कॉन्फ़िगर करें
SOLVETHREE_API_KEY,CAPTCHA_SITEऔरSOLVETHREE_PROXYनाम के निजी Lambda एनवायरनमेंट वेरिएबल सेट करें। वर्कस्पेस API कुंजी, पूरे URL के बजाय लक्षित होस्टनेम और इस टास्क की प्रॉक्सी इस्तेमाल करें। वर्कस्पेस में उस साइट की सक्रिय प्रोफ़ाइल पहले से होनी चाहिए; साइट प्रोफ़ाइल सेटअप देखें। - 3.
हैंडलर सहेजें और पैकेज करें
नीचे दिया गया उदाहरण
index.mjsके रूप में सहेजें। एक ZIP बनाएँ जिसमेंindex.mjs, पैकेज मेटाडेटा और इंस्टॉल की गईnode_modulesडायरेक्टरी आर्काइव के रूट में हों—किसी बाहरी प्रोजेक्ट डायरेक्टरी के अंदर नहीं। ZIP में क्रेडेंशियल न रखें। - 4.
अपनी मौजूदा Lambda प्रक्रिया से डिप्लॉय करें
Node.js 22 रनटाइम इस्तेमाल करें और हैंडलर को
index.handlerपर सेट करें। लॉजिकल जॉब के लिए स्थिरrequestIdदेते हुए इसे अपने अधिकृत बैकएंड या IAM फ़्लो से इनवोक करें। लौटाया गया समाधान डेटा निजी रखें।
उदाहरण में login ऐक्शन इस्तेमाल होता है; डिप्लॉय करने से पहले इसे उस ऐक्शन से बदलें जिसकी आपका लक्ष्य अपेक्षा करता है। यह एक proxy भेजता है और डिफ़ॉल्ट enterprise-v3 अनुरोध प्रकार इस्तेमाल करता है। reCAPTCHA के type या url फ़ील्ड न जोड़ें।
SDK की प्रतीक्षा को इनवोकेशन के उपलब्ध समय तक सीमित रखें
import { Solvethree, SolvethreeError, TaskFailedError, ApiError } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
export const handler = async (event, context) => {
const timeoutMs = Math.min(180000, context.getRemainingTimeInMillis() - 1500);
if (timeoutMs < 1000) throw new Error('Not enough execution time to start a task');
// The caller supplies one stable ID for this logical job; Lambda retries must
// reuse it. awsRequestId changes with invocations and is not that logical ID.
if (!event.requestId) throw new Error('Provide a stable requestId');
try {
return await client.solve({
site: process.env.CAPTCHA_SITE, action: 'login', proxy: process.env.SOLVETHREE_PROXY,
requestId: event.requestId,
}, { timeoutMs, signal: AbortSignal.timeout(timeoutMs) });
} catch (error) {
if (error instanceof TaskFailedError) return { status: 'failed', id: error.taskId, errorCode: error.errorCode };
if (error instanceof ApiError) return { apiError: error.status, requestId: error.requestId };
if (error instanceof SolvethreeError) return { interrupted: true, requestId: error.requestId, taskId: error.taskId };
throw error;
}
};
// Invoke through your authorized backend/IAM flow. The return value is private
// solution data; do not attach this handler to an unauthenticated public URL.हैंडलर Lambda का बचा हुआ एक्ज़ीक्यूशन समय पढ़ता है, 1,500 मिलीसेकंड आरक्षित रखता है और SDK की प्रतीक्षा को अधिकतम 180,000 मिलीसेकंड तक सीमित करता है। यह सीमा इस उदाहरण की है; यह Lambda की सार्वभौमिक एक्ज़ीक्यूशन सीमा नहीं है। आरक्षित समय निकालने के बाद एक सेकंड से कम बचने पर हैंडलर शुरू होने से मना कर देता है।
SDK टाइमआउट और अबॉर्ट सिग्नल दोनों गणना की गई समय-सीमा इस्तेमाल करते हैं। solve टास्क एक बार बनाता है और उसके तैयार होने या त्रुटि आने तक पोलिंग करता है। आरक्षित समय त्रुटि हैंडलिंग को रिकवरी जानकारी लौटाने का समय देता है, लेकिन Lambda को ज़बरन समाप्त करने पर फिर भी कोई प्रतिक्रिया न मिलना संभव है।
कॉलर को इनवोकेशन के रीट्राई के दौरान event.requestId बनाए रखना होगा। 1–64 ASCII अक्षर, अंक, अंडरस्कोर या हाइफ़न इस्तेमाल करें। awsRequestId इस्तेमाल न करें: यह इनवोकेशन की पहचान करता है, लॉजिकल समाधान अनुरोध की नहीं।
बिना जाँच के हल करने का दूसरा प्रयास शुरू किए बिना विफलताएँ संभालें
| परिणाम | क्या करें |
|---|---|
ready स्थिति वाला टास्क | उसका समाधान इस्तेमाल करें। सिर्फ़ टास्क बनना या सफल HTTP प्रतिक्रिया मिलना पर्याप्त नहीं है। |
status: failed | id और errorCode रिकॉर्ड करें। त्रुटि संदेश चाहिए तो टास्क प्राप्त करें, लेकिन उस विफल टास्क की पोलिंग बंद करें। |
apiError | HTTP स्थिति और लौटाई गई अनुरोध ID रिकॉर्ड करें। यह API अनुरोध की त्रुटि है, टास्क की अंतिम विफलता नहीं; बिना बदले इनपुट दोबारा आज़माने से पहले कारण जाँचें। |
interrupted: true | रिकवरी के लिए लौटाए गए किसी भी taskId और requestId को कॉलर की मूल लॉजिकल अनुरोध ID के साथ संभालकर रखें। |
वैलिडेशन त्रुटियाँ और अप्रत्याशित त्रुटियाँ दोबारा थ्रो की जाती हैं। हैंडलर हर एक्सेप्शन को बाधित होने की प्रतिक्रिया में नहीं बदलता।
- 1.
टास्क ID उपलब्ध हो तो उससे रिकवर करें
getTaskसे मौजूदा टास्क प्राप्त करें।pendingऔरsolvingका मतलब है कि यह अभी चल रहा है; केवलreadyमें इस्तेमाल करने योग्य समाधान होता है। आगे की प्रतीक्षा को नए इनवोकेशन के बचे हुए समय के भीतर रखें। - 2.
अन्यथा लॉजिकल अनुरोध ID से रिकवर करें
कॉलर के मूल
requestIdके साथ वही टास्क अनुरोध दोबारा भेजें। इनपुट समान होने पर मौजूदा टास्क लौटता है; अलग इनपुट होने पर टकराव होता है। रिकवरी के दौरान साइट, ऐक्शन और प्रॉक्सी को अपरिवर्तित रखें, कॉन्फ़िगरेशन बदलने पर भी।
कनेक्शन टाइमआउट से यह साबित नहीं होता कि टास्क बनाना विफल रहा। नया तार्किक अनुरोध ID देने से पहले मौजूदा टास्क रिकवर करें। संबंधित व्यवहार के नियमों के लिए टास्क पोलिंग और API त्रुटि प्रबंधन देखें।
उसी प्रॉक्सी और लौटाई गई ब्राउज़र पहचान के साथ सबमिट करें
SDK समाधान डेटा लौटाता है; उसे लक्ष्य पर लागू नहीं करता। जब आपका एप्लिकेशन उसे सबमिट करे, तो कॉन्फ़िगर की गई प्रॉक्सी और लौटाए गए userAgent तथा secChUa का उपयोग करें। उनकी जगह कोई असंबंधित ब्राउज़र पहचान या लक्ष्य URL न रखें। टास्क तैयार होने का अर्थ है कि समाधान जनरेट हुआ है—यह नहीं कि लक्ष्य ने बाद का अनुरोध स्वीकार कर लिया।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।