betfair
Version:
Betfair JSON API
161 lines (137 loc) • 4.96 kB
JavaScript
;
// This module contains functions shared by multiple tests
var util = require('util');
var fs = require('fs');
var betfair = require('../index.js');
var _ = require('lodash');
// session to use for all the invocations, should be set by test
var settings = {};
_.delay(function () {}, 1000 * 1000);
//process.on('uncaughtException', (err) => {
// console.log(`Caught exception: ${err}`);
//});
process.on('beforeExit', function (err) {
console.log('Bye');
});
function initialize() {
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
// environment
settings.appKey = process.env['BF_APP_KEY'] || "key";
settings.login = process.env['BF_LOGIN'] || "nobody";
settings.password = process.env['BF_PASSWORD'] || "password";
settings.options = options;
// SSL key/certificate
var key = fs.existsSync("client-2048.key") && fs.readFileSync("client-2048.key");
var cert = fs.existsSync("client-2048.crt") && fs.readFileSync("client-2048.crt");
if (key && cert) {
settings.isBotLogin = true;
settings.sslOptions = { key: key, cert: cert };
}
// create session
if (options.emulator) {
options.emulatorLogFile = 'log_emulator.txt';
options.emulatorLogLevel = 'debug';
}
settings.session = new betfair.BetfairSession(settings.appKey, options);
var logger = new betfair.Logger('calls', 'INFO');
logger.addFileLog('log_invocations.txt');
settings.session.startInvocationLog(logger);
return settings.session;
}
function exit(code) {
_.delay(function () {
return process.exit(code);
}, 100);
}
// login to Betfair
function login(cb) {
cb = cb || function () {};
console.log('===== Logging in to Betfair (' + (settings.isBotLogin ? 'bot' : 'interactive') + ') =====');
var session = settings.session;
session.setSslOptions(settings.sslOptions);
session.login(settings.login, settings.password, function (err, res) {
if (err) {
console.log('Login error', err);
cb(err);
return;
}
console.log('Login OK, %s secs', res.duration / 1000, res);
cb(null);
});
}
// logout from Betfair
function logout(cb) {
cb = cb || function () {};
console.log('===== Logging out... =====');
var session = settings.session;
session.logout(function (err, res) {
if (err) {
console.log('Logout error', err);
cb(err);
return;
}
console.log('Logout OK, %s secs', res.duration / 1000, res);
cb(null);
});
}
// keepAlive
function keepAlive(cb) {
cb = cb || function () {};
console.log('===== Sending keepAlive ... =====');
var session = settings.session;
session.keepAlive(function (err, res) {
if (err) {
console.log('KeepAlive error', err);
cb(err);
return;
}
console.log('keepAlive OK, %s secs', res.duration / 1000, res);
cb(null);
});
}
// list market catalogue
function listMarketCatalogue(cb) {
// Tennis, MATCH ODDS
console.log('===== calling listMarketCatalogue... =====');
var session = settings.session;
var filter = { eventTypeIds: [2], marketTypeCodes: ['MATCH_ODDS'] };
var what = ['EVENT', 'EVENT_TYPE', 'COMPETITION', 'MARKET_START_TIME', 'RUNNER_DESCRIPTION'];
session.listMarketCatalogue({
filter: filter,
marketProjection: what,
maxResults: 1000
}, function (err, res) {
console.log("listMarketCatalogue err=%s duration=%s", err, res.duration / 1000);
//console.log(util.inspect(res.response, {depth:10}));
console.log("There are %d markets", res.response.result.length);
//console.log("Request:%s\n", JSON.stringify(res.request, null, 2))
//console.log("Response:%s\n", JSON.stringify(res.response, null, 2));
settings.markets = res.response.result;
cb(err);
});
}
// select the most far market from the markets array
function selectMarket(cb) {
console.log('===== select the market... =====');
var session = settings.session;
if (settings.markets.length < 1) {
throw new Error('No markets to test');
}
settings.selectedMarket = settings.markets[settings.markets.length - 1];
console.log('Selected Market marketId="%s", name="%s"', settings.selectedMarket.marketId, settings.selectedMarket.event.name);
if (settings.options.emulator) {
console.log('Enable emulator for marketId="%s"', settings.selectedMarket.marketId);
settings.session.enableEmulationForMarket(settings.selectedMarket.marketId);
}
cb(null);
}
module.exports = {
settings: settings,
initialize: initialize,
exit: exit,
login: login,
keepAlive: keepAlive,
logout: logout,
listMarketCatalogue: listMarketCatalogue,
selectMarket: selectMarket
};