//////////////////////////////////////////////////////////////////////////

export async function onRequest(context) {
    
    // Contents of context object
    const {
	      request, // same as existing Worker API
	      env, // same as existing Worker API
	      params, // if filename includes [id] or [[path]]
	      waitUntil, // same as ctx.waitUntil in existing Worker API
	      next, // used for middleware or to fetch assets
	      data, // arbitrary space for passing data between middlewares
    } = context;
    
    const url = new URL(request.url)
    
    const key = new Request(url.toString(), request)
    const cache = caches.default
    
    // is the page already cached ?
    let response = await cache.match(key)
    
    if (!response) {
	      // no, we must fetch from the explorer
        
	      const map={
	          'dn42_roa_46.json':       '/json',
	          'dn42_roa_bird1_46.conf': '/bird/1/46',
	          'dn42_roa_bird1_4.conf':  '/bird/1/4',
	          'dn42_roa_bird1_6.conf':  '/bird/1/6',
	          'dn42_roa_bird2_46.conf': '/bird/2/46',
	          'dn42_roa_bird2_4.conf':  '/bird/2/4',
	          'dn42_roa_bird2_6.conf':  '/bird/2/6',
	          'dn42_roa_obgpd_4.conf':  '/obgpd/4',
	          'dn42_roa_obgpd_6.conf':  '/obgpd/6',
	          'dn42_roa_obgpd_46.conf': '/obgpd/46'
	      }
	      
	      const endpoint = map[url.pathname.split("/").pop()]
	      if (!endpoint) {
	          return new Response("404 Not Found", {
		            'status': 404,
		            'statusText': 'Not Found'
	          })
	      }
        
	      // fetch from the explorer
	      const surl = 'https://explorer.burble.com/api/roa' + endpoint
	      let sreq = new Request(surl, request)
	      response = await fetch(sreq)
	      response = new Response(response.body, response)
        
	      // set Cache-Control header
	      response.headers.append("Cache-Control", "public,s-maxage=3600")
        
	      // and store in the cache
	      waitUntil(cache.put(key, response.clone()))
    }
    
    // finally, return the response back to the user
    return response
}

//////////////////////////////////////////////////////////////////////////
// end of file
