@fromjs/backend
Version:
57 lines (56 loc) • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/* Start proxy in a child process and enable communication */
function createProxy(params) {
return new Promise(resolve => {
const fork = require("child_process").fork;
// If debugging parent process allow debuggign child process as well
if (process.execArgv.join(",").includes("--inspect")) {
process.execArgv.push("--inspect=" + 19223);
}
const child = fork(__dirname + "/backend.proxy.js", [
JSON.stringify({
accessToken: params.accessToken,
bePort: params.options.bePort,
proxyPort: params.options.proxyPort,
certDirectory: params.options.getCertDirectory(),
dontTrack: params.options.dontTrack,
block: params.options.block,
disableDefaultBlockList: params.options.disableDefaultBlockList
})
]);
const messageResponsePromisesResolveFn = {};
const proxyInterface = {};
[
"registerEvalScript",
"instrumentForEval",
"setEnableInstrumentation",
"_getEnableInstrumentation"
].forEach(method => {
proxyInterface[method] = function () {
const messageId = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString();
const promise = new Promise(resolve => {
messageResponsePromisesResolveFn[messageId] = resolve;
child.send({
method,
arguments,
messageId
});
});
return promise;
};
});
child.on("message", function (message) {
if (message.type === "isReady") {
resolve(proxyInterface);
}
if (message.type === "storeLocs") {
params.storeLocs(message.locs);
}
if (message.type === "messageResponse") {
messageResponsePromisesResolveFn[message.messageId](message.ret);
}
});
});
}
exports.createProxy = createProxy;