-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
115 lines (115 loc) · 3.57 KB
/
Copy pathserver.js
File metadata and controls
115 lines (115 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// Generated by LiveScript 1.6.0
(function(){
var get, ref$, readFileSync, writeFileSync, existsSync, express, template, fetchBase64, cors, ge, getFile, saveFile, getCached, base, getToken, getCachedToken, app;
get = require('superagent').get;
ref$ = require('fs'), readFileSync = ref$.readFileSync, writeFileSync = ref$.writeFileSync, existsSync = ref$.existsSync;
express = require('express');
template = require('./template.json');
fetchBase64 = require('fetch-base64');
cors = require('cors');
ge = require('greenlock-express');
getFile = function(name, cb){
var data, obj;
data = readFileSync(name, 'utf8');
obj = JSON.parse(data);
return cb(null, obj);
};
saveFile = function(name, data, cb){
var str;
str = JSON.stringify(data);
writeFileSync(name, str);
return cb(null);
};
getCached = function(url, cb){
var name;
name = './cache/' + url.replace(/\//g, '_');
if (existsSync(name)) {
return getFile(name, cb);
}
return get(url).end(function(err, data){
if (err != null) {
return cb(err);
}
return saveFile(name, data.body, function(err){
if (err != null) {
return cb(err);
}
return cb(null, data.body);
});
});
};
base = "https://api.coingecko.com/api/v3";
getToken = function(contract_address, cb){
return getCached(base + "/coins/ethereum/contract/" + contract_address, function(err, data){
var info;
info = (import$({}, template));
return fetchBase64.remote(data.image.small).then(function(image){
var SYMBOL, usdUrl;
info.image = image[1];
info.token = data.symbol;
SYMBOL = data.symbol.toUpperCase();
usdUrl = "https://min-api.cryptocompare.com/data/pricemulti?fsyms=" + SYMBOL + "&tsyms=USD";
return getCached(usdUrl, function(err, data){
info.usdInfo = (function(){
switch (false) {
case err != null:
return "url(" + usdUrl + ")." + SYMBOL + ".USD";
default:
return "0.01";
}
}());
info.mainnet.address = contract_address;
return getCached("http://api.ethplorer.io/getTokenInfo/" + contract_address + "?apiKey=freekey", function(err, tokenInfo){
if (err != null) {
return cb(err);
}
info.mainnet.decimals = +tokenInfo.decimals;
return cb(null, info);
});
});
});
});
};
getCachedToken = function(contract_address, cb){
var name;
name = './cache/' + contract_address;
if (existsSync(name)) {
return getFile(name, cb);
}
return getToken(contract_address, function(err, data){
if (err != null) {
return cb(err);
}
return saveFile(name, data, function(err){
if (err != null) {
return cb(err);
}
return cb(null, data);
});
});
};
app = express();
app.use(cors());
app.get('/token/:contract_address', function(req, res){
return getCachedToken(req.params.contract_address, function(err, data){
if (err != null) {
return res.status(400).send(err + "");
}
return res.send(data);
});
});
require('greenlock-express').create({
email: 'some@gmail.com',
agreeTos: true,
configDir: './.ssl/',
communityMember: true,
telemetry: false,
app: app,
debug: true
}).listen(80, 443);
function import$(obj, src){
var own = {}.hasOwnProperty;
for (var key in src) if (own.call(src, key)) obj[key] = src[key];
return obj;
}
}).call(this);