const corsHeaders = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET,HEAD,POST,OPTIONS", "Access-Control-Max-Age": "86400", } function handleOptions(request) { // Make sure the necessary headers are present // for this to be a valid pre-flight request let headers = request.headers; if ( headers.get("Origin") !== null && headers.get("Access-Control-Request-Method") !== null && headers.get("Access-Control-Request-Headers") !== null ){ // Handle CORS pre-flight request. // If you want to check or reject the requested method + headers // you can do that here. let respHeaders = { ...corsHeaders, // Allow all future content Request headers to go back to browser // such as Authorization (Bearer) or X-Client-Name-Version "Access-Control-Allow-Headers": request.headers.get("Access-Control-Request-Headers"), } return new Response(null, { headers: respHeaders, }) } else { // Handle standard OPTIONS request. // If you want to allow other HTTP Methods, you can do that here. return new Response(null, { headers: { Allow: "GET, HEAD, POST, OPTIONS", }, }) } } addEventListener('fetch', event => { if (event.request.method === "OPTIONS") { // Handle CORS preflight requests event.respondWith(handleOptions(event.request)) } else if( event.request.method === "GET" || event.request.method === "HEAD" || event.request.method === "POST" ){event.respondWith(handleRequest(event.request))} }); addEventListener('scheduled', event => { event.waitUntil(handleCron()); }); const pairs = [ { pair: 'BTCUSD', value: 'XXBTZUSD', kvName: 'btc' }, { pair: 'ETHUSD', value: 'XETHZUSD', kvName: 'eth' }, { pair: 'BCHUSD', value: 'BCHUSD', kvName: 'bch' }, { pair: 'XMRUSD', value: 'XXMRZUSD', kvName: 'xmr' }, { kvName: 'grin' } ]; async function handleRequest(request) { const obj = {}; const data = await KV.get('info', 'json'); return new Response(JSON.stringify(data), { status: 200, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' } }); } function handleCron() { return new Promise(async (resolve, reject) => { const obj = {}; for (let i = 0; i < (pairs.length); i++) { if (i == 4){ const resa = await fetch('https://api-grin.blockscan.com/v1/api?module=stats&action=grinprice'); const dataa = await resa.json(); obj["grin"] = dataa.result["grinusd"]; break; } const pair = pairs[i]; const res = await fetch('https://api.kraken.com/0/public/Ticker?pair=' + pair.pair); const data = await res.json(); const ticker = data.result[pair.value]; obj[pair.kvName] = ticker.a[0]; } datas = ["bitcoin-cash","bitcoin-sv","monero"]; for (let **0; i<4;i++){ if (i==3){ const resd = await fetch('https://api.whatsonchain.com/v1/bsv/main/exchangerate'); const datad = await resd.json(); obj["bsv"] = datad["rate"]; break; } const resb = await fetch('https://api.blockchair.com/'+datas[i]+'/stats'); const datab = await resb.json(); obj[datas[i]+"fee"] = datab.data["suggested_transaction_fee_per_byte_sat"]; obj[datas[i]+"median"] = datab.data["median_transaction_fee_usd_24h"]; } await KV.put('info', JSON.stringify(obj)); resolve(); }) }