code: function getGltfUrl (src) {
  
    // try cache
    var getUrlPromise = promiseCache.get(src)
  
    if (!getUrlPromise) {
  
      getUrlPromise = fetch(GBLOCK_API_GET_OFFICIAL_GLTF_URL + src).then(function (response) {
  
        // parse response
        return response.json().catch(function(error){
          // handle JSON parsing error
          console.log('ERROR parsing gblock API server response JSON.\nRequested Model: "' + src + '"\nError: "' + JSON.stringify(error) + '"')
          return Promise.reject('gblock API server error. Check console for details.')
        }).then(function (message) {
          if (response.ok) {
            // return glTF URL
            return message.gltfUrl
          } else {
            // handle error response
            console.error('ERROR loading gblock model "'+ src +'" : ' + response.status + ' "' + message.message)
            return Promise.reject(message.message)
          }
        })
  
      })
  
      // add to cache
      promiseCache.add(src, getUrlPromise)
  
    }
  
    return getUrlPromise
  
  }
docs: FIXME: Replace this with an official API URL once available This API call is only needed to obtain the official glTF URL of a google block model. The glTF itself is not being proxied and gets fetched from https://vr.google.com/downloads/* directly. https://github.com/archilogic-com/aframe-gblock/issues/1 API server code: server/index.js try promise cache (could be in loading state)