capsolver-npm
Advanced tools
Comparing version 1.0.5 to 1.0.6
@@ -0,0 +0,0 @@ module.exports = { |
{ | ||
"name": "capsolver-npm", | ||
"version": "1.0.5", | ||
"version": "1.0.6", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "src/CapSolver.js", |
170
README.md
# 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 = [ |
102750
33
1083