async watchTraffic() {

      const session = await bs.page.target().createCDPSession();
      await session.send( "Network.enable" );

      bs.performance.reset();

      // map responses
      session.on( "Network.responseReceived", ({ requestId, response, type }) => {
        type = ( type === "Fetch" ? "XHR" : type );
        if ( !RES_TYPES.includes( type ) ) {
          return;
        }
        bs.performance.responses[ requestId ] = { ...response, type };
      });

//      session.on( "Network.loadingFinished", ({ requestId, encodedDataLength }) => {
//        console.log("Loading finished", requestId, encodedDataLength);
//      });

      // collect response details
      session.on( "Network.loadingFinished", ({ requestId, encodedDataLength }) => {
        if ( !bs.performance.responses.hasOwnProperty( requestId ) ) {
          return;
        }
        const { url, type, mimeType } = bs.performance.responses[ requestId ];
        if ( url.startsWith( "data:" ) ) {
          return;
        }
        bs.performance.resources.push({
          url, // Response URL. This URL can be different from CachedResource.url in case of redirect.
          type,
          length: encodedDataLength // Actual bytes received (might be less than dataLength for compressed encodings).
        });
      });

    }
@see https://chromedevtools.github.io/devtools-protocol/tot/Network