bestcaptchasolver
Version:
bestcaptchasolve-nodejs is a super easy to use bypass captcha nodeJS API wrapper for bestcaptchasolver.com captcha service
267 lines (244 loc) • 7.5 kB
JavaScript
const fs = require('fs');
const Q = require('q');
const R = require('requestify');
const BASE_URL = 'https://bcsapi.xyz/api';
// function to encode file data to base64 encoded string
function base64_encode(file) {
// read binary data
var bitmap = fs.readFileSync(file);
// convert binary data to base64 encoded string
return new Buffer(bitmap).toString('base64');
}
/**
* End utils
*/
// private variables
var _access_token = undefined, _username = undefined, _password = undefined;
/**
* Set access token
* @param access_token
*/
exports.set_access_token = function (access_token) {
_access_token = access_token;
};
/**
* Get account balance
* @returns {Promise<any>}
*/
exports.account_balance = function () {
var deferred = Q.defer();
var data = {}, url = undefined;
url = BASE_URL + '/user/balance?access_token=' + _access_token;
R.get(url).then(function (resp) {
return deferred.resolve(resp.getBody().balance);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Submit image captcha
* @param opts
* @returns {*|Promise<any>|PromiseLike<any>}
*/
exports.submit_captcha = function (opts) {
var deferred = Q.defer();
opts.access_token = _access_token;
const url = BASE_URL + '/captcha/image';
// check if we got a path instead of b64
if (fs.existsSync(opts.b64image)) opts.b64image = base64_encode(opts.b64image);
R.post(url, opts).then(function (resp) {
return deferred.resolve(resp.getBody().id);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Submit reCAPTCHA
* @param data
* @returns {Promise<any>}
*/
exports.submit_recaptcha = function (data) {
var deferred = Q.defer();
data.access_token = _access_token;
var url = BASE_URL + '/captcha/recaptcha';
R.post(url, data).then(function (resp) {
return deferred.resolve(resp.getBody().id);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Submit GeeTest
* @param data
* @returns {Promise<any>}
*/
exports.submit_geetest = function (data) {
var deferred = Q.defer();
data.access_token = _access_token;
var url = BASE_URL + '/captcha/geetest';
R.post(url, data).then(function (resp) {
return deferred.resolve(resp.getBody().id);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Submit GeeTestV4
* @param data
* @returns {Promise<any>}
*/
exports.submit_geetest_v4 = function (data) {
var deferred = Q.defer();
data.access_token = _access_token;
var url = BASE_URL + '/captcha/geetestv4';
R.post(url, data).then(function (resp) {
return deferred.resolve(resp.getBody().id);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Submit Capy
* @param data
* @returns {Promise<any>}
*/
exports.submit_capy = function (data) {
var deferred = Q.defer();
data.access_token = _access_token;
var url = BASE_URL + '/captcha/capy';
R.post(url, data).then(function (resp) {
return deferred.resolve(resp.getBody().id);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Submit hCaptcha
* @param data
* @returns {Promise<any>}
*/
exports.submit_hcaptcha = function (data) {
var deferred = Q.defer();
data.access_token = _access_token;
var url = BASE_URL + '/captcha/hcaptcha';
R.post(url, data).then(function (resp) {
return deferred.resolve(resp.getBody().id);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Submit FunCaptcha
* @param data
* @returns {Promise<any>}
*/
exports.submit_funcaptcha = function (data) {
var deferred = Q.defer();
data.access_token = _access_token;
var url = BASE_URL + '/captcha/funcaptcha';
R.post(url, data).then(function (resp) {
return deferred.resolve(resp.getBody().id);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Submit turnstile
* @param data
* @returns {*}
*/
exports.submit_turnstile = function (data) {
var deferred = Q.defer();
data.access_token = _access_token;
var url = BASE_URL + '/captcha/turnstile';
R.post(url, data).then(function (resp) {
return deferred.resolve(resp.getBody().id);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Submit task
* @param data
* @returns {Promise<any>}
*/
exports.submit_task = function (data) {
var deferred = Q.defer();
data.access_token = _access_token;
var url = BASE_URL + '/captcha/task';
R.post(url, data).then(function (resp) {
return deferred.resolve(resp.getBody().id);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Push variables for task
* @param id
* @param pushVariables
* @returns {Promise<any>}
*/
exports.task_push_variables = function (id, pushVariables) {
var deferred = Q.defer();
const data = {
access_token: _access_token,
pushVariables
}
var url = `${BASE_URL}/captcha/task/pushVariables/${id}`;
R.post(url, data).then(function (resp) {
return deferred.resolve(resp.getBody()['status']);
}).catch(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};
/**
* Retrieve captcha text or gresponse by ID
* @param id
* @returns {Promise<any>}
*/
exports.retrieve_captcha = function (id) {
var deferred = Q.defer();
var url = BASE_URL + '/captcha/' + id + '?access_token=' + _access_token;
// check progress method
function check_progress() {
R.get(url).then(function (resp) {
resp = resp.getBody();
// still pending ?
if (resp.status === 'pending') return setTimeout(check_progress, 3000); // recheck in 3000 millis
return deferred.resolve(resp);
}).fail(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
}
check_progress(); // run it
return deferred.promise;
};
/**
* Set captcha bad
* @param id
* @returns {Promise<any>}
*/
exports.set_captcha_bad = function (id) {
var deferred = Q.defer();
var data = {access_token: _access_token};
var url = BASE_URL + '/captcha/bad/' + id;
// check progress method
R.post(url, data).then(function (resp) {
resp = resp.getBody();
return deferred.resolve(resp);
}).fail(function (err) {
return deferred.reject(new Error(err.getBody().error));
});
return deferred.promise;
};