async function gql(url, query, variables={}) {
    try {
        let response = fetch(url, {
            method: 'POST',
            headers: {
                'content-type': 'application/json'
            },
            body: JSON.stringify({query, variables})
        })
        let data = (await response).json()
        return data
    } catch(e) {
        console.warn('Some error: ', e)
    }
}

//в консоль 
(async () => {
    console.log(await gql(`http://shop-roles.asmer.fs.a-level.com.ua/graphql`, `query cats{
      CategoryFind(query:"[{}]"){
        name goods{
          name
        }
      }
    }`))
})()

async function getGQL(url) {
  return async (query, variables) => {
    try{
      let response = await fetch(url, {
        method: 'POST',
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify({query, variables})
      })
      let {data} = await response.json()
      return data[Object.keys(data)[0]]
    } catch(e) {
      console.warn('an eror occured', e)
    }
  }
}
  
(async () => {
  const gql2 = await getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql')
  console.log('from getGQL: ',(await gql2(`
        query cats{
          CategoryFind(query:"[{}]"){
            name goods{
              name
            }
          }
        }`
  , {login: 'tst', password: '123'})))
})()
