JSFiddle - React, Tailwind, and code Playground

HTML

<html>

  <head>
    <script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>
  </head>

  <body>
    <div id="map" class="fullSize"></div>
  </body>

</html>

CSS

@import url(https://openlayers.org/en/v4.6.5/css/ol.css);
.fullSize {
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  border: none;
  width: 100%;
  height: 100%;
}

JavaScript 1.7

var parser = new ol.format.WMTSCapabilities();

    var apiServer = 'https://api.cesium.com/';
    var assetId = 3827; // Washington D.C.
    var token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkMTgwZWE3ZS00NjE3LTRjNzUtYTY5Yy00MjBiZTQ3ZTZkMjEiLCJpZCI6MTUzLCJpYXQiOjE0OTYxNTg5MTh9.CCJSSG2vl5EDbEL5pbW6m0XcO5vjzZia462Xr3n3tNY';

    var assetUrl;
    var assetToken;

    async function createMap() {
      await requestAssetToken();
      var response = await fetch(assetUrl + 'WMTSCapabilities.xml?access_token=' + assetToken);
      var text = await response.text();
      var result = parser.read(text);

      // ion capabilities only support Mercator with a single default layer
      var options = ol.source.WMTS.optionsFromCapabilities(result, {
        layer: 'default',
        matrixSet: 'EPSG:3857'
      });

      // Set the tile load function to correctly pass the token
      options.tileLoadFunction = tileLoadFunction;

      var wmtsSource = new ol.source.WMTS(options);
      wmtsSource.on('tileloaderror', tileLoadError);

      var map = new ol.Map({
        layers: [
          // Add OSM map
          new ol.layer.Tile({
            source: new ol.source.OSM(),
            opacity: 0.7
          }),
          // Add Washington D.C. imagery
          new ol.layer.Tile({
            opacity: 1,
            source: wmtsSource
          })
        ],
        target: 'map',
        // Zooms to Washington D.C.
        view: new ol.View({
          center: [-8560548.523189582, 4721921.633852956],
          zoom: 10
        })
      });

    }

    createMap();

    //
    // Token handling functions
    //

    // Requests a new asset token
    var assetTokenPromise;

    function requestAssetToken() {
      if (assetTokenPromise) {
        // We are already requesting one so just return the existing promise
        return assetTokenPromise;
      }
      assetTokenPromise = window.fetch(apiServer + 'v1/assets/' + assetId + '/endpoint?access_token=' +...