{"version":3,"sources":["meteor://💻app/packages/webapp/webapp_server.js","meteor://💻app/packages/webapp/connect.js","meteor://💻app/packages/webapp/socket_file.js"],"names":["_objectSpread","module1","link","default","v","export","WebApp","WebAppInternals","assert","readFileSync","chmodSync","chownSync","createServer","userInfo","pathJoin","pathDirname","join","dirname","parseUrl","parse","createHash","connect","compress","cookieParser","qs","parseRequest","basicAuth","lookupUserAgent","lookup","isModern","send","removeExistingSocketFile","registerSocketFileCleanup","cluster","whomst","onMessage","SHORT_SOCKET_TIMEOUT","LONG_SOCKET_TIMEOUT","hasOwn","Object","prototype","hasOwnProperty","NpmModules","version","Npm","require","module","defaultArch","clientPrograms","archPath","bundledJsCssUrlRewriteHook","url","bundledPrefix","__meteor_runtime_config__","ROOT_URL_PATH_PREFIX","sha1","contents","hash","update","digest","shouldCompress","req","res","headers","filter","camelCase","name","parts","split","toLowerCase","i","length","charAt","toUpperCase","substr","identifyBrowser","userAgentString","userAgent","family","major","minor","patch","categorizeRequest","browser","arch","modern","path","pathname","categorized","dynamicHead","dynamicBody","cookies","pathParts","archKey","startsWith","archCleaned","slice","call","splice","assign","preferredArchOrder","htmlAttributeHooks","getHtmlAttributes","request","combinedAttributes","_","each","hook","attributes","Error","extend","addHtmlAttributeHook","push","appUrl","RoutePolicy","classify","Meteor","startup","getter","key","program","value","calculateClientHash","clientHash","calculateClientHashRefreshable","calculateClientHashNonRefreshable","calculateClientHashReplaceable","getRefreshableAssets","_timeoutAdjustmentRequestCallback","setTimeout","finishListeners","listeners","removeAllListeners","on","l","boilerplateByArch","boilerplateDataCallbacks","create","registerBoilerplateDataCallback","callback","previousCallback","strictEqual","getBoilerplate","getBoilerplateAsync","await","encodeRuntimeConfig","rtimeConfig","JSON","stringify","encodeURIComponent","decodeRuntimeConfig","rtimeConfigStr","decodeURIComponent","runtimeConfig","hooks","Hook","updateHooks","isUpdatedByArch","addRuntimeConfigHook","register","boilerplate","forEach","meteorRuntimeConfig","encodedCurrentConfig","baseData","updated","data","htmlAttributes","pick","madeChanges","promise","Promise","resolve","keys","then","result","stream","toHTMLStream","statusCode","addUpdatedNotifyHook","handler","generateBoilerplateInstance","manifest","additionalOptions","runtimeConfigOverrides","cb","Boilerplate","pathMapper","itemPath","baseDataExtension","additionalStaticJs","map","meteorRuntimeHash","rootUrlPathPrefix","sriMode","inlineScriptsAllowed","inline","staticFilesMiddleware","staticFilesByArch","next","e","serveStaticJs","s","method","settings","packages","webapp","alwaysReturnContent","writeHead","Buffer","byteLength","write","end","status","Allow","has","paused","info","getStaticFileInfo","maxAge","cacheable","setHeader","sourceMapUrl","type","content","absolutePath","maxage","dotfiles","lastModified","err","Log","error","pipe","originalPath","staticArchList","archIndex","indexOf","unshift","some","staticFiles","finalize","parsePort","port","parsedPort","parseInt","Number","isNaN","pauseClient","generateClientProgram","runWebAppServer","shuttingDown","syncQueue","_SynchronousQueue","getItemPathname","itemUrl","reloadClientPrograms","runTask","configJson","__meteor_bootstrap__","clientArchs","clientPaths","stack","process","exit","unpause","clientDir","serverDir","programJsonPath","programJson","code","format","item","where","sourceMap","PUBLIC_SETTINGS","configOverrides","oldProgram","newProgram","WebAppHashing","versionRefreshable","versionNonRefreshable","replaceable","versionReplaceable","_type","cordovaCompatibilityVersions","hmrVersion","manifestUrlPrefix","replace","manifestUrl","Package","autoupdate","AUTOUPDATE_VERSION","Autoupdate","autoupdateVersion","env","generateBoilerplateForArch","defaultOptionsForArch","DDP_DEFAULT_CONNECTION_URL","MOBILE_DDP_URL","absoluteUrl","ROOT_URL","MOBILE_ROOT_URL","generateBoilerplate","refreshableAssets","css","file","app","rawConnectHandlers","use","isValidUrl","response","query","getPathParts","shift","isPrefixOf","prefix","array","every","part","pathPrefix","search","prefixParts","meteorInternalHandlers","packageAndAppHandlers","suppressConnectErrors","isDevelopment","newHeaders","catch","httpServer","onListeningCallbacks","socket","destroyed","message","destroy","connectHandlers","connectApp","onListening","f","startListening","listenOptions","listen","exports","main","argv","startHttpServer","bindEnvironment","METEOR_PRINT_ON_LISTEN","console","log","callbacks","localPort","PORT","unixSocketPath","UNIX_SOCKET_PATH","isWorker","workerName","worker","id","unixSocketPermissions","UNIX_SOCKET_PERMISSIONS","trim","test","unixSocketGroup","UNIX_SOCKET_GROUP","unixSocketGroupInfo","sync","group","uid","gid","host","BIND_IP","setInlineScriptsAllowed","enableSubresourceIntegrity","use_credentials","setBundledJsCssUrlRewriteHook","hookFn","setBundledJsCssPrefix","self","addStaticJs","npmConnect","connectArgs","handlers","apply","originalUse","useArgs","originalLength","entry","originalHandle","handle","asyncApply","arguments","statSync","unlinkSync","existsSync","socketPath","isSocket","eventEmitter","signal"],"mappings":"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","file":"/packages/webapp.js","sourcesContent":["import assert from 'assert';\nimport { readFileSync, chmodSync, chownSync } from 'fs';\nimport { createServer } from 'http';\nimport { userInfo } from 'os';\nimport { join as pathJoin, dirname as pathDirname } from 'path';\nimport { parse as parseUrl } from 'url';\nimport { createHash } from 'crypto';\nimport { connect } from './connect.js';\nimport compress from 'compression';\nimport cookieParser from 'cookie-parser';\nimport qs from 'qs';\nimport parseRequest from 'parseurl';\nimport basicAuth from 'basic-auth-connect';\nimport { lookup as lookupUserAgent } from 'useragent';\nimport { isModern } from 'meteor/modern-browsers';\nimport send from 'send';\nimport {\n removeExistingSocketFile,\n registerSocketFileCleanup,\n} from './socket_file.js';\nimport cluster from 'cluster';\nimport whomst from '@vlasky/whomst';\n\nvar SHORT_SOCKET_TIMEOUT = 5 * 1000;\nvar LONG_SOCKET_TIMEOUT = 120 * 1000;\n\nexport const WebApp = {};\nexport const WebAppInternals = {};\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\n// backwards compat to 2.0 of connect\nconnect.basicAuth = basicAuth;\n\nWebAppInternals.NpmModules = {\n connect: {\n version: Npm.require('connect/package.json').version,\n module: connect,\n },\n};\n\n// Though we might prefer to use web.browser (modern) as the default\n// architecture, safety requires a more compatible defaultArch.\nWebApp.defaultArch = 'web.browser.legacy';\n\n// XXX maps archs to manifests\nWebApp.clientPrograms = {};\n\n// XXX maps archs to program path on filesystem\nvar archPath = {};\n\nvar bundledJsCssUrlRewriteHook = function(url) {\n var bundledPrefix = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '';\n return bundledPrefix + url;\n};\n\nvar sha1 = function(contents) {\n var hash = createHash('sha1');\n hash.update(contents);\n return hash.digest('hex');\n};\n\nfunction shouldCompress(req, res) {\n if (req.headers['x-no-compression']) {\n // don't compress responses with this request header\n return false;\n }\n\n // fallback to standard filter function\n return compress.filter(req, res);\n}\n\n// #BrowserIdentification\n//\n// We have multiple places that want to identify the browser: the\n// unsupported browser page, the appcache package, and, eventually\n// delivering browser polyfills only as needed.\n//\n// To avoid detecting the browser in multiple places ad-hoc, we create a\n// Meteor \"browser\" object. It uses but does not expose the npm\n// useragent module (we could choose a different mechanism to identify\n// the browser in the future if we wanted to). The browser object\n// contains\n//\n// * `name`: the name of the browser in camel case\n// * `major`, `minor`, `patch`: integers describing the browser version\n//\n// Also here is an early version of a Meteor `request` object, intended\n// to be a high-level description of the request without exposing\n// details of connect's low-level `req`. Currently it contains:\n//\n// * `browser`: browser identification object described above\n// * `url`: parsed url, including parsed query params\n//\n// As a temporary hack there is a `categorizeRequest` function on WebApp which\n// converts a connect `req` to a Meteor `request`. This can go away once smart\n// packages such as appcache are being passed a `request` object directly when\n// they serve content.\n//\n// This allows `request` to be used uniformly: it is passed to the html\n// attributes hook, and the appcache package can use it when deciding\n// whether to generate a 404 for the manifest.\n//\n// Real routing / server side rendering will probably refactor this\n// heavily.\n\n// e.g. \"Mobile Safari\" => \"mobileSafari\"\nvar camelCase = function(name) {\n var parts = name.split(' ');\n parts[0] = parts[0].toLowerCase();\n for (var i = 1; i < parts.length; ++i) {\n parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].substr(1);\n }\n return parts.join('');\n};\n\nvar identifyBrowser = function(userAgentString) {\n var userAgent = lookupUserAgent(userAgentString);\n return {\n name: camelCase(userAgent.family),\n major: +userAgent.major,\n minor: +userAgent.minor,\n patch: +userAgent.patch,\n };\n};\n\n// XXX Refactor as part of implementing real routing.\nWebAppInternals.identifyBrowser = identifyBrowser;\n\nWebApp.categorizeRequest = function(req) {\n if (req.browser && req.arch && typeof req.modern === 'boolean') {\n // Already categorized.\n return req;\n }\n\n const browser = identifyBrowser(req.headers['user-agent']);\n const modern = isModern(browser);\n const path =\n typeof req.pathname === 'string'\n ? req.pathname\n : parseRequest(req).pathname;\n\n const categorized = {\n browser,\n modern,\n path,\n arch: WebApp.defaultArch,\n url: parseUrl(req.url, true),\n dynamicHead: req.dynamicHead,\n dynamicBody: req.dynamicBody,\n headers: req.headers,\n cookies: req.cookies,\n };\n\n const pathParts = path.split('/');\n const archKey = pathParts[1];\n\n if (archKey.startsWith('__')) {\n const archCleaned = 'web.' + archKey.slice(2);\n if (hasOwn.call(WebApp.clientPrograms, archCleaned)) {\n pathParts.splice(1, 1); // Remove the archKey part.\n return Object.assign(categorized, {\n arch: archCleaned,\n path: pathParts.join('/'),\n });\n }\n }\n\n // TODO Perhaps one day we could infer Cordova clients here, so that we\n // wouldn't have to use prefixed \"/__cordova/...\" URLs.\n const preferredArchOrder = isModern(browser)\n ? ['web.browser', 'web.browser.legacy']\n : ['web.browser.legacy', 'web.browser'];\n\n for (const arch of preferredArchOrder) {\n // If our preferred arch is not available, it's better to use another\n // client arch that is available than to guarantee the site won't work\n // by returning an unknown arch. For example, if web.browser.legacy is\n // excluded using the --exclude-archs command-line option, legacy\n // clients are better off receiving web.browser (which might actually\n // work) than receiving an HTTP 404 response. If none of the archs in\n // preferredArchOrder are defined, only then should we send a 404.\n if (hasOwn.call(WebApp.clientPrograms, arch)) {\n return Object.assign(categorized, { arch });\n }\n }\n\n return categorized;\n};\n\n// HTML attribute hooks: functions to be called to determine any attributes to\n// be added to the '' tag. Each function is passed a 'request' object (see\n// #BrowserIdentification) and should return null or object.\nvar htmlAttributeHooks = [];\nvar getHtmlAttributes = function(request) {\n var combinedAttributes = {};\n _.each(htmlAttributeHooks || [], function(hook) {\n var attributes = hook(request);\n if (attributes === null) return;\n if (typeof attributes !== 'object')\n throw Error('HTML attribute hook must return null or object');\n _.extend(combinedAttributes, attributes);\n });\n return combinedAttributes;\n};\nWebApp.addHtmlAttributeHook = function(hook) {\n htmlAttributeHooks.push(hook);\n};\n\n// Serve app HTML for this URL?\nvar appUrl = function(url) {\n if (url === '/favicon.ico' || url === '/robots.txt') return false;\n\n // NOTE: app.manifest is not a web standard like favicon.ico and\n // robots.txt. It is a file name we have chosen to use for HTML5\n // appcache URLs. It is included here to prevent using an appcache\n // then removing it from poisoning an app permanently. Eventually,\n // once we have server side routing, this won't be needed as\n // unknown URLs with return a 404 automatically.\n if (url === '/app.manifest') return false;\n\n // Avoid serving app HTML for declared routes such as /sockjs/.\n if (RoutePolicy.classify(url)) return false;\n\n // we currently return app HTML on all URLs by default\n return true;\n};\n\n// We need to calculate the client hash after all packages have loaded\n// to give them a chance to populate __meteor_runtime_config__.\n//\n// Calculating the hash during startup means that packages can only\n// populate __meteor_runtime_config__ during load, not during startup.\n//\n// Calculating instead it at the beginning of main after all startup\n// hooks had run would allow packages to also populate\n// __meteor_runtime_config__ during startup, but that's too late for\n// autoupdate because it needs to have the client hash at startup to\n// insert the auto update version itself into\n// __meteor_runtime_config__ to get it to the client.\n//\n// An alternative would be to give autoupdate a \"post-start,\n// pre-listen\" hook to allow it to insert the auto update version at\n// the right moment.\n\nMeteor.startup(function() {\n function getter(key) {\n return function(arch) {\n arch = arch || WebApp.defaultArch;\n const program = WebApp.clientPrograms[arch];\n const value = program && program[key];\n // If this is the first time we have calculated this hash,\n // program[key] will be a thunk (lazy function with no parameters)\n // that we should call to do the actual computation.\n return typeof value === 'function' ? (program[key] = value()) : value;\n };\n }\n\n WebApp.calculateClientHash = WebApp.clientHash = getter('version');\n WebApp.calculateClientHashRefreshable = getter('versionRefreshable');\n WebApp.calculateClientHashNonRefreshable = getter('versionNonRefreshable');\n WebApp.calculateClientHashReplaceable = getter('versionReplaceable');\n WebApp.getRefreshableAssets = getter('refreshableAssets');\n});\n\n// When we have a request pending, we want the socket timeout to be long, to\n// give ourselves a while to serve it, and to allow sockjs long polls to\n// complete. On the other hand, we want to close idle sockets relatively\n// quickly, so that we can shut down relatively promptly but cleanly, without\n// cutting off anyone's response.\nWebApp._timeoutAdjustmentRequestCallback = function(req, res) {\n // this is really just req.socket.setTimeout(LONG_SOCKET_TIMEOUT);\n req.setTimeout(LONG_SOCKET_TIMEOUT);\n // Insert our new finish listener to run BEFORE the existing one which removes\n // the response from the socket.\n var finishListeners = res.listeners('finish');\n // XXX Apparently in Node 0.12 this event was called 'prefinish'.\n // https://github.com/joyent/node/commit/7c9b6070\n // But it has switched back to 'finish' in Node v4:\n // https://github.com/nodejs/node/pull/1411\n res.removeAllListeners('finish');\n res.on('finish', function() {\n res.setTimeout(SHORT_SOCKET_TIMEOUT);\n });\n _.each(finishListeners, function(l) {\n res.on('finish', l);\n });\n};\n\n// Will be updated by main before we listen.\n// Map from client arch to boilerplate object.\n// Boilerplate object has:\n// - func: XXX\n// - baseData: XXX\nvar boilerplateByArch = {};\n\n// Register a callback function that can selectively modify boilerplate\n// data given arguments (request, data, arch). The key should be a unique\n// identifier, to prevent accumulating duplicate callbacks from the same\n// call site over time. Callbacks will be called in the order they were\n// registered. A callback should return false if it did not make any\n// changes affecting the boilerplate. Passing null deletes the callback.\n// Any previous callback registered for this key will be returned.\nconst boilerplateDataCallbacks = Object.create(null);\nWebAppInternals.registerBoilerplateDataCallback = function(key, callback) {\n const previousCallback = boilerplateDataCallbacks[key];\n\n if (typeof callback === 'function') {\n boilerplateDataCallbacks[key] = callback;\n } else {\n assert.strictEqual(callback, null);\n delete boilerplateDataCallbacks[key];\n }\n\n // Return the previous callback in case the new callback needs to call\n // it; for example, when the new callback is a wrapper for the old.\n return previousCallback || null;\n};\n\n// Given a request (as returned from `categorizeRequest`), return the\n// boilerplate HTML to serve for that request.\n//\n// If a previous connect middleware has rendered content for the head or body,\n// returns the boilerplate with that content patched in otherwise\n// memoizes on HTML attributes (used by, eg, appcache) and whether inline\n// scripts are currently allowed.\n// XXX so far this function is always called with arch === 'web.browser'\nfunction getBoilerplate(request, arch) {\n return getBoilerplateAsync(request, arch).await();\n}\n\n/**\n * @summary Takes a runtime configuration object and\n * returns an encoded runtime string.\n * @locus Server\n * @param {Object} rtimeConfig\n * @returns {String}\n */\nWebApp.encodeRuntimeConfig = function(rtimeConfig) {\n return JSON.stringify(encodeURIComponent(JSON.stringify(rtimeConfig)));\n};\n\n/**\n * @summary Takes an encoded runtime string and returns\n * a runtime configuration object.\n * @locus Server\n * @param {String} rtimeConfigString\n * @returns {Object}\n */\nWebApp.decodeRuntimeConfig = function(rtimeConfigStr) {\n return JSON.parse(decodeURIComponent(JSON.parse(rtimeConfigStr)));\n};\n\nconst runtimeConfig = {\n // hooks will contain the callback functions\n // set by the caller to addRuntimeConfigHook\n hooks: new Hook(),\n // updateHooks will contain the callback functions\n // set by the caller to addUpdatedNotifyHook\n updateHooks: new Hook(),\n // isUpdatedByArch is an object containing fields for each arch\n // that this server supports.\n // - Each field will be true when the server updates the runtimeConfig for that arch.\n // - When the hook callback is called the update field in the callback object will be\n // set to isUpdatedByArch[arch].\n // = isUpdatedyByArch[arch] is reset to false after the callback.\n // This enables the caller to cache data efficiently so they do not need to\n // decode & update data on every callback when the runtimeConfig is not changing.\n isUpdatedByArch: {},\n};\n\n/**\n * @name addRuntimeConfigHookCallback(options)\n * @locus Server\n * @isprototype true\n * @summary Callback for `addRuntimeConfigHook`.\n *\n * If the handler returns a _falsy_ value the hook will not\n * modify the runtime configuration.\n *\n * If the handler returns a _String_ the hook will substitute\n * the string for the encoded configuration string.\n *\n * **Warning:** the hook does not check the return value at all it is\n * the responsibility of the caller to get the formatting correct using\n * the helper functions.\n *\n * `addRuntimeConfigHookCallback` takes only one `Object` argument\n * with the following fields:\n * @param {Object} options\n * @param {String} options.arch The architecture of the client\n * requesting a new runtime configuration. This can be one of\n * `web.browser`, `web.browser.legacy` or `web.cordova`.\n * @param {Object} options.request\n * A NodeJs [IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage)\n * https://nodejs.org/api/http.html#http_class_http_incomingmessage\n * `Object` that can be used to get information about the incoming request.\n * @param {String} options.encodedCurrentConfig The current configuration object\n * encoded as a string for inclusion in the root html.\n * @param {Boolean} options.updated `true` if the config for this architecture\n * has been updated since last called, otherwise `false`. This flag can be used\n * to cache the decoding/encoding for each architecture.\n */\n\n/**\n * @summary Hook that calls back when the meteor runtime configuration,\n * `__meteor_runtime_config__` is being sent to any client.\n *\n * **returns**: _Object_ `{ stop: function, callback: function }`\n * - `stop` _Function_ Call `stop()` to stop getting callbacks.\n * - `callback` _Function_ The passed in `callback`.\n * @locus Server\n * @param {addRuntimeConfigHookCallback} callback\n * See `addRuntimeConfigHookCallback` description.\n * @returns {Object} {{ stop: function, callback: function }}\n * Call the returned `stop()` to stop getting callbacks.\n * The passed in `callback` is returned also.\n */\nWebApp.addRuntimeConfigHook = function(callback) {\n return runtimeConfig.hooks.register(callback);\n};\n\nfunction getBoilerplateAsync(request, arch) {\n let boilerplate = boilerplateByArch[arch];\n runtimeConfig.hooks.forEach(hook => {\n const meteorRuntimeConfig = hook({\n arch,\n request,\n encodedCurrentConfig: boilerplate.baseData.meteorRuntimeConfig,\n updated: runtimeConfig.isUpdatedByArch[arch],\n });\n if (!meteorRuntimeConfig) return;\n boilerplate.baseData = Object.assign({}, boilerplate.baseData, {\n meteorRuntimeConfig,\n });\n });\n runtimeConfig.isUpdatedByArch[arch] = false;\n const data = Object.assign(\n {},\n boilerplate.baseData,\n {\n htmlAttributes: getHtmlAttributes(request),\n },\n _.pick(request, 'dynamicHead', 'dynamicBody')\n );\n\n let madeChanges = false;\n let promise = Promise.resolve();\n\n Object.keys(boilerplateDataCallbacks).forEach(key => {\n promise = promise\n .then(() => {\n const callback = boilerplateDataCallbacks[key];\n return callback(request, data, arch);\n })\n .then(result => {\n // Callbacks should return false if they did not make any changes.\n if (result !== false) {\n madeChanges = true;\n }\n });\n });\n\n return promise.then(() => ({\n stream: boilerplate.toHTMLStream(data),\n statusCode: data.statusCode,\n headers: data.headers,\n }));\n}\n\n/**\n * @name addUpdatedNotifyHookCallback(options)\n * @summary callback handler for `addupdatedNotifyHook`\n * @isprototype true\n * @locus Server\n * @param {Object} options\n * @param {String} options.arch The architecture that is being updated.\n * This can be one of `web.browser`, `web.browser.legacy` or `web.cordova`.\n * @param {Object} options.manifest The new updated manifest object for\n * this `arch`.\n * @param {Object} options.runtimeConfig The new updated configuration\n * object for this `arch`.\n */\n\n/**\n * @summary Hook that runs when the meteor runtime configuration\n * is updated. Typically the configuration only changes during development mode.\n * @locus Server\n * @param {addUpdatedNotifyHookCallback} handler\n * The `handler` is called on every change to an `arch` runtime configuration.\n * See `addUpdatedNotifyHookCallback`.\n * @returns {Object} {{ stop: function, callback: function }}\n */\nWebApp.addUpdatedNotifyHook = function(handler) {\n return runtimeConfig.updateHooks.register(handler);\n};\n\nWebAppInternals.generateBoilerplateInstance = function(\n arch,\n manifest,\n additionalOptions\n) {\n additionalOptions = additionalOptions || {};\n\n runtimeConfig.isUpdatedByArch[arch] = true;\n const rtimeConfig = {\n ...__meteor_runtime_config__,\n ...(additionalOptions.runtimeConfigOverrides || {}),\n };\n runtimeConfig.updateHooks.forEach(cb => {\n cb({ arch, manifest, runtimeConfig: rtimeConfig });\n });\n\n const meteorRuntimeConfig = JSON.stringify(\n encodeURIComponent(JSON.stringify(rtimeConfig))\n );\n\n return new Boilerplate(\n arch,\n manifest,\n Object.assign(\n {\n pathMapper(itemPath) {\n return pathJoin(archPath[arch], itemPath);\n },\n baseDataExtension: {\n additionalStaticJs: _.map(additionalStaticJs || [], function(\n contents,\n pathname\n ) {\n return {\n pathname: pathname,\n contents: contents,\n };\n }),\n // Convert to a JSON string, then get rid of most weird characters, then\n // wrap in double quotes. (The outermost JSON.stringify really ought to\n // just be \"wrap in double quotes\" but we use it to be safe.) This might\n // end up inside a \", but normal {{spacebars}} escaping escapes too much! See\n // https://github.com/meteor/meteor/issues/3730\n meteorRuntimeConfig,\n meteorRuntimeHash: sha1(meteorRuntimeConfig),\n rootUrlPathPrefix:\n __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '',\n bundledJsCssUrlRewriteHook: bundledJsCssUrlRewriteHook,\n sriMode: sriMode,\n inlineScriptsAllowed: WebAppInternals.inlineScriptsAllowed(),\n inline: additionalOptions.inline,\n },\n },\n additionalOptions\n )\n );\n};\n\n// A mapping from url path to architecture (e.g. \"web.browser\") to static\n// file information with the following fields:\n// - type: the type of file to be served\n// - cacheable: optionally, whether the file should be cached or not\n// - sourceMapUrl: optionally, the url of the source map\n//\n// Info also contains one of the following:\n// - content: the stringified content that should be served at this path\n// - absolutePath: the absolute path on disk to the file\n\n// Serve static files from the manifest or added with\n// `addStaticJs`. Exported for tests.\nWebAppInternals.staticFilesMiddleware = async function(\n staticFilesByArch,\n req,\n res,\n next\n) {\n var pathname = parseRequest(req).pathname;\n try {\n pathname = decodeURIComponent(pathname);\n } catch (e) {\n next();\n return;\n }\n\n var serveStaticJs = function(s) {\n if (\n req.method === 'GET' ||\n req.method === 'HEAD' ||\n Meteor.settings.packages?.webapp?.alwaysReturnContent\n ) {\n res.writeHead(200, {\n 'Content-type': 'application/javascript; charset=UTF-8',\n 'Content-Length': Buffer.byteLength(s),\n });\n res.write(s);\n res.end();\n } else {\n const status = req.method === 'OPTIONS' ? 200 : 405;\n res.writeHead(status, {\n Allow: 'OPTIONS, GET, HEAD',\n 'Content-Length': '0',\n });\n res.end();\n }\n };\n\n if (\n _.has(additionalStaticJs, pathname) &&\n !WebAppInternals.inlineScriptsAllowed()\n ) {\n serveStaticJs(additionalStaticJs[pathname]);\n return;\n }\n\n const { arch, path } = WebApp.categorizeRequest(req);\n\n if (!hasOwn.call(WebApp.clientPrograms, arch)) {\n // We could come here in case we run with some architectures excluded\n next();\n return;\n }\n\n // If pauseClient(arch) has been called, program.paused will be a\n // Promise that will be resolved when the program is unpaused.\n const program = WebApp.clientPrograms[arch];\n await program.paused;\n\n if (\n path === '/meteor_runtime_config.js' &&\n !WebAppInternals.inlineScriptsAllowed()\n ) {\n serveStaticJs(\n `__meteor_runtime_config__ = ${program.meteorRuntimeConfig};`\n );\n return;\n }\n\n const info = getStaticFileInfo(staticFilesByArch, pathname, path, arch);\n if (!info) {\n next();\n return;\n }\n // \"send\" will handle HEAD & GET requests\n if (\n req.method !== 'HEAD' &&\n req.method !== 'GET' &&\n !Meteor.settings.packages?.webapp?.alwaysReturnContent\n ) {\n const status = req.method === 'OPTIONS' ? 200 : 405;\n res.writeHead(status, {\n Allow: 'OPTIONS, GET, HEAD',\n 'Content-Length': '0',\n });\n res.end();\n return;\n }\n\n // We don't need to call pause because, unlike 'static', once we call into\n // 'send' and yield to the event loop, we never call another handler with\n // 'next'.\n\n // Cacheable files are files that should never change. Typically\n // named by their hash (eg meteor bundled js and css files).\n // We cache them ~forever (1yr).\n const maxAge = info.cacheable ? 1000 * 60 * 60 * 24 * 365 : 0;\n\n if (info.cacheable) {\n // Since we use req.headers[\"user-agent\"] to determine whether the\n // client should receive modern or legacy resources, tell the client\n // to invalidate cached resources when/if its user agent string\n // changes in the future.\n res.setHeader('Vary', 'User-Agent');\n }\n\n // Set the X-SourceMap header, which current Chrome, FireFox, and Safari\n // understand. (The SourceMap header is slightly more spec-correct but FF\n // doesn't understand it.)\n //\n // You may also need to enable source maps in Chrome: open dev tools, click\n // the gear in the bottom right corner, and select \"enable source maps\".\n if (info.sourceMapUrl) {\n res.setHeader(\n 'X-SourceMap',\n __meteor_runtime_config__.ROOT_URL_PATH_PREFIX + info.sourceMapUrl\n );\n }\n\n if (info.type === 'js' || info.type === 'dynamic js') {\n res.setHeader('Content-Type', 'application/javascript; charset=UTF-8');\n } else if (info.type === 'css') {\n res.setHeader('Content-Type', 'text/css; charset=UTF-8');\n } else if (info.type === 'json') {\n res.setHeader('Content-Type', 'application/json; charset=UTF-8');\n }\n\n if (info.hash) {\n res.setHeader('ETag', '\"' + info.hash + '\"');\n }\n\n if (info.content) {\n res.setHeader('Content-Length', Buffer.byteLength(info.content));\n res.write(info.content);\n res.end();\n } else {\n send(req, info.absolutePath, {\n maxage: maxAge,\n dotfiles: 'allow', // if we specified a dotfile in the manifest, serve it\n lastModified: false, // don't set last-modified based on the file date\n })\n .on('error', function(err) {\n Log.error('Error serving static file ' + err);\n res.writeHead(500);\n res.end();\n })\n .on('directory', function() {\n Log.error('Unexpected directory ' + info.absolutePath);\n res.writeHead(500);\n res.end();\n })\n .pipe(res);\n }\n};\n\nfunction getStaticFileInfo(staticFilesByArch, originalPath, path, arch) {\n if (!hasOwn.call(WebApp.clientPrograms, arch)) {\n return null;\n }\n\n // Get a list of all available static file architectures, with arch\n // first in the list if it exists.\n const staticArchList = Object.keys(staticFilesByArch);\n const archIndex = staticArchList.indexOf(arch);\n if (archIndex > 0) {\n staticArchList.unshift(staticArchList.splice(archIndex, 1)[0]);\n }\n\n let info = null;\n\n staticArchList.some(arch => {\n const staticFiles = staticFilesByArch[arch];\n\n function finalize(path) {\n info = staticFiles[path];\n // Sometimes we register a lazy function instead of actual data in\n // the staticFiles manifest.\n if (typeof info === 'function') {\n info = staticFiles[path] = info();\n }\n return info;\n }\n\n // If staticFiles contains originalPath with the arch inferred above,\n // use that information.\n if (hasOwn.call(staticFiles, originalPath)) {\n return finalize(originalPath);\n }\n\n // If categorizeRequest returned an alternate path, try that instead.\n if (path !== originalPath && hasOwn.call(staticFiles, path)) {\n return finalize(path);\n }\n });\n\n return info;\n}\n\n// Parse the passed in port value. Return the port as-is if it's a String\n// (e.g. a Windows Server style named pipe), otherwise return the port as an\n// integer.\n//\n// DEPRECATED: Direct use of this function is not recommended; it is no\n// longer used internally, and will be removed in a future release.\nWebAppInternals.parsePort = port => {\n let parsedPort = parseInt(port);\n if (Number.isNaN(parsedPort)) {\n parsedPort = port;\n }\n return parsedPort;\n};\n\nimport { onMessage } from 'meteor/inter-process-messaging';\n\nonMessage('webapp-pause-client', async ({ arch }) => {\n WebAppInternals.pauseClient(arch);\n});\n\nonMessage('webapp-reload-client', async ({ arch }) => {\n WebAppInternals.generateClientProgram(arch);\n});\n\nfunction runWebAppServer() {\n var shuttingDown = false;\n var syncQueue = new Meteor._SynchronousQueue();\n\n var getItemPathname = function(itemUrl) {\n return decodeURIComponent(parseUrl(itemUrl).pathname);\n };\n\n WebAppInternals.reloadClientPrograms = function() {\n syncQueue.runTask(function() {\n const staticFilesByArch = Object.create(null);\n\n const { configJson } = __meteor_bootstrap__;\n const clientArchs =\n configJson.clientArchs || Object.keys(configJson.clientPaths);\n\n try {\n clientArchs.forEach(arch => {\n generateClientProgram(arch, staticFilesByArch);\n });\n WebAppInternals.staticFilesByArch = staticFilesByArch;\n } catch (e) {\n Log.error('Error reloading the client program: ' + e.stack);\n process.exit(1);\n }\n });\n };\n\n // Pause any incoming requests and make them wait for the program to be\n // unpaused the next time generateClientProgram(arch) is called.\n WebAppInternals.pauseClient = function(arch) {\n syncQueue.runTask(() => {\n const program = WebApp.clientPrograms[arch];\n const { unpause } = program;\n program.paused = new Promise(resolve => {\n if (typeof unpause === 'function') {\n // If there happens to be an existing program.unpause function,\n // compose it with the resolve function.\n program.unpause = function() {\n unpause();\n resolve();\n };\n } else {\n program.unpause = resolve;\n }\n });\n });\n };\n\n WebAppInternals.generateClientProgram = function(arch) {\n syncQueue.runTask(() => generateClientProgram(arch));\n };\n\n function generateClientProgram(\n arch,\n staticFilesByArch = WebAppInternals.staticFilesByArch\n ) {\n const clientDir = pathJoin(\n pathDirname(__meteor_bootstrap__.serverDir),\n arch\n );\n\n // read the control for the client we'll be serving up\n const programJsonPath = pathJoin(clientDir, 'program.json');\n\n let programJson;\n try {\n programJson = JSON.parse(readFileSync(programJsonPath));\n } catch (e) {\n if (e.code === 'ENOENT') return;\n throw e;\n }\n\n if (programJson.format !== 'web-program-pre1') {\n throw new Error(\n 'Unsupported format for client assets: ' +\n JSON.stringify(programJson.format)\n );\n }\n\n if (!programJsonPath || !clientDir || !programJson) {\n throw new Error('Client config file not parsed.');\n }\n\n archPath[arch] = clientDir;\n const staticFiles = (staticFilesByArch[arch] = Object.create(null));\n\n const { manifest } = programJson;\n manifest.forEach(item => {\n if (item.url && item.where === 'client') {\n staticFiles[getItemPathname(item.url)] = {\n absolutePath: pathJoin(clientDir, item.path),\n cacheable: item.cacheable,\n hash: item.hash,\n // Link from source to its map\n sourceMapUrl: item.sourceMapUrl,\n type: item.type,\n };\n\n if (item.sourceMap) {\n // Serve the source map too, under the specified URL. We assume\n // all source maps are cacheable.\n staticFiles[getItemPathname(item.sourceMapUrl)] = {\n absolutePath: pathJoin(clientDir, item.sourceMap),\n cacheable: true,\n };\n }\n }\n });\n\n const { PUBLIC_SETTINGS } = __meteor_runtime_config__;\n const configOverrides = {\n PUBLIC_SETTINGS,\n };\n\n const oldProgram = WebApp.clientPrograms[arch];\n const newProgram = (WebApp.clientPrograms[arch] = {\n format: 'web-program-pre1',\n manifest: manifest,\n // Use arrow functions so that these versions can be lazily\n // calculated later, and so that they will not be included in the\n // staticFiles[manifestUrl].content string below.\n //\n // Note: these version calculations must be kept in agreement with\n // CordovaBuilder#appendVersion in tools/cordova/builder.js, or hot\n // code push will reload Cordova apps unnecessarily.\n version: () =>\n WebAppHashing.calculateClientHash(manifest, null, configOverrides),\n versionRefreshable: () =>\n WebAppHashing.calculateClientHash(\n manifest,\n type => type === 'css',\n configOverrides\n ),\n versionNonRefreshable: () =>\n WebAppHashing.calculateClientHash(\n manifest,\n (type, replaceable) => type !== 'css' && !replaceable,\n configOverrides\n ),\n versionReplaceable: () =>\n WebAppHashing.calculateClientHash(\n manifest,\n (_type, replaceable) => replaceable,\n configOverrides\n ),\n cordovaCompatibilityVersions: programJson.cordovaCompatibilityVersions,\n PUBLIC_SETTINGS,\n hmrVersion: programJson.hmrVersion,\n });\n\n // Expose program details as a string reachable via the following URL.\n const manifestUrlPrefix = '/__' + arch.replace(/^web\\./, '');\n const manifestUrl = manifestUrlPrefix + getItemPathname('/manifest.json');\n\n staticFiles[manifestUrl] = () => {\n if (Package.autoupdate) {\n const {\n AUTOUPDATE_VERSION = Package.autoupdate.Autoupdate.autoupdateVersion,\n } = process.env;\n\n if (AUTOUPDATE_VERSION) {\n newProgram.version = AUTOUPDATE_VERSION;\n }\n }\n\n if (typeof newProgram.version === 'function') {\n newProgram.version = newProgram.version();\n }\n\n return {\n content: JSON.stringify(newProgram),\n cacheable: false,\n hash: newProgram.version,\n type: 'json',\n };\n };\n\n generateBoilerplateForArch(arch);\n\n // If there are any requests waiting on oldProgram.paused, let them\n // continue now (using the new program).\n if (oldProgram && oldProgram.paused) {\n oldProgram.unpause();\n }\n }\n\n const defaultOptionsForArch = {\n 'web.cordova': {\n runtimeConfigOverrides: {\n // XXX We use absoluteUrl() here so that we serve https://\n // URLs to cordova clients if force-ssl is in use. If we were\n // to use __meteor_runtime_config__.ROOT_URL instead of\n // absoluteUrl(), then Cordova clients would immediately get a\n // HCP setting their DDP_DEFAULT_CONNECTION_URL to\n // http://example.meteor.com. This breaks the app, because\n // force-ssl doesn't serve CORS headers on 302\n // redirects. (Plus it's undesirable to have clients\n // connecting to http://example.meteor.com when force-ssl is\n // in use.)\n DDP_DEFAULT_CONNECTION_URL:\n process.env.MOBILE_DDP_URL || Meteor.absoluteUrl(),\n ROOT_URL: process.env.MOBILE_ROOT_URL || Meteor.absoluteUrl(),\n },\n },\n\n 'web.browser': {\n runtimeConfigOverrides: {\n isModern: true,\n },\n },\n\n 'web.browser.legacy': {\n runtimeConfigOverrides: {\n isModern: false,\n },\n },\n };\n\n WebAppInternals.generateBoilerplate = function() {\n // This boilerplate will be served to the mobile devices when used with\n // Meteor/Cordova for the Hot-Code Push and since the file will be served by\n // the device's server, it is important to set the DDP url to the actual\n // Meteor server accepting DDP connections and not the device's file server.\n syncQueue.runTask(function() {\n Object.keys(WebApp.clientPrograms).forEach(generateBoilerplateForArch);\n });\n };\n\n function generateBoilerplateForArch(arch) {\n const program = WebApp.clientPrograms[arch];\n const additionalOptions = defaultOptionsForArch[arch] || {};\n const { baseData } = (boilerplateByArch[\n arch\n ] = WebAppInternals.generateBoilerplateInstance(\n arch,\n program.manifest,\n additionalOptions\n ));\n // We need the runtime config with overrides for meteor_runtime_config.js:\n program.meteorRuntimeConfig = JSON.stringify({\n ...__meteor_runtime_config__,\n ...(additionalOptions.runtimeConfigOverrides || null),\n });\n program.refreshableAssets = baseData.css.map(file => ({\n url: bundledJsCssUrlRewriteHook(file.url),\n }));\n }\n\n WebAppInternals.reloadClientPrograms();\n\n // webserver\n var app = connect();\n\n // Packages and apps can add handlers that run before any other Meteor\n // handlers via WebApp.rawConnectHandlers.\n var rawConnectHandlers = connect();\n app.use(rawConnectHandlers);\n\n // Auto-compress any json, javascript, or text.\n app.use(compress({ filter: shouldCompress }));\n\n // parse cookies into an object\n app.use(cookieParser());\n\n // We're not a proxy; reject (without crashing) attempts to treat us like\n // one. (See #1212.)\n app.use(function(req, res, next) {\n if (RoutePolicy.isValidUrl(req.url)) {\n next();\n return;\n }\n res.writeHead(400);\n res.write('Not a proxy');\n res.end();\n });\n\n // Parse the query string into res.query. Used by oauth_server, but it's\n // generally pretty handy..\n //\n // Do this before the next middleware destroys req.url if a path prefix\n // is set to close #10111.\n app.use(function(request, response, next) {\n request.query = qs.parse(parseUrl(request.url).query);\n next();\n });\n\n function getPathParts(path) {\n const parts = path.split('/');\n while (parts[0] === '') parts.shift();\n return parts;\n }\n\n function isPrefixOf(prefix, array) {\n return (\n prefix.length <= array.length &&\n prefix.every((part, i) => part === array[i])\n );\n }\n\n // Strip off the path prefix, if it exists.\n app.use(function(request, response, next) {\n const pathPrefix = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX;\n const { pathname, search } = parseUrl(request.url);\n\n // check if the path in the url starts with the path prefix\n if (pathPrefix) {\n const prefixParts = getPathParts(pathPrefix);\n const pathParts = getPathParts(pathname);\n if (isPrefixOf(prefixParts, pathParts)) {\n request.url = '/' + pathParts.slice(prefixParts.length).join('/');\n if (search) {\n request.url += search;\n }\n return next();\n }\n }\n\n if (pathname === '/favicon.ico' || pathname === '/robots.txt') {\n return next();\n }\n\n if (pathPrefix) {\n response.writeHead(404);\n response.write('Unknown path');\n response.end();\n return;\n }\n\n next();\n });\n\n // Serve static files from the manifest.\n // This is inspired by the 'static' middleware.\n app.use(function(req, res, next) {\n WebAppInternals.staticFilesMiddleware(\n WebAppInternals.staticFilesByArch,\n req,\n res,\n next\n );\n });\n\n // Core Meteor packages like dynamic-import can add handlers before\n // other handlers added by package and application code.\n app.use((WebAppInternals.meteorInternalHandlers = connect()));\n\n /**\n * @name connectHandlersCallback(req, res, next)\n * @locus Server\n * @isprototype true\n * @summary callback handler for `WebApp.connectHandlers`\n * @param {Object} req\n * a Node.js\n * [IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage)\n * object with some extra properties. This argument can be used\n * to get information about the incoming request.\n * @param {Object} res\n * a Node.js\n * [ServerResponse](http://nodejs.org/api/http.html#http_class_http_serverresponse)\n * object. Use this to write data that should be sent in response to the\n * request, and call `res.end()` when you are done.\n * @param {Function} next\n * Calling this function will pass on the handling of\n * this request to the next relevant handler.\n *\n */\n\n /**\n * @method connectHandlers\n * @memberof WebApp\n * @locus Server\n * @summary Register a handler for all HTTP requests.\n * @param {String} [path]\n * This handler will only be called on paths that match\n * this string. The match has to border on a `/` or a `.`.\n *\n * For example, `/hello` will match `/hello/world` and\n * `/hello.world`, but not `/hello_world`.\n * @param {connectHandlersCallback} handler\n * A handler function that will be called on HTTP requests.\n * See `connectHandlersCallback`\n *\n */\n // Packages and apps can add handlers to this via WebApp.connectHandlers.\n // They are inserted before our default handler.\n var packageAndAppHandlers = connect();\n app.use(packageAndAppHandlers);\n\n var suppressConnectErrors = false;\n // connect knows it is an error handler because it has 4 arguments instead of\n // 3. go figure. (It is not smart enough to find such a thing if it's hidden\n // inside packageAndAppHandlers.)\n app.use(function(err, req, res, next) {\n if (!err || !suppressConnectErrors || !req.headers['x-suppress-error']) {\n next(err);\n return;\n }\n res.writeHead(err.status, { 'Content-Type': 'text/plain' });\n res.end('An error message');\n });\n\n app.use(async function(req, res, next) {\n if (!appUrl(req.url)) {\n return next();\n } else if (\n req.method !== 'HEAD' &&\n req.method !== 'GET' &&\n !Meteor.settings.packages?.webapp?.alwaysReturnContent\n ) {\n const status = req.method === 'OPTIONS' ? 200 : 405;\n res.writeHead(status, {\n Allow: 'OPTIONS, GET, HEAD',\n 'Content-Length': '0',\n });\n res.end();\n } else {\n var headers = {\n 'Content-Type': 'text/html; charset=utf-8',\n };\n\n if (shuttingDown) {\n headers['Connection'] = 'Close';\n }\n\n var request = WebApp.categorizeRequest(req);\n\n if (request.url.query && request.url.query['meteor_css_resource']) {\n // In this case, we're requesting a CSS resource in the meteor-specific\n // way, but we don't have it. Serve a static css file that indicates that\n // we didn't have it, so we can detect that and refresh. Make sure\n // that any proxies or CDNs don't cache this error! (Normally proxies\n // or CDNs are smart enough not to cache error pages, but in order to\n // make this hack work, we need to return the CSS file as a 200, which\n // would otherwise be cached.)\n headers['Content-Type'] = 'text/css; charset=utf-8';\n headers['Cache-Control'] = 'no-cache';\n res.writeHead(200, headers);\n res.write('.meteor-css-not-found-error { width: 0px;}');\n res.end();\n return;\n }\n\n if (request.url.query && request.url.query['meteor_js_resource']) {\n // Similarly, we're requesting a JS resource that we don't have.\n // Serve an uncached 404. (We can't use the same hack we use for CSS,\n // because actually acting on that hack requires us to have the JS\n // already!)\n headers['Cache-Control'] = 'no-cache';\n res.writeHead(404, headers);\n res.end('404 Not Found');\n return;\n }\n\n if (request.url.query && request.url.query['meteor_dont_serve_index']) {\n // When downloading files during a Cordova hot code push, we need\n // to detect if a file is not available instead of inadvertently\n // downloading the default index page.\n // So similar to the situation above, we serve an uncached 404.\n headers['Cache-Control'] = 'no-cache';\n res.writeHead(404, headers);\n res.end('404 Not Found');\n return;\n }\n\n const { arch } = request;\n assert.strictEqual(typeof arch, 'string', { arch });\n\n if (!hasOwn.call(WebApp.clientPrograms, arch)) {\n // We could come here in case we run with some architectures excluded\n headers['Cache-Control'] = 'no-cache';\n res.writeHead(404, headers);\n if (Meteor.isDevelopment) {\n res.end(`No client program found for the ${arch} architecture.`);\n } else {\n // Safety net, but this branch should not be possible.\n res.end('404 Not Found');\n }\n return;\n }\n\n // If pauseClient(arch) has been called, program.paused will be a\n // Promise that will be resolved when the program is unpaused.\n await WebApp.clientPrograms[arch].paused;\n\n return getBoilerplateAsync(request, arch)\n .then(({ stream, statusCode, headers: newHeaders }) => {\n if (!statusCode) {\n statusCode = res.statusCode ? res.statusCode : 200;\n }\n\n if (newHeaders) {\n Object.assign(headers, newHeaders);\n }\n\n res.writeHead(statusCode, headers);\n\n stream.pipe(res, {\n // End the response when the stream ends.\n end: true,\n });\n })\n .catch(error => {\n Log.error('Error running template: ' + error.stack);\n res.writeHead(500, headers);\n res.end();\n });\n }\n });\n\n // Return 404 by default, if no other handlers serve this URL.\n app.use(function(req, res) {\n res.writeHead(404);\n res.end();\n });\n\n var httpServer = createServer(app);\n var onListeningCallbacks = [];\n\n // After 5 seconds w/o data on a socket, kill it. On the other hand, if\n // there's an outstanding request, give it a higher timeout instead (to avoid\n // killing long-polling requests)\n httpServer.setTimeout(SHORT_SOCKET_TIMEOUT);\n\n // Do this here, and then also in livedata/stream_server.js, because\n // stream_server.js kills all the current request handlers when installing its\n // own.\n httpServer.on('request', WebApp._timeoutAdjustmentRequestCallback);\n\n // If the client gave us a bad request, tell it instead of just closing the\n // socket. This lets load balancers in front of us differentiate between \"a\n // server is randomly closing sockets for no reason\" and \"client sent a bad\n // request\".\n //\n // This will only work on Node 6; Node 4 destroys the socket before calling\n // this event. See https://github.com/nodejs/node/pull/4557/ for details.\n httpServer.on('clientError', (err, socket) => {\n // Pre-Node-6, do nothing.\n if (socket.destroyed) {\n return;\n }\n\n if (err.message === 'Parse Error') {\n socket.end('HTTP/1.1 400 Bad Request\\r\\n\\r\\n');\n } else {\n // For other errors, use the default behavior as if we had no clientError\n // handler.\n socket.destroy(err);\n }\n });\n\n // start up app\n _.extend(WebApp, {\n connectHandlers: packageAndAppHandlers,\n rawConnectHandlers: rawConnectHandlers,\n httpServer: httpServer,\n connectApp: app,\n // For testing.\n suppressConnectErrors: function() {\n suppressConnectErrors = true;\n },\n onListening: function(f) {\n if (onListeningCallbacks) onListeningCallbacks.push(f);\n else f();\n },\n // This can be overridden by users who want to modify how listening works\n // (eg, to run a proxy like Apollo Engine Proxy in front of the server).\n startListening: function(httpServer, listenOptions, cb) {\n httpServer.listen(listenOptions, cb);\n },\n });\n\n // Let the rest of the packages (and Meteor.startup hooks) insert connect\n // middlewares and update __meteor_runtime_config__, then keep going to set up\n // actually serving HTML.\n exports.main = argv => {\n WebAppInternals.generateBoilerplate();\n\n const startHttpServer = listenOptions => {\n WebApp.startListening(\n httpServer,\n listenOptions,\n Meteor.bindEnvironment(\n () => {\n if (process.env.METEOR_PRINT_ON_LISTEN) {\n console.log('LISTENING');\n }\n const callbacks = onListeningCallbacks;\n onListeningCallbacks = null;\n callbacks.forEach(callback => {\n callback();\n });\n },\n e => {\n console.error('Error listening:', e);\n console.error(e && e.stack);\n }\n )\n );\n };\n\n let localPort = process.env.PORT || 0;\n let unixSocketPath = process.env.UNIX_SOCKET_PATH;\n\n if (unixSocketPath) {\n if (cluster.isWorker) {\n const workerName = cluster.worker.process.env.name || cluster.worker.id;\n unixSocketPath += '.' + workerName + '.sock';\n }\n // Start the HTTP server using a socket file.\n removeExistingSocketFile(unixSocketPath);\n startHttpServer({ path: unixSocketPath });\n\n const unixSocketPermissions = (\n process.env.UNIX_SOCKET_PERMISSIONS || ''\n ).trim();\n if (unixSocketPermissions) {\n if (/^[0-7]{3}$/.test(unixSocketPermissions)) {\n chmodSync(unixSocketPath, parseInt(unixSocketPermissions, 8));\n } else {\n throw new Error('Invalid UNIX_SOCKET_PERMISSIONS specified');\n }\n }\n\n const unixSocketGroup = (process.env.UNIX_SOCKET_GROUP || '').trim();\n if (unixSocketGroup) {\n //whomst automatically handles both group names and numerical gids\n const unixSocketGroupInfo = whomst.sync.group(unixSocketGroup);\n if (unixSocketGroupInfo === null) {\n throw new Error('Invalid UNIX_SOCKET_GROUP name specified');\n }\n chownSync(unixSocketPath, userInfo().uid, unixSocketGroupInfo.gid);\n }\n\n registerSocketFileCleanup(unixSocketPath);\n } else {\n localPort = isNaN(Number(localPort)) ? localPort : Number(localPort);\n if (/\\\\\\\\?.+\\\\pipe\\\\?.+/.test(localPort)) {\n // Start the HTTP server using Windows Server style named pipe.\n startHttpServer({ path: localPort });\n } else if (typeof localPort === 'number') {\n // Start the HTTP server using TCP.\n startHttpServer({\n port: localPort,\n host: process.env.BIND_IP || '0.0.0.0',\n });\n } else {\n throw new Error('Invalid PORT specified');\n }\n }\n\n return 'DAEMON';\n };\n}\n\nvar inlineScriptsAllowed = true;\n\nWebAppInternals.inlineScriptsAllowed = function() {\n return inlineScriptsAllowed;\n};\n\nWebAppInternals.setInlineScriptsAllowed = function(value) {\n inlineScriptsAllowed = value;\n WebAppInternals.generateBoilerplate();\n};\n\nvar sriMode;\n\nWebAppInternals.enableSubresourceIntegrity = function(use_credentials = false) {\n sriMode = use_credentials ? 'use-credentials' : 'anonymous';\n WebAppInternals.generateBoilerplate();\n};\n\nWebAppInternals.setBundledJsCssUrlRewriteHook = function(hookFn) {\n bundledJsCssUrlRewriteHook = hookFn;\n WebAppInternals.generateBoilerplate();\n};\n\nWebAppInternals.setBundledJsCssPrefix = function(prefix) {\n var self = this;\n self.setBundledJsCssUrlRewriteHook(function(url) {\n return prefix + url;\n });\n};\n\n// Packages can call `WebAppInternals.addStaticJs` to specify static\n// JavaScript to be included in the app. This static JS will be inlined,\n// unless inline scripts have been disabled, in which case it will be\n// served under `/`.\nvar additionalStaticJs = {};\nWebAppInternals.addStaticJs = function(contents) {\n additionalStaticJs['/' + sha1(contents) + '.js'] = contents;\n};\n\n// Exported for tests\nWebAppInternals.getBoilerplate = getBoilerplate;\nWebAppInternals.additionalStaticJs = additionalStaticJs;\n\n// Start the server!\nrunWebAppServer();\n","import npmConnect from \"connect\";\n\nexport function connect(...connectArgs) {\n const handlers = npmConnect.apply(this, connectArgs);\n const originalUse = handlers.use;\n\n // Wrap the handlers.use method so that any provided handler functions\n // always run in a Fiber.\n handlers.use = function use(...useArgs) {\n const { stack } = this;\n const originalLength = stack.length;\n const result = originalUse.apply(this, useArgs);\n\n // If we just added anything to the stack, wrap each new entry.handle\n // with a function that calls Promise.asyncApply to ensure the\n // original handler runs in a Fiber.\n for (let i = originalLength; i < stack.length; ++i) {\n const entry = stack[i];\n const originalHandle = entry.handle;\n\n if (originalHandle.length >= 4) {\n // If the original handle had four (or more) parameters, the\n // wrapper must also have four parameters, since connect uses\n // handle.length to determine whether to pass the error as the first\n // argument to the handle function.\n entry.handle = function handle(err, req, res, next) {\n return Promise.asyncApply(originalHandle, this, arguments);\n };\n } else {\n entry.handle = function handle(req, res, next) {\n return Promise.asyncApply(originalHandle, this, arguments);\n };\n }\n }\n\n return result;\n };\n\n return handlers;\n}\n","import { statSync, unlinkSync, existsSync } from 'fs';\n\n// Since a new socket file will be created when the HTTP server\n// starts up, if found remove the existing file.\n//\n// WARNING:\n// This will remove the configured socket file without warning. If\n// the configured socket file is already in use by another application,\n// it will still be removed. Node does not provide a reliable way to\n// differentiate between a socket file that is already in use by\n// another application or a stale socket file that has been\n// left over after a SIGKILL. Since we have no reliable way to\n// differentiate between these two scenarios, the best course of\n// action during startup is to remove any existing socket file. This\n// is not the safest course of action as removing the existing socket\n// file could impact an application using it, but this approach helps\n// ensure the HTTP server can startup without manual\n// intervention (e.g. asking for the verification and cleanup of socket\n// files before allowing the HTTP server to be started).\n//\n// The above being said, as long as the socket file path is\n// configured carefully when the application is deployed (and extra\n// care is taken to make sure the configured path is unique and doesn't\n// conflict with another socket file path), then there should not be\n// any issues with this approach.\nexport const removeExistingSocketFile = (socketPath) => {\n try {\n if (statSync(socketPath).isSocket()) {\n // Since a new socket file will be created, remove the existing\n // file.\n unlinkSync(socketPath);\n } else {\n throw new Error(\n `An existing file was found at \"${socketPath}\" and it is not ` +\n 'a socket file. Please confirm PORT is pointing to valid and ' +\n 'un-used socket file path.'\n );\n }\n } catch (error) {\n // If there is no existing socket file to cleanup, great, we'll\n // continue normally. If the caught exception represents any other\n // issue, re-throw.\n if (error.code !== 'ENOENT') {\n throw error;\n }\n }\n};\n\n// Remove the socket file when done to avoid leaving behind a stale one.\n// Note - a stale socket file is still left behind if the running node\n// process is killed via signal 9 - SIGKILL.\nexport const registerSocketFileCleanup =\n (socketPath, eventEmitter = process) => {\n ['exit', 'SIGINT', 'SIGHUP', 'SIGTERM'].forEach(signal => {\n eventEmitter.on(signal, Meteor.bindEnvironment(() => {\n if (existsSync(socketPath)) {\n unlinkSync(socketPath);\n }\n }));\n });\n };\n"]}