Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 0 additions & 41 deletions api/app.js

This file was deleted.

99 changes: 0 additions & 99 deletions api/bin/www

This file was deleted.

8 changes: 8 additions & 0 deletions api/config/default.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
BitcoreHTTP:
port: 8080
logging: true
BitcoreNode:
NetworkMonitor:
network: livenet
host: localhost
port: 8333
8 changes: 8 additions & 0 deletions api/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'use strict';

var config = require('config');
var BitcoreHTTP = require('./lib/http');

var http = BitcoreHTTP.create(config.get('BitcoreHTTP'));
http.start();

104 changes: 104 additions & 0 deletions api/lib/http.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
'use strict';

var http = require('http');
var cors = require('cors');
var express = require('express');
var compress = require('compression');
var bodyParser = require('body-parser');
var morgan = require('morgan');

var bitcore = require('bitcore');
var $ = bitcore.util.preconditions;
var BitcoreNode = require('../../lib/node');

var routes = require('../routes');


function BitcoreHTTP(node, opts) {
$.checkArgument(node);
opts = opts || {};
this.node = node;
this.port = opts.port || 8000;
this.logging = opts.logging || false;
this.setupExpress();
}

BitcoreHTTP.create = function(opts) {
opts = opts || {};
var node = BitcoreNode.create(opts.BitcoreNode);
return new BitcoreHTTP(node, opts);
};


BitcoreHTTP.prototype.setupExpress = function() {
var app = express();

// parse POST data
app.use(cors());
app.use(compress());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
if (this.logging) {
app.use(morgan('dev'));
}

// install routes
app.use('/', routes(this.node));

// catch 404 and forward to error handler
app.use(function(req, res) {
res.status(404).send('Not Found');
});

app.set('port', this.port);

var server = http.createServer(app);
server.on('error', this.onError.bind(this));
server.on('listening', this.onListening.bind(this));

this.app = app;
this.server = server;
};

/**
* Event listener for HTTP server "error" event.
*/
BitcoreHTTP.prototype.onError = function(error) {
if (error.syscall !== 'listen') {
throw error;
}

var bind = typeof port === 'string' ? 'Pipe ' + this.port : 'Port ' + this.port;

// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
};

/**
* Event listener for HTTP server "listening" event.
*/
BitcoreHTTP.prototype.onListening = function() {
var addr = this.server.address();
var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
console.log('Listening on ' + bind);
};


BitcoreHTTP.prototype.start = function() {
this.server.listen(this.port);
};

module.exports = BitcoreHTTP;
11 changes: 6 additions & 5 deletions api/routes/index.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
'use strict';


var express = require('express');
var router = express.Router();

function initRouter(backend) {
var v1 = require('./v1')(backend);
var v2 = require('./v2')(backend);
function initRouter(node) {
var v1 = require('./v1')(node);
var v2 = require('./v2')(node);

router.use('/v1', v1);
router.use('/v2', v2);

router.get('/', function(req, res, next) {
res.send('bitcore node api');
router.get('/', function(req, res) {
res.send('bitcore-node API');
});

return router;
Expand Down
60 changes: 29 additions & 31 deletions api/routes/v1.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,45 @@

var express = require('express');

function initRouter(backend) {
function initRouter(node) {
var router = express.Router();

function mockResponse(req, res, next) {
res.send('This is a mocked response. Backed service is: ' + backend.status);
function mockResponse(req, res) {
res.send({'message': 'This is a mocked response'});
}

// Node routes
router.get('/node', mockResponse);

// Block routes
router.get('/blocks', mockResponse);
router.get('/block/:blockHash', mockResponse);
router.get('/block-index/:height', mockResponse);
router.get('/blocks/latest', mockResponse);
router.get('/blocks/:blockHash', mockResponse);
router.get('/blocks/:height', mockResponse);
router.get('/blocks/:blockHash/transactions/:txIndex', mockResponse);

// Transaction routes
router.get('/tx/:txid', mockResponse);
router.get('/txs', mockResponse);
router.post('/tx/send', mockResponse);
router.get('/transactions', mockResponse);
router.get('/transactions/:txHash', mockResponse);
router.post('/transactions/send', mockResponse);
router.get('/transactions/:txHash/addresses', mockResponse);
router.get('/transactions/:txHash/outputs/addresses', mockResponse);
router.get('/transactions/:txHash/inputs/addresses', mockResponse);

// Address routes
router.get('/addr/:addr', mockResponse);
router.get('/addr/:addr/utxo', mockResponse);
router.get('/addrs/:addrs/utxo', mockResponse);
router.post('/addrs/utxo', mockResponse);
router.get('/addrs/:addrs/txs', mockResponse);
router.post('/addrs/txs', mockResponse);

// Address property routes
router.get('/addr/:addr/balance', mockResponse);
router.get('/addr/:addr/totalReceived', mockResponse);
router.get('/addr/:addr/totalSent', mockResponse);
router.get('/addr/:addr/unconfirmedBalance', mockResponse);

// Status route
router.get('/status', mockResponse);
router.get('/sync', mockResponse);
router.get('/peer', mockResponse);

// Currency
router.get('/currency', mockResponse);
// Input routes
router.get('/transactions/:txHash/inputs', mockResponse);
router.get('/transactions/:txHash/inputs/:index', mockResponse);

// Output routes
router.get('/transactions/:txHash/outputs', mockResponse);
router.get('/transactions/:txHash/outputs/:index', mockResponse);

// Address routes
router.get('/messages/verify', mockResponse);
router.post('/messages/verify', mockResponse);
router.get('/addresses/:address', mockResponse);
router.get('/addresses/:address/transactions', mockResponse);
router.get('/addresses/:address/utxos', mockResponse);
// TODO: check if this is really restful
router.get('/addresses/:addresses/utxos', mockResponse);

return router;
}
Expand Down
6 changes: 3 additions & 3 deletions api/routes/v2.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

var express = require('express');

function initRouter(backend) {
function initRouter(node) {
var router = express.Router();

router.get('/blocks', function(req, res, next) {
res.send('blocks v2 ' + backend.nodes);
router.get('/blocks', function(req, res) {
res.send('blocks v2 ');
});

return router;
Expand Down
Loading