{"version":3,"sources":["jsdelivr-header.js","/npm/@amedia/gaia-client@7.1.2/lib/gaia.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OCNO,WAAY,gBACZ,UAAW,oBAEX,UAAW,oBACT,QAAS,iBAAoB,sBAE/B,MAAM,qBAAqB,OAChC,WAAA,GACE,SAAS,WACT,KAAK,KAAO,cACd,SAGK,MAAM,WACX,WAAA,CAAY,EAAS,EAAU,CAAC,GAC9B,KAAK,QAAU,EAEf,KAAK,cAAgB,EAAQ,eAAiB,KAC9C,KAAK,QAAU,EAAQ,SAAW,IAClC,KAAK,MAAQ,EAAQ,YAAS,EAC9B,KAAK,QAAU,CACb,aAAc,QAAQ,IAAI,SAAW,qBAGb,IAAtB,EAAQ,YACV,KAAK,QAAQ,WAAa,aAE9B,CAEA,KAAA,CAAM,EAAK,GAAc,GACvB,MAAM,EAAW,GAAG,KAAK,yBAAyB,IAElD,OAAO,IAAI,SAAQ,CAAC,EAAS,KAC3B,MAAM,EAAa,MAAM,IAAI,GACzB,IACF,EAAQ,EAAW,MACf,EAAW,YAOjB,QAAQ,KAAK,QAAS,KAAK,cAAc,EAAU,IAChD,MAAM,IACL,MAAM,IAAI,EAAU,EAAM,IAC1B,EAAQ,EAAK,IAEd,OAAO,IACF,EACF,EAAQ,EAAW,MAEnB,EADS,aAAe,aAEtB,IAAI,MAAM,uCAAuC,KAG5C,EACT,GACA,GAER,CAEA,aAAA,CAAc,EAAK,GACjB,MAAM,EAAU,CACd,MAAO,KAAK,MACZ,QAAS,KAAK,SAEV,EAAQ,IAAI,KAClB,OAAO,MAAM,EAAK,GACf,MAAM,IACL,MAAM,GAAO,IAAI,MAAO,UAAY,EAMpC,GALI,EAAO,KACT,QAAQ,IACN,oCAAoC,UAAY,0BAG5B,MAApB,EAAS,OACX,MAAM,IAAI,aAAa,oBAAqB,GAE9C,GAAwB,MAApB,EAAS,OACX,MAAM,IAAI,OAAO,oBAAqB,EAAS,QAOjD,OAJI,KAAK,eACP,KAAK,cAAc,uBAAuB,EAAS,QAAQ,OAGtD,EAAS,OAAO,MAAM,IACP,IAAhB,EACK,EAEL,MAAM,QAAQ,GACT,EAAK,QACV,CAAC,EAAQ,KAAS,CAAG,CAAC,EAAK,MAAO,EAAK,SAAU,KACjD,CAAC,GAGE,CAAE,CAAC,EAAK,MAAO,EAAK,QAC3B,IAEH,OAAO,IACN,GAAI,aAAe,aACjB,MAAM,EAER,MAAM,IAAI,OAAO,EAAK,oBAAqB,EAAI,GAErD,CAEA,WAAA,CAAY,EAAmB,GAC7B,OAAO,KAAK,MAAM,cAAc,KAAqB,IACvD,CAEA,aAAA,CAAc,EAAmB,GAC/B,OAAO,KAAK,MACV,oBAAoB,KAAqB,EAAc,KAAK,OAEhE,CAEA,iBAAA,CAAkB,GAChB,OAAO,KAAK,MAAM,qBAAqB,IACzC,CAEA,SAAA,CAAU,GACR,OAAO,KAAK,MAAM,gBAAgB,KAAqB,EACzD,CAEA,OAAA,CAAQ,GACN,OAAO,KAAK,MAAM,cAAc,KAAqB,EACvD","file":"/npm/@amedia/gaia-client@7.1.2/lib/gaia.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@amedia/gaia-client@7.1.2/lib/gaia.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import VError from 'verror';\nimport fetch from 'node-fetch';\n\nimport cache from './cache.js';\nimport { timeout, TimeoutError } from './timeout.js';\n\nexport class DoesNotExist extends VError {\n  constructor() {\n    super(...arguments);\n    this.name = 'DoesNotExist';\n  }\n}\n\nexport class GaiaClient {\n  constructor(urlRoot, options = {}) {\n    this.urlRoot = urlRoot;\n\n    this.headerManager = options.headerManager || null;\n    this.timeout = options.timeout || 2000;\n    this.agent = options.agent || undefined;\n    this.headers = {\n      'User-Agent': process.env.APPNAME || 'node-gaia-client',\n    };\n\n    if (options.keepAlive === true) {\n      this.headers.connection = 'keep-alive';\n    }\n  }\n\n  fetch(url, parseResult = true) {\n    const fetchUrl = `${this.urlRoot}/api/public/v3/${url}`;\n\n    return new Promise((resolve, reject) => {\n      const cacheEntry = cache.get(fetchUrl);\n      if (cacheEntry) {\n        resolve(cacheEntry.data);\n        if (cacheEntry.isFresh()) {\n          return;\n        }\n      }\n\n      // Fetch doesn't have an option for timeout, so we need to handle it manually.\n      // https://github.com/github/fetch/issues/175#issuecomment-216791333\n      timeout(this.timeout, this.fetchInternal(fetchUrl, parseResult))\n        .then((data) => {\n          cache.set(fetchUrl, data, 60);\n          resolve(data);\n        })\n        .catch((err) => {\n          if (cacheEntry) {\n            resolve(cacheEntry.data);\n          } else if (err instanceof TimeoutError) {\n            reject(\n              new Error(`network timeout at gaia call to url ${fetchUrl}`)\n            );\n          } else {\n            reject(err);\n          }\n        });\n    });\n  }\n\n  fetchInternal(url, parseResult) {\n    const options = {\n      agent: this.agent,\n      headers: this.headers,\n    };\n    const start = new Date();\n    return fetch(url, options)\n      .then((response) => {\n        const time = new Date().getTime() - start;\n        if (time > 800) {\n          console.log(\n            `Fetching gaia property with url: ${url} took ${time}ms (node-gaia-client)`\n          );\n        }\n        if (response.status === 404) {\n          throw new DoesNotExist('%s does not exist', url);\n        }\n        if (response.status !== 200) {\n          throw new VError('Got statusCode %s', response.status);\n        }\n\n        if (this.headerManager) {\n          this.headerManager.addHeadersFromResource(response.headers.raw());\n        }\n\n        return response.json().then((data) => {\n          if (parseResult === false) {\n            return data;\n          }\n          if (Array.isArray(data)) {\n            return data.reduce(\n              (result, item) => ({ [item.name]: item.value, ...result }),\n              {}\n            );\n          }\n          return { [data.name]: data.value };\n        });\n      })\n      .catch((err) => {\n        if (err instanceof DoesNotExist) {\n          throw err;\n        }\n        throw new VError(err, 'Error fetching %s', url);\n      });\n  }\n\n  getProperty(publicationDomain, propertyName) {\n    return this.fetch(`properties/${publicationDomain}/${propertyName}`);\n  }\n\n  getProperties(publicationDomain, propertyNames) {\n    return this.fetch(\n      `properties/multi/${publicationDomain}/${propertyNames.join(',')}`\n    );\n  }\n\n  getGlobalProperty(propertyName) {\n    return this.fetch(`properties/global/${propertyName}`);\n  }\n\n  getFooter(publicationDomain) {\n    return this.fetch(`files/footer/${publicationDomain}`, false);\n  }\n\n  getMenu(publicationDomain) {\n    return this.fetch(`files/menu/${publicationDomain}`, false);\n  }\n}\n"]}