Socket
Socket
Sign inDemoInstall

capsolver-npm

Package Overview
Dependencies
8
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.5 to 1.0.6

examples/run-any-task/example.js

0

examples/pm2/ecosystem.config.js

@@ -0,0 +0,0 @@ module.exports = {

2

package.json
{
"name": "capsolver-npm",
"version": "1.0.5",
"version": "1.0.6",
"description": "",

@@ -5,0 +5,0 @@ "main": "src/CapSolver.js",

# capsolver.com api wrapper🧠
- **Manage to solve captcha challenges with AI in a NodeJS app (captcha service based).**

@@ -6,5 +7,6 @@ - ❗ An API key it's **required**. [**Get here.**](https://dashboard.capsolver.com/passport/register?inviteCode=CHhA_5os)

*🔥 [HCaptchaTurboTask (highest pass/valid rate).](https://github.com/0qwertyy/capsolver-npm/blob/master/examples/hcaptcha_turbo.js) 🔥 AntiCloudflare.*
*🔥 [HCaptchaTurboTask (highest pass/valid rate).](https://github.com/0qwertyy/capsolver-npm/blob/master/examples/hcaptcha_turbo.js)
🔥 AntiCloudflare.*
[![](https://img.shields.io/badge/1.0.5-capsolver--npm-darkgreen?logo=npm&logoColor=white)](https://www.npmjs.com/package/capsolver-npm)
[![](https://img.shields.io/badge/1.0.6-capsolver--npm-darkgreen?logo=npm&logoColor=white)](https://www.npmjs.com/package/capsolver-npm)
[![](https://img.shields.io/badge/documentation-docs.capsolver.com-darkgreen)](https://docs.capsolver.com/guide/getting-started.html)

@@ -14,2 +16,3 @@

-
npm i capsolver-npm

@@ -23,3 +26,3 @@

```javascript
const CapSolver = require("capsolver-npm");
const CapSolver = require('capsolver-npm')
```

@@ -29,10 +32,8 @@ 2. Define tasks handler (singleton).

```javascript
const handler = new CapSolver(apikey); // captcha task handler
const handler = new CapSolver(apikey) // captcha task handler
```
**❗ 2 version for handle captcha tasks results are the followind:**
**1️⃣ task methods** (handle task results in one step)
**1️⃣ task-binded methods** (handle results in one step)

@@ -42,43 +43,49 @@ *example: check capsolver.com balance + run for one hcaptcha token (`.hcaptchaproxyless()`):*

```javascript
const CapSolver = require("capsolver-npm");
const handler = new CapSolver("CAI-XXXX ...", 1); // verbose level 1
let b = await handler.balance();
if(b > 0){ // usd balance
await handler.hcaptchaproxyless("https://websiteurl.com/", "000000-000000000-0000000")
const CapSolver = require('capsolver-npm')
const handler = new CapSolver('CAI-XXXX ...', 1) // verbose level 1
let b = await handler.balance()
if (b > 0) { // usd balance
await handler.hcaptchaproxyless('https://websiteurl.com/', '000000-000000000-0000000')
.then(async response => {
if(response.error === 0){ console.log(response.solution) }
else{ console.log("error " + JSON.stringify(response.apiResponse)) }
});
if (response.error === 0) {
console.log(response.solution)
} else {
console.log(`[myapp][task error: ${response.apiResponse.errorCode}]`)
}
})
}
```
**2️⃣ Run any task and build `taskData` schema for a task type.**
**2️⃣ build `taskData` schema for a task type and run any task.**
**Check task parameters at [official docs](https://docs.capsolver.com/guide/recognition/ImageToTextTask.html) in order to bind manually captcha tasks.**
**Check task parameters at [official docs](https://docs.capsolver.com/guide/recognition/ImageToTextTask.html) in order
to bind manually captcha tasks.**
*example: run for one hcaptcha token w/ custom proxy (.runAnyTask()):*
```javascript
const CapSolver = require("capsolver-npm");
const handler = new CapSolver("CAI-XXXX ...");
const taskData = // build a task
{
type : "HCaptchaTask",
websiteURL : "https://website.com/",
websiteKey : "000000-00000-000000-000000000",
const CapSolver = require('capsolver-npm')
const handler = new CapSolver('CAI-XXXX ...')
await handler.runAnyTask({
type: 'HCaptchaTask',
websiteURL: 'https://website.com/',
websiteKey: '000000-00000-000000-000000000',
proxyInfo: {
// string format also supported
// "proxy": "proxy.provider.io:23331:user1:password1",
"proxyType": "http",
"proxyAddress": "ip_address",
"proxyPort": 3221,
"proxyLogin": "username", // not required
"proxyPassword": "password" // not required
},
}
handler.runAnyTask(taskData)
// 'proxy': 'proxy.provider.io:23331:user1:password1',
'proxyType': 'http',
'proxyAddress': 'ip_address',
'proxyPort': 3221,
'proxyLogin': 'username', // not required
'proxyPassword': 'password' // not required
},
})
.then(async response => {
if(response.error === 0){ console.log(response.solution) }
else{ console.log("error " + JSON.stringify(response.apiResponse)) }
});
if (response.error === 0) {
console.log(response.solution)
} else {
console.log(`[myapp][task error: ${response.apiResponse.errorCode}]`)
}
})
```

@@ -91,22 +98,21 @@

| Parameter | Type | Description |
|:--------------| :------- |:-----------------------------------------------------------|
|:--------------|:---------|:-----------------------------------------------------------|
| `error` | `number` | [*-1*] Request/Solving **error**. [*0*] **Success** solve. |
| `statusText` | `string` | HTTP status string. |
| `apiResponse` | `object` | **Results/solution** (capsolver.com API response). |
| `apiResponse` | `object` | **Results/solution** (capsolver.com API response). |
| `solution` | `object` | **Solution got from success solve**. |
```javascript
// ✅ success response
{
error: 0,
statusText: "200 OK",
apiResponse: {
errorId: 0,
taskId: "4e6c33f5-bc14-44d0-979e-d5f37b072c59",
status: "ready",
solution: {
gRecaptchaResponse: "03AIIukzgCys9brSNnrVbwXE9mTesvkxQ-ocK ..."
{
error: 0,
statusText: '200 OK',
apiResponse: {
errorId: 0,
taskId: '4e6c33f5-bc14-44d0-979e-d5f37b072c59',
status: 'ready',
solution: {
gRecaptchaResponse: '03AIIukzgCys9brSNnrVbwXE9mTesvkxQ-ocK ...'
}
}
}
}

@@ -116,10 +122,10 @@ ```

```javascript
// ❌ Error response (invalid API key)
{
error: -1,
statusText: "400 Bad Request",
apiResponse: {
errorCode: "ERROR_INVALID_TASK_DATA",
errorDescription: "clientKey error",
// ❌ Error response (invalid API key example)
{
error: -1,
statusText: '400 Bad Request',
apiResponse: {
errorId: 1
errorCode: 'ERROR_INVALID_TASK_DATA',
errorDescription: 'clientKey error',
}

@@ -129,3 +135,2 @@ }

# 📖 Supported captcha tasks

@@ -135,27 +140,25 @@

|:-------------------------------------|:-------------------------------|
| `await handler.balance()` | get balance as float number |
| `await handler.balance()` | get balance as float number |
| `await handler.runAnyTask(taskData)` | not use a specific task method |
Custom proxy usage (proxyInfo schema):
For custom proxy usage in tasks build this schema:
```javascript
// version 1
// (proxyLogin & proxyPassword are optionals)
const proxyInfo = {
"proxyType": "http",
"proxyAddress": "ip_address",
"proxyPort": 3221,
"proxyLogin": "username",
"proxyPassword": "password"
}
'proxyType': 'http',
'proxyAddress': 'ip_address',
'proxyPort': 3221,
'proxyLogin': 'username',
'proxyPassword': 'password'
}
// version 2
const proxyInfo = {
proxy: "proxyType:proxyAddress:proxyPort:proxyLogin:proxyPassword"
proxy: 'proxyType:proxyAddress:proxyPort:proxyLogin:proxyPassword'
}
```
*(proxyLogin & proxyPassword are optionals)*
task-bind methods:
task-binded methods:
-

@@ -173,3 +176,2 @@

Parameter `queries`: base64 images array

@@ -189,12 +191,11 @@

```javascript
await handler.recaptchav2(websiteURL, websiteKey, proxyInfo, userAgent, isInvisible, recaptchaDataSValue, cookies)
await handler.recaptchav2proxyless(websiteURL, websiteKey, userAgent=null, isInvisible=null, recaptchaDataSValue=null, cookies=null)
await handler.recaptchav2enterprise(websiteURL, websiteKey, proxyInfo, userAgent=null, enterprisePayload=null, apiDomain=null, cookies=null)
await handler.recaptchav2enterpriseproxyless(websiteURL, websiteKey, userAgent=null, enterprisePayload=null, apiDomain=null, cookies=null)
await handler.recaptchav3(websiteURL, websiteKey, proxyInfo, pageAction, minScore=null)
await handler.recaptchav3proxyless(websiteURL, websiteKey, pageAction, minScore=null)
await handler.recaptchav3enterprise(websiteURL, websiteKey, proxyInfo, pageAction, minScore=null, enterprisePayload=null, apiDomain=null, userAgent=null, cookies=null)
await handler.recaptchav3enterpriseproxyless(websiteURL, websiteKey, pageAction, minScore=null, enterprisePayload=null, apiDomain=null, userAgent=null, cookies=null)
await handler.recaptchav2proxyless(websiteURL, websiteKey, userAgent = null, isInvisible = null, recaptchaDataSValue = null, cookies = null)
await handler.recaptchav2enterprise(websiteURL, websiteKey, proxyInfo, userAgent = null, enterprisePayload = null, apiDomain = null, cookies = null)
await handler.recaptchav2enterpriseproxyless(websiteURL, websiteKey, userAgent = null, enterprisePayload = null, apiDomain = null, cookies = null)
await handler.recaptchav3(websiteURL, websiteKey, proxyInfo, pageAction, minScore = null)
await handler.recaptchav3proxyless(websiteURL, websiteKey, pageAction, minScore = null)
await handler.recaptchav3enterprise(websiteURL, websiteKey, proxyInfo, pageAction, minScore = null, enterprisePayload = null, apiDomain = null, userAgent = null, cookies = null)
await handler.recaptchav3enterpriseproxyless(websiteURL, websiteKey, pageAction, minScore = null, enterprisePayload = null, apiDomain = null, userAgent = null, cookies = null)
```

@@ -204,3 +205,2 @@

```javascript

@@ -213,2 +213,3 @@ await handler.datadome(websiteURL, userAgent, captchaUrl, proxyInfo)

Parameter `image`: base64 screenshot image
```javascript

@@ -222,3 +223,4 @@ await handler.funcaptcha(websiteURL, websitePublicKey, proxyInfo, funcaptchaApiJSSubdomain, userAgent, data)

❗ Supports for Geetest V3 & Geetest V4: Manage through [GeetestTask documentation](https://docs.capsolver.com/guide/captcha/Geetest.html).
❗ Supports for Geetest V3 & Geetest V4: Manage
through [GeetestTask documentation](https://docs.capsolver.com/guide/captcha/Geetest.html).

@@ -237,3 +239,2 @@ ```javascript

⚙️ **ImageToText**

@@ -248,6 +249,5 @@

```javascript
// on CapSolver handler definition
const handler = new CapSolver(apikey, verbose);
const handler = new CapSolver(apikey, verbose)
```

@@ -254,0 +254,0 @@

@@ -1,3 +0,3 @@

const Tasker = require("./Tasker");
const axios = require("axios");
const Tasker = require('./Tasker')
const axios = require('axios')

@@ -8,9 +8,9 @@ /**

class CapSolver {
constructor(apikey, verbose=0, rqdelay=1700) { this.apikey = apikey; this.verbose = verbose; this.rqdelay = rqdelay; this.init(); }
constructor(apikey, verbose=0, rqdelay=1700) { this.apikey = apikey; this.verbose = verbose; this.rqdelay = rqdelay; this.init() }
/** * Set-up handler **/
init(){ if(this.verbose === 2){ console.log('[' + this.constructor.name + '][Verbose level '+this.verbose+' running at: '+this.apikey+']'); } }
init(){ if(this.verbose === 2){ console.log(`[${this.constructor.name}][Verbose level ${this.verbose} running at: ${this.apikey}]`) } }
/** * Return USD balance as float number **/
async balance(){ let handled = await this.getBalance(); return handled.apiResponse.balance ? parseFloat(handled.apiResponse.balance): handled; }
async balance(){ let handled = await this.getBalance(); return handled['apiResponse']['balance'] ? parseFloat(handled['apiResponse']['balance']): handled }

@@ -21,16 +21,16 @@ /**

async getBalance(){
let self = this;
let response = await axios({ method: 'post', url: 'https://api.capsolver.com/getBalance', headers: { }, data: { "clientKey": this.apikey } })
let self = this
let handled = await axios({ method: 'post', url: 'https://api.capsolver.com/getBalance', headers: { }, data: { 'clientKey': this.apikey } })
.then(function (response) {
if(self.verbose === 2){ console.log(response.data); }
if(response.data.errorId !== 0){ return { 'error':-1, 'statusText':response.status, 'apiResponse':response.data } }
if(self.verbose === 2){ console.log(response.data) }
if(response.data['errorId'] !== 0){ return { 'error':-1, 'statusText':response.status, 'apiResponse':response.data } }
return { 'error':0, 'statusText':response.status, 'apiResponse':response.data }
})
.catch(function (error) {
if(error.response === undefined){ return error; }
if(self.verbose === 2){ console.log(error); }
if(error.response === undefined){ return error }
if(self.verbose === 2){ console.log(error) }
return { 'error':-1, 'statusText':error.response.status, 'apiResponse':error.response.data }
});
if(this.verbose !== 0) { console.log('[' + this.constructor.name + '][getBalance][[' + response.statusText + '][' + parseFloat(response.apiResponse.balance) + ' USD]]'); }
return response;
})
if(this.verbose !== 0) { console.log(`[${this.constructor.name}][getBalance][${handled['statusText']}][${parseFloat(handled['apiResponse']['balance'])} USD]`) }
return handled
}

@@ -46,9 +46,9 @@

if(proxyInfo.hasOwnProperty('proxy')){ tasker.taskData.proxy = proxyInfo.proxy }else{
if(proxyInfo.proxyType !== null || true){ tasker.taskData.proxyType = proxyInfo.proxyType; }
tasker.taskData.proxyAddress = proxyInfo.proxyAddress;
tasker.taskData.proxyPort = proxyInfo.proxyPort;
if(proxyInfo.proxyLogin !== null || true){ tasker.taskData.proxyLogin = proxyInfo.proxyLogin; }
if(proxyInfo.proxyPassword !== null || true){ tasker.taskData.proxyPassword = proxyInfo.proxyPassword; }
if(proxyInfo.proxyType !== null || true){ tasker.taskData.proxyType = proxyInfo.proxyType }
tasker.taskData.proxyAddress = proxyInfo.proxyAddress
tasker.taskData.proxyPort = proxyInfo.proxyPort
if(proxyInfo.proxyLogin !== null || true){ tasker.taskData.proxyLogin = proxyInfo.proxyLogin }
if(proxyInfo.proxyPassword !== null || true){ tasker.taskData.proxyPassword = proxyInfo.proxyPassword }
}
return tasker;
return tasker
}

@@ -64,22 +64,22 @@

if(taskData.hasOwnProperty('type')){
let tasker = new Tasker(null, this.apikey, this.verbose, retrieve);
tasker.taskData = taskData;
if(taskData.hasOwnProperty('proxyInfo')){ this.attachProxy(tasker, taskData.proxyInfo); }
let tasked = await tasker.createTask();
if(tasked.error !== 0) return tasked;
return await tasker.getTaskResult(tasked.apiResponse.taskId, this.rqdelay);
let tasker = new Tasker(null, this.apikey, this.verbose, retrieve)
tasker.taskData = taskData
if(taskData.hasOwnProperty('proxyInfo')){ this.attachProxy(tasker, taskData.proxyInfo) }
let tasked = await tasker.createTask()
if(tasked.error !== 0) return tasked
return await tasker.getTaskResult(tasked['apiResponse']['taskId'], this.rqdelay)
}else{
throw TypeError('taskData has not type property.');
throw TypeError('taskData has not type property.')
}
}
/** Task methods **/
/** task-binded methods **/
/** mtcaptcha **/
async mtcaptcha(websiteURL, websiteKey, proxyInfo){
let tasker = new Tasker('MtCaptchaTask', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('MtCaptchaTask', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}

@@ -89,6 +89,6 @@

async mtcaptchaproxyless(websiteURL, websiteKey){
let tasker = new Tasker('MtCaptchaTaskProxyLess', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('MtCaptchaTaskProxyLess', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
return await tasker.execute(this.rqdelay)
}

@@ -98,6 +98,6 @@

async image2text(body){
let tasker = new Tasker('ImageToTextTask', this.apikey, this.verbose, false);
let tasker = new Tasker('ImageToTextTask', this.apikey, this.verbose, false)
// binding
tasker.taskData.body = body;
return await tasker.execute(this.rqdelay);
tasker.taskData.body = body
return await tasker.execute(this.rqdelay)
}

@@ -107,62 +107,62 @@

async hcaptcha(websiteURL, websiteKey, proxyInfo, userAgent=null, isInvisible=null, enterprisePayload=null){
let tasker = new Tasker('HCaptchaTask', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
if(userAgent!==null) { tasker.taskData.userAgent = userAgent; }
if(isInvisible!==null) { tasker.taskData.isInvisible = true; }
if(enterprisePayload!==null) { tasker.taskData.isEnterprise = true; tasker.taskData.enterprisePayload = enterprisePayload; }
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('HCaptchaTask', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(isInvisible!==null) { tasker.taskData.isInvisible = true }
if(enterprisePayload!==null) { tasker.taskData.isEnterprise = true; tasker.taskData.enterprisePayload = enterprisePayload }
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}
async hcaptchaproxyless(websiteURL, websiteKey, userAgent=null, isInvisible=null, enterprisePayload=null){
let tasker = new Tasker('HCaptchaTaskProxyLess', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
let tasker = new Tasker('HCaptchaTaskProxyLess', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(isInvisible!==null) { tasker.taskData.isInvisible = true }
if(enterprisePayload!==null) { tasker.taskData.isEnterprise = true; tasker.taskData.enterprisePayload = enterprisePayload }
return await tasker.execute(this.rqdelay);
return await tasker.execute(this.rqdelay)
}
async hcaptchaenterprise(websiteURL, websiteKey, proxyInfo, userAgent=null, isInvisible=null, enterprisePayload=null){
let tasker = new Tasker('HCaptchaEnterpriseTask', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
tasker.taskData.isEnterprise = true;
if(userAgent!==null) { tasker.taskData.userAgent = userAgent; }
if(isInvisible!==null) { tasker.taskData.isInvisible = true; }
if(enterprisePayload!==null) { tasker.taskData.isEnterprise = true; tasker.taskData.enterprisePayload = enterprisePayload; }
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('HCaptchaEnterpriseTask', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
tasker.taskData.isEnterprise = true
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(isInvisible!==null) { tasker.taskData.isInvisible = true }
if(enterprisePayload!==null) { tasker.taskData.isEnterprise = true; tasker.taskData.enterprisePayload = enterprisePayload }
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}
async hcaptchaturbo(websiteURL, websiteKey, proxyInfo, userAgent=null, isInvisible=null, enterprisePayload=null){
let tasker = new Tasker('HCaptchaTurboTask', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
tasker.taskData.isEnterprise = true;
if(userAgent!==null) { tasker.taskData.userAgent = userAgent; }
if(isInvisible!==null) { tasker.taskData.isInvisible = true; }
if(enterprisePayload!==null) { tasker.taskData.isEnterprise = true; tasker.taskData.enterprisePayload = enterprisePayload; }
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('HCaptchaTurboTask', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
tasker.taskData.isEnterprise = true
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(isInvisible!==null) { tasker.taskData.isInvisible = true }
if(enterprisePayload!==null) { tasker.taskData.isEnterprise = true; tasker.taskData.enterprisePayload = enterprisePayload }
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}
async hcaptchaenterpriseproxyless(websiteURL, websiteKey, userAgent=null, isInvisible=null, enterprisePayload=null){
let tasker = new Tasker('HCaptchaEnterpriseTaskProxyLess', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
tasker.taskData.isEnterprise = true;
let tasker = new Tasker('HCaptchaEnterpriseTaskProxyLess', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
tasker.taskData.isEnterprise = true
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(isInvisible!==null) { tasker.taskData.isInvisible = true }
if(enterprisePayload!==null) { tasker.taskData.isEnterprise = true; tasker.taskData.enterprisePayload = enterprisePayload }
return await tasker.execute(this.rqdelay);
return await tasker.execute(this.rqdelay)
}
async hcaptchaclassification(question, base64){
let tasker = new Tasker('HCaptchaClassification', this.apikey, this.verbose, false);
tasker.taskData.queries = base64;
tasker.taskData.question = question;
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('HCaptchaClassification', this.apikey, this.verbose, false)
tasker.taskData.queries = base64
tasker.taskData.question = question
return await tasker.execute(this.rqdelay)
}

@@ -172,5 +172,5 @@

async recaptchav2(websiteURL, websiteKey, proxyInfo, userAgent=null, isInvisible=null, recaptchaDataSValue=null, cookies=null){
let tasker = new Tasker('RecaptchaV2Task', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
let tasker = new Tasker('RecaptchaV2Task', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }

@@ -180,10 +180,10 @@ if(isInvisible!==null) { tasker.taskData.isInvisible = true }

if(cookies!==null) { tasker.taskData.cookies = cookies }
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}
async recaptchav2proxyless(websiteURL, websiteKey, userAgent=null, isInvisible=null, recaptchaDataSValue=null, cookies=null){
let tasker = new Tasker('RecaptchaV2TaskProxyless', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
let tasker = new Tasker('RecaptchaV2TaskProxyless', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }

@@ -193,3 +193,3 @@ if(isInvisible!==null) { tasker.taskData.isInvisible = true }

if(cookies!==null) { tasker.taskData.cookies = cookies }
return await tasker.execute(this.rqdelay);
return await tasker.execute(this.rqdelay)
}

@@ -199,67 +199,67 @@

let tasker = new Tasker('RecaptchaV2EnterpriseTask', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
if(enterprisePayload!==null) { tasker.taskData.isEnterprise = true; tasker.taskData.enterprisePayload = enterprisePayload }
if(apiDomain!==null) { tasker.taskData.apiDomain = apiDomain; }
if(userAgent!==null) { tasker.taskData.userAgent = userAgent; }
if(cookies!==null) { tasker.taskData.cookies = cookies; }
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
if(apiDomain!==null) { tasker.taskData.apiDomain = apiDomain }
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(cookies!==null) { tasker.taskData.cookies = cookies }
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}
async recaptchav2enterpriseproxyless(websiteURL, websiteKey, userAgent=null, enterprisePayload=null, apiDomain=null, cookies=null){
let tasker = new Tasker('RecaptchaV2EnterpriseTaskProxyless', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
let tasker = new Tasker('RecaptchaV2EnterpriseTaskProxyless', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
if(enterprisePayload!==null) { tasker.taskData.isEnterprise = true; tasker.taskData.enterprisePayload = enterprisePayload }
if(apiDomain!==null) { tasker.taskData.apiDomain = apiDomain; }
if(userAgent!==null) { tasker.taskData.userAgent = userAgent; }
if(cookies!==null) { tasker.taskData.cookies = cookies; }
return await tasker.execute(this.rqdelay);
if(apiDomain!==null) { tasker.taskData.apiDomain = apiDomain }
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(cookies!==null) { tasker.taskData.cookies = cookies }
return await tasker.execute(this.rqdelay)
}
async recaptchav3(websiteURL, websiteKey, proxyInfo, pageAction, minScore=null){
let tasker = new Tasker('RecaptchaV3Task', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
tasker.taskData.pageAction = pageAction;
if(minScore!==null) { tasker.taskData.minScore = minScore; }
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('RecaptchaV3Task', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
tasker.taskData.pageAction = pageAction
if(minScore!==null) { tasker.taskData.minScore = minScore }
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}
async recaptchav3proxyless(websiteURL, websiteKey, pageAction, minScore=null){
let tasker = new Tasker('RecaptchaV3TaskProxyless', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
tasker.taskData.pageAction = pageAction;
if(minScore!==null) { tasker.taskData.minScore = minScore; }
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('RecaptchaV3TaskProxyless', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
tasker.taskData.pageAction = pageAction
if(minScore!==null) { tasker.taskData.minScore = minScore }
return await tasker.execute(this.rqdelay)
}
async recaptchav3enterprise(websiteURL, websiteKey, proxyInfo, pageAction, minScore=null, enterprisePayload=null, apiDomain=null, userAgent=null, cookies=null){
let tasker = new Tasker('RecaptchaV3Task', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
tasker.taskData.pageAction = pageAction;
if(minScore!==null) { tasker.taskData.minScore = minScore; }
if(enterprisePayload!==null) { tasker.taskData.enterprisePayload = enterprisePayload; }
if(apiDomain!==null) { tasker.taskData.apiDomain = apiDomain; }
if(userAgent!==null) { tasker.taskData.userAgent = userAgent; }
if(cookies!==null) { tasker.taskData.cookies = cookies; }
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('RecaptchaV3Task', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
tasker.taskData.pageAction = pageAction
if(minScore!==null) { tasker.taskData.minScore = minScore }
if(enterprisePayload!==null) { tasker.taskData.enterprisePayload = enterprisePayload }
if(apiDomain!==null) { tasker.taskData.apiDomain = apiDomain }
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(cookies!==null) { tasker.taskData.cookies = cookies }
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}
async recaptchav3enterpriseproxyless(websiteURL, websiteKey, pageAction, minScore=null, enterprisePayload=null, apiDomain=null, userAgent=null, cookies=null){
let tasker = new Tasker('RecaptchaV3TaskProxyless', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
tasker.taskData.pageAction = pageAction;
if(minScore!==null) { tasker.taskData.minScore = minScore; }
if(enterprisePayload!==null) { tasker.taskData.enterprisePayload = enterprisePayload; }
if(apiDomain!==null) { tasker.taskData.apiDomain = apiDomain; }
if(userAgent!==null) { tasker.taskData.userAgent = userAgent; }
if(cookies!==null) { tasker.taskData.cookies = cookies; }
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('RecaptchaV3TaskProxyless', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
tasker.taskData.pageAction = pageAction
if(minScore!==null) { tasker.taskData.minScore = minScore }
if(enterprisePayload!==null) { tasker.taskData.enterprisePayload = enterprisePayload }
if(apiDomain!==null) { tasker.taskData.apiDomain = apiDomain }
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(cookies!==null) { tasker.taskData.cookies = cookies }
return await tasker.execute(this.rqdelay)
}

@@ -269,8 +269,8 @@

async datadome(websiteURL, userAgent, captchaUrl, proxyInfo){
let tasker = new Tasker('DataDomeSliderTask', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.captchaUrl = captchaUrl;
tasker.taskData.userAgent = userAgent;
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('DataDomeSliderTask', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.captchaUrl = captchaUrl
tasker.taskData.userAgent = userAgent
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}

@@ -280,27 +280,27 @@

async funcaptcha(websiteURL, websitePublicKey, proxyInfo, funcaptchaApiJSSubdomain, userAgent=null, data=null){
let tasker = new Tasker('FunCaptchaTask', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websitePublicKey = websitePublicKey;
tasker.taskData.funcaptchaApiJSSubdomain = funcaptchaApiJSSubdomain;
if(userAgent!==null) { tasker.taskData.userAgent = userAgent; }
if(data!==null) { tasker.taskData.data = data; }
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('FunCaptchaTask', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websitePublicKey = websitePublicKey
tasker.taskData.funcaptchaApiJSSubdomain = funcaptchaApiJSSubdomain
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(data!==null) { tasker.taskData.data = data }
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}
async funcaptchaproxyless(websiteURL, websitePublicKey, funcaptchaApiJSSubdomain, userAgent=null, data=null){
let tasker = new Tasker('FunCaptchaTaskProxyless', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websitePublicKey = websitePublicKey;
tasker.taskData.funcaptchaApiJSSubdomain = funcaptchaApiJSSubdomain;
if(userAgent!==null) { tasker.taskData.userAgent = userAgent; }
if(data!==null) { tasker.taskData.data = data; }
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('FunCaptchaTaskProxyless', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websitePublicKey = websitePublicKey
tasker.taskData.funcaptchaApiJSSubdomain = funcaptchaApiJSSubdomain
if(userAgent!==null) { tasker.taskData.userAgent = userAgent }
if(data!==null) { tasker.taskData.data = data }
return await tasker.execute(this.rqdelay)
}
async funcaptchaclassification(base64, question){
let tasker = new Tasker('FunCaptchaClassification', this.apikey, this.verbose, false);
tasker.taskData.image = base64;
tasker.taskData.question = question;
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('FunCaptchaClassification', this.apikey, this.verbose, false)
tasker.taskData.image = base64
tasker.taskData.question = question
return await tasker.execute(this.rqdelay)
}

@@ -310,20 +310,20 @@

async geetest(websiteURL, gt=null, challenge=null, proxyInfo, geetestApiServerSubdomain=null, captchaId=null){
let tasker = new Tasker('GeeTestTask', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
if(challenge!==null) { tasker.taskData.challenge = challenge; }
if(gt!==null) { tasker.taskData.gt = gt; }
if(geetestApiServerSubdomain!==null) { tasker.taskData.geetestApiServerSubdomain = geetestApiServerSubdomain; }
if(captchaId!==null) { tasker.taskData.captchaId = captchaId; }
this.attachProxy(tasker, proxyInfo);
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('GeeTestTask', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
if(challenge!==null) { tasker.taskData.challenge = challenge }
if(gt!==null) { tasker.taskData.gt = gt }
if(geetestApiServerSubdomain!==null) { tasker.taskData.geetestApiServerSubdomain = geetestApiServerSubdomain }
if(captchaId!==null) { tasker.taskData.captchaId = captchaId }
this.attachProxy(tasker, proxyInfo)
return await tasker.execute(this.rqdelay)
}
async geetestproxyless(websiteURL, gt=null, challenge=null, geetestApiServerSubdomain=null, captchaId=null){
let tasker = new Tasker('GeeTestTaskProxyless', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
if(challenge!==null) { tasker.taskData.challenge = challenge; }
if(gt!==null) { tasker.taskData.gt = gt; }
if(geetestApiServerSubdomain!==null) { tasker.taskData.geetestApiServerSubdomain = geetestApiServerSubdomain; }
if(captchaId!==null) { tasker.taskData.captchaId = captchaId; }
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('GeeTestTaskProxyless', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
if(challenge!==null) { tasker.taskData.challenge = challenge }
if(gt!==null) { tasker.taskData.gt = gt }
if(geetestApiServerSubdomain!==null) { tasker.taskData.geetestApiServerSubdomain = geetestApiServerSubdomain }
if(captchaId!==null) { tasker.taskData.captchaId = captchaId }
return await tasker.execute(this.rqdelay)
}

@@ -333,8 +333,8 @@

async antiturnstile(websiteURL, websiteKey, proxyInfo, metadata=null){
let tasker = new Tasker('AntiCloudflareTask', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
tasker.taskData.websiteKey = websiteKey;
this.attachProxy(tasker, proxyInfo);
if(metadata!==null) { tasker.taskData.metadata = metadata; }
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('AntiCloudflareTask', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
tasker.taskData.websiteKey = websiteKey
this.attachProxy(tasker, proxyInfo)
if(metadata!==null) { tasker.taskData.metadata = metadata }
return await tasker.execute(this.rqdelay)
}

@@ -344,8 +344,8 @@

async anticloudflare(websiteURL, proxyInfo, metadata=null, html=null){
let tasker = new Tasker('AntiCloudflareTask', this.apikey, this.verbose);
tasker.taskData.websiteURL = websiteURL;
this.attachProxy(tasker, proxyInfo);
if(metadata!==null) { tasker.taskData.metadata = metadata; }
if(html!==null) { tasker.taskData.html = html; }
return await tasker.execute(this.rqdelay);
let tasker = new Tasker('AntiCloudflareTask', this.apikey, this.verbose)
tasker.taskData.websiteURL = websiteURL
this.attachProxy(tasker, proxyInfo)
if(metadata!==null) { tasker.taskData.metadata = metadata }
if(html!==null) { tasker.taskData.html = html }
return await tasker.execute(this.rqdelay)
}

@@ -355,2 +355,2 @@

module.exports = CapSolver;
module.exports = CapSolver

@@ -1,12 +0,12 @@

const Validation = require('./Validation');
const sleep = ms => new Promise(r => setTimeout(r, ms));
const axios = require('axios');
const Validation = require('./Validation')
const sleep = ms => new Promise(r => setTimeout(r, ms))
const axios = require('axios')
class Tasker {
constructor(type, apiKey, verbose, retrieve=true) {
this.apikey = apiKey;
this.verbose = verbose;
this.retrieve = retrieve;
this.parameters = new Validation().parameters;
this.taskData = { 'type' : type };
this.apikey = apiKey
this.verbose = verbose
this.retrieve = retrieve
this.parameters = new Validation().parameters
this.taskData = { 'type' : type }
}

@@ -19,7 +19,7 @@

if(this.retrieve === true){
let tasked = await this.createTask();
if(tasked.error !== 0) return tasked;
return await this.getTaskResult(tasked.apiResponse.taskId, rqdelay);
let tasked = await this.createTask()
if(tasked.error !== 0) return tasked
return await this.getTaskResult(tasked['apiResponse']['taskId'], rqdelay)
}else{
return await this.createTask();
return await this.createTask()
}

@@ -32,20 +32,20 @@ }

async createTask(url=undefined) {
let self = this;
this.validate(this.taskData);
let req = { url: (url === undefined) ? 'https://api.capsolver.com/createTask' : url, headers: { }, method: 'post', data: { 'clientKey': this.apikey.toString(), 'appId': 'AF0F28E5-8245-49FD-A3FD-43D576C0E9B3', 'task': this.taskData } };
if(this.verbose === 2 ){ console.log(req); }
let self = this
this.validate(this.taskData)
let req = { url: (url === undefined) ? 'https://api.capsolver.com/createTask' : url, headers: { }, method: 'post', data: { 'clientKey': this.apikey.toString(), 'appId': 'AF0F28E5-8245-49FD-A3FD-43D576C0E9B3', 'task': this.taskData } }
if(this.verbose === 2 ){ console.log(req) }
let handled = await axios(req)
.then(async function (response) {
if(self.verbose === 2){ console.log(response.data); }
if(response.data.errorId !== 0){ return { 'error':-1, 'statusText':response.status, 'apiResponse':response.data } }
if(self.verbose === 2){ console.log(response.data) }
if(response.data['errorId'] !== 0){ return { 'error':-1, 'statusText':response.status, 'apiResponse':response.data } }
return { 'error':0, 'statusText':response.status, 'apiResponse':response.data, 'solution':response.data.solution }
})
.catch(function (error) {
if(error.response === undefined){ return error; }
if(self.verbose === 2){ console.log(error.response.data); }
if(error.response === undefined){ return error }
if(self.verbose === 2){ console.log(error.response.data) }
return { 'error':-1, 'statusText':error.response.status, 'apiResponse':error.response.data }
});
if(this.verbose === 1){ if(handled.error === 0){ console.log('[' + this.taskData.type + '][created task][' + handled.apiResponse.taskId + ']'); } else { console.log('[' + this.taskData.type + '][failed][' + handled.apiResponse.errorCode + ']'); } }
if(this.verbose === 2){ console.log(handled.apiResponse); }
return handled;
})
if(this.verbose === 1){ if(handled.error === 0){ console.log(`[${this.taskData.type}][created task][${handled['apiResponse']['taskId']}]`) } else { console.log(`[${this.taskData.type}][failed][${handled['apiResponse']}]`) } }
if(this.verbose === 2){ console.log(handled['apiResponse']) }
return handled
}

@@ -59,28 +59,28 @@

async getTaskResult(taskId, rqdelay){
let self = this; let status = ''; let fails = 0; let handled = null;
if(taskId === undefined) return;
let requestData = { 'clientKey':this.apikey, 'taskId': taskId };
let req = { method: 'post', url: 'https://api.capsolver.com/getTaskResult', headers: { }, data: requestData };
let self = this; let status = ''; let fails = 0; let handled = null
if(taskId === undefined) return
let requestData = { 'clientKey':this.apikey, 'taskId': taskId }
let req = { method: 'post', url: 'https://api.capsolver.com/getTaskResult', headers: { }, data: requestData }
while(status !== 'ready'){
await sleep(rqdelay);
if(fails > 10) break;
await sleep(rqdelay)
if(fails > 10) break
handled = await axios(req)
.then(async function (response) {
if(response.data.errorId !== 0){
status = response.data.errorDescription;
if(response.data['errorId'] !== 0){
status = JSON.stringify(response.data)
return { 'error':-1, 'statusText':response.status, 'apiResponse':response.data }
}
status = response.data.status;
status = response.data.status
return { 'error':0, 'statusText':response.status, 'apiResponse':response.data, 'solution':response.data.solution }
})
.catch(function (error) {
if(self.verbose === 2){ console.log(error.response.data); }
fails++;
if(self.verbose === 2){ console.log(error.response.data) }
fails++
return { 'error':-1, 'statusText':error.response.status, 'apiResponse':error.response.data }
});
if(this.verbose === 1){ console.log('['+taskId+'][status: '+status+']'); }
if(this.verbose === 2){ console.log(handled.apiResponse); }
if(handled.error !== 0) break;
})
if(this.verbose === 1){ console.log(`[${taskId}][status: ${status}]`) }
if(this.verbose === 2){ console.log(handled['apiResponse']) }
if(handled.error !== 0) break
}
return handled;
return handled
}

@@ -93,3 +93,3 @@

validate(taskData){
const parameters = Object.keys(this.parameters).reduce((c, k) => (c[k.toLowerCase()] = this.parameters[k], c), {});
const parameters = Object.keys(this.parameters).reduce((c, k) => (c[k.toLowerCase()] = this.parameters[k], c), {})
if(Object.keys(parameters).includes(taskData.type.toLowerCase())){ // ?is a existing captcha task

@@ -101,3 +101,3 @@ this.parameters[taskData.type].forEach(parameter => {

|| typeof taskData[parameter.name] !== parameter.type){
throw TypeError(parameter.name + ' must by of type ' + parameter.type + ' and not empty.');
throw TypeError(`${parameter.name} must by of type ${parameter.type} and not empty.`)
}

@@ -108,11 +108,11 @@ }else{

|| typeof taskData[parameter.name] !== parameter.type) {
throw TypeError(parameter.name+' must by of type '+parameter.type+' and not empty.');
throw TypeError(`${parameter.name} must by of type ${parameter.type} and not empty.`)
}
}
}
});
})
}else{
throw Error(taskData.type+' is not a valid captcha task type.');
throw Error(`${taskData.type} is not a valid captcha task type.`)
}
return true;
return true
}

@@ -122,2 +122,2 @@

module.exports = Tasker;
module.exports = Tasker

@@ -27,7 +27,7 @@ class Validation {

this.parameters.MtCaptchaTask = [
{ name:'websiteURL', required: true, type: 'string' }, { name:'websiteKey', required: true, type: 'string' },
{ name:'proxyType', required: false, type: 'string' }, { name:'proxyAddress', required: false, type: 'string' },
{ name:'proxyPort', required: false, type: 'number' }, { name:'proxyLogin', required: false, type: 'string' },
{ name:'proxy', required: false, type: 'string' }, { name:'proxyPassword', required: false, type: 'string' }
];
{ name:'websiteURL', required: true, type: 'string' }, { name:'websiteKey', required: true, type: 'string' },
{ name:'proxyType', required: false, type: 'string' }, { name:'proxyAddress', required: false, type: 'string' },
{ name:'proxyPort', required: false, type: 'number' }, { name:'proxyLogin', required: false, type: 'string' },
{ name:'proxy', required: false, type: 'string' }, { name:'proxyPassword', required: false, type: 'string' }
];

@@ -34,0 +34,0 @@ this.parameters.MtCaptchaTaskProxyLess = [

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc