mirror of https://github.com/BTCPrivate/z-nomp.git
checkpoint
This commit is contained in:
parent
9213b6bf96
commit
384a10d825
|
@ -0,0 +1,204 @@
|
|||
var request = require('request');
|
||||
var nonce = require('nonce');
|
||||
|
||||
module.exports = function() {
|
||||
'use strict';
|
||||
|
||||
// Module dependencies
|
||||
|
||||
// Constants
|
||||
var version = '0.1.0',
|
||||
PUBLIC_API_URL = 'http://pubapi.cryptsy.com/api.php',
|
||||
PRIVATE_API_URL = 'https://api.cryptsy.com/api',
|
||||
USER_AGENT = 'nomp/node-open-mining-portal'
|
||||
|
||||
// Constructor
|
||||
function Cryptsy(key, secret){
|
||||
// Generate headers signed by this user's key and secret.
|
||||
// The secret is encapsulated and never exposed
|
||||
this._getPrivateHeaders = function(parameters){
|
||||
var paramString, signature;
|
||||
|
||||
if (!key || !secret){
|
||||
throw 'Cryptsy: Error. API key and secret required';
|
||||
}
|
||||
|
||||
// Sort parameters alphabetically and convert to `arg1=foo&arg2=bar`
|
||||
paramString = Object.keys(parameters).sort().map(function(param){
|
||||
return encodeURIComponent(param) + '=' + encodeURIComponent(parameters[param]);
|
||||
}).join('&');
|
||||
|
||||
signature = crypto.createHmac('sha512', secret).update(paramString).digest('hex');
|
||||
|
||||
return {
|
||||
Key: key,
|
||||
Sign: signature
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
// If a site uses non-trusted SSL certificates, set this value to false
|
||||
Cryptsy.STRICT_SSL = true;
|
||||
|
||||
// Helper methods
|
||||
function joinCurrencies(currencyA, currencyB){
|
||||
return currencyA + '_' + currencyB;
|
||||
}
|
||||
|
||||
// Prototype
|
||||
Cryptsy.prototype = {
|
||||
constructor: Cryptsy,
|
||||
|
||||
// Make an API request
|
||||
_request: function(options, callback){
|
||||
if (!('headers' in options)){
|
||||
options.headers = {};
|
||||
}
|
||||
|
||||
options.headers['User-Agent'] = USER_AGENT;
|
||||
options.json = true;
|
||||
options.strictSSL = Cryptsy.STRICT_SSL;
|
||||
|
||||
request(options, function(err, response, body) {
|
||||
callback(err, body);
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Make a public API request
|
||||
_public: function(parameters, callback){
|
||||
var options = {
|
||||
method: 'GET',
|
||||
url: PUBLIC_API_URL,
|
||||
qs: parameters
|
||||
};
|
||||
|
||||
return this._request(options, callback);
|
||||
},
|
||||
|
||||
// Make a private API request
|
||||
_private: function(parameters, callback){
|
||||
var options;
|
||||
|
||||
parameters.nonce = nonce();
|
||||
options = {
|
||||
method: 'POST',
|
||||
url: PRIVATE_API_URL,
|
||||
form: parameters,
|
||||
headers: this._getPrivateHeaders(parameters)
|
||||
};
|
||||
|
||||
return this._request(options, callback);
|
||||
},
|
||||
|
||||
|
||||
/////
|
||||
|
||||
|
||||
// PUBLIC METHODS
|
||||
|
||||
getTicker: function(callback){
|
||||
var parameters = {
|
||||
method: 'marketdatav2'
|
||||
};
|
||||
|
||||
return this._public(parameters, callback);
|
||||
},
|
||||
|
||||
getOrderBook: function(currencyA, currencyB, callback){
|
||||
var parameters = {
|
||||
command: 'returnOrderBook',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB)
|
||||
};
|
||||
|
||||
return this._public(parameters, callback);
|
||||
},
|
||||
|
||||
getTradeHistory: function(currencyA, currencyB, callback){
|
||||
var parameters = {
|
||||
command: 'returnTradeHistory',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB)
|
||||
};
|
||||
|
||||
return this._public(parameters, callback);
|
||||
},
|
||||
|
||||
|
||||
/////
|
||||
|
||||
|
||||
// PRIVATE METHODS
|
||||
|
||||
myBalances: function(callback){
|
||||
var parameters = {
|
||||
command: 'returnBalances'
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
myOpenOrders: function(currencyA, currencyB, callback){
|
||||
var parameters = {
|
||||
command: 'returnOpenOrders',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB)
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
myTradeHistory: function(currencyA, currencyB, callback){
|
||||
var parameters = {
|
||||
command: 'returnTradeHistory',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB)
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
buy: function(currencyA, currencyB, rate, amount, callback){
|
||||
var parameters = {
|
||||
command: 'buy',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB),
|
||||
rate: rate,
|
||||
amount: amount
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
sell: function(currencyA, currencyB, rate, amount, callback){
|
||||
var parameters = {
|
||||
command: 'sell',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB),
|
||||
rate: rate,
|
||||
amount: amount
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
cancelOrder: function(currencyA, currencyB, orderNumber, callback){
|
||||
var parameters = {
|
||||
command: 'cancelOrder',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB),
|
||||
orderNumber: orderNumber
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
withdraw: function(currency, amount, address, callback){
|
||||
var parameters = {
|
||||
command: 'withdraw',
|
||||
currency: currency,
|
||||
amount: amount,
|
||||
address: address
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
}
|
||||
};
|
||||
|
||||
return Cryptsy;
|
||||
}();
|
|
@ -0,0 +1,204 @@
|
|||
var request = require('request');
|
||||
var nonce = require('nonce');
|
||||
|
||||
module.exports = function() {
|
||||
'use strict';
|
||||
|
||||
// Module dependencies
|
||||
|
||||
// Constants
|
||||
var version = '0.1.0',
|
||||
PUBLIC_API_URL = 'http://pubapi.cryptsy.com/api.php',
|
||||
PRIVATE_API_URL = 'https://api.cryptsy.com/api',
|
||||
USER_AGENT = 'nomp/node-open-mining-portal'
|
||||
|
||||
// Constructor
|
||||
function Cryptsy(key, secret){
|
||||
// Generate headers signed by this user's key and secret.
|
||||
// The secret is encapsulated and never exposed
|
||||
this._getPrivateHeaders = function(parameters){
|
||||
var paramString, signature;
|
||||
|
||||
if (!key || !secret){
|
||||
throw 'Cryptsy: Error. API key and secret required';
|
||||
}
|
||||
|
||||
// Sort parameters alphabetically and convert to `arg1=foo&arg2=bar`
|
||||
paramString = Object.keys(parameters).sort().map(function(param){
|
||||
return encodeURIComponent(param) + '=' + encodeURIComponent(parameters[param]);
|
||||
}).join('&');
|
||||
|
||||
signature = crypto.createHmac('sha512', secret).update(paramString).digest('hex');
|
||||
|
||||
return {
|
||||
Key: key,
|
||||
Sign: signature
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
// If a site uses non-trusted SSL certificates, set this value to false
|
||||
Cryptsy.STRICT_SSL = true;
|
||||
|
||||
// Helper methods
|
||||
function joinCurrencies(currencyA, currencyB){
|
||||
return currencyA + '_' + currencyB;
|
||||
}
|
||||
|
||||
// Prototype
|
||||
Cryptsy.prototype = {
|
||||
constructor: Cryptsy,
|
||||
|
||||
// Make an API request
|
||||
_request: function(options, callback){
|
||||
if (!('headers' in options)){
|
||||
options.headers = {};
|
||||
}
|
||||
|
||||
options.headers['User-Agent'] = USER_AGENT;
|
||||
options.json = true;
|
||||
options.strictSSL = Cryptsy.STRICT_SSL;
|
||||
|
||||
request(options, function(err, response, body) {
|
||||
callback(err, body);
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Make a public API request
|
||||
_public: function(parameters, callback){
|
||||
var options = {
|
||||
method: 'GET',
|
||||
url: PUBLIC_API_URL,
|
||||
qs: parameters
|
||||
};
|
||||
|
||||
return this._request(options, callback);
|
||||
},
|
||||
|
||||
// Make a private API request
|
||||
_private: function(parameters, callback){
|
||||
var options;
|
||||
|
||||
parameters.nonce = nonce();
|
||||
options = {
|
||||
method: 'POST',
|
||||
url: PRIVATE_API_URL,
|
||||
form: parameters,
|
||||
headers: this._getPrivateHeaders(parameters)
|
||||
};
|
||||
|
||||
return this._request(options, callback);
|
||||
},
|
||||
|
||||
|
||||
/////
|
||||
|
||||
|
||||
// PUBLIC METHODS
|
||||
|
||||
getTicker: function(callback){
|
||||
var parameters = {
|
||||
method: 'marketdatav2'
|
||||
};
|
||||
|
||||
return this._public(parameters, callback);
|
||||
},
|
||||
|
||||
getOrderBook: function(currencyA, currencyB, callback){
|
||||
var parameters = {
|
||||
command: 'returnOrderBook',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB)
|
||||
};
|
||||
|
||||
return this._public(parameters, callback);
|
||||
},
|
||||
|
||||
getTradeHistory: function(currencyA, currencyB, callback){
|
||||
var parameters = {
|
||||
command: 'returnTradeHistory',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB)
|
||||
};
|
||||
|
||||
return this._public(parameters, callback);
|
||||
},
|
||||
|
||||
|
||||
/////
|
||||
|
||||
|
||||
// PRIVATE METHODS
|
||||
|
||||
myBalances: function(callback){
|
||||
var parameters = {
|
||||
command: 'returnBalances'
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
myOpenOrders: function(currencyA, currencyB, callback){
|
||||
var parameters = {
|
||||
command: 'returnOpenOrders',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB)
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
myTradeHistory: function(currencyA, currencyB, callback){
|
||||
var parameters = {
|
||||
command: 'returnTradeHistory',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB)
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
buy: function(currencyA, currencyB, rate, amount, callback){
|
||||
var parameters = {
|
||||
command: 'buy',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB),
|
||||
rate: rate,
|
||||
amount: amount
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
sell: function(currencyA, currencyB, rate, amount, callback){
|
||||
var parameters = {
|
||||
command: 'sell',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB),
|
||||
rate: rate,
|
||||
amount: amount
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
cancelOrder: function(currencyA, currencyB, orderNumber, callback){
|
||||
var parameters = {
|
||||
command: 'cancelOrder',
|
||||
currencyPair: joinCurrencies(currencyA, currencyB),
|
||||
orderNumber: orderNumber
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
},
|
||||
|
||||
withdraw: function(currency, amount, address, callback){
|
||||
var parameters = {
|
||||
command: 'withdraw',
|
||||
currency: currency,
|
||||
amount: amount,
|
||||
address: address
|
||||
};
|
||||
|
||||
return this._private(parameters, callback);
|
||||
}
|
||||
};
|
||||
|
||||
return Cryptsy;
|
||||
}();
|
Loading…
Reference in New Issue