this.onBrowserComplete = function (browser) {
    var result = browser.lastResult

    if (result.disconnected) {
      log.error('✖ Test Disconnected')
    }

    if (result.error) {
      log.error('✖ Test Errored')
    }

    var browserId = browser.launchId || browser.id
    if (browserId in sessionMapping) {
      pendingUpdates++
      var browserstackClient = Browserstack.createAutomateClient(sessionMapping.credentials)
      var apiStatus = !(result.failed || result.error || result.disconnected) ? 'completed' : 'error'

      browserstackClient.updateSession(sessionMapping[browserId], {
        status: apiStatus
      }, function (error) {
        if (error) {
          log.error('✖ Could not update BrowserStack status')
          log.debug(error)
        }
        pendingUpdates--
        exitIfAllFinished()
      })
    }
  }
"use strict";

const path = require("path");
const fs = require("fs");
const BrowserStack = require("browserstack");
const dotenv = require("dotenv");
dotenv.config({
	path: path.join(__dirname, "../../.env")
});
const browserStackCredentials = {
	username: process.env.BROWSERSTACK_USERNAME,
	password: process.env.BROWSERSTACK_ACCESS_KEY
};

if (!process.env.BROWSERSTACK_USERNAME || !process.env.BROWSERSTACK_ACCESS_KEY) {
	throw new Error("BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESS_KEY must be set in the environment to run this script.");
}

const automateClient = BrowserStack.createAutomateClient(browserStackCredentials);

automateClient.getBrowsers(function(error, browsers) {
	console.log("Updated the browser list for automated testing via BrowserStack.");
	fs.writeFileSync(path.join(__dirname, "browserstackBrowsers.json"), JSON.stringify(browsers, null, 4));
	fs.writeFileSync(
		path.join(__dirname, "browsers.json"),
		JSON.stringify(Array.from(new Set(browsers.map(b => (b.browser_version ? `${b.browser}/${b.browser_version}` : `${b.os}/${b.os_version}`)))).sort(), null, 4)
	);
});