From d61b2f8fa7789b9b42a51e779eb1d750300499aa Mon Sep 17 00:00:00 2001 From: Geovane <87013843+GeovaneDev@users.noreply.github.com> Date: Mon, 12 Feb 2024 07:55:33 -0300 Subject: [PATCH] Api de crypto melhorada (Beta) Novas rotas adicionadas. --- package-lock.json | 67 ++++++++++--------- package.json | 2 +- pages/api/crypto/latestblock.js | 16 +++++ pages/api/crypto/price/[coin].js | 4 +- pages/api/crypto/{ => price}/coins.js | 4 +- pages/api/crypto/transaction/[transaction].js | 22 ++++++ pages/api/crypto/unconfirmed-transactions.js | 16 +++++ pages/api/crypto/wallet/[wallet].js | 22 ++++++ 8 files changed, 117 insertions(+), 36 deletions(-) create mode 100644 pages/api/crypto/latestblock.js rename pages/api/crypto/{ => price}/coins.js (84%) create mode 100644 pages/api/crypto/transaction/[transaction].js create mode 100644 pages/api/crypto/unconfirmed-transactions.js create mode 100644 pages/api/crypto/wallet/[wallet].js diff --git a/package-lock.json b/package-lock.json index 84be6b4..cab965c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "brinvestapi", - "version": "1.2.7", + "version": "1.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "brinvestapi", - "version": "1.2.7", + "version": "1.2.8", "dependencies": { "@fortawesome/free-brands-svg-icons": "^6.5.1", "@fortawesome/free-solid-svg-icons": "^6.5.1", @@ -460,9 +460,9 @@ } }, "node_modules/@restart/hooks": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.15.tgz", - "integrity": "sha512-cZFXYTxbpzYcieq/mBwSyXgqnGMHoBVh3J7MU0CCoIB4NRZxV9/TuwTBAaLMqpNhC3zTPMCgkQ5Ey07L02Xmcw==", + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", + "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", "dependencies": { "dequal": "^2.0.3" }, @@ -1081,9 +1081,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001585", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz", - "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==", + "version": "1.0.30001587", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz", + "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==", "funding": [ { "type": "opencollective", @@ -1507,25 +1507,29 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.16.tgz", + "integrity": "sha512-CREG2A9Vq7bpDRnldhFcMKuKArvkZtsH6Y0DHOHVg49qhf+LD8uEdUM3OkOAICv0EziGtDEnQtqY2/mfBILpFw==", "dev": true, "dependencies": { "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.6", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", + "has-property-descriptors": "^1.0.1", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { @@ -2458,9 +2462,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -3635,9 +3639,9 @@ } }, "node_modules/react-bootstrap": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.0.tgz", - "integrity": "sha512-87gRP69VAfeU2yKgp8RI3HvzhPNrnYIV2QNranYXataz3ef+k7OhvKGGdxQLQfUsQ2RTmlY66tn4pdFrZ94hNg==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.1.tgz", + "integrity": "sha512-J3OpRZIvCTQK+Tg/jOkRUvpYLHMdGeU9KqFUBQrV0d/Qr/3nsINpiOJyZMWnM5SJ3ctZdhPA6eCIKpEJR3Ellg==", "dependencies": { "@babel/runtime": "^7.22.5", "@restart/hooks": "^0.4.9", @@ -3727,14 +3731,15 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" diff --git a/package.json b/package.json index 3d0e0cd..c3b43f3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "brinvestapi", - "version": "1.2.7", + "version": "1.2.8", "private": true, "scripts": { "dev": "next dev", diff --git a/pages/api/crypto/latestblock.js b/pages/api/crypto/latestblock.js new file mode 100644 index 0000000..a11db52 --- /dev/null +++ b/pages/api/crypto/latestblock.js @@ -0,0 +1,16 @@ +import axios from 'axios'; + +export default async function handler(request, response) { + try { + const cryptoResponse = await axios.get(`https://blockchain.info/latestblock`); + + response.setHeader('Vercel-CDN-Cache-Control', 'max-age=86400'); + response.setHeader('CDN-Cache-Control', 'max-age=86400'); + response.setHeader('Cache-Control', 'max-age=86400'); + + const data = cryptoResponse.data; + response.status(200).json(data); + } catch (error) { + response.status(500).json({ error: error.message }); + } +} diff --git a/pages/api/crypto/price/[coin].js b/pages/api/crypto/price/[coin].js index b62de0a..3a32dc4 100644 --- a/pages/api/crypto/price/[coin].js +++ b/pages/api/crypto/price/[coin].js @@ -11,7 +11,7 @@ export default async function handler(request, response) { coin = coin.toLowerCase(); - const response = await axios.get(`https://api.coingecko.com/api/v3/simple/price`, { + const cryptoResponse = await axios.get(`https://api.coingecko.com/api/v3/simple/price`, { params: { ids: `${coin}`, vs_currencies: "brl", @@ -23,7 +23,7 @@ export default async function handler(request, response) { response.setHeader('CDN-Cache-Control', 'max-age=86400'); response.setHeader('Cache-Control', 'max-age=86400'); - const data = response.data; + const data = cryptoResponse.data; response.status(200).json(data); } catch (error) { response.status(500).json({ error: error.message }); diff --git a/pages/api/crypto/coins.js b/pages/api/crypto/price/coins.js similarity index 84% rename from pages/api/crypto/coins.js rename to pages/api/crypto/price/coins.js index 2cbda47..b5d312e 100644 --- a/pages/api/crypto/coins.js +++ b/pages/api/crypto/price/coins.js @@ -4,7 +4,7 @@ export default async function handler(request, response) { try { const apiKey = process.env.APIKEYCRYPTO; - const response = await axios.get('https://api.coingecko.com/api/v3/coins/markets', { + const cryptoResponse = await axios.get('https://api.coingecko.com/api/v3/coins/markets', { params: { vs_currency: 'brl', order: 'market_cap_desc', @@ -19,7 +19,7 @@ export default async function handler(request, response) { response.setHeader('CDN-Cache-Control', 'max-age=86400'); response.setHeader('Cache-Control', 'max-age=86400'); - const data = response.data; + const data = cryptoResponse.data; response.status(200).json(data); } catch (error) { response.status(500).json({ error: error.message }); diff --git a/pages/api/crypto/transaction/[transaction].js b/pages/api/crypto/transaction/[transaction].js new file mode 100644 index 0000000..5c1cfbc --- /dev/null +++ b/pages/api/crypto/transaction/[transaction].js @@ -0,0 +1,22 @@ +import axios from 'axios'; + +export default async function handler(request, response) { + try { + const { transaction } = request.query; + + if (typeof transaction !== 'string') { + throw new Error('Transaction parameter must be a string'); + } + + const cryptoResponse = await axios.get(`https://blockchain.info/rawtx/${transaction}`); + + response.setHeader('Vercel-CDN-Cache-Control', 'max-age=86400'); + response.setHeader('CDN-Cache-Control', 'max-age=86400'); + response.setHeader('Cache-Control', 'max-age=86400'); + + const data = cryptoResponse.data; + response.status(200).json(data); + } catch (error) { + response.status(500).json({ error: error.message }); + } +} diff --git a/pages/api/crypto/unconfirmed-transactions.js b/pages/api/crypto/unconfirmed-transactions.js new file mode 100644 index 0000000..7da1000 --- /dev/null +++ b/pages/api/crypto/unconfirmed-transactions.js @@ -0,0 +1,16 @@ +import axios from 'axios'; + +export default async function handler(request, response) { + try { + const cryptoResponse = await axios.get(`https://blockchain.info/unconfirmed-transactions?format=json`); + + response.setHeader('Vercel-CDN-Cache-Control', 'max-age=86400'); + response.setHeader('CDN-Cache-Control', 'max-age=86400'); + response.setHeader('Cache-Control', 'max-age=86400'); + + const data = cryptoResponse.data; + response.status(200).json(data); + } catch (error) { + response.status(500).json({ error: error.message }); + } +} diff --git a/pages/api/crypto/wallet/[wallet].js b/pages/api/crypto/wallet/[wallet].js new file mode 100644 index 0000000..a06c348 --- /dev/null +++ b/pages/api/crypto/wallet/[wallet].js @@ -0,0 +1,22 @@ +import axios from 'axios'; + +export default async function handler(request, response) { + try { + const { wallet } = request.query; + + if (typeof wallet !== 'string') { + throw new Error('Wallet parameter must be a string'); + } + + const cryptoResponse = await axios.get(`https://blockchain.info/rawaddr/${wallet}`); + + response.setHeader('Vercel-CDN-Cache-Control', 'max-age=86400'); + response.setHeader('CDN-Cache-Control', 'max-age=86400'); + response.setHeader('Cache-Control', 'max-age=86400'); + + const data = cryptoResponse.data; + response.status(200).json(data); + } catch (error) { + response.status(500).json({ error: error.message }); + } +}