61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
| 
								 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								/* eslint-disable no-process-exit */
							 | 
						||
| 
								 | 
							
								const util = require("util");
							 | 
						||
| 
								 | 
							
								const { JSDOM } = require("../../../..");
							 | 
						||
| 
								 | 
							
								const { READY_STATES } = require("./xhr-utils");
							 | 
						||
| 
								 | 
							
								const idlUtils = require("../generated/utils");
							 | 
						||
| 
								 | 
							
								const tough = require("tough-cookie");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const dom = new JSDOM();
							 | 
						||
| 
								 | 
							
								const xhr = new dom.window.XMLHttpRequest();
							 | 
						||
| 
								 | 
							
								const xhrImpl = idlUtils.implForWrapper(xhr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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());
							 | 
						||
| 
								 | 
							
								  if (flag.body && flag.body.type === "Buffer" && flag.body.data) {
							 | 
						||
| 
								 | 
							
								    flag.body = Buffer.from(flag.body.data);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  if (flag.cookieJar) {
							 | 
						||
| 
								 | 
							
								    flag.cookieJar = tough.CookieJar.fromJSON(flag.cookieJar);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  flag.synchronous = false;
							 | 
						||
| 
								 | 
							
								  Object.assign(xhrImpl.flag, flag);
							 | 
						||
| 
								 | 
							
								  const { properties } = xhrImpl;
							 | 
						||
| 
								 | 
							
								  xhrImpl.readyState = READY_STATES.OPENED;
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    xhr.addEventListener("loadend", () => {
							 | 
						||
| 
								 | 
							
								      if (properties.error) {
							 | 
						||
| 
								 | 
							
								        properties.error = properties.error.stack || util.inspect(properties.error);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      process.stdout.write(JSON.stringify({
							 | 
						||
| 
								 | 
							
								        responseURL: xhrImpl.responseURL,
							 | 
						||
| 
								 | 
							
								        status: xhrImpl.status,
							 | 
						||
| 
								 | 
							
								        statusText: xhrImpl.statusText,
							 | 
						||
| 
								 | 
							
								        properties
							 | 
						||
| 
								 | 
							
								      }), () => {
							 | 
						||
| 
								 | 
							
								        process.exit(0);
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    }, false);
							 | 
						||
| 
								 | 
							
								    xhr.send(flag.body);
							 | 
						||
| 
								 | 
							
								  } catch (error) {
							 | 
						||
| 
								 | 
							
								    properties.error += error.stack || util.inspect(error);
							 | 
						||
| 
								 | 
							
								    process.stdout.write(JSON.stringify({
							 | 
						||
| 
								 | 
							
								      responseURL: xhrImpl.responseURL,
							 | 
						||
| 
								 | 
							
								      status: xhrImpl.status,
							 | 
						||
| 
								 | 
							
								      statusText: xhrImpl.statusText,
							 | 
						||
| 
								 | 
							
								      properties
							 | 
						||
| 
								 | 
							
								    }), () => {
							 | 
						||
| 
								 | 
							
								      process.exit(0);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 |