{"version":3,"sources":["jsdelivr-header.js","/npm/brightcove-video-element@0.1.1/brightcove-video-element.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OCNO,wBAAyB,wBAEhC,MAAM,UAAY,gIACZ,WAAa,kCACb,SAAW,8CAEjB,MAAM,+BAA+B,oBACnC,UAAM,GACJ,MAAM,EAAU,KAAK,IAAI,MAAM,WAE/B,GAAI,GAAW,EAAQ,OAAQ,CAC7B,MAAM,UAAC,EAAS,SAAE,EAAQ,QAAE,EAAO,QAAE,GAAW,EAAQ,OAElD,QAAe,YAAY,EAAW,EAAU,GAEhD,SADkB,eAAe,EAAW,EAAS,EAAO,YAAY,aACpD,QAAQ,QAAO,GAAO,EAAI,IAAI,WAAW,WACnE,KAAK,IAAM,EAAQ,GAAG,GACxB,OAEM,MAAM,MACd,CAEA,iBAAA,GACE,MAAM,oBAEF,KAAK,cAAc,WACrB,KAAK,MAET,EAGF,eAAe,UAAU,EAAK,EAAU,CAAC,GACvC,IACE,MAAM,QAAkB,MAAM,EAAK,GAEnC,aADmB,EAAS,MAG9B,CAAE,MAAO,GAEP,OADA,QAAQ,MAAM,GACP,IACT,CACF,CAEA,eAAe,YAAY,EAAW,EAAU,GAC9C,MAAM,EAAa,GAAG,cAAc,KAAa,KAAY,gBAC7D,aAAa,UAAU,EACzB,CAEA,eAAe,eAAgB,EAAW,EAAS,GACjD,MAAM,EAAa,GAAG,qBAAqB,YAAoB,IACzD,EAAU,CACd,OAAQ,MACR,QAAS,CAAC,OAAU,uBAAuB,MAE7C,aAAa,UAAU,EAAY,EACrC,CAEK,WAAW,eAAe,IAAI,qBACjC,WAAW,eAAe,OAAO,mBAAoB,uCAGxC","file":"/npm/brightcove-video-element@0.1.1/brightcove-video-element.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/brightcove-video-element@0.1.1/brightcove-video-element.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 VideojsVideoElement from 'videojs-video-element';\n\nconst MATCH_SRC = /players\\.brightcove\\.net\\/(?<accountId>\\d+)\\/(?<playerId>\\w+)_(?<embedId>\\w+)\\/index\\.html\\?videoId=(?<videoId>(\\d+|ref:\\w+))/;\nconst EMBED_BASE = 'https://players.brightcove.net/';\nconst API_BASE = 'https://edge.api.brightcove.com/playback/v1';\n\nclass BrightcoveVideoElement extends VideojsVideoElement {\n  async load() {\n    const matches = this.src.match(MATCH_SRC);\n    \n    if (matches && matches.groups) {\n      const {accountId, playerId, embedId, videoId} = matches.groups;\n      \n      const config = await fetchConfig(accountId, playerId, embedId);\n      const videoInfo = await fetchVideoInfo(accountId, videoId, config.video_cloud.policy_key);\n      const sources = videoInfo.sources.filter(src => src.src.startsWith('https'));\n      this.src = sources[0].src;\n    }\n    \n    await super.load();\n  }\n  \n  connectedCallback() {\n    super.connectedCallback();\n\n    if (this.querySelector('source')) {\n      this.load();\n    }\n  }\n}\n\nasync function fetchJson(url, options = {}) {\n  try {\n    const response =  await fetch(url, options);\n    const json = await response.json();\n    return json;\n    \n  } catch (e) {\n    console.error(e);\n    return null;\n  }\n}\n\nasync function fetchConfig(accountId, playerId, embedId) {\n  const requestUrl = `${EMBED_BASE}/${accountId}/${playerId}_${embedId}/config.json`;\n  return await fetchJson(requestUrl);\n}\n\nasync function fetchVideoInfo (accountId, videoId, policyKey) {\n  const requestUrl = `${API_BASE}/accounts/${accountId}/videos/${videoId}`;\n  const options = {\n    method: 'GET',\n    headers: {'Accept': `application/json;pk=${policyKey}`}\n  };\n  return await fetchJson(requestUrl, options);\n}\n\nif (!globalThis.customElements.get('brightcove-video')) {\n  globalThis.customElements.define('brightcove-video', BrightcoveVideoElement);\n}\n\nexport default BrightcoveVideoElement;\n"]}