“use strict”; /* eslint-disable no-process-exit */

const util = require(“util”);

const jsdom = require(“../../jsdom”); const xhrSymbols = require(“./xmlhttprequest-symbols”); const tough = require(“tough-cookie”);

const doc = jsdom.jsdom(); const xhr = new doc.defaultView.XMLHttpRequest();

const chunks = [];

process.stdin.on(“data”, chunk => {

chunks.push(chunk);

});

process.stdin.on(“end”, () => {

const buffer = Buffer.concat(chunks);
const flag = JSON.parse(buffer.toString(), (k, v) => {
  if (v && v.type === "Buffer" && v.data) {
    return new Buffer(v.data);
  }
  if (k === "cookieJar" && v) {
    return tough.CookieJar.fromJSON(v);
  }
  return v;
});
flag.synchronous = false;
xhr[xhrSymbols.flag] = flag;
const properties = xhr[xhrSymbols.properties];
properties.readyState = doc.defaultView.XMLHttpRequest.OPENED;
try {
  xhr.addEventListener("loadend", () => {
    if (properties.error) {
      properties.error = properties.error.stack || util.inspect(properties.error);
    }
    process.stdout.write(JSON.stringify({ properties }), () => {
      process.exit(0);
    });
  }, false);
  xhr.send(flag.body);
} catch (error) {
  properties.error += error.stack || util.inspect(error);
  process.stdout.write(JSON.stringify({ properties }), () => {
    process.exit(0);
  });
}

});