This commit is contained in:
Matthias Kretschmann 2024-03-29 20:37:30 +00:00
parent bc75e64f82
commit a9c5c20bc2
Signed by: m
GPG Key ID: 606EEEF3C479A91F
7 changed files with 49 additions and 22 deletions

View File

@ -7,7 +7,6 @@ const apiUrl = 'https://api.1inch.dev/swap/v6.0/1/quote'
const config: RequestInit = {
headers: {
Authorization: `Bearer ${process.env.ONEINCH_API_KEY}`,
accept: 'application/json',
'content-type': 'application/json'
},
method: 'GET',
@ -24,18 +23,27 @@ export async function GET(request: NextRequest) {
return Response.json(null, { status: 400 })
}
let data
const url = `${apiUrl}/?src=${src}&dst=${dst}&amount=${amount}&includeTokensInfo=true&includeProtocols=true`
let data
let status
try {
const res = await fetch(url, config)
const json = await res.json()
data = json
status = res.status
} catch (error: unknown) {
console.error((error as Error).message)
data = null
status = 500
}
return Response.json(data)
return new Response(JSON.stringify(data), {
status,
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'public, s-maxage=10'
}
})
}

View File

@ -5,8 +5,8 @@ import './globals.css'
const firaCode = Fira_Code({ subsets: ['latin'] })
export const metadata: Metadata = {
title: 'Create Next App',
description: 'Generated by create next app'
title: 'OCEAN + AGIX + FET = ASI',
description: 'Calculate how much ASI you get for your OCEAN, AGIX, or FET'
}
export default function RootLayout({

View File

@ -2,17 +2,6 @@
margin-top: 2rem;
}
.results h3,
.results p {
.results h3 {
margin-bottom: 1rem;
}
.results p {
padding-left: 100px;
}
.results p span {
margin-left: -100px;
min-width: 90px;
display: inline-block;
}

View File

@ -0,0 +1,6 @@
.result {
margin-bottom: 1rem;
}
.amount {
}

View File

@ -1,3 +1,6 @@
import { formatCurrency } from '@coingecko/cryptoformat'
import styles from './Result.module.css'
type Props = {
symbol: string
amount: number
@ -5,12 +8,23 @@ type Props = {
amountFiat: number
}
function formatPrice(price: number, currency: string) {
return formatCurrency(price, currency, 'en', false, {
decimalPlaces: 3,
significantFigures: 5
})
}
export function Result({ symbol, amount, amountAsi, amountFiat }: Props) {
return (
<p>
<span>{symbol}</span> {amount} {symbol}, convertible to{' '}
<strong>{amountAsi} ASI</strong> currently worth{' '}
<strong>${amountFiat.toFixed(2)}</strong>.
</p>
<div className={styles.result}>
<p>
{formatPrice(amount, symbol)} {' '}
<strong title={`${amountAsi}`}>{formatPrice(amountAsi, 'ASI')}</strong>
</p>
<p>
= <strong>{formatPrice(amountFiat, 'USD')}</strong>
</p>
</div>
)
}

9
package-lock.json generated
View File

@ -8,6 +8,7 @@
"name": "ocean-fetch-price-difference",
"version": "0.1.0",
"dependencies": {
"@coingecko/cryptoformat": "^0.8.1",
"next": "14.1.4",
"react": "^18",
"react-dom": "^18",
@ -43,6 +44,14 @@
"node": ">=6.9.0"
}
},
"node_modules/@coingecko/cryptoformat": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@coingecko/cryptoformat/-/cryptoformat-0.8.1.tgz",
"integrity": "sha512-pBxGpae1HIX0is1jFNB9U5RYv2OfRTKu6bcKM9BlhlfR/5TMK1m569Narra8pqlopg3MTHJ9B71zGqUbv56row==",
"engines": {
"node": ">=10"
}
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",

View File

@ -9,6 +9,7 @@
"lint": "next lint"
},
"dependencies": {
"@coingecko/cryptoformat": "^0.8.1",
"next": "14.1.4",
"react": "^18",
"react-dom": "^18",