'use strict'; var config; // Everything that uses the config should be reading it when relevant rather than // just at the beginning, so we keep the reference for the main object and just // change all of its properties to match the new config. function update(conf) { var newKeys = Object.keys(conf); Object.keys(config).forEach(function (key) { if (newKeys.indexOf(key) < 0) { delete config[key]; } else { config[key] = conf[key]; } }); console.log('config', JSON.stringify(config)); } function create(conf) { var PromiseA = require('bluebird'); var OAUTH3 = require('../packages/assets/org.oauth3'); require('../packages/assets/org.oauth3/oauth3.domains.js'); require('../packages/assets/org.oauth3/oauth3.dns.js'); require('../packages/assets/org.oauth3/oauth3.tunnel.js'); OAUTH3._hooks = require('../packages/assets/org.oauth3/oauth3.node.storage.js'); config = conf; var deps = { messenger: process , PromiseA: PromiseA , OAUTH3: OAUTH3 , request: PromiseA.promisify(require('request')) , recase: require('recase').create({}) // Note that if a custom createConnections is used it will be called with different // sets of custom options based on what is actually being proxied. Most notably the // HTTP proxying connection creation is not something we currently control. , net: require('net') }; deps.storage = require('./storage').create(deps, conf); deps.proxy = require('./proxy-conn').create(deps, conf); deps.socks5 = require('./socks5-server').create(deps, conf); deps.loopback = require('./loopback').create(deps, conf); deps.ddns = require('./ddns').create(deps, conf); require('./goldilocks.js').create(deps, conf); process.removeListener('message', create); process.on('message', update); } process.on('message', create);