API JavaScript Cryptocompare
npm install --save cryptocompare
Remarque: Cryptocompare dépend de la définition fetch() à l'échelle mondiale.
Si vous utilisez cela dans Electron, cela devrait fonctionner sans aucune configuration.
Si vous utilisez cela dans Node.js, vous devrez utiliser node-fetch .
Le package fonctionne sans clé API mais les limites IP seront lentement réduites au fil du temps, pour créer une clé API, allez simplement sur https://www.cryptocompare.com/cryptopian/api- keys et assurez-vous de lui donner la "lecture Tous les prix de streaming et de sondage "Permission"
Exemple:
global . fetch = require ( 'node-fetch' )
const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )coinList()Obtenez la liste actuelle de toutes les crypto-monnaies et les informations suivantes sur chaque pièce.
coinList()
No parametersReturns (objet) ...BaseImageUrl (String) L'URL de base pour toutes les images du champ ImageUrl (https://www.cryptocompare.com),BaseLinkUrl L'URL de base pour tous les liens du champ URL (https://www.cryptocompare.com)Data (objet) contient l'infomation suivante sur chaque pièce.Id (chaîne)Url (String) URL sur la page Cryptocompare pour la pièce. (Ex: /coins/eth/overview ) L'URL doit être ajoutée à https://www.cryptocompare.com .ImageUrl (String) pour obtenir l'image de logo de pièce. (Ex: /media/351001/404.png ). L'URL doit être ajoutée à https://www.cryptocompare.com .Name (String) Nom du ticker de la crypto-monnaie donnée.Symbol (chaîne) Symbole de ticker de la crypto-monnaie donnée (généralement le même que le nom).CoinName (String) de la crypto-monnaie donnée.FullName (String) de la crypto-monnaie donnée concaténée avec le symbole (Ex: Ethereum (ETH) ).Algorithm (String) Nom Algorithme cryptographique pour cette pièce.ProofType (String) Le type de preuve de la crypto-monnaie.ProofType (String) Le type de preuve de la crypto-monnaie.FullyPremined (String) Renvoie "1" si la pièce était préminée, sinon elle renvoie "0".TotalCoinSupply (String) Offre totale de la crypto-monnaie.PreMinedValue (String) des pièces préminées.TotalCoinsFreeFloat (String)SortOrder (String) La commande Cryptocompare classe la pièce à l'intérieur de leur système interne.Sponsored (booléen) est true lorsque la pièce est parrainée par Cryptocompare, est false autrement. const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Usage:
cc . coinList ( )
. then ( coinList => {
console . log ( coinList )
// ->
// {
// BTC: {
// Id: "1182",
// Url: "/coins/btc/overview",
// ImageUrl: "/media/19633/btc.png",
// Name: "BTC",
// Symbol: "BTC",
// CoinName: "Bitcoin",
// FullName: "Bitcoin (BTC)",
// Algorithm: "SHA256",
// ProofType: "PoW",
// FullyPremined: "0",
// TotalCoinSupply: "21000000",
// PreMinedValue: "N/A",
// TotalCoinsFreeFloat: "N/A",
// SortOrder: "1",
// Sponsored: false
// },
// ETH: {...},
// }
} )
. catch ( console . error )exchangeList()Renvoie tous les échanges avec lesquels Cryptocompare a intégré.
exchangeList()
No parametersReturns (objet) const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Usage:
cc . exchangeList ( )
. then ( exchangeList => {
console . log ( exchangeList )
// {
// "Cryptsy":
// {
// "42":["BTC","XRP"],
// "EMC2":["BTC","XRP"],
// "POINTS":["BTC"],
// "VTC":["BTC","LTC","XRP"]
// ...
// }
// ...
// }
} )
. catch ( console . error )price()Obtenez le prix actuel de toute crypto-monnaie dans toute autre devise.
price(fsym, tsyms[, options])
fsym (String) du symboletsyms (tableau de chaînes | chaîne) au symbole (s)options (objet)tryConversion (booléen) Par défaut, si la crypto ne se négocie pas directement dans le tosymbole demandé, BTC sera utilisé pour la conversion. Définissez tryConversion sur false pour désactiver en utilisant BTC pour la conversion.exchanges (tableau des chaînes | Array) Échanges pour obtenir des données de prix. Par défaut, des données moyennes sont utilisées. (Vous pouvez obtenir une liste des meilleurs échanges contre une paire donnée avec topExchanges() .) const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Basic Usage:
cc . price ( 'BTC' , [ 'USD' , 'EUR' ] )
. then ( prices => {
console . log ( prices )
// -> { USD: 1100.24, EUR: 1039.63 }
} )
. catch ( console . error )
// Passing a single pair of currencies:
cc . price ( 'BTC' , 'USD' )
. then ( prices => {
console . log ( prices )
// -> { USD: 1100.24 }
} )
. catch ( console . error )priceMulti() Fonctionne comme price() , sauf qu'il vous permet de spécifier une matrice de symboles.
priceMulti(fsyms, tsyms[, options])
fsyms (tableau de chaînes | chaîne) du symbole (s)tsyms (tableau de chaînes | chaîne) au symbole (s)options (objet)tryConversion (booléen) Par défaut, si la crypto ne se négocie pas directement dans le tosymbole demandé, BTC sera utilisé pour la conversion. Définissez tryConversion sur false pour désactiver en utilisant BTC pour la conversion.exchanges (tableau des chaînes | Array) Échanges pour obtenir des données de prix. Par défaut, des données moyennes sont utilisées. (Vous pouvez obtenir une liste des meilleurs échanges contre une paire donnée avec topExchanges() .) const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Basic Usage:
cc . priceMulti ( [ 'BTC' , 'ETH' ] , [ 'USD' , 'EUR' ] )
. then ( prices => {
console . log ( prices )
// -> { BTC: { USD: 1114.63, EUR: 1055.82 },
// ETH: { USD: 12.74, EUR: 12.06 } }
} )
. catch ( console . error )
// Passing a single pair of currencies:
cc . priceMulti ( 'BTC' , 'USD' )
. then ( prices => {
console . log ( prices )
// -> { BTC: { USD: 1114.63 } }
} )
. catch ( console . error )priceFull()Obtenez toutes les informations de trading actuelles (prix, vol, ouvert, haut, bas, etc.) de toute liste de crypto-monnaies dans toute autre devise.
priceFull(fsyms, tsyms[, options])
fsyms (tableau de chaînes | chaîne) du symbole (s)tsyms (tableau de chaînes | chaîne) au symbole (s)options (objet)tryConversion (booléen) Par défaut, si la crypto ne se négocie pas directement dans le tosymbole demandé, BTC sera utilisé pour la conversion. Définissez tryConversion sur false pour désactiver en utilisant BTC pour la conversion.exchanges (tableau des chaînes | Array) Échanges pour obtenir des données de prix. Par défaut, des données moyennes sont utilisées. (Vous pouvez obtenir une liste des meilleurs échanges contre une paire donnée avec topExchanges() .) const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
cc . priceFull ( [ 'BTC' , 'ETH' ] , [ 'USD' , 'EUR' ] )
. then ( prices => {
console . log ( prices )
// {
// BTC: {
// USD: {
// TYPE: '5',
// MARKET: 'CCCAGG',
// FROMSYMBOL: 'BTC',
// TOSYMBOL: 'USD',
// FLAGS: '4',
// PRICE: 1152.42,
// LASTUPDATE: 1487865689,
// LASTVOLUME: 0.21,
// LASTVOLUMETO: 242.20349999999996,
// LASTTRADEID: 1224703,
// VOLUME24HOUR: 53435.45299122338,
// VOLUME24HOURTO: 60671593.843186244,
// OPEN24HOUR: 1119.31,
// HIGH24HOUR: 1170,
// LOW24HOUR: 1086.641,
// LASTMARKET: 'itBit',
// CHANGE24HOUR: 33.11000000000013,
// CHANGEPCT24HOUR: 2.958072383879366,
// SUPPLY: 16177825,
// MKTCAP: 18643649086.5
// },
// EUR: ...
// },
// ETH: ...
// }
} )
. catch ( console . error )priceHistorical()Obtenez le prix de toute crypto-monnaie dans toute autre devise à un horodatage donné. Le prix vient des informations quotidiennes - ce serait donc le prix à la fin de la journée GMT en fonction de l'horodatage demandé.
priceHistorical(fsym, tsyms, time[, options])
fsym (String) du symboletsyms (tableau de chaînes | chaîne) au symbole (s)time (date) Date de l'historique pour lequel vous souhaitez des données de prix pouroptions (objet)tryConversion (booléen) Par défaut, si la crypto ne se négocie pas directement dans le tosymbole demandé, BTC sera utilisé pour la conversion. Définissez tryConversion sur false pour désactiver en utilisant BTC pour la conversion.exchanges (tableau des chaînes | Array) Échanges pour obtenir des données de prix. Par défaut, des données moyennes sont utilisées. (Vous pouvez obtenir une liste des meilleurs échanges contre une paire donnée avec topExchanges() .) const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Basic Usage:
cc . priceHistorical ( 'BTC' , [ 'USD' , 'EUR' ] , new Date ( '2017-01-01' ) )
. then ( prices => {
console . log ( prices )
// -> { BTC: { USD: 997, EUR: 948.17 } }
} )
. catch ( console . error )generateAvg()Calculez les informations de trading actuelles (prix, vol, ouvert, élevé, faible, etc.) de la paire demandée comme moyenne pondérée en volume en fonction des marchés demandés.
generateAvg(fsym, tsym, markets[, tryConversion])
fsym (String) du symboletsym (chaîne) à symbolemarkets (tableau) Répose de marchés pour baser la moyenne. (Vous pouvez obtenir une liste des meilleurs échanges contre une paire donnée avec topExchanges() .)tryConversion (booléen) Par défaut, si la crypto ne se négocie pas directement dans le tosymbole demandé, BTC sera utilisé pour la conversion. Définissez tryConversion sur false pour désactiver en utilisant BTC pour la conversion. const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Basic Usage:
cc . generateAvg ( 'BTC' , 'USD' , [ 'Coinbase' , 'Kraken' , 'Bitstamp' , 'Bitfinex' ] )
. then ( data => {
console . log ( data )
// -> { MARKET: 'CUSTOMAGG',
// FROMSYMBOL: 'BTC',
// TOSYMBOL: 'USD',
// FLAGS: '2',
// PRICE: 1155.61,
// LASTUPDATE: 1488059738,
// LASTVOLUME: 0.25546663,
// LASTVOLUMETO: 294.93622433499996,
// LASTTRADEID: 26533969,
// VOLUME24HOUR: 27318.892083369985,
// VOLUME24HOURTO: 31652183.38370657,
// OPEN24HOUR: 1177.16,
// HIGH24HOUR: 1189.9,
// LOW24HOUR: 1110,
// LASTMARKET: 'Bitfinex',
// CHANGE24HOUR: -21.550000000000182,
// CHANGEPCT24HOUR: -1.830677223147251 }
} )
. catch ( console . error )topPairs()Obtenez les paires supérieures par volume pour une devise.
topPairs(fsym[, limit])
fsym (String) du symbolelimit (numéro) Limitez le nombre de paires que vous recevez (par défaut 5). const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
cc . topPairs ( 'BTC' , 2 )
. then ( pairs => {
console . log ( pairs )
// -> [ { exchange: 'CCCAGG',
// fromSymbol: 'BTC',
// toSymbol: 'JPY',
// volume24h: 235602.43493487104,
// volume24hTo: 31888554862.766888 },
// { exchange: 'CCCAGG',
// fromSymbol: 'BTC',
// toSymbol: 'USD',
// volume24h: 124504.4477389583,
// volume24hTo: 145514032.93780443 } ]
} )
. catch ( console . error )topExchanges()Obtenez des échanges supérieurs en volume pour une paire de devises.
topExchanges(fsym, tsym[, limit])
fsym (String) du symboletsym (chaîne) à symbolelimit (numéro) Limitez le nombre d'échanges que vous recevez (par défaut 5). const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
cc . topExchanges ( 'BTC' , 'USD' , 2 )
. then ( exchanges => {
console . log ( exchanges )
// -> [ { exchange: 'Bitfinex',
// fromSymbol: 'BTC',
// toSymbol: 'USD',
// volume24h: 35239.36701090003,
// volume24hTo: 41472258.85534388 },
// { exchange: 'Bitstamp',
// fromSymbol: 'BTC',
// toSymbol: 'USD',
// volume24h: 19658.748675010014,
// volume24hTo: 23047071.74260772 } ]
} )
. catch ( console . error )topExchangesFull()Obtenez des données complètes sur les échanges supérieurs en volume pour une paire de devises.
topExchangesFull(fsym, tsym[, limit])
fsym (String) du symboletsym (chaîne) à symbolelimit (numéro) Limitez le nombre d'échanges que vous recevez (par défaut 5).histoDay()Ouvrez-vous, élevé, bas, ferme, volume du volume et volumeto à partir des données historiques quotidiennes. Les valeurs sont basées sur 00:00 GMT.
histoDay(fsym, tsym[, options])
fsym (String) du symboletsym (chaîne) à symboleoptions (objet)aggregate (numéro) Nombre de points de données à agrégat.aggregatePredictableTimePeriods (booléen) génère des périodes de temps prévisibles.allData (Boolean) renvoie toutes les données.toTs (Numéro) Dernière horodatage UNIX pour retourner les données pour.limit (nombre | 'none' ) Limitez le nombre de jours à la recherche. La valeur par défaut est 30. Si vous le définissez sur la chaîne 'none' , vous obtiendrez toutes les données disponibles.tryConversion (booléen) Par défaut, si la crypto ne se négocie pas directement dans le tosymbole demandé, BTC sera utilisé pour la conversion. Définissez tryConversion sur false pour désactiver en utilisant BTC pour la conversion.timestamp (date) Par défaut, histoDay() obtient des données historiques au cours des derniers jours. Utilisez l'option timestamp pour définir un point de départ historique.exchange (String) Échange pour obtenir des données d'historique. Par défaut, des données moyennes sont utilisées. (Vous pouvez obtenir une liste des meilleurs échanges contre une paire donnée avec topExchanges() .) cc . histoDay ( 'BTC' , 'USD' )
. then ( data => {
console . log ( data )
// -> [ { time: 1485388800,
// close: 915.65,
// high: 917.71,
// low: 893.81,
// open: 893.97,
// volumefrom: 35494.93,
// volumeto: 32333344.2 },
// ... ]
} )
. catch ( console . error )histoHour()Ouvrez-vous, élevé, bas, ferme, volume du volume et volumeto des données historiques horaires.
histoHour(fsym, tsym[, options])
fsym (String) du symboletsym (chaîne) à symboleoptions (objet)aggregate (numéro) Nombre de points de données à agrégat.aggregatePredictableTimePeriods (booléen) génère des périodes de temps prévisibles.toTs (numéro) Dernier horodat Unix pour retourner les données pourlimit (Numéro) Limiter le nombre d'heures à la recherche. La valeur par défaut est 168.tryConversion (booléen) Par défaut, si la crypto ne se négocie pas directement dans le tosymbole demandé, BTC sera utilisé pour la conversion. Définissez tryConversion sur false pour désactiver en utilisant BTC pour la conversion.timestamp (date) Par défaut, histoHour() obtient des données historiques au cours des dernières heures. Utilisez l'option timestamp pour définir un point de départ historique.exchange (String) Échange pour obtenir des données d'historique. Par défaut, des données moyennes sont utilisées. (Vous pouvez obtenir une liste des meilleurs échanges contre une paire donnée avec topExchanges() .) cc . histoHour ( 'BTC' , 'USD' )
. then ( data => {
console . log ( data )
// -> [ { time: 1487448000,
// close: 1060.34,
// high: 1061.44,
// low: 1058.85,
// open: 1059.24,
// volumefrom: 739.6,
// volumeto: 790019.22 },
// ... ]
} )
. catch ( console . error )histoMinute()Ouvrez-vous, élevé, bas, ferme, volume du volume et volumeto à partir des données historiques minute par minute.
histoMinute(fsym, tsym[, options])
fsym (String) du symboletsym (chaîne) à symboleoptions (objet)aggregate (numéro) Nombre de points de données à agrégat.aggregatePredictableTimePeriods (booléen) génère des périodes de temps prévisibles.toTs (numéro) Dernier horodat Unix pour retourner les données pourlimit (Nombre) Limiter le nombre de minutes à la recherche. La valeur par défaut est 1440.tryConversion (booléen) Par défaut, si la crypto ne se négocie pas directement dans le tosymbole demandé, BTC sera utilisé pour la conversion. Définissez tryConversion sur false pour désactiver en utilisant BTC pour la conversion.timestamp (date) Par défaut, histoMinute() obtient des données historiques au cours des dernières minutes. Utilisez l'option timestamp pour définir un point de départ historique.exchange (String) Échange pour obtenir des données d'historique. Par défaut, des données moyennes sont utilisées. (Vous pouvez obtenir une liste des meilleurs échanges contre une paire donnée avec topExchanges() .) cc . histoMinute ( 'BTC' , 'USD' )
. then ( data => {
console . log ( data )
// -> [ { time: 1487970960,
// close: 1171.97,
// high: 1172.72,
// low: 1171.97,
// open: 1172.37,
// volumefrom: 25.06,
// volumeto: 29324.12 },
// ... ]
} )
. catch ( console . error )newsList()Renvoie des articles de presse des fournisseurs avec lesquels Cryptocompare a intégré.
newsList(lang[, options])
lang (String) Langue préférée - anglais (en) ou portugais (PT)options (objet)feeds (tableau de chaînes | Array) Flux de nouvelles spécifiques pour récupérer des nouvelles, si vides, les par défaut tous. (Vous pouvez obtenir une liste de flux d'actualités avec newsFeedsAndCategories().Feeds ..)categories (tableau de chaînes | Array) Catégorie d'articles de presse à retourner, si vide, les par défaut tous. (Vous pouvez obtenir une liste de catégories de nouvelles avec newsFeedsAndCategories().Categories ..)excludeCategories (tableau des chaînes | Array) pour exclure les résultats, si vide, n'en est passible par défaut. (Vous pouvez obtenir une liste de catégories de nouvelles avec newsFeedsAndCategories().Categories ..)lTs (Date) renvoie les nouvelles avant cet horodatage const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Basic Usage:
cc . newsList ( 'EN' )
. then ( newsList => {
console . log ( newsList )
//[
// {
// id: "708235"
// guid: "https://www.cryptoglobe.com/latest/2018/11/china-cryptocurrency-mining-machines-are-reportedly-being-sold-according-to-their-weight/"
// published_on: 1542886256
// imageurl: "https://images.cryptocompare.com/news/cryptoglobe/fwMg0080000.jpeg"
// title: "China: Cryptocurrency Mining Machines Reportedly Being Sold According to Their Weight"
// url: "https://www.cryptoglobe.com/latest/2018/11/china-cryptocurrency-mining-machines-are-reportedly-being-sold-according-to-their-weight/"
// source: "cryptoglobe"
// body: "Cryptocurrency mining machines are reportedly being sold in China according to their weight as miners who haven’t been able to make a profit are seemingly getting rid of their old models to get some of their investment back."
// tags: ""
// categories: "Mining|Asia|Business"
// upvotes: "0"
// downvotes: "0"
// lang: "EN"
// source_info: {
// name: "CryptoGlobe"
// lang: "EN"
// img: "https://images.cryptocompare.com/news/default/cryptoglobe.png"
// }
// }
// ....
//]
} )
. catch ( console . error )newsFeedsAndCategories()Renvoie tous les flux d'actualités (fournisseurs) avec lesquels Cryptocompare a intégré et la liste complète des catégories.
newsFeedsAndCategories()
No parametersReturns (objet) const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Usage:
cc . exchangeList ( )
. then ( newsFeedsAndCategories => {
console . log ( newsFeedsAndCategories )
// {
// "Categories":
// [
// {
// categoryName: "BTC"
// wordsAssociatedWithCategory: ["BTC","BITCOIN", "SATOSHI"]
// }
// ...
// ]
// "Feeds":
// [
// {
// key: "cryptocompare"
// name: "CryptoCompare"
// lang: "EN"
// img: "https://images.cryptocompare.com/news/default/cryptocompare.png"
// }
// ...
// ]
// }
} )
. catch ( console . error )constituentExchangeList()Renvoie tous les échanges constitutifs de l'instrument de demande.
constituentExchangeList([options])
options (objet)instrument (chaîne) Le type d'instrument moyen.Returns (objet) const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Usage:
cc . constituentExchangeList ( )
. then ( exchanges => {
console . log ( exchanges )
// {
// "ABCC": {
// "includeAll": false,
// "onlyPairs": {
// "CNN~BTC": true,
// "TNS~BTC": true,
// "TTU~USDT": true,
// "XMX~BTC": true,
// "GUSD~USDT": true
// }
// },
// "ACX": {
// "includeAll": true,
// "onlyPairs": {}
// },
// ...
// }
} )
. catch ( console . error )latestSocial()Renvoie les dernières données de statistiques sociales pour la pièce demandée.
Remarque : nécessite une clé API valide.
latestSocial([options])
options (objet)coinId (NUMÉRO) L'ID de la pièce.Returns (objet) const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Usage:
cc . latestSocial ( )
. then ( social => {
console . log ( social )
// {
// "General": {
// "Points": 7431355,
// "Name": "BTC",
// "CoinName": "Bitcoin",
// "Type": "Webpagecoinp"
// },
// "CryptoCompare": {
// ...
// },
// "Twitter": {
// ...
// },
// "Reddit": {
// ...
// },
// "Facebook": {
// ...
// },
// "CodeRepository": {
// ...
// }
// }
} )
. catch ( console . error )histoSocial()Renvoie les données de statistiques sociales pour la pièce demandée.
Remarque : nécessite une clé API valide.
histoSocial(timePeriod[, options])
timePeriod (String) Période - «jour» ou «heure»options (objet)coinId (NUMÉRO) L'ID de la pièce.aggregate à la période de temps pour agréger les données.aggregatePredictableTimePeriods (booléen) uniquement utilisé si le param aggregate inclus. Si FALSE, il créera des plages horaires en fonction de l'appel.limit (nombre) Nombre de points de données à retourner.toTs (numéro) Dernier horodat Unix pour retourner les données pourReturns (tableau d'objets) const cc = require ( 'cryptocompare' )
cc . setApiKey ( '<your-api-key>' )
// Usage:
cc . histoSocial ( 'hour' )
. then ( socialStats => {
console . log ( socialStats )
// [
// {
// "time": 1548640800,
// "comments": 229133,
// "posts": 89997,
// "followers": 64128,
// "points": 6144455,
// "overview_page_views": 22335644,
// "analysis_page_views": 955496,
// "markets_page_views": 1402190,
// "charts_page_views": 7527086,
// "trades_page_views": 673204,
// "forum_page_views": 6585840,
// "influence_page_views": 55903,
// "total_page_views": 39535363,
// "fb_likes": 40054,
// "fb_talking_about": 92,
// "twitter_followers": 844049,
// "twitter_following": 165,
// "twitter_lists": 6631,
// "twitter_favourites": 1000,
// "twitter_statuses": 20316,
// "reddit_subscribers": 1013891,
// "reddit_active_users": 4365,
// "reddit_posts_per_hour": 3.77,
// "reddit_posts_per_day": 90.46,
// "reddit_comments_per_hour": 68.39,
// "reddit_comments_per_day": 1641.34,
// "code_repo_stars": 44353,
// "code_repo_forks": 25367,
// "code_repo_subscribers": 4179,
// "code_repo_open_pull_issues": 330,
// "code_repo_closed_pull_issues": 11847,
// "code_repo_open_issues": 903,
// "code_repo_closed_issues": 5187
// }
// ]
} )
. catch ( console . error ) Mit