crypto-news-api
Advanced tools
Comparing version 1.0.22 to 2.2.0
@@ -1,1 +0,1 @@ | ||
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=11)}([function(e,t,r){"use strict";var n=String.prototype.replace,o=/%20/g;e.exports={default:"RFC3986",formatters:{RFC1738:function(e){return n.call(e,o,"+")},RFC3986:function(e){return e}},RFC1738:"RFC1738",RFC3986:"RFC3986"}},function(e,t,r){"use strict";var n=Object.prototype.hasOwnProperty,o=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),i=function(e,t){for(var r=t&&t.plainObjects?Object.create(null):{},n=0;n<e.length;++n)void 0!==e[n]&&(r[n]=e[n]);return r};e.exports={arrayToObject:i,assign:function(e,t){return Object.keys(t).reduce(function(e,r){return e[r]=t[r],e},e)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],r=[],n=0;n<t.length;++n)for(var o=t[n],i=o.obj[o.prop],c=Object.keys(i),s=0;s<c.length;++s){var a=c[s],u=i[a];"object"==typeof u&&null!==u&&-1===r.indexOf(u)&&(t.push({obj:i,prop:a}),r.push(u))}return function(e){for(var t;e.length;){var r=e.pop();if(t=r.obj[r.prop],Array.isArray(t)){for(var n=[],o=0;o<t.length;++o)void 0!==t[o]&&n.push(t[o]);r.obj[r.prop]=n}}return t}(t)},decode:function(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(t){return e}},encode:function(e){if(0===e.length)return e;for(var t="string"==typeof e?e:String(e),r="",n=0;n<t.length;++n){var i=t.charCodeAt(n);45===i||46===i||95===i||126===i||i>=48&&i<=57||i>=65&&i<=90||i>=97&&i<=122?r+=t.charAt(n):i<128?r+=o[i]:i<2048?r+=o[192|i>>6]+o[128|63&i]:i<55296||i>=57344?r+=o[224|i>>12]+o[128|i>>6&63]+o[128|63&i]:(n+=1,i=65536+((1023&i)<<10|1023&t.charCodeAt(n)),r+=o[240|i>>18]+o[128|i>>12&63]+o[128|i>>6&63]+o[128|63&i])}return r},isBuffer:function(e){return null!==e&&void 0!==e&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},merge:function e(t,r,o){if(!r)return t;if("object"!=typeof r){if(Array.isArray(t))t.push(r);else{if("object"!=typeof t)return[t,r];(o.plainObjects||o.allowPrototypes||!n.call(Object.prototype,r))&&(t[r]=!0)}return t}if("object"!=typeof t)return[t].concat(r);var c=t;return Array.isArray(t)&&!Array.isArray(r)&&(c=i(t,o)),Array.isArray(t)&&Array.isArray(r)?(r.forEach(function(r,i){n.call(t,i)?t[i]&&"object"==typeof t[i]?t[i]=e(t[i],r,o):t.push(r):t[i]=r}),t):Object.keys(r).reduce(function(t,i){var c=r[i];return n.call(t,i)?t[i]=e(t[i],c,o):t[i]=c,t},c)}}},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))(function(o,i){function c(e){try{a(n.next(e))}catch(e){i(e)}}function s(e){try{a(n.throw(e))}catch(e){i(e)}}function a(e){e.done?o(e.value):new r(function(t){t(e.value)}).then(c,s)}a((n=n.apply(e,t||[])).next())})},o=this&&this.__generator||function(e,t){var r,n,o,i,c={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;c;)try{if(r=1,n&&(o=n[2&i[0]?"return":i[0]?"throw":"next"])&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[0,o.value]),i[0]){case 0:case 1:o=i;break;case 4:return c.label++,{value:i[1],done:!1};case 5:c.label++,n=i[1],i=[0];continue;case 7:i=c.ops.pop(),c.trys.pop();continue;default:if(!(o=(o=c.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){c=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){c.label=i[1];break}if(6===i[0]&&c.label<o[1]){c.label=o[1],o=i;break}if(o&&c.label<o[2]){c.label=o[2],c.ops.push(i);break}o[2]&&c.ops.pop(),c.trys.pop();continue}i=t.call(e,c)}catch(e){i=[6,e],n=0}finally{r=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(9),c=r(5),s=i("crypto-news-api");t.generateAPI=function(e){return function(){function t(e){if(!e)throw new Error("No API key found. Register for an API key at https://cryptocontrol.io/apis");this.apikey=e,s("using cryptocontrol.io api v1")}return t.prototype._fetch=function(t,r){void 0===r&&(r={});var n=c.stringify(r);return e("https://cryptocontrol.io/api/v1/public"+t+"?"+n,{headers:{"user-agent":"CryptoControl Node.js API","x-api-key":this.apikey}}).then(function(e){if(401===e.status)throw new Error("Invalid API Key");if(200!==e.status)throw new Error("Bad response from the CryptoControl server");return e.json()})},t.prototype.getTopNews=function(){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this._fetch("/news")];case 1:return[2,e.sent()]}})})},t.prototype.getLatestNews=function(){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this._fetch("/news",{latest:!0})];case 1:return[2,e.sent()]}})})},t.prototype.getTopNewsByCategory=function(){return n(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this._fetch("/news/category")];case 1:return[2,e.sent()]}})})},t.prototype.getTopNewsByCoin=function(e){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/news/coin/"+e)];case 1:return[2,t.sent()]}})})},t.prototype.getLatestNewsByCoin=function(e){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/news/coin/"+e,{latest:!0})];case 1:return[2,t.sent()]}})})},t.prototype.getTopNewsByCoinCategory=function(e){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/news/coin/"+e+"/category")];case 1:return[2,t.sent()]}})})},t.prototype.getTopTweeetsByCoin=function(e){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/tweets/coin/"+e)];case 1:return[2,t.sent()]}})})},t.prototype.getLatestTweetsByCoin=function(e){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/tweets/coin/"+e,{latest:!0})];case 1:return[2,t.sent()]}})})},t.prototype.getTopRedditPostsByCoin=function(e){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/reddit/coin/"+e)];case 1:return[2,t.sent()]}})})},t.prototype.getLatestRedditPostsByCoin=function(e){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/reddit/coin/"+e,{latest:!0})];case 1:return[2,t.sent()]}})})},t.prototype.getTopFeedByCoin=function(e){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/feed/coin/"+e)];case 1:return[2,t.sent()]}})})},t.prototype.getLatestFeedByCoin=function(e){return n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/feed/coin/"+e,{latest:!0})];case 1:return[2,t.sent()]}})})},t}()}},function(e,t,r){"use strict";var n=r(1),o=Object.prototype.hasOwnProperty,i={allowDots:!1,allowPrototypes:!1,arrayLimit:20,decoder:n.decode,delimiter:"&",depth:5,parameterLimit:1e3,plainObjects:!1,strictNullHandling:!1},c=function(e,t,r){if(e){var n=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,c=/(\[[^[\]]*])/.exec(n),s=c?n.slice(0,c.index):n,a=[];if(s){if(!r.plainObjects&&o.call(Object.prototype,s)&&!r.allowPrototypes)return;a.push(s)}for(var u=0;null!==(c=i.exec(n))&&u<r.depth;){if(u+=1,!r.plainObjects&&o.call(Object.prototype,c[1].slice(1,-1))&&!r.allowPrototypes)return;a.push(c[1])}return c&&a.push("["+n.slice(c.index)+"]"),function(e,t,r){for(var n=t,o=e.length-1;o>=0;--o){var i,c=e[o];if("[]"===c)i=(i=[]).concat(n);else{i=r.plainObjects?Object.create(null):{};var s="["===c.charAt(0)&&"]"===c.charAt(c.length-1)?c.slice(1,-1):c,a=parseInt(s,10);!isNaN(a)&&c!==s&&String(a)===s&&a>=0&&r.parseArrays&&a<=r.arrayLimit?(i=[])[a]=n:i[s]=n}n=i}return n}(a,t,r)}};e.exports=function(e,t){var r=t?n.assign({},t):{};if(null!==r.decoder&&void 0!==r.decoder&&"function"!=typeof r.decoder)throw new TypeError("Decoder has to be a function.");if(r.ignoreQueryPrefix=!0===r.ignoreQueryPrefix,r.delimiter="string"==typeof r.delimiter||n.isRegExp(r.delimiter)?r.delimiter:i.delimiter,r.depth="number"==typeof r.depth?r.depth:i.depth,r.arrayLimit="number"==typeof r.arrayLimit?r.arrayLimit:i.arrayLimit,r.parseArrays=!1!==r.parseArrays,r.decoder="function"==typeof r.decoder?r.decoder:i.decoder,r.allowDots="boolean"==typeof r.allowDots?r.allowDots:i.allowDots,r.plainObjects="boolean"==typeof r.plainObjects?r.plainObjects:i.plainObjects,r.allowPrototypes="boolean"==typeof r.allowPrototypes?r.allowPrototypes:i.allowPrototypes,r.parameterLimit="number"==typeof r.parameterLimit?r.parameterLimit:i.parameterLimit,r.strictNullHandling="boolean"==typeof r.strictNullHandling?r.strictNullHandling:i.strictNullHandling,""===e||null===e||void 0===e)return r.plainObjects?Object.create(null):{};for(var s="string"==typeof e?function(e,t){for(var r={},n=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,c=t.parameterLimit===1/0?void 0:t.parameterLimit,s=n.split(t.delimiter,c),a=0;a<s.length;++a){var u,l,f=s[a],p=f.indexOf("]="),d=-1===p?f.indexOf("="):p+1;-1===d?(u=t.decoder(f,i.decoder),l=t.strictNullHandling?null:""):(u=t.decoder(f.slice(0,d),i.decoder),l=t.decoder(f.slice(d+1),i.decoder)),o.call(r,u)?r[u]=[].concat(r[u]).concat(l):r[u]=l}return r}(e,r):e,a=r.plainObjects?Object.create(null):{},u=Object.keys(s),l=0;l<u.length;++l){var f=u[l],p=c(f,s[f],r);a=n.merge(a,p,r)}return n.compact(a)}},function(e,t,r){"use strict";var n=r(1),o=r(0),i={brackets:function(e){return e+"[]"},indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},c=Date.prototype.toISOString,s={delimiter:"&",encode:!0,encoder:n.encode,encodeValuesOnly:!1,serializeDate:function(e){return c.call(e)},skipNulls:!1,strictNullHandling:!1},a=function e(t,r,o,i,c,a,u,l,f,p,d,h){var y=t;if("function"==typeof u)y=u(r,y);else if(y instanceof Date)y=p(y);else if(null===y){if(i)return a&&!h?a(r,s.encoder):r;y=""}if("string"==typeof y||"number"==typeof y||"boolean"==typeof y||n.isBuffer(y))return a?[d(h?r:a(r,s.encoder))+"="+d(a(y,s.encoder))]:[d(r)+"="+d(String(y))];var v,C=[];if(void 0===y)return C;if(Array.isArray(u))v=u;else{var g=Object.keys(y);v=l?g.sort(l):g}for(var m=0;m<v.length;++m){var w=v[m];c&&null===y[w]||(C=Array.isArray(y)?C.concat(e(y[w],o(r,w),o,i,c,a,u,l,f,p,d,h)):C.concat(e(y[w],r+(f?"."+w:"["+w+"]"),o,i,c,a,u,l,f,p,d,h)))}return C};e.exports=function(e,t){var r=e,c=t?n.assign({},t):{};if(null!==c.encoder&&void 0!==c.encoder&&"function"!=typeof c.encoder)throw new TypeError("Encoder has to be a function.");var u=void 0===c.delimiter?s.delimiter:c.delimiter,l="boolean"==typeof c.strictNullHandling?c.strictNullHandling:s.strictNullHandling,f="boolean"==typeof c.skipNulls?c.skipNulls:s.skipNulls,p="boolean"==typeof c.encode?c.encode:s.encode,d="function"==typeof c.encoder?c.encoder:s.encoder,h="function"==typeof c.sort?c.sort:null,y=void 0!==c.allowDots&&c.allowDots,v="function"==typeof c.serializeDate?c.serializeDate:s.serializeDate,C="boolean"==typeof c.encodeValuesOnly?c.encodeValuesOnly:s.encodeValuesOnly;if(void 0===c.format)c.format=o.default;else if(!Object.prototype.hasOwnProperty.call(o.formatters,c.format))throw new TypeError("Unknown format option provided.");var g,m,w=o.formatters[c.format];"function"==typeof c.filter?r=(m=c.filter)("",r):Array.isArray(c.filter)&&(g=m=c.filter);var b,F=[];if("object"!=typeof r||null===r)return"";b=c.arrayFormat in i?c.arrayFormat:"indices"in c?c.indices?"indices":"repeat":"indices";var O=i[b];g||(g=Object.keys(r)),h&&g.sort(h);for(var j=0;j<g.length;++j){var A=g[j];f&&null===r[A]||(F=F.concat(a(r[A],A,O,l,f,p?d:null,m,h,y,v,w,C)))}var x=F.join(u),k=!0===c.addQueryPrefix?"?":"";return x.length>0?k+x:""}},function(e,t,r){"use strict";var n=r(4),o=r(3),i=r(0);e.exports={formats:i,parse:o,stringify:n}},function(e,t){var r=1e3,n=60*r,o=60*n,i=24*o,c=365.25*i;function s(e,t,r){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+r:Math.ceil(e/t)+" "+r+"s"}e.exports=function(e,t){t=t||{};var a,u=typeof e;if("string"===u&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var s=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return s*c;case"days":case"day":case"d":return s*i;case"hours":case"hour":case"hrs":case"hr":case"h":return s*o;case"minutes":case"minute":case"mins":case"min":case"m":return s*n;case"seconds":case"second":case"secs":case"sec":case"s":return s*r;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}(e);if("number"===u&&!1===isNaN(e))return t.long?s(a=e,i,"day")||s(a,o,"hour")||s(a,n,"minute")||s(a,r,"second")||a+" ms":function(e){if(e>=i)return Math.round(e/i)+"d";if(e>=o)return Math.round(e/o)+"h";if(e>=n)return Math.round(e/n)+"m";if(e>=r)return Math.round(e/r)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t,r){function n(e){var r;function n(){if(n.enabled){var e=n,o=+new Date,i=o-(r||o);e.diff=i,e.prev=r,e.curr=o,r=o;for(var c=new Array(arguments.length),s=0;s<c.length;s++)c[s]=arguments[s];c[0]=t.coerce(c[0]),"string"!=typeof c[0]&&c.unshift("%O");var a=0;c[0]=c[0].replace(/%([a-zA-Z%])/g,function(r,n){if("%%"===r)return r;a++;var o=t.formatters[n];if("function"==typeof o){var i=c[a];r=o.call(e,i),c.splice(a,1),a--}return r}),t.formatArgs.call(e,c),(n.log||t.log||console.log.bind(console)).apply(e,c)}}return n.namespace=e,n.enabled=t.enabled(e),n.useColors=t.useColors(),n.color=function(e){var r,n=0;for(r in e)n=(n<<5)-n+e.charCodeAt(r),n|=0;return t.colors[Math.abs(n)%t.colors.length]}(e),n.destroy=o,"function"==typeof t.init&&t.init(n),t.instances.push(n),n}function o(){var e=t.instances.indexOf(this);return-1!==e&&(t.instances.splice(e,1),!0)}(t=e.exports=n.debug=n.default=n).coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){var r;t.save(e),t.names=[],t.skips=[];var n=("string"==typeof e?e:"").split(/[\s,]+/),o=n.length;for(r=0;r<o;r++)n[r]&&("-"===(e=n[r].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.substr(1)+"$")):t.names.push(new RegExp("^"+e+"$")));for(r=0;r<t.instances.length;r++){var i=t.instances[r];i.enabled=t.enabled(i.namespace)}},t.enabled=function(e){if("*"===e[e.length-1])return!0;var r,n;for(r=0,n=t.skips.length;r<n;r++)if(t.skips[r].test(e))return!1;for(r=0,n=t.names.length;r<n;r++)if(t.names[r].test(e))return!0;return!1},t.humanize=r(6),t.instances=[],t.names=[],t.skips=[],t.formatters={}},function(e,t){var r,n,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function c(){throw new Error("clearTimeout has not been defined")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===i||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:i}catch(e){r=i}try{n="function"==typeof clearTimeout?clearTimeout:c}catch(e){n=c}}();var a,u=[],l=!1,f=-1;function p(){l&&a&&(l=!1,a.length?u=a.concat(u):f=-1,u.length&&d())}function d(){if(!l){var e=s(p);l=!0;for(var t=u.length;t;){for(a=u,u=[];++f<t;)a&&a[f].run();f=-1,t=u.length}a=null,l=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===c||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function y(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];u.push(new h(e,t)),1!==u.length||l||s(d)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=y,o.addListener=y,o.once=y,o.off=y,o.removeListener=y,o.removeAllListeners=y,o.emit=y,o.prependListener=y,o.prependOnceListener=y,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},function(e,t,r){(function(n){function o(){var e;try{e=t.storage.debug}catch(e){}return!e&&void 0!==n&&"env"in n&&(e=n.env.DEBUG),e}(t=e.exports=r(7)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},t.formatArgs=function(e){var r=this.useColors;if(e[0]=(r?"%c":"")+this.namespace+(r?" %c":" ")+e[0]+(r?"%c ":" ")+"+"+t.humanize(this.diff),!r)return;var n="color: "+this.color;e.splice(1,0,n,"color: inherit");var o=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&"%c"===e&&(i=++o)}),e.splice(i,0,n)},t.save=function(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}},t.load=o,t.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(o())}).call(this,r(8))},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var n=r(2).generateAPI(fetch);window.CryptoControlApi=n,window.CryptoNewsApi=n,e.CryptoControlApi=n,e.CryptoNewsApi=n,t.default=n,function(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}(r(2))}).call(this,r(10))}]); | ||
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=11)}([function(e,t,r){"use strict";var n=String.prototype.replace,o=/%20/g;e.exports={default:"RFC3986",formatters:{RFC1738:function(e){return n.call(e,o,"+")},RFC3986:function(e){return e}},RFC1738:"RFC1738",RFC3986:"RFC3986"}},function(e,t,r){"use strict";var n=Object.prototype.hasOwnProperty,o=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),i=function(e,t){for(var r=t&&t.plainObjects?Object.create(null):{},n=0;n<e.length;++n)void 0!==e[n]&&(r[n]=e[n]);return r};e.exports={arrayToObject:i,assign:function(e,t){return Object.keys(t).reduce(function(e,r){return e[r]=t[r],e},e)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],r=[],n=0;n<t.length;++n)for(var o=t[n],i=o.obj[o.prop],a=Object.keys(i),s=0;s<a.length;++s){var c=a[s],u=i[c];"object"==typeof u&&null!==u&&-1===r.indexOf(u)&&(t.push({obj:i,prop:c}),r.push(u))}return function(e){for(var t;e.length;){var r=e.pop();if(t=r.obj[r.prop],Array.isArray(t)){for(var n=[],o=0;o<t.length;++o)void 0!==t[o]&&n.push(t[o]);r.obj[r.prop]=n}}return t}(t)},decode:function(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(t){return e}},encode:function(e){if(0===e.length)return e;for(var t="string"==typeof e?e:String(e),r="",n=0;n<t.length;++n){var i=t.charCodeAt(n);45===i||46===i||95===i||126===i||i>=48&&i<=57||i>=65&&i<=90||i>=97&&i<=122?r+=t.charAt(n):i<128?r+=o[i]:i<2048?r+=o[192|i>>6]+o[128|63&i]:i<55296||i>=57344?r+=o[224|i>>12]+o[128|i>>6&63]+o[128|63&i]:(n+=1,i=65536+((1023&i)<<10|1023&t.charCodeAt(n)),r+=o[240|i>>18]+o[128|i>>12&63]+o[128|i>>6&63]+o[128|63&i])}return r},isBuffer:function(e){return null!==e&&void 0!==e&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},merge:function e(t,r,o){if(!r)return t;if("object"!=typeof r){if(Array.isArray(t))t.push(r);else{if("object"!=typeof t)return[t,r];(o.plainObjects||o.allowPrototypes||!n.call(Object.prototype,r))&&(t[r]=!0)}return t}if("object"!=typeof t)return[t].concat(r);var a=t;return Array.isArray(t)&&!Array.isArray(r)&&(a=i(t,o)),Array.isArray(t)&&Array.isArray(r)?(r.forEach(function(r,i){n.call(t,i)?t[i]&&"object"==typeof t[i]?t[i]=e(t[i],r,o):t.push(r):t[i]=r}),t):Object.keys(r).reduce(function(t,i){var a=r[i];return n.call(t,i)?t[i]=e(t[i],a,o):t[i]=a,t},a)}}},function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))(function(o,i){function a(e){try{c(n.next(e))}catch(e){i(e)}}function s(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){e.done?o(e.value):new r(function(t){t(e.value)}).then(a,s)}c((n=n.apply(e,t||[])).next())})},o=this&&this.__generator||function(e,t){var r,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;a;)try{if(r=1,n&&(o=n[2&i[0]?"return":i[0]?"throw":"next"])&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[0,o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,n=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],n=0}finally{r=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(9),a=r(5),s=i("crypto-news-api");t.generateAPI=function(e){return function(){function t(e,t){if(!e)throw new Error("No API key found. Register for an API key at https://cryptocontrol.io/apis");this.apikey=e,this.proxyURL=t,s("using cryptocontrol.io api v1")}return t.prototype._fetch=function(t,r){void 0===r&&(r={});var n=a.stringify(r),o=this.proxyURL||"https://cryptocontrol.io/api/v1/public";return e(""+o+t+"?"+n,{headers:{"user-agent":"CryptoControl Node.js API v2.2.0","x-api-key":this.apikey}}).then(function(e){if(401===e.status)throw new Error("Invalid API Key");if(200!==e.status)throw new Error("Bad response from the CryptoControl server");return e.json()})},t.prototype.getTopNews=function(e){return void 0===e&&(e="en"),n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/news",{language:e})];case 1:return[2,t.sent()]}})})},t.prototype.getLatestNews=function(e){return void 0===e&&(e="en"),n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/news",{latest:!0,language:e})];case 1:return[2,t.sent()]}})})},t.prototype.getTopNewsByCategory=function(e){return void 0===e&&(e="en"),n(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this._fetch("/news/category",{language:e})];case 1:return[2,t.sent()]}})})},t.prototype.getTopNewsByCoin=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/news/coin/"+e,{language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getLatestNewsByCoin=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/news/coin/"+e,{latest:!0,language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getTopNewsByCoinCategory=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/news/coin/"+e+"/category",{language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getTopTweeetsByCoin=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/tweets/coin/"+e,{language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getLatestTweetsByCoin=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/tweets/coin/"+e,{latest:!0,language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getTopRedditPostsByCoin=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/reddit/coin/"+e,{language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getLatestRedditPostsByCoin=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/reddit/coin/"+e,{latest:!0,language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getTopFeedByCoin=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/feed/coin/"+e,{language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getLatestFeedByCoin=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/feed/coin/"+e,{latest:!0,language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getTopItemsByCoin=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/all/coin/"+e,{language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getLatestItemsByCoin=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/all/coin/"+e,{latest:!0,language:t})];case 1:return[2,r.sent()]}})})},t.prototype.getCoinDetails=function(e,t){return void 0===t&&(t="en"),n(this,void 0,void 0,function(){return o(this,function(r){switch(r.label){case 0:return[4,this._fetch("/details/coin/"+e,{language:t})];case 1:return[2,r.sent()]}})})},t}()}},function(e,t,r){"use strict";var n=r(1),o=Object.prototype.hasOwnProperty,i={allowDots:!1,allowPrototypes:!1,arrayLimit:20,decoder:n.decode,delimiter:"&",depth:5,parameterLimit:1e3,plainObjects:!1,strictNullHandling:!1},a=function(e,t,r){if(e){var n=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,a=/(\[[^[\]]*])/.exec(n),s=a?n.slice(0,a.index):n,c=[];if(s){if(!r.plainObjects&&o.call(Object.prototype,s)&&!r.allowPrototypes)return;c.push(s)}for(var u=0;null!==(a=i.exec(n))&&u<r.depth;){if(u+=1,!r.plainObjects&&o.call(Object.prototype,a[1].slice(1,-1))&&!r.allowPrototypes)return;c.push(a[1])}return a&&c.push("["+n.slice(a.index)+"]"),function(e,t,r){for(var n=t,o=e.length-1;o>=0;--o){var i,a=e[o];if("[]"===a)i=(i=[]).concat(n);else{i=r.plainObjects?Object.create(null):{};var s="["===a.charAt(0)&&"]"===a.charAt(a.length-1)?a.slice(1,-1):a,c=parseInt(s,10);!isNaN(c)&&a!==s&&String(c)===s&&c>=0&&r.parseArrays&&c<=r.arrayLimit?(i=[])[c]=n:i[s]=n}n=i}return n}(c,t,r)}};e.exports=function(e,t){var r=t?n.assign({},t):{};if(null!==r.decoder&&void 0!==r.decoder&&"function"!=typeof r.decoder)throw new TypeError("Decoder has to be a function.");if(r.ignoreQueryPrefix=!0===r.ignoreQueryPrefix,r.delimiter="string"==typeof r.delimiter||n.isRegExp(r.delimiter)?r.delimiter:i.delimiter,r.depth="number"==typeof r.depth?r.depth:i.depth,r.arrayLimit="number"==typeof r.arrayLimit?r.arrayLimit:i.arrayLimit,r.parseArrays=!1!==r.parseArrays,r.decoder="function"==typeof r.decoder?r.decoder:i.decoder,r.allowDots="boolean"==typeof r.allowDots?r.allowDots:i.allowDots,r.plainObjects="boolean"==typeof r.plainObjects?r.plainObjects:i.plainObjects,r.allowPrototypes="boolean"==typeof r.allowPrototypes?r.allowPrototypes:i.allowPrototypes,r.parameterLimit="number"==typeof r.parameterLimit?r.parameterLimit:i.parameterLimit,r.strictNullHandling="boolean"==typeof r.strictNullHandling?r.strictNullHandling:i.strictNullHandling,""===e||null===e||void 0===e)return r.plainObjects?Object.create(null):{};for(var s="string"==typeof e?function(e,t){for(var r={},n=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,a=t.parameterLimit===1/0?void 0:t.parameterLimit,s=n.split(t.delimiter,a),c=0;c<s.length;++c){var u,l,f=s[c],p=f.indexOf("]="),d=-1===p?f.indexOf("="):p+1;-1===d?(u=t.decoder(f,i.decoder),l=t.strictNullHandling?null:""):(u=t.decoder(f.slice(0,d),i.decoder),l=t.decoder(f.slice(d+1),i.decoder)),o.call(r,u)?r[u]=[].concat(r[u]).concat(l):r[u]=l}return r}(e,r):e,c=r.plainObjects?Object.create(null):{},u=Object.keys(s),l=0;l<u.length;++l){var f=u[l],p=a(f,s[f],r);c=n.merge(c,p,r)}return n.compact(c)}},function(e,t,r){"use strict";var n=r(1),o=r(0),i={brackets:function(e){return e+"[]"},indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},a=Date.prototype.toISOString,s={delimiter:"&",encode:!0,encoder:n.encode,encodeValuesOnly:!1,serializeDate:function(e){return a.call(e)},skipNulls:!1,strictNullHandling:!1},c=function e(t,r,o,i,a,c,u,l,f,p,d,h){var y=t;if("function"==typeof u)y=u(r,y);else if(y instanceof Date)y=p(y);else if(null===y){if(i)return c&&!h?c(r,s.encoder):r;y=""}if("string"==typeof y||"number"==typeof y||"boolean"==typeof y||n.isBuffer(y))return c?[d(h?r:c(r,s.encoder))+"="+d(c(y,s.encoder))]:[d(r)+"="+d(String(y))];var g,v=[];if(void 0===y)return v;if(Array.isArray(u))g=u;else{var C=Object.keys(y);g=l?C.sort(l):C}for(var m=0;m<g.length;++m){var w=g[m];a&&null===y[w]||(v=Array.isArray(y)?v.concat(e(y[w],o(r,w),o,i,a,c,u,l,f,p,d,h)):v.concat(e(y[w],r+(f?"."+w:"["+w+"]"),o,i,a,c,u,l,f,p,d,h)))}return v};e.exports=function(e,t){var r=e,a=t?n.assign({},t):{};if(null!==a.encoder&&void 0!==a.encoder&&"function"!=typeof a.encoder)throw new TypeError("Encoder has to be a function.");var u=void 0===a.delimiter?s.delimiter:a.delimiter,l="boolean"==typeof a.strictNullHandling?a.strictNullHandling:s.strictNullHandling,f="boolean"==typeof a.skipNulls?a.skipNulls:s.skipNulls,p="boolean"==typeof a.encode?a.encode:s.encode,d="function"==typeof a.encoder?a.encoder:s.encoder,h="function"==typeof a.sort?a.sort:null,y=void 0!==a.allowDots&&a.allowDots,g="function"==typeof a.serializeDate?a.serializeDate:s.serializeDate,v="boolean"==typeof a.encodeValuesOnly?a.encodeValuesOnly:s.encodeValuesOnly;if(void 0===a.format)a.format=o.default;else if(!Object.prototype.hasOwnProperty.call(o.formatters,a.format))throw new TypeError("Unknown format option provided.");var C,m,w=o.formatters[a.format];"function"==typeof a.filter?r=(m=a.filter)("",r):Array.isArray(a.filter)&&(C=m=a.filter);var b,F=[];if("object"!=typeof r||null===r)return"";b=a.arrayFormat in i?a.arrayFormat:"indices"in a?a.indices?"indices":"repeat":"indices";var O=i[b];C||(C=Object.keys(r)),h&&C.sort(h);for(var j=0;j<C.length;++j){var A=C[j];f&&null===r[A]||(F=F.concat(c(r[A],A,O,l,f,p?d:null,m,h,y,g,w,v)))}var x=F.join(u),T=!0===a.addQueryPrefix?"?":"";return x.length>0?T+x:""}},function(e,t,r){"use strict";var n=r(4),o=r(3),i=r(0);e.exports={formats:i,parse:o,stringify:n}},function(e,t){var r=1e3,n=60*r,o=60*n,i=24*o,a=365.25*i;function s(e,t,r){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+r:Math.ceil(e/t)+" "+r+"s"}e.exports=function(e,t){t=t||{};var c,u=typeof e;if("string"===u&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var s=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return s*a;case"days":case"day":case"d":return s*i;case"hours":case"hour":case"hrs":case"hr":case"h":return s*o;case"minutes":case"minute":case"mins":case"min":case"m":return s*n;case"seconds":case"second":case"secs":case"sec":case"s":return s*r;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}(e);if("number"===u&&!1===isNaN(e))return t.long?s(c=e,i,"day")||s(c,o,"hour")||s(c,n,"minute")||s(c,r,"second")||c+" ms":function(e){if(e>=i)return Math.round(e/i)+"d";if(e>=o)return Math.round(e/o)+"h";if(e>=n)return Math.round(e/n)+"m";if(e>=r)return Math.round(e/r)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t,r){function n(e){var r;function n(){if(n.enabled){var e=n,o=+new Date,i=o-(r||o);e.diff=i,e.prev=r,e.curr=o,r=o;for(var a=new Array(arguments.length),s=0;s<a.length;s++)a[s]=arguments[s];a[0]=t.coerce(a[0]),"string"!=typeof a[0]&&a.unshift("%O");var c=0;a[0]=a[0].replace(/%([a-zA-Z%])/g,function(r,n){if("%%"===r)return r;c++;var o=t.formatters[n];if("function"==typeof o){var i=a[c];r=o.call(e,i),a.splice(c,1),c--}return r}),t.formatArgs.call(e,a),(n.log||t.log||console.log.bind(console)).apply(e,a)}}return n.namespace=e,n.enabled=t.enabled(e),n.useColors=t.useColors(),n.color=function(e){var r,n=0;for(r in e)n=(n<<5)-n+e.charCodeAt(r),n|=0;return t.colors[Math.abs(n)%t.colors.length]}(e),n.destroy=o,"function"==typeof t.init&&t.init(n),t.instances.push(n),n}function o(){var e=t.instances.indexOf(this);return-1!==e&&(t.instances.splice(e,1),!0)}(t=e.exports=n.debug=n.default=n).coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){var r;t.save(e),t.names=[],t.skips=[];var n=("string"==typeof e?e:"").split(/[\s,]+/),o=n.length;for(r=0;r<o;r++)n[r]&&("-"===(e=n[r].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.substr(1)+"$")):t.names.push(new RegExp("^"+e+"$")));for(r=0;r<t.instances.length;r++){var i=t.instances[r];i.enabled=t.enabled(i.namespace)}},t.enabled=function(e){if("*"===e[e.length-1])return!0;var r,n;for(r=0,n=t.skips.length;r<n;r++)if(t.skips[r].test(e))return!1;for(r=0,n=t.names.length;r<n;r++)if(t.names[r].test(e))return!0;return!1},t.humanize=r(6),t.instances=[],t.names=[],t.skips=[],t.formatters={}},function(e,t){var r,n,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===i||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:i}catch(e){r=i}try{n="function"==typeof clearTimeout?clearTimeout:a}catch(e){n=a}}();var c,u=[],l=!1,f=-1;function p(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&d())}function d(){if(!l){var e=s(p);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f<t;)c&&c[f].run();f=-1,t=u.length}c=null,l=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===a||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function y(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];u.push(new h(e,t)),1!==u.length||l||s(d)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=y,o.addListener=y,o.once=y,o.off=y,o.removeListener=y,o.removeAllListeners=y,o.emit=y,o.prependListener=y,o.prependOnceListener=y,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},function(e,t,r){(function(n){function o(){var e;try{e=t.storage.debug}catch(e){}return!e&&void 0!==n&&"env"in n&&(e=n.env.DEBUG),e}(t=e.exports=r(7)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},t.formatArgs=function(e){var r=this.useColors;if(e[0]=(r?"%c":"")+this.namespace+(r?" %c":" ")+e[0]+(r?"%c ":" ")+"+"+t.humanize(this.diff),!r)return;var n="color: "+this.color;e.splice(1,0,n,"color: inherit");var o=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&"%c"===e&&(i=++o)}),e.splice(i,0,n)},t.save=function(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}},t.load=o,t.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(o())}).call(this,r(8))},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var n=r(2).generateAPI(fetch);window.CryptoControlApi=n,window.CryptoNewsApi=n,e.CryptoControlApi=n,e.CryptoNewsApi=n,t.default=n,function(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}(r(2))}).call(this,r(10))}]); |
import * as API from './src/CryptoControlApi'; | ||
declare const CryptoControlApi: { | ||
new (apikey: string): { | ||
new (apikey: string, proxyURL?: string | undefined): { | ||
apikey: string; | ||
proxyURL?: string | undefined; | ||
_fetch(url: string, query?: any): Promise<any>; | ||
getTopNews(): Promise<API.IArticle[]>; | ||
getLatestNews(): Promise<API.IArticle[]>; | ||
getTopNewsByCategory(): Promise<API.ICategoryResponse>; | ||
getTopNewsByCoin(coinSlug: string): Promise<API.IArticle[]>; | ||
getLatestNewsByCoin(coinSlug: string): Promise<API.IArticle[]>; | ||
getTopNewsByCoinCategory(coinSlug: string): Promise<API.ICategoryResponse>; | ||
getTopTweeetsByCoin(coinSlug: string): Promise<API.ITweet[]>; | ||
getLatestTweetsByCoin(coinSlug: string): Promise<API.ITweet[]>; | ||
getTopRedditPostsByCoin(coinSlug: string): Promise<API.IRedditItem[]>; | ||
getLatestRedditPostsByCoin(coinSlug: string): Promise<API.IRedditItem[]>; | ||
getTopFeedByCoin(coinSlug: string): Promise<API.IFeed[]>; | ||
getLatestFeedByCoin(coinSlug: string): Promise<API.IFeed[]>; | ||
getTopNews(language?: string): Promise<API.IArticle[]>; | ||
getLatestNews(language?: string): Promise<API.IArticle[]>; | ||
getTopNewsByCategory(language?: string): Promise<API.ICategoryResponse>; | ||
getTopNewsByCoin(coinSlug: string, language?: string): Promise<API.IArticle[]>; | ||
getLatestNewsByCoin(coinSlug: string, language?: string): Promise<API.IArticle[]>; | ||
getTopNewsByCoinCategory(coinSlug: string, language?: string): Promise<API.ICategoryResponse>; | ||
getTopTweeetsByCoin(coinSlug: string, language?: string): Promise<API.ITweet[]>; | ||
getLatestTweetsByCoin(coinSlug: string, language?: string): Promise<API.ITweet[]>; | ||
getTopRedditPostsByCoin(coinSlug: string, language?: string): Promise<API.IRedditItem[]>; | ||
getLatestRedditPostsByCoin(coinSlug: string, language?: string): Promise<API.IRedditItem[]>; | ||
getTopFeedByCoin(coinSlug: string, language?: string): Promise<API.IFeed[]>; | ||
getLatestFeedByCoin(coinSlug: string, language?: string): Promise<API.IFeed[]>; | ||
getTopItemsByCoin(coinSlug: string, language?: string): Promise<API.ICombinedFeed[]>; | ||
getLatestItemsByCoin(coinSlug: string, language?: string): Promise<API.ICombinedFeed[]>; | ||
getCoinDetails(coinSlug: string, language?: string): Promise<API.ICoinDetail[]>; | ||
}; | ||
@@ -19,0 +23,0 @@ }; |
import * as API from './src/CryptoControlApi'; | ||
export * from './src/CryptoControlApi'; | ||
declare const _default: { | ||
new (apikey: string): { | ||
new (apikey: string, proxyURL?: string | undefined): { | ||
apikey: string; | ||
proxyURL?: string | undefined; | ||
_fetch(url: string, query?: any): Promise<any>; | ||
getTopNews(): Promise<API.IArticle[]>; | ||
getLatestNews(): Promise<API.IArticle[]>; | ||
getTopNewsByCategory(): Promise<API.ICategoryResponse>; | ||
getTopNewsByCoin(coinSlug: string): Promise<API.IArticle[]>; | ||
getLatestNewsByCoin(coinSlug: string): Promise<API.IArticle[]>; | ||
getTopNewsByCoinCategory(coinSlug: string): Promise<API.ICategoryResponse>; | ||
getTopTweeetsByCoin(coinSlug: string): Promise<API.ITweet[]>; | ||
getLatestTweetsByCoin(coinSlug: string): Promise<API.ITweet[]>; | ||
getTopRedditPostsByCoin(coinSlug: string): Promise<API.IRedditItem[]>; | ||
getLatestRedditPostsByCoin(coinSlug: string): Promise<API.IRedditItem[]>; | ||
getTopFeedByCoin(coinSlug: string): Promise<API.IFeed[]>; | ||
getLatestFeedByCoin(coinSlug: string): Promise<API.IFeed[]>; | ||
getTopNews(language?: string): Promise<API.IArticle[]>; | ||
getLatestNews(language?: string): Promise<API.IArticle[]>; | ||
getTopNewsByCategory(language?: string): Promise<API.ICategoryResponse>; | ||
getTopNewsByCoin(coinSlug: string, language?: string): Promise<API.IArticle[]>; | ||
getLatestNewsByCoin(coinSlug: string, language?: string): Promise<API.IArticle[]>; | ||
getTopNewsByCoinCategory(coinSlug: string, language?: string): Promise<API.ICategoryResponse>; | ||
getTopTweeetsByCoin(coinSlug: string, language?: string): Promise<API.ITweet[]>; | ||
getLatestTweetsByCoin(coinSlug: string, language?: string): Promise<API.ITweet[]>; | ||
getTopRedditPostsByCoin(coinSlug: string, language?: string): Promise<API.IRedditItem[]>; | ||
getLatestRedditPostsByCoin(coinSlug: string, language?: string): Promise<API.IRedditItem[]>; | ||
getTopFeedByCoin(coinSlug: string, language?: string): Promise<API.IFeed[]>; | ||
getLatestFeedByCoin(coinSlug: string, language?: string): Promise<API.IFeed[]>; | ||
getTopItemsByCoin(coinSlug: string, language?: string): Promise<API.ICombinedFeed[]>; | ||
getLatestItemsByCoin(coinSlug: string, language?: string): Promise<API.ICombinedFeed[]>; | ||
getCoinDetails(coinSlug: string, language?: string): Promise<API.ICoinDetail[]>; | ||
}; | ||
}; | ||
export default _default; |
@@ -1,20 +0,24 @@ | ||
import { IArticle, ICategoryResponse, ITweet, IRedditItem, IFeed } from './interfaces'; | ||
import { IArticle, ICategoryResponse, ITweet, IRedditItem, IFeed, ICoinDetail, ICombinedFeed } from './interfaces'; | ||
declare const generateAPI: (fetch: any) => { | ||
new (apikey: string): { | ||
new (apikey: string, proxyURL?: string | undefined): { | ||
apikey: string; | ||
proxyURL?: string | undefined; | ||
_fetch(url: string, query?: any): Promise<any>; | ||
getTopNews(): Promise<IArticle[]>; | ||
getLatestNews(): Promise<IArticle[]>; | ||
getTopNewsByCategory(): Promise<ICategoryResponse>; | ||
getTopNewsByCoin(coinSlug: string): Promise<IArticle[]>; | ||
getLatestNewsByCoin(coinSlug: string): Promise<IArticle[]>; | ||
getTopNewsByCoinCategory(coinSlug: string): Promise<ICategoryResponse>; | ||
getTopTweeetsByCoin(coinSlug: string): Promise<ITweet[]>; | ||
getLatestTweetsByCoin(coinSlug: string): Promise<ITweet[]>; | ||
getTopRedditPostsByCoin(coinSlug: string): Promise<IRedditItem[]>; | ||
getLatestRedditPostsByCoin(coinSlug: string): Promise<IRedditItem[]>; | ||
getTopFeedByCoin(coinSlug: string): Promise<IFeed[]>; | ||
getLatestFeedByCoin(coinSlug: string): Promise<IFeed[]>; | ||
getTopNews(language?: string): Promise<IArticle[]>; | ||
getLatestNews(language?: string): Promise<IArticle[]>; | ||
getTopNewsByCategory(language?: string): Promise<ICategoryResponse>; | ||
getTopNewsByCoin(coinSlug: string, language?: string): Promise<IArticle[]>; | ||
getLatestNewsByCoin(coinSlug: string, language?: string): Promise<IArticle[]>; | ||
getTopNewsByCoinCategory(coinSlug: string, language?: string): Promise<ICategoryResponse>; | ||
getTopTweeetsByCoin(coinSlug: string, language?: string): Promise<ITweet[]>; | ||
getLatestTweetsByCoin(coinSlug: string, language?: string): Promise<ITweet[]>; | ||
getTopRedditPostsByCoin(coinSlug: string, language?: string): Promise<IRedditItem[]>; | ||
getLatestRedditPostsByCoin(coinSlug: string, language?: string): Promise<IRedditItem[]>; | ||
getTopFeedByCoin(coinSlug: string, language?: string): Promise<IFeed[]>; | ||
getLatestFeedByCoin(coinSlug: string, language?: string): Promise<IFeed[]>; | ||
getTopItemsByCoin(coinSlug: string, language?: string): Promise<ICombinedFeed[]>; | ||
getLatestItemsByCoin(coinSlug: string, language?: string): Promise<ICombinedFeed[]>; | ||
getCoinDetails(coinSlug: string, language?: string): Promise<ICoinDetail[]>; | ||
}; | ||
}; | ||
export { generateAPI, IArticle, ICategoryResponse, IFeed, IRedditItem, ITweet }; | ||
export { generateAPI, IArticle, ICategoryResponse, ICoinDetail, ICombinedFeed, IFeed, IRedditItem, ITweet }; |
@@ -41,9 +41,9 @@ "use strict"; | ||
var logger = debug('crypto-news-api'); | ||
var API_HOST = 'https://cryptocontrol.io/api/v1/public'; | ||
var generateAPI = function (fetch) { | ||
var CryptoControlApi = (function () { | ||
function CryptoControlApi(apikey) { | ||
function CryptoControlApi(apikey, proxyURL) { | ||
if (!apikey) | ||
throw new Error('No API key found. Register for an API key at https://cryptocontrol.io/apis'); | ||
this.apikey = apikey; | ||
this.proxyURL = proxyURL; | ||
logger('using cryptocontrol.io api v1'); | ||
@@ -54,5 +54,7 @@ } | ||
var queryString = qs.stringify(query); | ||
return fetch("" + API_HOST + url + "?" + queryString, { | ||
var API_HOST = 'https://cryptocontrol.io/api/v1/public'; | ||
var HOST = this.proxyURL || API_HOST; | ||
return fetch("" + HOST + url + "?" + queryString, { | ||
headers: { | ||
'user-agent': 'CryptoControl Node.js API', | ||
'user-agent': 'CryptoControl Node.js API v2.2.0', | ||
'x-api-key': this.apikey | ||
@@ -69,7 +71,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getTopNews = function () { | ||
CryptoControlApi.prototype.getTopNews = function (language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch('/news')]; | ||
case 0: return [4, this._fetch('/news', { language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -80,7 +83,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getLatestNews = function () { | ||
CryptoControlApi.prototype.getLatestNews = function (language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch('/news', { latest: true })]; | ||
case 0: return [4, this._fetch('/news', { latest: true, language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -91,7 +95,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getTopNewsByCategory = function () { | ||
CryptoControlApi.prototype.getTopNewsByCategory = function (language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/news/category")]; | ||
case 0: return [4, this._fetch("/news/category", { language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -102,7 +107,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getTopNewsByCoin = function (coinSlug) { | ||
CryptoControlApi.prototype.getTopNewsByCoin = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/news/coin/" + coinSlug)]; | ||
case 0: return [4, this._fetch("/news/coin/" + coinSlug, { language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -113,7 +119,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getLatestNewsByCoin = function (coinSlug) { | ||
CryptoControlApi.prototype.getLatestNewsByCoin = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/news/coin/" + coinSlug, { latest: true })]; | ||
case 0: return [4, this._fetch("/news/coin/" + coinSlug, { latest: true, language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -124,7 +131,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getTopNewsByCoinCategory = function (coinSlug) { | ||
CryptoControlApi.prototype.getTopNewsByCoinCategory = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/news/coin/" + coinSlug + "/category")]; | ||
case 0: return [4, this._fetch("/news/coin/" + coinSlug + "/category", { language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -135,7 +143,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getTopTweeetsByCoin = function (coinSlug) { | ||
CryptoControlApi.prototype.getTopTweeetsByCoin = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/tweets/coin/" + coinSlug)]; | ||
case 0: return [4, this._fetch("/tweets/coin/" + coinSlug, { language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -146,7 +155,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getLatestTweetsByCoin = function (coinSlug) { | ||
CryptoControlApi.prototype.getLatestTweetsByCoin = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/tweets/coin/" + coinSlug, { latest: true })]; | ||
case 0: return [4, this._fetch("/tweets/coin/" + coinSlug, { latest: true, language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -157,7 +167,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getTopRedditPostsByCoin = function (coinSlug) { | ||
CryptoControlApi.prototype.getTopRedditPostsByCoin = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/reddit/coin/" + coinSlug)]; | ||
case 0: return [4, this._fetch("/reddit/coin/" + coinSlug, { language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -168,7 +179,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getLatestRedditPostsByCoin = function (coinSlug) { | ||
CryptoControlApi.prototype.getLatestRedditPostsByCoin = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/reddit/coin/" + coinSlug, { latest: true })]; | ||
case 0: return [4, this._fetch("/reddit/coin/" + coinSlug, { latest: true, language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -179,7 +191,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getTopFeedByCoin = function (coinSlug) { | ||
CryptoControlApi.prototype.getTopFeedByCoin = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/feed/coin/" + coinSlug)]; | ||
case 0: return [4, this._fetch("/feed/coin/" + coinSlug, { language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -190,7 +203,8 @@ } | ||
}; | ||
CryptoControlApi.prototype.getLatestFeedByCoin = function (coinSlug) { | ||
CryptoControlApi.prototype.getLatestFeedByCoin = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/feed/coin/" + coinSlug, { latest: true })]; | ||
case 0: return [4, this._fetch("/feed/coin/" + coinSlug, { latest: true, language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
@@ -201,2 +215,35 @@ } | ||
}; | ||
CryptoControlApi.prototype.getTopItemsByCoin = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/all/coin/" + coinSlug, { language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
} | ||
}); | ||
}); | ||
}; | ||
CryptoControlApi.prototype.getLatestItemsByCoin = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/all/coin/" + coinSlug, { latest: true, language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
} | ||
}); | ||
}); | ||
}; | ||
CryptoControlApi.prototype.getCoinDetails = function (coinSlug, language) { | ||
if (language === void 0) { language = 'en'; } | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4, this._fetch("/details/coin/" + coinSlug, { language: language })]; | ||
case 1: return [2, _a.sent()]; | ||
} | ||
}); | ||
}); | ||
}; | ||
return CryptoControlApi; | ||
@@ -203,0 +250,0 @@ }()); |
@@ -8,2 +8,7 @@ export interface IArticle { | ||
words: number; | ||
source: { | ||
_id: string; | ||
url: string; | ||
name: string; | ||
}; | ||
similarArticles: [{ | ||
@@ -14,2 +19,7 @@ _id: string; | ||
url: string; | ||
source: { | ||
_id: string; | ||
url: string; | ||
name: string; | ||
}; | ||
}]; | ||
@@ -77,1 +87,17 @@ coins: [{ | ||
} | ||
export interface ICombinedFeed { | ||
tweets: ITweet[]; | ||
redditPosts: IRedditItem[]; | ||
articles: IArticle[]; | ||
} | ||
export interface ICoinDetail { | ||
links: { | ||
type: string; | ||
name: string; | ||
link: string; | ||
}[]; | ||
gitrepos: string[]; | ||
description: string; | ||
subreddits: string[]; | ||
twitterUsernames: string[]; | ||
} |
{ | ||
"name": "crypto-news-api", | ||
"version": "1.0.22", | ||
"version": "2.2.0", | ||
"description": "API to get a crypto newsfeed in your app", | ||
@@ -5,0 +5,0 @@ "main": "dist/node/index.node.js", |
202
README.md
@@ -29,31 +29,12 @@ CryptoControl Crypto News API | ||
import CryptoNewsApi from 'crypto-news-api' | ||
// For ES5, use the below import instead | ||
// var CryptoNewsAPI = require('crypto-news-api').default | ||
const Api = new CryptoNewsApi('API_KEY_HERE') | ||
// Connect to the CryptoControl API | ||
const Api = new CryptoNewsAPI('API_KEY_HERE') | ||
Api.getTopNews() | ||
.then(articles => console.log(articles)) | ||
.catch(error => console.error(error)) | ||
// Connect to a self-hosted proxy server (to improve performance) that points to cryptocontrol.io | ||
const ProxyApi = new CryptoNewsAPI('API_KEY_HERE', 'http://cryptocontrol_proxy/api/v1/public') | ||
Api.getTopNewsByCoin("bitcoin") | ||
.then(articles => console.log(articles)) | ||
.catch(error => console.error(error)) | ||
Api.getLatestTweetsByCoin("bitcoin") | ||
.then(tweets => console.log(tweets)) | ||
.catch(error => console.error(error)) | ||
Api.getLatestRedditPostsByCoin("bitcoin") | ||
.then(redditPosts => console.log(redditPosts)) | ||
.catch(error => console.error(error)) | ||
``` | ||
### Node.js ES5 | ||
```javascript | ||
var CryptoNewsAPI = require('crypto-news-api').default | ||
const Api = new CryptoNewsAPI('API_KEY_HERE') | ||
// Get top news | ||
Api.getTopNews() | ||
@@ -63,3 +44,8 @@ .then(function (articles) { console.log(articles) }) | ||
// Get latest russian news | ||
Api.getTopNews("ru") | ||
.then(function (articles) { console.log(articles) }) | ||
.catch(function (error) { console.log(error) }) | ||
// Get top news for Bitcoin | ||
Api.getTopNewsByCoin("bitcoin") | ||
@@ -69,11 +55,26 @@ .then(function (articles) { console.log(articles) }) | ||
Api.getLatestTweetsByCoin("bitcoin") | ||
// Get latest tweets for EOS | ||
Api.getLatestTweetsByCoin("eos") | ||
.then(function (tweets) { console.log(tweets) }) | ||
.catch(function (error) { console.log(error) }) | ||
Api.getLatestRedditPostsByCoin("bitcoin") | ||
// Get latest reddit posts for Ripple | ||
Api.getLatestRedditPostsByCoin("ripple") | ||
.then(function (redditPosts) { console.log(redditPosts) }) | ||
.catch(function (error) { console.log(error) }) | ||
// Get a combined feed (reddit/twitter/articles) for Litecoin | ||
Api.getTopFeedByCoin("litecoin") | ||
.then(function (feed) { console.log(feed) }) | ||
.catch(function (error) { console.log(error) }) | ||
// Get all reddit/tweets/articles (sepearted) for NEO | ||
Api.getTopItemsByCoin("neo") | ||
.then(function (feed) { console.log(feed) }) | ||
.catch(function (error) { console.log(error) }) | ||
// Get coin details for ethereum | ||
Api.getCoinDetails("ethereum") | ||
.then(function (details) { console.log(details) }) | ||
.catch(function (error) { console.log(error) }) | ||
``` | ||
@@ -87,2 +88,3 @@ | ||
// Get top news | ||
Api.getTopNews() | ||
@@ -92,16 +94,8 @@ .then(function (articles) { console.log(articles) }) | ||
Api.getTopNewsByCoin("bitcoin") | ||
// Get latest russian news | ||
Api.getTopNews("ru") | ||
.then(function (articles) { console.log(articles) }) | ||
.catch(function (error) { console.log(error) }) | ||
Api.getLatestTweetsByCoin("bitcoin") | ||
.then(function (tweets) { console.log(tweets) }) | ||
.catch(function (error) { console.log(error) }) | ||
Api.getLatestRedditPostsByCoin("bitcoin") | ||
.then(function (redditPosts) { console.log(redditPosts) }) | ||
.catch(function (error) { console.log(error) }) | ||
// ... same functions as demonstrated above | ||
</script> | ||
@@ -112,50 +106,88 @@ ``` | ||
- **getTopNews()** Get the top news articles. | ||
- **getLatestNews()** Get the latest news articles. | ||
- **getTopNewsByCategory()** Get news articles grouped by category. | ||
- **getTopNewsByCoin(coinSlug: String)** Get the top news articles for a specific coin. | ||
- **getLatestNewsByCoin(coinSlug: String)** Get the latest news articles for a specific coin. | ||
- **getTopNewsByCoinCategory(coinSlug: String)** Get news articles grouped by category for a specific coin. | ||
- **getTopRedditPostsByCoin(coin: String)** Get top reddit posts for a particular coin | ||
- **getLatestRedditPostsByCoin(coin: String)** Get latest reddit posts for a particular coin | ||
- **getTopTweetsByCoin(coin: String)** Get top tweets for a particular coin | ||
- **getLatestTweetsByCoin(coin: String)** Get latest tweets for a particular coin | ||
- **getTopFeedByCoin(coin: String)** Get a combined feed (reddit/tweets/articles) for a particular coin (sorted by time) | ||
- **getLatestFeedByCoin(coin: String)** Get a combined feed (reddit/tweets/articles) for a particular coin (sorted by relevance) | ||
- **getTopNews(lang?: enum)** Get the top news articles. | ||
- **getLatestNews(lang?: enum)** Get the latest news articles. | ||
- **getTopNewsByCategory(lang?: enum)** Get news articles grouped by category. | ||
- **getTopNewsByCoin(coin: String, lang?: enum)** Get the top news articles for a specific coin from the CryptoControl API. | ||
- **getLatestNewsByCoin(coin: String, lang?: enum)** Get the latest news articles for a specific coin. | ||
- **getTopNewsByCoinCategory(coin: String, lang?: enum)** Get news articles grouped by category for a specific coin. | ||
- **getTopRedditPostsByCoin(coin: String, lang?: enum)** Get top reddit posts for a particular coin | ||
- **getLatestRedditPostsByCoin(coin: String, lang?: enum)** Get latest reddit posts for a particular coin | ||
- **getTopTweetsByCoin(coin: String, lang?: enum)** Get top tweets for a particular coin | ||
- **getLatestTweetsByCoin(coin: String, lang?: enum)** Get latest tweets for a particular coin | ||
- **getTopFeedByCoin(coin: String, lang?: enum)** Get a combined feed (reddit/tweets/articles) for a particular coin (sorted by time) | ||
- **getLatestFeedByCoin(coin: String, lang?: enum)** Get a combined feed (reddit/tweets/articles) for a particular coin (sorted by relevance) | ||
- **getTopItemsByCoin(coin: String, lang?: enum)** Get reddit/tweets/articles (seperated) for a particular coin (sorted by time) | ||
- **getLatestItemsByCoin(coin: String, lang?: enum)** Get reddit/tweets/articles (seperated) for a particular coin (sorted by relevance) | ||
- **getCoinDetails(coin: String)** Get all details about a particular coin (links, description, subreddits, twitter etc..) | ||
`lang` allows developers to choose which language they'd like to get the feed. Currently CryptoControl supports English ('en') and Russian ('ru') article feeds. | ||
The coin slugs are the coin id's used from the CoinMarketCap api. You can see the full list of coins here: [https://api.coinmarketcap.com/v1/ticker/?limit=2000](https://api.coinmarketcap.com/v1/ticker/?limit=2000) | ||
## Sample Response from the API | ||
## Sample response from the server | ||
```javascript | ||
[ | ||
{ | ||
"publishedAt": "2018-05-23T06:30:51.000Z", | ||
"hotness": 70698.68569444444, | ||
"activityHotness": 1.6, | ||
"primaryCategory": "General", | ||
"words": 302, | ||
"similarArticles": [ | ||
{ | ||
"publishedAt": "2018-05-23T03:00:05.000Z", | ||
"_id": "5b04de8d18f173000f9a6d72", | ||
"title": "PayPal: We’ll ‘Definitely Support’ Bitcoin If It Becomes ‘Better Currency’", | ||
"url": "https://cryptocontrol.io/r/api/article/5b04de8d18f173000f9a6d72?ref=5ac11440ec0af7be35528459" | ||
} | ||
], | ||
"coins": [ | ||
{ | ||
"_id": "59cb59e81c073f09e76f614b", | ||
"name": "Bitcoin", | ||
"slug": "bitcoin", | ||
"tradingSymbol": "btc" | ||
} | ||
], | ||
"_id": "5b07ea76214428000f55a513", | ||
"description": "Welcome to Crypto Daily™ News, this news piece \"Ripple XRP And Bitcoin Cash Now Live On Revolut\" is breaking news from the Crypto sector.", | ||
"title": "Ripple XRP And Bitcoin Cash Now Live On Revolut - Crypto Daily™", | ||
"url": "https://cryptocontrol.io/r/api/article/5b07ea76214428000f55a513?ref=5ac11440ec0af7be35528459", | ||
"thumbnail": "https://cryptocontrol.io/r/thumbnail/5b07ea76214428000f55a513?ref=5ac11440ec0af7be35528459", | ||
"originalImageUrl": "https://cryptodaily.co.uk/wp-content/uploads/2018/05/ripple-bitcoincash-credit.jpg" | ||
} | ||
] | ||
[{ | ||
"hotness": 70862.60323026273, | ||
"activityHotness": 4.601980262729618, | ||
"primaryCategory": "General", | ||
"words": 1444, | ||
"similarArticles": [ | ||
{ | ||
"_id": "5b363b525b113200191a1d5f", | ||
"publishedAt": "2018-06-29T13:42:44.000Z", | ||
"title": "Op-Ed: Challenge of Mining Centralization Unveils Bitcoin’s Elegant Design", | ||
"url": "https://cryptocontrol.io/r/api/article/5b363b525b113200191a1d5f?ref=5ac11440ec0af7be35528459", | ||
"source": { | ||
"_id": "59d8c361ef8bf95cc2bfb66f", | ||
"name": "Bitcoin Magazine", | ||
"url": "https://bitcoinmagazine.com/" | ||
}, | ||
"sourceDomain": "bitcoinmagazine.com", | ||
"thumbnail": null | ||
}, | ||
{ | ||
"_id": "5b3865405c5681000f2f7407", | ||
"publishedAt": "2018-06-30T14:58:00.000Z", | ||
"title": "Arbitration on a Governed Blockchain: EOS’ Crisis of Dispute Resolution", | ||
"url": "https://cryptocontrol.io/r/api/article/5b3865405c5681000f2f7407?ref=5ac11440ec0af7be35528459", | ||
"source": { | ||
"_id": "59d70be3ef8bf95cc2aa2b4f", | ||
"name": "CoinTelegraph", | ||
"url": "https://cointelegraph.com/" | ||
}, | ||
"sourceDomain": "cointelegraph.com", | ||
"thumbnail": null | ||
} | ||
], | ||
"coins": [ | ||
{ | ||
"_id": "59cb59f9b0836b0a63aebc7c", | ||
"name": "Ethereum", | ||
"tradingSymbol": "eth", | ||
"slug": "ethereum" | ||
}, | ||
{ | ||
"_id": "59d21e9b83a0523906a45dc5", | ||
"name": "EOS", | ||
"slug": "eos", | ||
"tradingSymbol": "eos" | ||
} | ||
], | ||
"_id": "5b3a2e1b104844000fd64e28", | ||
"description": "The EOS governance disaster offers a strong reminder of how entrenched human mistrust can be difficult to overcome.", | ||
"publishedAt": "2018-07-02T12:00:27.000Z", | ||
"title": "It's Too Soon for On-Chain Governance - CoinDesk", | ||
"url": "https://cryptocontrol.io/r/api/article/5b3a2e1b104844000fd64e28?ref=5ac11440ec0af7be35528459", | ||
"source": { | ||
"_id": "59ce11393a44cf289a9a71f5", | ||
"name": "CoinDesk", | ||
"url": "http://coindesk.com" | ||
}, | ||
"thumbnail": "https://cryptocontrol.io/r/thumbnail/5b3a2e1b104844000fd64e28?ref=5ac11440ec0af7be35528459", | ||
"sourceName": "CoinDesk", | ||
"sourceUrl": "http://coindesk.com", | ||
"sourceDomain": "coindesk.com", | ||
"originalImageUrl": "https://media.coindesk.com/uploads/2018/06/shutterstock_153840266-e1530230263310.jpg" | ||
}] | ||
``` |
import * as debug from 'debug' | ||
import * as qs from 'qs' | ||
import { IArticle, ICategoryResponse, ITweet, IRedditItem, IFeed } from './interfaces' | ||
import { IArticle, ICategoryResponse, ITweet, IRedditItem, IFeed, ICoinDetail, ICombinedFeed } from './interfaces' | ||
const logger = debug('crypto-news-api') | ||
const API_HOST = 'https://cryptocontrol.io/api/v1/public' | ||
@@ -14,6 +13,8 @@ | ||
apikey: string | ||
proxyURL?: string | ||
constructor(apikey: string) { | ||
constructor(apikey: string, proxyURL?: string) { | ||
if (!apikey) throw new Error('No API key found. Register for an API key at https://cryptocontrol.io/apis') | ||
this.apikey = apikey | ||
this.proxyURL = proxyURL | ||
@@ -26,6 +27,8 @@ logger('using cryptocontrol.io api v1') | ||
const queryString = qs.stringify(query) | ||
const API_HOST = 'https://cryptocontrol.io/api/v1/public' | ||
const HOST = this.proxyURL || API_HOST | ||
return fetch(`${API_HOST}${url}?${queryString}`, { | ||
return fetch(`${HOST}${url}?${queryString}`, { | ||
headers: { | ||
'user-agent': 'CryptoControl Node.js API', | ||
'user-agent': 'CryptoControl Node.js API v2.2.0', | ||
'x-api-key': this.apikey | ||
@@ -42,60 +45,75 @@ } | ||
public async getTopNews(): Promise<IArticle[]> { | ||
return await this._fetch('/news') | ||
public async getTopNews(language = 'en'): Promise<IArticle[]> { | ||
return await this._fetch('/news', { language }) | ||
} | ||
public async getLatestNews(): Promise<IArticle[]> { | ||
return await this._fetch('/news', { latest: true }) | ||
public async getLatestNews(language = 'en'): Promise<IArticle[]> { | ||
return await this._fetch('/news', { latest: true, language }) | ||
} | ||
public async getTopNewsByCategory(): Promise<ICategoryResponse> { | ||
return await this._fetch(`/news/category`) | ||
public async getTopNewsByCategory(language = 'en'): Promise<ICategoryResponse> { | ||
return await this._fetch(`/news/category`, { language }) | ||
} | ||
public async getTopNewsByCoin(coinSlug: string): Promise<IArticle[]> { | ||
return await this._fetch(`/news/coin/${coinSlug}`) | ||
public async getTopNewsByCoin(coinSlug: string, language = 'en'): Promise<IArticle[]> { | ||
return await this._fetch(`/news/coin/${coinSlug}`, { language }) | ||
} | ||
public async getLatestNewsByCoin(coinSlug: string): Promise<IArticle[]> { | ||
return await this._fetch(`/news/coin/${coinSlug}`, { latest: true }) | ||
public async getLatestNewsByCoin(coinSlug: string, language = 'en'): Promise<IArticle[]> { | ||
return await this._fetch(`/news/coin/${coinSlug}`, { latest: true, language }) | ||
} | ||
public async getTopNewsByCoinCategory(coinSlug: string): Promise<ICategoryResponse> { | ||
return await this._fetch(`/news/coin/${coinSlug}/category`) | ||
public async getTopNewsByCoinCategory(coinSlug: string, language = 'en'): Promise<ICategoryResponse> { | ||
return await this._fetch(`/news/coin/${coinSlug}/category`, { language }) | ||
} | ||
public async getTopTweeetsByCoin(coinSlug: string): Promise<ITweet[]> { | ||
return await this._fetch(`/tweets/coin/${coinSlug}`) | ||
public async getTopTweeetsByCoin(coinSlug: string, language = 'en'): Promise<ITweet[]> { | ||
return await this._fetch(`/tweets/coin/${coinSlug}`, { language }) | ||
} | ||
public async getLatestTweetsByCoin(coinSlug: string): Promise<ITweet[]> { | ||
return await this._fetch(`/tweets/coin/${coinSlug}`, { latest: true }) | ||
public async getLatestTweetsByCoin(coinSlug: string, language = 'en'): Promise<ITweet[]> { | ||
return await this._fetch(`/tweets/coin/${coinSlug}`, { latest: true, language }) | ||
} | ||
public async getTopRedditPostsByCoin(coinSlug: string): Promise<IRedditItem[]> { | ||
return await this._fetch(`/reddit/coin/${coinSlug}`) | ||
public async getTopRedditPostsByCoin(coinSlug: string, language = 'en'): Promise<IRedditItem[]> { | ||
return await this._fetch(`/reddit/coin/${coinSlug}`, { language }) | ||
} | ||
public async getLatestRedditPostsByCoin(coinSlug: string): Promise<IRedditItem[]> { | ||
return await this._fetch(`/reddit/coin/${coinSlug}`, { latest: true }) | ||
public async getLatestRedditPostsByCoin(coinSlug: string, language = 'en'): Promise<IRedditItem[]> { | ||
return await this._fetch(`/reddit/coin/${coinSlug}`, { latest: true, language }) | ||
} | ||
public async getTopFeedByCoin(coinSlug: string): Promise<IFeed[]> { | ||
return await this._fetch(`/feed/coin/${coinSlug}`) | ||
public async getTopFeedByCoin(coinSlug: string, language = 'en'): Promise<IFeed[]> { | ||
return await this._fetch(`/feed/coin/${coinSlug}`, { language }) | ||
} | ||
public async getLatestFeedByCoin(coinSlug: string): Promise<IFeed[]> { | ||
return await this._fetch(`/feed/coin/${coinSlug}`, { latest: true }) | ||
public async getLatestFeedByCoin(coinSlug: string, language = 'en'): Promise<IFeed[]> { | ||
return await this._fetch(`/feed/coin/${coinSlug}`, { latest: true, language }) | ||
} | ||
public async getTopItemsByCoin(coinSlug: string, language = 'en'): Promise<ICombinedFeed[]> { | ||
return await this._fetch(`/all/coin/${coinSlug}`, { language }) | ||
} | ||
public async getLatestItemsByCoin(coinSlug: string, language = 'en'): Promise<ICombinedFeed[]> { | ||
return await this._fetch(`/all/coin/${coinSlug}`, { latest: true, language }) | ||
} | ||
public async getCoinDetails(coinSlug: string, language = 'en'): Promise<ICoinDetail[]> { | ||
return await this._fetch(`/details/coin/${coinSlug}`, { language }) | ||
} | ||
} | ||
@@ -112,2 +130,4 @@ | ||
ICategoryResponse, | ||
ICoinDetail, | ||
ICombinedFeed, | ||
IFeed, | ||
@@ -114,0 +134,0 @@ IRedditItem, |
@@ -8,2 +8,7 @@ export interface IArticle { | ||
words: number | ||
source: { | ||
_id: string | ||
url: string | ||
name: string | ||
} | ||
similarArticles: [{ | ||
@@ -14,2 +19,7 @@ _id: string | ||
url: string | ||
source: { | ||
_id: string | ||
url: string | ||
name: string | ||
} | ||
}] | ||
@@ -84,2 +94,22 @@ coins: [{ | ||
article: IArticle | ||
} | ||
export interface ICombinedFeed { | ||
tweets: ITweet[] | ||
redditPosts: IRedditItem[] | ||
articles: IArticle[] | ||
} | ||
export interface ICoinDetail { | ||
links: { | ||
type: string | ||
name: string | ||
link: string | ||
}[] | ||
gitrepos: string[] | ||
description: string | ||
subreddits: string[] | ||
twitterUsernames: string[] | ||
} |
7143252
121224
187