qcobjects-cli 2.5.140-beta → 2.5.141-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/main-http-gae-server.ts"],
4
- "sourcesContent": ["/**\n * QCObjects CLI 2.4.x\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\nimport { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, global, ClassFactory, Export } from \"qcobjects\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport http from \"node:http\";\nimport mime from \"mime\";\nimport { URL } from \"url\";\n\nimport { FileDispatcher } from \"./main-file\";\nimport { PipeLog } from \"./common-pipelog\";\n\nexport class HTTPServer extends InheritClass {\n interceptorInstances: any[];\n server: any;\n request: any;\n response: any;\n constructor({\n request = null,\n response = \"\",\n server = null,\n scriptname = \"\",\n interceptorInstances = []\n }: {\n request: any, response: any, server?: any, scriptname: string, interceptorInstances: any[]\n }) {\n super({\n request,\n response,\n server,\n scriptname,\n interceptorInstances\n });\n\n const oHTTPServer = this;\n const welcometo = \"Welcome to \\n\";\n const instructions = \"QCObjects Legacy HTTPServer \\n\";\n const logo = \" .d88888b. .d8888b. .d88888b. 888 d8b 888 \\r\\nd88P\\\" \\\"Y88bd88P Y88bd88P\\\" \\\"Y88b888 Y8P 888 \\r\\n888 888888 888888 888888 888 \\r\\n888 888888 888 88888888b. 8888 .d88b. .d8888b888888.d8888b \\r\\n888 888888 888 888888 \\\"88b \\\"888d8P Y8bd88P\\\" 888 88K \\r\\n888 Y8b 888888 888888 888888 888 88888888888888 888 \\\"Y8888b. \\r\\nY88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \\r\\n \\\"Y888888\\\" \\\"Y8888P\\\" \\\"Y88888P\\\" 88888P\\\" 888 \\\"Y8888 \\\"Y8888P \\\"Y888 88888P' \\r\\n Y8b 888 \\r\\n d88P \\r\\n 888P\\\" \";\n console.log(welcometo);\n console.log(logo);\n console.log(instructions);\n logger.debug(this.showIPAddress());\n logger.info(\"Listening on HTTP PORT: \" + CONFIG.get(\"serverPortHTTP\").toString());\n logger.info(\"Go to: \\n\" + this.showPossibleURL());\n this.interceptorInstances = interceptorInstances;\n\n\n oHTTPServer.server = http.createServer((req: any, res: any) => {\n\n });\n\n server = oHTTPServer.server;\n\n server?.on(\"error\", (err: any) => console.error(err));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Loading backend interceptors...\");\n const interceptors = CONFIG.get(\"backend\", {}).interceptors;\n if (typeof interceptors !== \"undefined\") {\n logger.info(\"Backend Interceptors Available\");\n interceptors.map((interceptor: { microservice: string; }) => {\n ImportMicroservice(interceptor.microservice);\n var interceptorClassFactory = ClassFactory(interceptor.microservice + \".Interceptor\");\n var interceptorInstance = New(interceptorClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n interceptor: interceptor,\n server: server\n });\n oHTTPServer.interceptorInstances.push(interceptorInstance);\n });\n }\n }\n\n server.on(\"request\", (req: { url: any; headers: any; method: any; }, res: { destroyed: any; writeHeader: (arg0: number, arg1: { \"content-type\": string; }) => void; on: (arg0: string, arg1: () => void) => void; write: (arg0: string) => void; end: () => void; }) => {\n\n const request = Object.assign(New(HTTPServerRequest), URL.parse(req.url));\n request.headers = req.headers;\n this.request = request;\n this.request.method = req.method;\n this.request.path = req.url;\n server.setMaxListeners(9999999999);\n CONFIG.set(\"backendTimeout\", CONFIG.get(\"backendTimeout\") || 20000);\n var timeoutHandler = () => {\n // end the stream on timeout\n try {\n if (!res.destroyed) {\n logger.info(\"A timeout occurred...\" + CONFIG.get(\"backendTimeout\").toString());\n logger.info(\"Killing session...\");\n\n res.writeHeader(500, {\n \"content-type\": \"text/html\"\n });\n res.on(\"error\", () => { });\n res.write(\"<h1>500 - INTERNAL SERVER ERROR (TIMEOUT)</h1>\");\n res.end();\n } else {\n logger.debug(\"Session was normally finishing...\");\n }\n } catch (e: any) {\n logger.debug(\"An unhandled error occurred during timeout catching...\");\n logger.debug(e.message);\n }\n server.removeListener(\"timeout\", timeoutHandler);\n\n };\n if (!res.destroyed) {\n server.setTimeout(CONFIG.get(\"backendTimeout\"), timeoutHandler);\n }\n\n if (this.request.pathname.indexOf(\".\") < 0) {\n this.request.scriptname = CONFIG.get(\"documentRootFileIndex\");\n } else {\n this.request.scriptname = this.request.pathname.split(\"/\").reverse()[0];\n }\n this.request.pathname = this.request.pathname.substr(0, this.request.pathname.lastIndexOf(\"/\"));\n\n logger.debug(PipeLog.pipe(this.request));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Backend GAE Microservices Available\");\n const routes = CONFIG.get(\"backend\").routes;\n const selectedRoute = routes.filter((route: { path: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\");\n return (new RegExp(standardRoutePath, \"g\")).test(request.path);\n });\n if (selectedRoute.length > 0) {\n selectedRoute.map((route: { path: string; microservice: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\"); //allowing {param}\n const selectedRouteParams = {\n ...[...request.path.matchAll((new RegExp(standardRoutePath, \"g\")))][0][\"groups\"]\n };\n ImportMicroservice(route.microservice);\n var microServiceClassFactory = ClassFactory(route.microservice + \".Microservice\");\n this.response = New(microServiceClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n route: route,\n routeParams: selectedRouteParams,\n server: server,\n stream: res,\n req: req,\n request: request\n });\n });\n } else {\n this.response = New(HTTPServerResponse, {\n server: server,\n stream: res,\n request: this.request\n });\n }\n\n } else {\n // ...\n\n this.response = New(HTTPServerResponse, {\n server: server,\n stream: res,\n request: this.request\n });\n\n }\n\n });\n\n }\n\n showIPAddress() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.forEach(function (ipGroup: any) {\n _ret_ += iface + \": \" + PipeLog.pipe(ipGroup) + \"\\n\";\n });\n });\n return _ret_;\n }\n\n showPossibleURL() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.forEach((ipGroup: any) => {\n if (ipGroup[\"family\"].toLowerCase() == \"ipv4\") {\n _ret_ += \"http://\" + ipGroup[\"address\"] + \":\" + CONFIG.get(\"serverPortHTTP\").toString() + \"/\\n\";\n }\n });\n });\n return _ret_;\n }\n\n start() {\n var server = this.server;\n server.listen(process.env.PORT || CONFIG.get(\"serverPortHTTP\"));\n }\n}\n\n\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\nconst ImportMicroservice = function (microservicePackage: string) {\n var _ret_;\n var standardPath = findPackageNodePath(microservicePackage) || findPackageNodePath(microservicePackage + \".js\");\n if (standardPath !== null) {\n _ret_ = Import(microservicePackage);\n } else {\n var nonStandardPath = findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage) || findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage + \".js\");\n if (nonStandardPath !== null) {\n _ret_ = Import(absolutePath + \"/backend/\" + microservicePackage);\n } else {\n _ret_ = Promise.resolve(async () => (await import(microservicePackage))());\n }\n }\n return _ret_;\n};\n\nclass BackendMicroservice extends InheritClass {\n domain: any;\n basePath: any;\n server: any;\n request: any;\n req: any;\n get: any;\n route: any;\n headers: any;\n body!: object;\n stream: any;\n\n constructor(o: any) {\n super(o);\n this.domain = CONFIG.get(\"domain\");\n this.basePath = CONFIG.get(\"basePath\");\n logger.debug(\"Executing GAE HTTP BackendMicroservice \");\n const microservice = this;\n const server = microservice.server;\n const request = microservice.request;\n this.cors();\n microservice.req.on(\"data\", (data: any) => {\n // data from POST, GET\n var requestMethod = request.method.toLowerCase();\n var supportedMethods: any = {\n \"post\": microservice.post.bind(this),\n };\n if (supportedMethods.hasOwnProperty.call(supportedMethods, requestMethod)) {\n supportedMethods[requestMethod].call(microservice, data);\n }\n });\n\n // data from POST, GET\n var requestMethod = request.method.toLowerCase();\n var supportedMethods: any = {\n \"get\": microservice.get.bind(this),\n \"head\": microservice.head.bind(this),\n \"put\": microservice.put.bind(this),\n \"delete\": microservice.delete.bind(this),\n \"connect\": microservice.connect.bind(this),\n \"options\": microservice.options.bind(this),\n \"trace\": microservice.trace.bind(this),\n \"patch\": microservice.patch.bind(this)\n };\n if (supportedMethods.hasOwnProperty.call(supportedMethods, requestMethod)) {\n supportedMethods[requestMethod].call(microservice);\n }\n\n\n }\n\n cors() {\n if (this.route.cors) {\n const {\n allow_origins,\n allow_credentials,\n allow_methods,\n allow_headers\n } = this.route.cors;\n var microservice = this;\n if (typeof microservice.headers !== \"object\") {\n microservice.headers = {};\n }\n if (typeof allow_origins !== \"undefined\") {\n // an example of allow_origins is ['https://example.com','http://www.example.com']\n if (allow_origins == \"*\" || (typeof microservice.request.headers.origin == \"undefined\") || [...allow_origins].indexOf(microservice.request.headers.origin) !== -1) {\n // for compatibility with all browsers allways return a wildcard when the origin is allowed\n microservice.headers[\"Access-Control-Allow-Origin\"] = \"*\";\n } else {\n logger.debug(\"Origin is not allowed: \" + microservice.request.headers.origin);\n logger.debug(\"Forcing to finish the response...\");\n this.body = {};\n try {\n this.done();\n } catch (e: any) { }\n }\n } else {\n microservice.headers[\"Access-Control-Allow-Origin\"] = \"*\";\n }\n if (typeof allow_credentials !== \"undefined\") {\n microservice.headers[\"Access-Control-Allow-Credentials\"] = allow_credentials.toString();\n } else {\n microservice.headers[\"Access-Control-Allow-Credentials\"] = \"true\";\n }\n if (typeof allow_methods !== \"undefined\") {\n microservice.headers[\"Access-Control-Allow-Methods\"] = [...allow_methods].join(\",\");\n } else {\n microservice.headers[\"Access-Control-Allow-Methods\"] = \"GET, OPTIONS, POST\";\n }\n if (typeof allow_headers !== \"undefined\") {\n microservice.headers[\"Access-Control-Allow-Headers\"] = [...allow_headers].join(\",\");\n } else {\n microservice.headers[\"Access-Control-Allow-Headers\"] = \"*\";\n }\n }\n }\n\n head(formData: any) {\n this.done();\n }\n post(formData: any) {\n this.done();\n }\n put(formData: any) {\n this.done();\n }\n delete(formData: any) {\n this.done();\n }\n connect(formData: any) {\n this.done();\n }\n options(formData: any) {\n this.done();\n }\n trace(formData: any) {\n this.done();\n }\n patch(formData: any) {\n this.done();\n }\n finishWithBody(stream: { write: (arg0: string) => void; end: () => void; }) {\n try {\n stream.write(JSON.stringify(this.body));\n stream.end();\n } catch (e: any) {\n logger.debug(\"Something wrong writing the response for microservice\" + e.toString());\n }\n }\n\n done() {\n var microservice = this;\n var stream = microservice.stream;\n try {\n stream.writeHead(200, microservice.headers);\n } catch (e: any) {\n logger.debug(\"Something went wront while sending headers in http...\");\n logger.debug(e.toString());\n }\n if (microservice.body != null) {\n microservice.finishWithBody.call(microservice, stream);\n }\n }\n\n}\n\nExport(BackendMicroservice);\n\nclass HTTPServerResponse extends InheritClass {\n body!: string;\n stream: any;\n headers: { \":status\": number; \"content-type\": string; };\n fileDispatcher: any;\n request: any;\n constructor(o: { stream: any; request: any; headers: any; fileDispatcher: any; }) {\n super(o);\n var self = this;\n self.body = \"\";\n self.request = o.request;\n self.stream = o.stream;\n self.headers = o.headers;\n self.fileDispatcher = o.fileDispatcher;\n self._generateResponse();\n this.headers = {\n \":status\": 200,\n \"content-type\": \"text/html\"\n };\n }\n\n sendFile(stream: any, fileName: string) {\n // read and send file content in the stream\n\n try {\n console.log(\"trying to read \" + fileName);\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n const headers = {\n \"content-length\": stat.size,\n \"last-modified\": stat.mtime.toUTCString(),\n \"content-type\": mime.getType(fileName),\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n stream.setHeader(\"content-length\", headers[\"content-length\"]);\n stream.setHeader(\"last-modified\", headers[\"last-modified\"]);\n stream.setHeader(\"content-type\", headers[\"content-type\"]);\n stream.setHeader(\"cache-control\", headers[\"cache-control\"]);\n\n // This line opens the file as a readable stream\n var readStream = fs.createReadStream(fileName);\n\n // This will wait until we know the readable stream is actually valid before piping\n readStream.on(\"open\", function () {\n // This just pipes the read stream to the response object (which goes to the client)\n readStream.pipe(stream);\n });\n\n readStream.on(\"end\", function () {\n stream.end();\n });\n\n // This catches any errors that happen while creating the readable stream (usually invalid names)\n readStream.on(\"error\", function (err: any) {\n stream.end(err);\n });\n\n } catch (e: any) {\n if (e.errno == -2) {\n const headers = {\n \":status\": 404,\n \"content-type\": \"text/html\"\n };\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n console.log(\"closing file\", fileName);\n });\n stream.end();\n }\n }\n }\n\n _generateResponse() {\n var response = this;\n response.fileDispatcher = New(FileDispatcher, {\n scriptname: response.request.scriptname,\n pathname: response.request.pathname,\n done(headers: any, body: any, templateURI: any, isTemplate: any) {\n response.headers = headers;\n var stream = response.stream;\n if (isTemplate) {\n logger.debug(\"TEMPLATE\");\n response.body = body;\n // stream.respond(response.headers);\n stream.write(response.body);\n stream.end();\n } else if (headers[\":status\"] == 200) {\n response.sendFile(stream, templateURI);\n } else {\n logger.debug(\"NONE \");\n // stream.respond(response.headers);\n stream.end();\n }\n }\n });\n\n }\n\n}\n\nclass HTTPServerRequest extends InheritClass {\n\n constructor({\n scriptname = \"\",\n path = \"\",\n method = \"\",\n url = \"\",\n headers = null,\n flags = null,\n protocol = null,\n slashes = null,\n auth = null,\n host = null,\n port = null,\n hostname = null,\n hash = null,\n search = \"\",\n query = \"\",\n pathname = \"\",\n href = \"\"\n }) {\n super({\n scriptname,\n path,\n method,\n url,\n headers,\n flags,\n protocol,\n slashes,\n auth,\n host,\n port,\n hostname,\n hash,\n search,\n query,\n pathname,\n href\n });\n\n }\n}\n\n\n\nPackage(\"org.quickcorp.qcobjects.main.http.gae.server\", [\n BackendMicroservice, HTTPServer, HTTPServerRequest, HTTPServerResponse\n\n]);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * QCObjects CLI 2.4.x\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\nimport { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, global, ClassFactory, Export } from \"qcobjects\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport http from \"node:http\";\nimport mime from \"mime\";\nimport { URL } from \"url\";\n\nimport { FileDispatcher } from \"./main-file\";\nimport { PipeLog } from \"./common-pipelog\";\n\nexport class HTTPServer extends InheritClass {\n interceptorInstances: any[];\n server: any;\n request: any;\n response: any;\n constructor({\n request = null,\n response = \"\",\n server = null,\n scriptname = \"\",\n interceptorInstances = []\n }: {\n request: any, response: any, server?: any, scriptname: string, interceptorInstances: any[]\n }) {\n super({\n request,\n response,\n server,\n scriptname,\n interceptorInstances\n });\n\n const oHTTPServer = this;\n const welcometo = \"Welcome to \\n\";\n const instructions = \"QCObjects Legacy HTTPServer \\n\";\n const logo = \" .d88888b. .d8888b. .d88888b. 888 d8b 888 \\r\\nd88P\\\" \\\"Y88bd88P Y88bd88P\\\" \\\"Y88b888 Y8P 888 \\r\\n888 888888 888888 888888 888 \\r\\n888 888888 888 88888888b. 8888 .d88b. .d8888b888888.d8888b \\r\\n888 888888 888 888888 \\\"88b \\\"888d8P Y8bd88P\\\" 888 88K \\r\\n888 Y8b 888888 888888 888888 888 88888888888888 888 \\\"Y8888b. \\r\\nY88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \\r\\n \\\"Y888888\\\" \\\"Y8888P\\\" \\\"Y88888P\\\" 88888P\\\" 888 \\\"Y8888 \\\"Y8888P \\\"Y888 88888P' \\r\\n Y8b 888 \\r\\n d88P \\r\\n 888P\\\" \";\n console.log(welcometo);\n console.log(logo);\n console.log(instructions);\n logger.debug(this.showIPAddress());\n logger.info(\"Listening on HTTP PORT: \" + CONFIG.get(\"serverPortHTTP\").toString());\n logger.info(\"Go to: \\n\" + this.showPossibleURL());\n this.interceptorInstances = interceptorInstances;\n\n\n oHTTPServer.server = http.createServer((req: any, res: any) => {\n\n });\n\n server = oHTTPServer.server;\n\n server?.on(\"error\", (err: any) => console.error(err));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Loading backend interceptors...\");\n const interceptors = CONFIG.get(\"backend\", {}).interceptors;\n if (typeof interceptors !== \"undefined\") {\n logger.info(\"Backend Interceptors Available\");\n interceptors.map((interceptor: { microservice: string; }) => {\n ImportMicroservice(interceptor.microservice);\n var interceptorClassFactory = ClassFactory(interceptor.microservice + \".Interceptor\");\n var interceptorInstance = New(interceptorClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n interceptor: interceptor,\n server: server\n });\n oHTTPServer.interceptorInstances.push(interceptorInstance);\n });\n }\n }\n\n server.on(\"request\", (req: { url: any; headers: any; method: any; }, res: { destroyed: any; writeHeader: (arg0: number, arg1: { \"content-type\": string; }) => void; on: (arg0: string, arg1: () => void) => void; write: (arg0: string) => void; end: () => void; }) => {\n\n const request = Object.assign(New(HTTPServerRequest), URL.parse(req.url));\n request.headers = req.headers;\n this.request = request;\n this.request.method = req.method;\n this.request.path = req.url;\n server.setMaxListeners(9999999999);\n CONFIG.set(\"backendTimeout\", CONFIG.get(\"backendTimeout\") || 20000);\n var timeoutHandler = () => {\n // end the stream on timeout\n try {\n if (!res.destroyed) {\n logger.info(\"A timeout occurred...\" + CONFIG.get(\"backendTimeout\").toString());\n logger.info(\"Killing session...\");\n\n res.writeHeader(500, {\n \"content-type\": \"text/html\"\n });\n res.on(\"error\", () => { });\n res.write(\"<h1>500 - INTERNAL SERVER ERROR (TIMEOUT)</h1>\");\n res.end();\n } else {\n logger.debug(\"Session was normally finishing...\");\n }\n } catch (e: any) {\n logger.debug(\"An unhandled error occurred during timeout catching...\");\n logger.debug(e.message);\n }\n server.removeListener(\"timeout\", timeoutHandler);\n\n };\n if (!res.destroyed) {\n server.setTimeout(CONFIG.get(\"backendTimeout\"), timeoutHandler);\n }\n\n if (this.request.pathname.indexOf(\".\") < 0) {\n this.request.scriptname = CONFIG.get(\"documentRootFileIndex\");\n } else {\n this.request.scriptname = this.request.pathname.split(\"/\").reverse()[0];\n }\n this.request.pathname = this.request.pathname.substr(0, this.request.pathname.lastIndexOf(\"/\"));\n\n logger.debug(PipeLog.pipe(this.request));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Backend GAE Microservices Available\");\n const routes = CONFIG.get(\"backend\").routes;\n const selectedRoute = routes.filter((route: { path: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\");\n return (new RegExp(standardRoutePath, \"g\")).test(request.path);\n });\n if (selectedRoute.length > 0) {\n selectedRoute.map((route: { path: string; microservice: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\"); //allowing {param}\n const selectedRouteParams = {\n ...[...request.path.matchAll((new RegExp(standardRoutePath, \"g\")))][0][\"groups\"]\n };\n ImportMicroservice(route.microservice);\n var microServiceClassFactory = ClassFactory(route.microservice + \".Microservice\");\n this.response = New(microServiceClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n route: route,\n routeParams: selectedRouteParams,\n server: server,\n stream: res,\n req: req,\n request: request\n });\n });\n } else {\n this.response = New(HTTPServerResponse, {\n server: server,\n stream: res,\n request: this.request\n });\n }\n\n } else {\n // ...\n\n this.response = New(HTTPServerResponse, {\n server: server,\n stream: res,\n request: this.request\n });\n\n }\n\n });\n\n }\n\n showIPAddress() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.forEach(function (ipGroup: any) {\n _ret_ += iface + \": \" + PipeLog.pipe(ipGroup) + \"\\n\";\n });\n });\n return _ret_;\n }\n\n showPossibleURL() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.forEach((ipGroup: any) => {\n if (ipGroup[\"family\"].toLowerCase() == \"ipv4\") {\n _ret_ += \"http://\" + ipGroup[\"address\"] + \":\" + CONFIG.get(\"serverPortHTTP\").toString() + \"/\\n\";\n }\n });\n });\n return _ret_;\n }\n\n start() {\n var server = this.server;\n server.listen(process.env.PORT || CONFIG.get(\"serverPortHTTP\"));\n }\n}\n\n\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\nconst ImportMicroservice = function (microservicePackage: string) {\n var _ret_;\n var standardPath = findPackageNodePath(microservicePackage) || findPackageNodePath(microservicePackage + \".js\");\n if (standardPath !== null) {\n _ret_ = Import(microservicePackage);\n } else {\n var nonStandardPath = findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage) || findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage + \".js\");\n if (nonStandardPath !== null) {\n _ret_ = Import(absolutePath + \"/backend/\" + microservicePackage);\n } else {\n _ret_ = Promise.resolve(async () => (await import(microservicePackage))());\n }\n }\n return _ret_;\n};\n\nclass BackendMicroservice extends InheritClass {\n domain: any;\n basePath: any;\n server: any;\n request: any;\n req: any;\n get: any;\n route: any;\n headers: any;\n body!: object;\n stream: any;\n\n constructor(o: any) {\n super(o);\n this.domain = CONFIG.get(\"domain\");\n this.basePath = CONFIG.get(\"basePath\");\n logger.debug(\"Executing GAE HTTP BackendMicroservice \");\n const microservice = this;\n const server = microservice.server;\n const request = microservice.request;\n this.cors();\n microservice.req.on(\"data\", (data: any) => {\n // data from POST, GET\n var requestMethod = request.method.toLowerCase();\n var supportedMethods: any = {\n \"post\": microservice.post.bind(this),\n };\n if (supportedMethods.hasOwnProperty.call(supportedMethods, requestMethod)) {\n supportedMethods[requestMethod].call(microservice, data);\n }\n });\n\n // data from POST, GET\n var requestMethod = request.method.toLowerCase();\n var supportedMethods: any = {\n \"get\": microservice.get.bind(this),\n \"head\": microservice.head.bind(this),\n \"put\": microservice.put.bind(this),\n \"delete\": microservice.delete.bind(this),\n \"connect\": microservice.connect.bind(this),\n \"options\": microservice.options.bind(this),\n \"trace\": microservice.trace.bind(this),\n \"patch\": microservice.patch.bind(this)\n };\n if (supportedMethods.hasOwnProperty.call(supportedMethods, requestMethod)) {\n supportedMethods[requestMethod].call(microservice);\n }\n\n\n }\n\n cors() {\n if (this.route.cors) {\n const {\n allow_origins,\n allow_credentials,\n allow_methods,\n allow_headers\n } = this.route.cors;\n var microservice = this;\n if (typeof microservice.headers !== \"object\") {\n microservice.headers = {};\n }\n if (typeof allow_origins !== \"undefined\") {\n // an example of allow_origins is ['https://example.com','http://www.example.com']\n if (allow_origins == \"*\" || (typeof microservice.request.headers.origin == \"undefined\") || [...allow_origins].indexOf(microservice.request.headers.origin) !== -1) {\n // for compatibility with all browsers allways return a wildcard when the origin is allowed\n microservice.headers[\"Access-Control-Allow-Origin\"] = \"*\";\n } else {\n logger.debug(\"Origin is not allowed: \" + microservice.request.headers.origin);\n logger.debug(\"Forcing to finish the response...\");\n this.body = {};\n try {\n this.done();\n } catch (e: any) { }\n }\n } else {\n microservice.headers[\"Access-Control-Allow-Origin\"] = \"*\";\n }\n if (typeof allow_credentials !== \"undefined\") {\n microservice.headers[\"Access-Control-Allow-Credentials\"] = allow_credentials.toString();\n } else {\n microservice.headers[\"Access-Control-Allow-Credentials\"] = \"true\";\n }\n if (typeof allow_methods !== \"undefined\") {\n microservice.headers[\"Access-Control-Allow-Methods\"] = [...allow_methods].join(\",\");\n } else {\n microservice.headers[\"Access-Control-Allow-Methods\"] = \"GET, OPTIONS, POST\";\n }\n if (typeof allow_headers !== \"undefined\") {\n microservice.headers[\"Access-Control-Allow-Headers\"] = [...allow_headers].join(\",\");\n } else {\n microservice.headers[\"Access-Control-Allow-Headers\"] = \"*\";\n }\n }\n }\n\n head(formData: any) {\n this.done();\n }\n post(formData: any) {\n this.done();\n }\n put(formData: any) {\n this.done();\n }\n delete(formData: any) {\n this.done();\n }\n connect(formData: any) {\n this.done();\n }\n options(formData: any) {\n this.done();\n }\n trace(formData: any) {\n this.done();\n }\n patch(formData: any) {\n this.done();\n }\n finishWithBody(stream: { write: (arg0: string) => void; end: () => void; }) {\n try {\n stream.write(JSON.stringify(this.body));\n stream.end();\n } catch (e: any) {\n logger.debug(\"Something wrong writing the response for microservice\" + e.toString());\n }\n }\n\n done() {\n var microservice = this;\n var stream = microservice.stream;\n try {\n stream.writeHead(200, microservice.headers);\n } catch (e: any) {\n logger.debug(\"Something went wront while sending headers in http...\");\n logger.debug(e.toString());\n }\n if (microservice.body != null) {\n microservice.finishWithBody.call(microservice, stream);\n }\n }\n\n}\n\nExport(BackendMicroservice);\n\nclass HTTPServerResponse extends InheritClass {\n body!: string;\n stream: any;\n headers: { \":status\": number; \"content-type\": string; };\n fileDispatcher: any;\n request: any;\n constructor(o: { stream: any; request: any; headers: any; fileDispatcher: any; }) {\n super(o);\n var self = this;\n self.body = \"\";\n self.request = o.request || {};\n self.stream = o.stream;\n self.headers = o.headers;\n self.fileDispatcher = o.fileDispatcher;\n\n // Initialize request properties if not set\n if (!self.request.scriptname || !self.request.pathname) {\n const defaultPath = \"/\";\n self.request.pathname = self.request.pathname || defaultPath;\n self.request.scriptname = self.request.scriptname || CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n }\n\n self._generateResponse();\n this.headers = {\n \":status\": 200,\n \"content-type\": \"text/html\"\n };\n }\n\n sendFile(stream: any, fileName: string) {\n // read and send file content in the stream\n\n try {\n console.log(\"trying to read \" + fileName);\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n const headers = {\n \"content-length\": stat.size,\n \"last-modified\": stat.mtime.toUTCString(),\n \"content-type\": mime.getType(fileName),\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n stream.setHeader(\"content-length\", headers[\"content-length\"]);\n stream.setHeader(\"last-modified\", headers[\"last-modified\"]);\n stream.setHeader(\"content-type\", headers[\"content-type\"]);\n stream.setHeader(\"cache-control\", headers[\"cache-control\"]);\n\n // This line opens the file as a readable stream\n var readStream = fs.createReadStream(fileName);\n\n // This will wait until we know the readable stream is actually valid before piping\n readStream.on(\"open\", function () {\n // This just pipes the read stream to the response object (which goes to the client)\n readStream.pipe(stream);\n });\n\n readStream.on(\"end\", function () {\n stream.end();\n });\n\n // This catches any errors that happen while creating the readable stream (usually invalid names)\n readStream.on(\"error\", function (err: any) {\n stream.end(err);\n });\n\n } catch (e: any) {\n if (e.errno == -2) {\n const headers = {\n \":status\": 404,\n \"content-type\": \"text/html\"\n };\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n console.log(\"closing file\", fileName);\n });\n stream.end();\n }\n }\n }\n\n _generateResponse() {\n var response = this;\n response.fileDispatcher = New(FileDispatcher, {\n scriptname: response.request.scriptname,\n pathname: response.request.pathname,\n done(headers: any, body: any, templateURI: any, isTemplate: any) {\n response.headers = headers;\n var stream = response.stream;\n if (isTemplate) {\n logger.debug(\"TEMPLATE\");\n response.body = body;\n // stream.respond(response.headers);\n stream.write(response.body);\n stream.end();\n } else if (headers[\":status\"] == 200) {\n response.sendFile(stream, templateURI);\n } else {\n logger.debug(\"NONE \");\n // stream.respond(response.headers);\n stream.end();\n }\n }\n });\n\n }\n\n}\n\nclass HTTPServerRequest extends InheritClass {\n\n constructor({\n scriptname = \"\",\n path = \"\",\n method = \"\",\n url = \"\",\n headers = null,\n flags = null,\n protocol = null,\n slashes = null,\n auth = null,\n host = null,\n port = null,\n hostname = null,\n hash = null,\n search = \"\",\n query = \"\",\n pathname = \"\",\n href = \"\"\n }) {\n super({\n scriptname,\n path,\n method,\n url,\n headers,\n flags,\n protocol,\n slashes,\n auth,\n host,\n port,\n hostname,\n hash,\n search,\n query,\n pathname,\n href\n });\n\n }\n}\n\n\n\nPackage(\"org.quickcorp.qcobjects.main.http.gae.server\", [\n BackendMicroservice, HTTPServer, HTTPServerRequest, HTTPServerResponse\n\n]);\n"],
5
+ "mappings": "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",
6
6
  "names": ["http", "request", "os", "path", "requestMethod", "supportedMethods", "fs", "mime"]
7
7
  }
@@ -252,11 +252,16 @@ class HTTPServerResponse extends import_qcobjects.InheritClass {
252
252
  stream
253
253
  });
254
254
  var self = this;
255
- self.request = request;
255
+ self.request = request || {};
256
256
  self.stream = stream;
257
257
  self.headers = headers;
258
258
  self.body = body;
259
259
  self.fileDispatcher = fileDispatcher;
260
+ if (!self.request.scriptname || !self.request.pathname) {
261
+ const defaultPath = "/";
262
+ self.request.pathname = self.request.pathname || defaultPath;
263
+ self.request.scriptname = self.request.scriptname || import_qcobjects.CONFIG.get("documentRootFileIndex", "index.html");
264
+ }
260
265
  self._generateResponse();
261
266
  }
262
267
  sendFile(stream, fileName) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/main-http-server.ts"],
4
- "sourcesContent": ["/**\n * QCObjects CLI 2.4.x\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, global, ClassFactory, Export } from \"qcobjects\";\nimport fs from \"fs\";\nimport mime from \"mime\";\nimport http from \"http\";\nimport URL from \"url\";\nimport { FileDispatcher } from \"./main-file\";\nimport { PipeLog } from \"./common-pipelog\";\n\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\nconst ImportMicroservice = function (microservicePackage: string) {\n var _ret_;\n var standardPath = findPackageNodePath(microservicePackage) || findPackageNodePath(microservicePackage + \".js\");\n if (standardPath !== null) {\n _ret_ = Import(microservicePackage);\n } else {\n var nonStandardPath = findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage) || findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage + \".js\");\n if (nonStandardPath !== null) {\n _ret_ = Import(absolutePath + \"/backend/\" + microservicePackage);\n } else {\n _ret_ = Promise.resolve(async () => (await import(microservicePackage))());\n }\n }\n return _ret_;\n};\n\n\nclass BackendMicroservice extends InheritClass {\n body: any;\n stream: any;\n req: any;\n get: any;\n route: any;\n headers: any;\n request: any;\n constructor({\n domain = CONFIG.get(\"domain\"),\n basePath = CONFIG.get(\"basePath\"),\n body = null,\n stream = null,\n request = null\n }: { domain: string, basePath: string, body: any, stream: any, request: any }) {\n super({\n domain,\n basePath,\n body,\n stream,\n request\n });\n\n logger.debug(\"Initializing Legacy BackendMicroservice...\");\n const microservice = this;\n if (typeof this.body === \"undefined\") {\n this.body = null;\n }\n if (typeof body !== \"undefined\") {\n this.body = body;\n }\n this.cors();\n microservice.stream = stream;\n microservice.req.on(\"data\", (data: any) => {\n // data from POST, GET\n var requestMethod = request?.method.toLowerCase();\n var supportedMethods: any = {\n \"post\": microservice.post.bind(this),\n };\n if (Object.hasOwnProperty.call(supportedMethods, requestMethod)) {\n supportedMethods[requestMethod].call(microservice, data);\n }\n });\n\n // data from POST, GET\n var requestMethod = request.method.toLowerCase();\n var supportedMethods: any = {\n \"get\": microservice.get.bind(this),\n \"head\": microservice.head.bind(this),\n \"put\": microservice.put.bind(this),\n \"delete\": microservice.delete.bind(this),\n \"connect\": microservice.connect.bind(this),\n \"options\": microservice.options.bind(this),\n \"trace\": microservice.trace.bind(this),\n \"patch\": microservice.patch.bind(this)\n };\n if (Object.hasOwnProperty.call(supportedMethods, requestMethod)) {\n supportedMethods[requestMethod].call(microservice);\n }\n\n\n }\n\n cors() {\n if (this.route.cors) {\n logger.debug(\"Validating CORS...\");\n const {\n allow_origins,\n allow_credentials,\n allow_methods,\n allow_headers\n } = this.route.cors;\n var microservice = this;\n if (typeof microservice.headers !== \"object\") {\n microservice.headers = {};\n }\n if (typeof microservice.route.responseHeaders !== \"object\") {\n microservice.route.responseHeaders = {};\n }\n if (typeof allow_origins !== \"undefined\") {\n logger.debug(\"CORS: allow_origins available. Validating origins...\");\n // an example of allow_origins is ['https://example.com','http://www.example.com']\n if (allow_origins === \"*\" || (typeof microservice.request.headers.origin === \"undefined\") || [...allow_origins].indexOf(microservice.request.headers.origin) !== -1) {\n // for compatibility with all browsers allways return a wildcard when the origin is allowed\n logger.debug(\"CORS: Adding header Access-Control-Allow-Origin=*\");\n microservice.route.responseHeaders[\"Access-Control-Allow-Origin\"] = \"*\";\n } else {\n logger.debug(\"CORS: Origin is not allowed: \" + microservice.request.headers.origin);\n logger.debug(\"CORS: Forcing to finish the response...\");\n this.body = {};\n try {\n this.done();\n } catch (e: any) {\n logger.debug(`It was not possible to finish the call to the microservice: ${e}`);\n }\n }\n } else {\n logger.debug(\"CORS: no allow_origins available. Allowing all origins...\");\n logger.debug(\"CORS: Adding header Access-Control-Allow-Origin=*\");\n microservice.route.responseHeaders[\"Access-Control-Allow-Origin\"] = \"*\";\n }\n if (typeof allow_credentials !== \"undefined\") {\n logger.debug(`CORS: allow_credentials present. Allowing ${allow_credentials}...`);\n microservice.route.responseHeaders[\"Access-Control-Allow-Credentials\"] = allow_credentials.toString();\n } else {\n logger.debug(\"CORS: No allow_credentials present. Allowing all credentials.\");\n microservice.route.responseHeaders[\"Access-Control-Allow-Credentials\"] = \"true\";\n }\n if (typeof allow_methods !== \"undefined\") {\n logger.debug(`CORS: allow_methods present. Allowing ${allow_methods}...`);\n microservice.route.responseHeaders[\"Access-Control-Allow-Methods\"] = [...allow_methods].join(\",\");\n } else {\n logger.debug(\"CORS: No allow_methods present. Allowing only GET, OPTIONS and POST\");\n microservice.route.responseHeaders[\"Access-Control-Allow-Methods\"] = \"GET, OPTIONS, POST\";\n }\n if (typeof allow_headers !== \"undefined\") {\n logger.debug(`CORS: allow_headers present. Allowing ${allow_headers}...`);\n microservice.route.responseHeaders[\"Access-Control-Allow-Headers\"] = [...allow_headers].join(\",\");\n } else {\n logger.debug(\"CORS: No allow_headers present. Allowing all headers...\");\n microservice.route.responseHeaders[\"Access-Control-Allow-Headers\"] = \"*\";\n }\n } else {\n logger.debug(\"No CORS validation available. You can specify cors in CONFIG.backend.routes[].cors\");\n }\n }\n head(formData: any) { this.done(); }\n post(formData: any) { this.done(); }\n put(formData: any) { this.done(); }\n delete(formData: any) { this.done(); }\n connect(formData: any) { this.done(); }\n options(formData: any) { this.done(); }\n trace(formData: any) { this.done(); }\n patch(formData: any) { this.done(); }\n finishWithBody(stream: { write: (arg0: string) => void; end: () => void; }) {\n try {\n stream.write(JSON.stringify(this.body));\n stream.end();\n } catch (e: any) {\n logger.debug(`Something wrong writing the response for microservice: ${e}`);\n throw Error(e);\n }\n }\n done() {\n var microservice = this;\n var stream = microservice.stream;\n try {\n stream.writeHead(200, microservice.headers);\n } catch (e: any) {\n logger.debug(`Something went wront while sending headers in http... ${e}`);\n throw Error(e);\n }\n if (microservice.body != null) {\n microservice.finishWithBody.call(microservice, stream);\n }\n }\n\n\n\n}\n\nExport(BackendMicroservice);\n\n\nclass HTTPServerResponse extends InheritClass {\n stream!: null;\n fileDispatcher: any;\n request: any;\n headers!: { [x: string]: any; };\n body: any;\n constructor({\n headers = {\n \"status\": 200,\n \"content-type\": \"text/html\"\n },\n body = \"\",\n request = null,\n fileDispatcher = null,\n stream = null\n }) {\n super({\n headers,\n body,\n request,\n fileDispatcher,\n stream\n });\n var self = this;\n self.request = request;\n self.stream = stream;\n self.headers = headers;\n self.body = body;\n self.fileDispatcher = fileDispatcher;\n self._generateResponse();\n\n }\n\n sendFile(stream: any, fileName: string) {\n // read and send file content in the stream\n\n try {\n console.log(\"trying to read \" + fileName);\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n const headers = {\n \"content-length\": stat.size,\n \"last-modified\": stat.mtime.toUTCString(),\n \"content-type\": mime.getType(fileName),\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n stream.setHeader(\"content-length\", headers[\"content-length\"]);\n stream.setHeader(\"last-modified\", headers[\"last-modified\"]);\n stream.setHeader(\"content-type\", headers[\"content-type\"]);\n stream.setHeader(\"cache-control\", headers[\"cache-control\"]);\n\n // This line opens the file as a readable stream\n var readStream = fs.createReadStream(fileName);\n\n // This will wait until we know the readable stream is actually valid before piping\n readStream.on(\"open\", function () {\n // This just pipes the read stream to the response object (which goes to the client)\n readStream.pipe(stream);\n });\n\n readStream.on(\"end\", function () {\n stream.end();\n });\n\n // This catches any errors that happen while creating the readable stream (usually invalid names)\n readStream.on(\"error\", function (err: any) {\n const headers = {\n \"status\": 500,\n \"content-type\": mime.getType(fileName)\n };\n stream.setHeader(\"content-type\", headers[\"content-type\"]);\n stream.setHeader(\"status\", headers[\"status\"]);\n stream.write(`<h1>500 - INTERNAL SERVER ERROR</h1>\n <p>${err}</p>\n `);\n\n stream.end(err);\n });\n\n } catch (e: any) {\n if (e.errno == -2) {\n const headers = {\n \"status\": 404,\n \"content-type\": mime.getType(fileName)\n };\n stream.setHeader(\"content-type\", headers[\"content-type\"]);\n stream.setHeader(\"status\", headers[\"status\"]);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n });\n stream.end();\n }\n }\n }\n _generateResponse() {\n var response = this;\n response.fileDispatcher = New(FileDispatcher, {\n scriptname: response.request.scriptname,\n pathname: response.request.pathname,\n done(headers: { [x: string]: any; }, body: any, templateURI: any, isTemplate: any) {\n response.headers = headers;\n var stream = response.stream;\n if (isTemplate) {\n response.body = body;\n Object.keys(headers).map((header) => (stream as any).setHeader(header, headers[header]));\n (stream as any).write(response.body);\n (stream as any).end();\n } else if (headers[\"status\"] == 200 || headers[\":status\"] == 200) {\n response.sendFile(stream, templateURI);\n } else {\n Object.keys(headers).map((header) => (stream as any).setHeader(header, headers[header]));\n (stream as any).end();\n }\n }\n });\n\n }\n\n}\n\nclass HTTPServerRequest extends InheritClass {\n constructor({\n scriptname = \"\",\n path = \"\",\n method = \"\",\n url = \"\",\n headers = null,\n flags = null,\n protocol = null,\n slashes = null,\n auth = null,\n host = null,\n port = null,\n hostname = null,\n hash = null,\n search = \"\",\n query = \"\",\n pathname = \"\",\n href = \"\"\n }) {\n super({\n scriptname,\n path,\n method,\n url,\n headers,\n flags,\n protocol,\n slashes,\n auth,\n host,\n port,\n hostname,\n hash,\n search,\n query,\n pathname,\n href\n });\n }\n}\n\nexport class HTTPServer extends InheritClass {\n interceptorInstances: never[];\n server: any;\n request: any;\n response: any;\n constructor({\n request = null,\n response = \"\",\n server = null,\n scriptname = \"\",\n interceptorInstances = []\n }) {\n super({\n request,\n response,\n server,\n scriptname,\n interceptorInstances\n });\n\n const welcometo = \"Welcome to \\n\";\n const instructions = \"QCObjects Legacy HTTPServer \\n\";\n const logo = \" .d88888b. .d8888b. .d88888b. 888 d8b 888 \\r\\nd88P\\\" \\\"Y88bd88P Y88bd88P\\\" \\\"Y88b888 Y8P 888 \\r\\n888 888888 888888 888888 888 \\r\\n888 888888 888 88888888b. 8888 .d88b. .d8888b888888.d8888b \\r\\n888 888888 888 888888 \\\"88b \\\"888d8P Y8bd88P\\\" 888 88K \\r\\n888 Y8b 888888 888888 888888 888 88888888888888 888 \\\"Y8888b. \\r\\nY88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \\r\\n \\\"Y888888\\\" \\\"Y8888P\\\" \\\"Y88888P\\\" 88888P\\\" 888 \\\"Y8888 \\\"Y8888P \\\"Y888 88888P' \\r\\n Y8b 888 \\r\\n d88P \\r\\n 888P\\\" \";\n console.log(welcometo);\n console.log(logo);\n console.log(instructions);\n logger.debug(this.showIPAddress());\n logger.info(\"Listening on HTTP PORT: \" + CONFIG.get(\"serverPortHTTP\").toString());\n logger.info(\"Go to: \\n\" + this.showPossibleURL());\n this.interceptorInstances = interceptorInstances;\n\n this.server = http.createServer((req: any, res: any) => {\n logger.debug(\"Legacy Server Instantiated.\");\n });\n\n this.server.on(\"error\", (err: any) => console.error(err));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Loading backend interceptors...\");\n const interceptors = CONFIG.get(\"backend\", {}).interceptors;\n if (typeof interceptors !== \"undefined\") {\n logger.info(\"Backend Interceptors Available\");\n interceptors.map((interceptor: { microservice: string; }) => {\n ImportMicroservice(interceptor.microservice);\n var interceptorClassFactory = ClassFactory(interceptor.microservice + \".Interceptor\");\n var interceptorInstance = New(interceptorClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n interceptor: interceptor,\n server: this.server\n });\n this.interceptorInstances.push(interceptorInstance as never);\n });\n }\n }\n\n this.server.on(\"request\", (req: { url: any; headers: any; method: any; }, res: { destroyed: any; writeHeader: (arg0: number, arg1: { \"content-type\": string; }) => void; on: (arg0: string, arg1: () => void) => void; write: (arg0: string) => void; end: () => void; }) => {\n\n const request = Object.assign(New(HTTPServerRequest), URL.parse(req.url));\n request.headers = req.headers;\n this.request = request;\n this.request.method = req.method;\n this.request.path = req.url;\n this.server.setMaxListeners(9999999999);\n CONFIG.set(\"backendTimeout\", CONFIG.get(\"backendTimeout\") || 20000);\n var timeoutHandler = () => {\n // end the stream on timeout\n try {\n if (!res.destroyed) {\n logger.info(\"A timeout occurred...\" + CONFIG.get(\"backendTimeout\").toString());\n logger.info(\"Killing session...\");\n\n res.writeHeader(500, {\n \"content-type\": \"text/html\"\n });\n res.on(\"error\", () => { });\n res.write(\"<h1>500 - INTERNAL SERVER ERROR (TIMEOUT)</h1>\");\n res.end();\n } else {\n logger.debug(\"Session was normally finishing...\");\n }\n } catch (e: any) {\n logger.debug(`An unhandled error occurred during timeout catching: ${e}`);\n }\n this.server.removeListener(\"timeout\", timeoutHandler);\n\n };\n if (!res.destroyed) {\n this.server.setTimeout(CONFIG.get(\"backendTimeout\"), timeoutHandler);\n }\n\n if (this.request.pathname.indexOf(\".\") < 0) {\n this.request.scriptname = CONFIG.get(\"documentRootFileIndex\");\n } else {\n this.request.scriptname = this.request.pathname.split(\"/\").reverse()[0];\n }\n this.request.pathname = this.request.pathname.substr(0, this.request.pathname.lastIndexOf(\"/\"));\n\n logger.debug(PipeLog.pipe(this.request));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Backend Legacy Microservices Available...\");\n\n logger.info(\"Loading backend routes...\");\n const routes = CONFIG.get(\"backend\", {}).routes;\n const selectedRoute = routes.filter((route: { path: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\");\n return (new RegExp(standardRoutePath, \"g\")).test(request.path);\n });\n if (selectedRoute.length > 0) {\n selectedRoute.map((route: { path: string; microservice: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\"); //allowing {param}\n console.log(standardRoutePath);\n const selectedRouteParams = {\n ...[...request.path.matchAll((new RegExp(standardRoutePath, \"g\")))][0][\"groups\"]\n };\n ImportMicroservice(route.microservice).then(() => {\n logger.debug(`Trying to execute ${route.microservice + \".Microservice\"}...`);\n var microServiceClassFactory = ClassFactory(route.microservice + \".Microservice\");\n if (typeof microServiceClassFactory !== \"undefined\") {\n const server = this.server;\n this.response = New(microServiceClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n route: route,\n routeParams: selectedRouteParams,\n server: server,\n stream: res,\n req: req,\n request: request\n });\n\n } else {\n throw Error(`${route.microservice + \".Microservice\"} not defined.`);\n }\n }).catch((e: string | undefined) => {\n throw Error(e);\n });\n });\n } else {\n this.response = New(HTTPServerResponse, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n server: this.server,\n stream: res,\n req: req,\n request: this.request\n });\n }\n\n } else {\n // ...\n\n this.response = New(HTTPServerResponse, {\n server: this.server,\n stream: res,\n req: req,\n request: this.request\n });\n\n }\n\n });\n\n }\n\n\n showIPAddress() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.forEach(function (ipGroup: any) {\n _ret_ += iface + \": \" + PipeLog.pipe(ipGroup) + \"\\n\";\n });\n });\n return _ret_;\n }\n showPossibleURL() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.forEach(function (ipGroup: any) {\n if (ipGroup[\"family\"].toLowerCase() == \"ipv4\") {\n _ret_ += \"http://\" + ipGroup[\"address\"] + \":\" + CONFIG.get(\"serverPortHTTP\").toString() + \"/\\n\";\n }\n });\n });\n return _ret_;\n }\n start() {\n var server = this.server;\n server.listen(process.env.PORT || CONFIG.get(\"serverPortHTTP\"));\n }\n\n}\n\n\nPackage(\"org.quickcorp.qcobjects.main.http.server\", [\n BackendMicroservice,\n HTTPServer,\n HTTPServerRequest,\n HTTPServerResponse\n]);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * QCObjects CLI 2.4.x\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n*/\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, global, ClassFactory, Export } from \"qcobjects\";\nimport fs from \"fs\";\nimport mime from \"mime\";\nimport http from \"http\";\nimport URL from \"url\";\nimport { FileDispatcher } from \"./main-file\";\nimport { PipeLog } from \"./common-pipelog\";\n\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\nconst ImportMicroservice = function (microservicePackage: string) {\n var _ret_;\n var standardPath = findPackageNodePath(microservicePackage) || findPackageNodePath(microservicePackage + \".js\");\n if (standardPath !== null) {\n _ret_ = Import(microservicePackage);\n } else {\n var nonStandardPath = findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage) || findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage + \".js\");\n if (nonStandardPath !== null) {\n _ret_ = Import(absolutePath + \"/backend/\" + microservicePackage);\n } else {\n _ret_ = Promise.resolve(async () => (await import(microservicePackage))());\n }\n }\n return _ret_;\n};\n\n\nclass BackendMicroservice extends InheritClass {\n body: any;\n stream: any;\n req: any;\n get: any;\n route: any;\n headers: any;\n request: any;\n constructor({\n domain = CONFIG.get(\"domain\"),\n basePath = CONFIG.get(\"basePath\"),\n body = null,\n stream = null,\n request = null\n }: { domain: string, basePath: string, body: any, stream: any, request: any }) {\n super({\n domain,\n basePath,\n body,\n stream,\n request\n });\n\n logger.debug(\"Initializing Legacy BackendMicroservice...\");\n const microservice = this;\n if (typeof this.body === \"undefined\") {\n this.body = null;\n }\n if (typeof body !== \"undefined\") {\n this.body = body;\n }\n this.cors();\n microservice.stream = stream;\n microservice.req.on(\"data\", (data: any) => {\n // data from POST, GET\n var requestMethod = request?.method.toLowerCase();\n var supportedMethods: any = {\n \"post\": microservice.post.bind(this),\n };\n if (Object.hasOwnProperty.call(supportedMethods, requestMethod)) {\n supportedMethods[requestMethod].call(microservice, data);\n }\n });\n\n // data from POST, GET\n var requestMethod = request.method.toLowerCase();\n var supportedMethods: any = {\n \"get\": microservice.get.bind(this),\n \"head\": microservice.head.bind(this),\n \"put\": microservice.put.bind(this),\n \"delete\": microservice.delete.bind(this),\n \"connect\": microservice.connect.bind(this),\n \"options\": microservice.options.bind(this),\n \"trace\": microservice.trace.bind(this),\n \"patch\": microservice.patch.bind(this)\n };\n if (Object.hasOwnProperty.call(supportedMethods, requestMethod)) {\n supportedMethods[requestMethod].call(microservice);\n }\n\n\n }\n\n cors() {\n if (this.route.cors) {\n logger.debug(\"Validating CORS...\");\n const {\n allow_origins,\n allow_credentials,\n allow_methods,\n allow_headers\n } = this.route.cors;\n var microservice = this;\n if (typeof microservice.headers !== \"object\") {\n microservice.headers = {};\n }\n if (typeof microservice.route.responseHeaders !== \"object\") {\n microservice.route.responseHeaders = {};\n }\n if (typeof allow_origins !== \"undefined\") {\n logger.debug(\"CORS: allow_origins available. Validating origins...\");\n // an example of allow_origins is ['https://example.com','http://www.example.com']\n if (allow_origins === \"*\" || (typeof microservice.request.headers.origin === \"undefined\") || [...allow_origins].indexOf(microservice.request.headers.origin) !== -1) {\n // for compatibility with all browsers allways return a wildcard when the origin is allowed\n logger.debug(\"CORS: Adding header Access-Control-Allow-Origin=*\");\n microservice.route.responseHeaders[\"Access-Control-Allow-Origin\"] = \"*\";\n } else {\n logger.debug(\"CORS: Origin is not allowed: \" + microservice.request.headers.origin);\n logger.debug(\"CORS: Forcing to finish the response...\");\n this.body = {};\n try {\n this.done();\n } catch (e: any) {\n logger.debug(`It was not possible to finish the call to the microservice: ${e}`);\n }\n }\n } else {\n logger.debug(\"CORS: no allow_origins available. Allowing all origins...\");\n logger.debug(\"CORS: Adding header Access-Control-Allow-Origin=*\");\n microservice.route.responseHeaders[\"Access-Control-Allow-Origin\"] = \"*\";\n }\n if (typeof allow_credentials !== \"undefined\") {\n logger.debug(`CORS: allow_credentials present. Allowing ${allow_credentials}...`);\n microservice.route.responseHeaders[\"Access-Control-Allow-Credentials\"] = allow_credentials.toString();\n } else {\n logger.debug(\"CORS: No allow_credentials present. Allowing all credentials.\");\n microservice.route.responseHeaders[\"Access-Control-Allow-Credentials\"] = \"true\";\n }\n if (typeof allow_methods !== \"undefined\") {\n logger.debug(`CORS: allow_methods present. Allowing ${allow_methods}...`);\n microservice.route.responseHeaders[\"Access-Control-Allow-Methods\"] = [...allow_methods].join(\",\");\n } else {\n logger.debug(\"CORS: No allow_methods present. Allowing only GET, OPTIONS and POST\");\n microservice.route.responseHeaders[\"Access-Control-Allow-Methods\"] = \"GET, OPTIONS, POST\";\n }\n if (typeof allow_headers !== \"undefined\") {\n logger.debug(`CORS: allow_headers present. Allowing ${allow_headers}...`);\n microservice.route.responseHeaders[\"Access-Control-Allow-Headers\"] = [...allow_headers].join(\",\");\n } else {\n logger.debug(\"CORS: No allow_headers present. Allowing all headers...\");\n microservice.route.responseHeaders[\"Access-Control-Allow-Headers\"] = \"*\";\n }\n } else {\n logger.debug(\"No CORS validation available. You can specify cors in CONFIG.backend.routes[].cors\");\n }\n }\n head(formData: any) { this.done(); }\n post(formData: any) { this.done(); }\n put(formData: any) { this.done(); }\n delete(formData: any) { this.done(); }\n connect(formData: any) { this.done(); }\n options(formData: any) { this.done(); }\n trace(formData: any) { this.done(); }\n patch(formData: any) { this.done(); }\n finishWithBody(stream: { write: (arg0: string) => void; end: () => void; }) {\n try {\n stream.write(JSON.stringify(this.body));\n stream.end();\n } catch (e: any) {\n logger.debug(`Something wrong writing the response for microservice: ${e}`);\n throw Error(e);\n }\n }\n done() {\n var microservice = this;\n var stream = microservice.stream;\n try {\n stream.writeHead(200, microservice.headers);\n } catch (e: any) {\n logger.debug(`Something went wront while sending headers in http... ${e}`);\n throw Error(e);\n }\n if (microservice.body != null) {\n microservice.finishWithBody.call(microservice, stream);\n }\n }\n\n\n\n}\n\nExport(BackendMicroservice);\n\n\nclass HTTPServerResponse extends InheritClass {\n stream!: null;\n fileDispatcher: any;\n request: any;\n headers!: { [x: string]: any; };\n body: any;\n constructor({\n headers = {\n \"status\": 200,\n \"content-type\": \"text/html\"\n },\n body = \"\",\n request = null,\n fileDispatcher = null,\n stream = null\n }) {\n super({\n headers,\n body,\n request,\n fileDispatcher,\n stream\n });\n var self = this;\n self.request = request || {};\n self.stream = stream;\n self.headers = headers;\n self.body = body;\n self.fileDispatcher = fileDispatcher;\n\n // Initialize request properties if not set\n if (!self.request.scriptname || !self.request.pathname) {\n const defaultPath = \"/\";\n self.request.pathname = self.request.pathname || defaultPath;\n self.request.scriptname = self.request.scriptname || CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n }\n\n self._generateResponse();\n }\n\n sendFile(stream: any, fileName: string) {\n // read and send file content in the stream\n\n try {\n console.log(\"trying to read \" + fileName);\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n const headers = {\n \"content-length\": stat.size,\n \"last-modified\": stat.mtime.toUTCString(),\n \"content-type\": mime.getType(fileName),\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n stream.setHeader(\"content-length\", headers[\"content-length\"]);\n stream.setHeader(\"last-modified\", headers[\"last-modified\"]);\n stream.setHeader(\"content-type\", headers[\"content-type\"]);\n stream.setHeader(\"cache-control\", headers[\"cache-control\"]);\n\n // This line opens the file as a readable stream\n var readStream = fs.createReadStream(fileName);\n\n // This will wait until we know the readable stream is actually valid before piping\n readStream.on(\"open\", function () {\n // This just pipes the read stream to the response object (which goes to the client)\n readStream.pipe(stream);\n });\n\n readStream.on(\"end\", function () {\n stream.end();\n });\n\n // This catches any errors that happen while creating the readable stream (usually invalid names)\n readStream.on(\"error\", function (err: any) {\n const headers = {\n \"status\": 500,\n \"content-type\": mime.getType(fileName)\n };\n stream.setHeader(\"content-type\", headers[\"content-type\"]);\n stream.setHeader(\"status\", headers[\"status\"]);\n stream.write(`<h1>500 - INTERNAL SERVER ERROR</h1>\n <p>${err}</p>\n `);\n\n stream.end(err);\n });\n\n } catch (e: any) {\n if (e.errno == -2) {\n const headers = {\n \"status\": 404,\n \"content-type\": mime.getType(fileName)\n };\n stream.setHeader(\"content-type\", headers[\"content-type\"]);\n stream.setHeader(\"status\", headers[\"status\"]);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n });\n stream.end();\n }\n }\n }\n _generateResponse() {\n var response = this;\n response.fileDispatcher = New(FileDispatcher, {\n scriptname: response.request.scriptname,\n pathname: response.request.pathname,\n done(headers: { [x: string]: any; }, body: any, templateURI: any, isTemplate: any) {\n response.headers = headers;\n var stream = response.stream;\n if (isTemplate) {\n response.body = body;\n Object.keys(headers).map((header) => (stream as any).setHeader(header, headers[header]));\n (stream as any).write(response.body);\n (stream as any).end();\n } else if (headers[\"status\"] == 200 || headers[\":status\"] == 200) {\n response.sendFile(stream, templateURI);\n } else {\n Object.keys(headers).map((header) => (stream as any).setHeader(header, headers[header]));\n (stream as any).end();\n }\n }\n });\n\n }\n\n}\n\nclass HTTPServerRequest extends InheritClass {\n constructor({\n scriptname = \"\",\n path = \"\",\n method = \"\",\n url = \"\",\n headers = null,\n flags = null,\n protocol = null,\n slashes = null,\n auth = null,\n host = null,\n port = null,\n hostname = null,\n hash = null,\n search = \"\",\n query = \"\",\n pathname = \"\",\n href = \"\"\n }) {\n super({\n scriptname,\n path,\n method,\n url,\n headers,\n flags,\n protocol,\n slashes,\n auth,\n host,\n port,\n hostname,\n hash,\n search,\n query,\n pathname,\n href\n });\n }\n}\n\nexport class HTTPServer extends InheritClass {\n interceptorInstances: never[];\n server: any;\n request: any;\n response: any;\n constructor({\n request = null,\n response = \"\",\n server = null,\n scriptname = \"\",\n interceptorInstances = []\n }) {\n super({\n request,\n response,\n server,\n scriptname,\n interceptorInstances\n });\n\n const welcometo = \"Welcome to \\n\";\n const instructions = \"QCObjects Legacy HTTPServer \\n\";\n const logo = \" .d88888b. .d8888b. .d88888b. 888 d8b 888 \\r\\nd88P\\\" \\\"Y88bd88P Y88bd88P\\\" \\\"Y88b888 Y8P 888 \\r\\n888 888888 888888 888888 888 \\r\\n888 888888 888 88888888b. 8888 .d88b. .d8888b888888.d8888b \\r\\n888 888888 888 888888 \\\"88b \\\"888d8P Y8bd88P\\\" 888 88K \\r\\n888 Y8b 888888 888888 888888 888 88888888888888 888 \\\"Y8888b. \\r\\nY88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \\r\\n \\\"Y888888\\\" \\\"Y8888P\\\" \\\"Y88888P\\\" 88888P\\\" 888 \\\"Y8888 \\\"Y8888P \\\"Y888 88888P' \\r\\n Y8b 888 \\r\\n d88P \\r\\n 888P\\\" \";\n console.log(welcometo);\n console.log(logo);\n console.log(instructions);\n logger.debug(this.showIPAddress());\n logger.info(\"Listening on HTTP PORT: \" + CONFIG.get(\"serverPortHTTP\").toString());\n logger.info(\"Go to: \\n\" + this.showPossibleURL());\n this.interceptorInstances = interceptorInstances;\n\n this.server = http.createServer((req: any, res: any) => {\n logger.debug(\"Legacy Server Instantiated.\");\n });\n\n this.server.on(\"error\", (err: any) => console.error(err));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Loading backend interceptors...\");\n const interceptors = CONFIG.get(\"backend\", {}).interceptors;\n if (typeof interceptors !== \"undefined\") {\n logger.info(\"Backend Interceptors Available\");\n interceptors.map((interceptor: { microservice: string; }) => {\n ImportMicroservice(interceptor.microservice);\n var interceptorClassFactory = ClassFactory(interceptor.microservice + \".Interceptor\");\n var interceptorInstance = New(interceptorClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n interceptor: interceptor,\n server: this.server\n });\n this.interceptorInstances.push(interceptorInstance as never);\n });\n }\n }\n\n this.server.on(\"request\", (req: { url: any; headers: any; method: any; }, res: { destroyed: any; writeHeader: (arg0: number, arg1: { \"content-type\": string; }) => void; on: (arg0: string, arg1: () => void) => void; write: (arg0: string) => void; end: () => void; }) => {\n\n const request = Object.assign(New(HTTPServerRequest), URL.parse(req.url));\n request.headers = req.headers;\n this.request = request;\n this.request.method = req.method;\n this.request.path = req.url;\n this.server.setMaxListeners(9999999999);\n CONFIG.set(\"backendTimeout\", CONFIG.get(\"backendTimeout\") || 20000);\n var timeoutHandler = () => {\n // end the stream on timeout\n try {\n if (!res.destroyed) {\n logger.info(\"A timeout occurred...\" + CONFIG.get(\"backendTimeout\").toString());\n logger.info(\"Killing session...\");\n\n res.writeHeader(500, {\n \"content-type\": \"text/html\"\n });\n res.on(\"error\", () => { });\n res.write(\"<h1>500 - INTERNAL SERVER ERROR (TIMEOUT)</h1>\");\n res.end();\n } else {\n logger.debug(\"Session was normally finishing...\");\n }\n } catch (e: any) {\n logger.debug(`An unhandled error occurred during timeout catching: ${e}`);\n }\n this.server.removeListener(\"timeout\", timeoutHandler);\n\n };\n if (!res.destroyed) {\n this.server.setTimeout(CONFIG.get(\"backendTimeout\"), timeoutHandler);\n }\n\n if (this.request.pathname.indexOf(\".\") < 0) {\n this.request.scriptname = CONFIG.get(\"documentRootFileIndex\");\n } else {\n this.request.scriptname = this.request.pathname.split(\"/\").reverse()[0];\n }\n this.request.pathname = this.request.pathname.substr(0, this.request.pathname.lastIndexOf(\"/\"));\n\n logger.debug(PipeLog.pipe(this.request));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Backend Legacy Microservices Available...\");\n\n logger.info(\"Loading backend routes...\");\n const routes = CONFIG.get(\"backend\", {}).routes;\n const selectedRoute = routes.filter((route: { path: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\");\n return (new RegExp(standardRoutePath, \"g\")).test(request.path);\n });\n if (selectedRoute.length > 0) {\n selectedRoute.map((route: { path: string; microservice: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\"); //allowing {param}\n console.log(standardRoutePath);\n const selectedRouteParams = {\n ...[...request.path.matchAll((new RegExp(standardRoutePath, \"g\")))][0][\"groups\"]\n };\n ImportMicroservice(route.microservice).then(() => {\n logger.debug(`Trying to execute ${route.microservice + \".Microservice\"}...`);\n var microServiceClassFactory = ClassFactory(route.microservice + \".Microservice\");\n if (typeof microServiceClassFactory !== \"undefined\") {\n const server = this.server;\n this.response = New(microServiceClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n route: route,\n routeParams: selectedRouteParams,\n server: server,\n stream: res,\n req: req,\n request: request\n });\n\n } else {\n throw Error(`${route.microservice + \".Microservice\"} not defined.`);\n }\n }).catch((e: string | undefined) => {\n throw Error(e);\n });\n });\n } else {\n this.response = New(HTTPServerResponse, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n server: this.server,\n stream: res,\n req: req,\n request: this.request\n });\n }\n\n } else {\n // ...\n\n this.response = New(HTTPServerResponse, {\n server: this.server,\n stream: res,\n req: req,\n request: this.request\n });\n\n }\n\n });\n\n }\n\n\n showIPAddress() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.forEach(function (ipGroup: any) {\n _ret_ += iface + \": \" + PipeLog.pipe(ipGroup) + \"\\n\";\n });\n });\n return _ret_;\n }\n showPossibleURL() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.forEach(function (ipGroup: any) {\n if (ipGroup[\"family\"].toLowerCase() == \"ipv4\") {\n _ret_ += \"http://\" + ipGroup[\"address\"] + \":\" + CONFIG.get(\"serverPortHTTP\").toString() + \"/\\n\";\n }\n });\n });\n return _ret_;\n }\n start() {\n var server = this.server;\n server.listen(process.env.PORT || CONFIG.get(\"serverPortHTTP\"));\n }\n\n}\n\n\nPackage(\"org.quickcorp.qcobjects.main.http.server\", [\n BackendMicroservice,\n HTTPServer,\n HTTPServerRequest,\n HTTPServerResponse\n]);\n"],
5
+ "mappings": "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",
6
6
  "names": ["path", "requestMethod", "supportedMethods", "fs", "mime", "headers", "http", "request", "URL", "server", "os"]
7
7
  }
@@ -80,11 +80,16 @@ class HTTP2ServerResponse extends import_qcobjects.InheritClass {
80
80
  }) {
81
81
  super();
82
82
  var self = this;
83
- self.request = request;
83
+ self.request = request || {};
84
84
  self.stream = stream;
85
85
  self.headers = headers;
86
86
  self.body = body;
87
87
  self.fileDispatcher = fileDispatcher;
88
+ if (!self.request.scriptname || !self.request.pathname) {
89
+ const defaultPath = "/";
90
+ self.request.pathname = self.request.pathname || defaultPath;
91
+ self.request.scriptname = self.request.scriptname || import_qcobjects.CONFIG.get("documentRootFileIndex", "index.html");
92
+ }
88
93
  self._generateResponse();
89
94
  }
90
95
  sendFile(stream, fileName) {
@@ -303,12 +308,18 @@ Y88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \r
303
308
  http2ServerInstance.request = request2;
304
309
  http2ServerInstance.request.method = headers[":method"];
305
310
  http2ServerInstance.request.path = headers[":path"];
306
- if (http2ServerInstance.request.pathname.indexOf(".") < 0) {
307
- http2ServerInstance.request.scriptname = import_qcobjects.CONFIG.get("documentRootFileIndex");
311
+ const pathParts = http2ServerInstance.request.pathname.split("/");
312
+ if (pathParts.length > 0) {
313
+ if (http2ServerInstance.request.pathname.indexOf(".") < 0) {
314
+ http2ServerInstance.request.scriptname = import_qcobjects.CONFIG.get("documentRootFileIndex", "index.html");
315
+ } else {
316
+ http2ServerInstance.request.scriptname = pathParts[pathParts.length - 1];
317
+ http2ServerInstance.request.pathname = http2ServerInstance.request.pathname.substr(0, http2ServerInstance.request.pathname.lastIndexOf("/"));
318
+ }
308
319
  } else {
309
- http2ServerInstance.request.scriptname = http2ServerInstance.request.pathname.split("/").reverse()[0];
320
+ http2ServerInstance.request.scriptname = import_qcobjects.CONFIG.get("documentRootFileIndex", "index.html");
321
+ http2ServerInstance.request.pathname = "/";
310
322
  }
311
- http2ServerInstance.request.pathname = this.request.pathname.substr(0, http2ServerInstance.request.pathname.lastIndexOf("/"));
312
323
  import_qcobjects.logger.debug(import_common_pipelog.PipeLog.pipe(this.request));
313
324
  if (import_qcobjects.global.get("backendAvailable")) {
314
325
  import_qcobjects.logger.info("Backend Microservices Available...");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/main-http2-server.ts"],
4
- "sourcesContent": ["/**\n * QCObjects CLI 2.4.x\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n */\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\n\nimport { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, global, ClassFactory } from \"qcobjects\";\n\nimport mime from \"mime\";\nimport path from \"node:path\";\n\nimport http2 from \"node:http2\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport URL from \"node:url\";\nimport http from \"node:http\";\nimport { FileDispatcher } from \"./main-file\";\nimport { PipeLog } from \"./common-pipelog\";\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\nconst ImportMicroservice = function (microservicePackage: string) {\n var _ret_;\n var standardPath = findPackageNodePath(microservicePackage) || findPackageNodePath(microservicePackage + \".js\");\n if (standardPath !== null) {\n _ret_ = Import(microservicePackage);\n } else {\n var nonStandardPath = findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage) || findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage + \".js\");\n if (nonStandardPath !== null) {\n _ret_ = Import(absolutePath + \"/backend/\" + microservicePackage);\n } else {\n _ret_ = Promise.resolve((async () => (await import(microservicePackage)))());\n }\n }\n return _ret_;\n};\n\nclass HTTP2ServerResponse extends InheritClass {\n fileDispatcher: any;\n request: any;\n headers!: { [x: string]: string | number };\n stream: any;\n body: any;\n constructor({\n headers = {\n \":status\": 200,\n \"content-type\": \"text/html\",\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n },\n body = \"\",\n request = null,\n fileDispatcher = null,\n stream = null\n }) {\n super();\n var self = this;\n self.request = request;\n self.stream = stream;\n self.headers = headers;\n self.body = body;\n self.fileDispatcher = fileDispatcher;\n self._generateResponse();\n }\n\n sendFile(stream: { respondWithFD: (arg0: any, arg1: { \"content-length\": any; \"last-modified\": any; \"content-type\": any; \"cache-control\": any; }) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; respond: (arg0: { \":status\": number; \"content-type\": any; }) => void; write: (arg0: string) => void; }, fileName: string) {\n // read and send file content in the stream\n\n try {\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n const headers = {\n \"content-length\": stat.size,\n \"last-modified\": stat.mtime.toUTCString(),\n \"content-type\": mime.getType(fileName),\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n stream.respondWithFD(fd, headers);\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n });\n stream.end();\n\n } catch (e: any) {\n logger.debug(\"[HTTP2ServerResponse][sendFile][ERROR] Something went wrong when trying to send the response as file \" + fileName);\n if (e.errno == -2) {\n const headers = {\n \":status\": 404,\n \"content-type\": mime.getType(fileName)\n };\n stream.respond(headers);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n });\n stream.end();\n }\n }\n }\n _generateResponse() {\n var response = this;\n response.fileDispatcher = New(FileDispatcher, {\n scriptname: response.request.scriptname,\n pathname: response.request.pathname,\n done(headers: { [x: string]: number; }, body: any, templateURI: any, isTemplate: any) {\n response.headers = headers;\n var stream = response.stream;\n if (isTemplate) {\n response.body = body;\n stream.respond(response.headers);\n stream.write(response.body);\n stream.end();\n } else if (headers[\":status\"] == 200) {\n response.sendFile(stream, templateURI);\n } else {\n stream.respond(response.headers);\n stream.end();\n }\n }\n });\n\n }\n\n}\n\nclass HTTP2ServerRequest extends InheritClass {\n constructor({\n scriptname = \"\",\n path = \"\",\n method = \"\",\n url = \"\",\n headers = null,\n flags = null,\n protocol = null,\n slashes = null,\n auth = null,\n host = null,\n port = null,\n hostname = null,\n hash = null,\n search = \"\",\n query = \"\",\n pathname = \"\",\n href = \"\"\n }) {\n super({\n scriptname,\n path,\n method,\n url,\n headers,\n flags,\n protocol,\n slashes,\n auth,\n host,\n port,\n hostname,\n hash,\n search,\n query,\n pathname,\n href\n });\n }\n}\n\n\n\nexport class HTTP2Server extends InheritClass {\n server!: http2.Http2SecureServer<typeof import(\"http\").IncomingMessage, typeof import(\"http\").ServerResponse, typeof http2.Http2ServerRequest, typeof http2.Http2ServerResponse>;\n interceptorInstances: any;\n request: any;\n response: any;\n constructor({\n request = null,\n response = \"\",\n server = null,\n scriptname = \"\",\n interceptorInstances = []\n }: { request: any, response: any, server?: any, scriptname: string, interceptorInstances: any[] }) {\n super({\n request,\n response,\n server,\n scriptname,\n interceptorInstances\n });\n\n const welcometo = \"Welcome to \\n\";\n const instructions = \"HTTP2Server \\n\";\n const logo = \" .d88888b. .d8888b. .d88888b. 888 d8b 888 \\r\\nd88P\\\" \\\"Y88bd88P Y88bd88P\\\" \\\"Y88b888 Y8P 888 \\r\\n888 888888 888888 888888 888 \\r\\n888 888888 888 88888888b. 8888 .d88b. .d8888b888888.d8888b \\r\\n888 888888 888 888888 \\\"88b \\\"888d8P Y8bd88P\\\" 888 88K \\r\\n888 Y8b 888888 888888 888888 888 88888888888888 888 \\\"Y8888b. \\r\\nY88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \\r\\n \\\"Y888888\\\" \\\"Y8888P\\\" \\\"Y88888P\\\" 88888P\\\" 888 \\\"Y8888 \\\"Y8888P \\\"Y888 88888P' \\r\\n Y8b 888 \\r\\n d88P \\r\\n 888P\\\" \";\n console.log(welcometo);\n console.log(logo);\n console.log(instructions);\n logger.debug(this.showIPAddress());\n logger.info(\"Listening on HTTP PORT: \" + CONFIG.get(\"serverPortHTTP\").toString());\n logger.info(\"Listening on HTTPS PORT: \" + CONFIG.get(\"serverPortHTTPS\").toString());\n logger.info(\"Go to: \\n\" + this.showPossibleURL());\n\n const http2ServerInstance = this;\n http2ServerInstance.server = http2.createSecureServer({\n key: fs.readFileSync(CONFIG.get(\"private-key-pem\")),\n cert: fs.readFileSync(CONFIG.get(\"private-cert-pem\")),\n allowHTTP1: CONFIG.get(\"allowHTTP1\"),\n origins: [\"https://\" + CONFIG.get(\"domain\"), \"http://\" + CONFIG.get(\"domain\")]\n });\n server = http2ServerInstance.server;\n\n server.on(\"error\", (err: any) => console.error(err));\n\n server.on(\"session\", (session: { altsvc: (arg0: string, arg1: string) => void; origin: (arg0: string, arg1: string) => void; }) => {\n // Set altsvc for origin https://example.org:80\n session.altsvc(\"h2=\\\":8000\\\"\", \"https://\" + CONFIG.get(\"domain\"));\n session.altsvc(\"https=\\\":\" + CONFIG.get(\"serverPortHTTPS\") + \"\\\"\", \"https://\" + CONFIG.get(\"domain\"));\n session.altsvc(\"http=\\\":\" + CONFIG.get(\"serverPortHTTP\") + \"\\\"\", \"http://\" + CONFIG.get(\"domain\"));\n session.origin(\"https://\" + CONFIG.get(\"domain\"), \"http://\" + CONFIG.get(\"domain\"));\n\n });\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Loading backend interceptors...\");\n const interceptors = CONFIG.get(\"backend\", {}).interceptors;\n if (typeof interceptors !== \"undefined\") {\n logger.info(\"Backend Interceptors Available\");\n interceptors.map((interceptor: { microservice: string; }) => {\n ImportMicroservice(interceptor.microservice);\n var interceptorClassFactory = ClassFactory(interceptor.microservice + \".Interceptor\");\n var interceptorInstance = New(interceptorClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n interceptor: interceptor,\n server: server\n });\n http2ServerInstance.interceptorInstances.push(interceptorInstance);\n });\n }\n }\n\n server.on(\"stream\", (stream: { session: { setTimeout: (arg0: any) => void; setMaxListeners: (arg0: number) => void; removeListener: (arg0: string, arg1: () => void) => void; on: (arg0: string, arg1: () => void) => void; altsvc: (arg0: string, arg1: any) => void; }; destroyed: any; respond: (arg0: { \":status\": number; \"content-type\": string; }) => void; on: (arg0: string, arg1: () => void) => void; write: (arg0: string) => void; end: () => void; id: any; }, headers: { [x: string]: any; }, flags: any) => {\n CONFIG.set(\"backendTimeout\", CONFIG.get(\"backendTimeout\") || 20000);\n stream.session.setTimeout(CONFIG.get(\"backendTimeout\"));\n stream.session.setMaxListeners(9999999999);\n var timeoutHandler = () => {\n // end the stream on timeout\n try {\n if (!stream.destroyed) {\n logger.info(\"A timeout occurred... \" + CONFIG.get(\"backendTimeout\").toString());\n logger.info(\"Killing session...\");\n stream.respond({\n \":status\": 500,\n \"content-type\": \"text/html\"\n });\n stream.on(\"error\", () => { });\n stream.write(\"<h1>500 - INTERNAL SERVER ERROR (TIMEOUT)</h1>\");\n stream.end();\n } else {\n logger.debug(\"Session was normally finishing...\");\n }\n } catch (e: any) {\n logger.debug(`An unhandled error occurred during timeout catching: ${e}`);\n }\n\n if (!stream.destroyed) {\n stream.session.removeListener(\"timeout\", timeoutHandler);\n } else {\n server.removeListener(\"timeout\", timeoutHandler);\n }\n\n };\n if (!stream.destroyed) {\n stream.session.on(\"timeout\", timeoutHandler);\n }\n\n stream.session.altsvc(\"h2=\\\":8000\\\"\", stream.id);\n stream.session.altsvc(\"https=\\\":\" + CONFIG.get(\"serverPortHTTPS\") + \"\\\"\", stream.id);\n stream.session.altsvc(\"http=\\\":\" + CONFIG.get(\"serverPortHTTP\") + \"\\\"\", stream.id);\n const request = Object.assign(New(HTTP2ServerRequest), URL.parse(headers[\":path\"]));\n request.headers = headers;\n request.flags = flags;\n http2ServerInstance.request = request;\n http2ServerInstance.request.method = headers[\":method\"];\n http2ServerInstance.request.path = headers[\":path\"];\n\n\n if (http2ServerInstance.request.pathname.indexOf(\".\") < 0) {\n http2ServerInstance.request.scriptname = CONFIG.get(\"documentRootFileIndex\");\n } else {\n http2ServerInstance.request.scriptname = http2ServerInstance.request.pathname.split(\"/\").reverse()[0];\n }\n http2ServerInstance.request.pathname = this.request.pathname.substr(0, http2ServerInstance.request.pathname.lastIndexOf(\"/\"));\n\n logger.debug(PipeLog.pipe(this.request));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Backend Microservices Available...\");\n\n logger.info(\"Loading backend routes...\");\n const routes = CONFIG.get(\"backend\", {}).routes;\n const selectedRoute = routes.filter((route: { path: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\");\n return (new RegExp(standardRoutePath, \"g\")).test(request.path);\n });\n if (selectedRoute.length > 0) {\n selectedRoute.map((route: { path: string; microservice: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\"); //allowing {param}\n console.log(standardRoutePath);\n const selectedRouteParams = {\n ...[...request.path.matchAll((new RegExp(standardRoutePath, \"g\")))][0][\"groups\"]\n };\n ImportMicroservice(route.microservice).then(function () {\n logger.debug(`Trying to execute ${route.microservice + \".Microservice\"}...`);\n var microServiceClassFactory = ClassFactory(route.microservice + \".Microservice\");\n if (typeof microServiceClassFactory !== \"undefined\") {\n http2ServerInstance.response = New(microServiceClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n route: route,\n routeParams: selectedRouteParams,\n server: server,\n stream: stream,\n request: request\n });\n\n } else {\n throw Error(`${route.microservice + \".Microservice\"} not defined.`);\n }\n }).catch((e: string | undefined) => {\n throw Error(e);\n });\n });\n } else {\n this.response = New(HTTP2ServerResponse, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n server: server,\n stream: stream,\n request: request\n });\n }\n\n } else {\n // ...\n\n this.response = New(HTTP2ServerResponse, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n server: server,\n stream: stream,\n request: request\n });\n\n }\n\n });\n\n }\n\n showIPAddress() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.map(function (ipGroup: any) {\n _ret_ += iface + \": \" + PipeLog.pipe(ipGroup) + \"\\n\";\n });\n });\n return _ret_;\n }\n showPossibleURL(): string {\n let _ret_ = \"\";\n const ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach((iface) => {\n ifaces[iface]?.forEach((ipGroup: any) => {\n if (ipGroup.family.toLowerCase() === \"ipv4\") {\n _ret_ += `http://${ipGroup.address}:${CONFIG.get(\"serverPortHTTP\")}/\\n`;\n _ret_ += `https://${ipGroup.address}:${CONFIG.get(\"serverPortHTTPS\")}/\\n`;\n }\n });\n });\n return _ret_;\n }\n\n start() {\n var server = this.server;\n\n // http2 port is 8443 but normally is used 443 by replacing current https\n\n\n const httpServer = http.createServer((req , res) => {\n res.writeHead(301, {\n Location: `https://${req.headers.host}${req.url}`\n });\n res.end();\n });\n\n httpServer.listen(CONFIG.get(\"serverPortHTTP\"));\n server.listen(CONFIG.get(\"serverPortHTTPS\"));\n }\n\n}\n\nPackage(\"org.quickcorp.qcobjects.main.http2.server\", [\n HTTP2ServerResponse, HTTP2ServerRequest, HTTP2Server\n\n]);\n\n\n\n\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * QCObjects CLI 2.4.x\n * ________________\n *\n * Author: Jean Machuca <correojean@gmail.com>\n *\n * Cross Browser Javascript Framework for MVC Patterns\n * QuickCorp/QCObjects is licensed under the\n * GNU Lesser General Public License v3.0\n * [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)\n *\n * Permissions of this copyleft license are conditioned on making available\n * complete source code of licensed works and modifications under the same\n * license or the GNU GPLv3. Copyright and license notices must be preserved.\n * Contributors provide an express grant of patent rights. However, a larger\n * work using the licensed work through interfaces provided by the licensed\n * work may be distributed under different terms and without source code for\n * the larger work.\n *\n * Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>\n *\n * Everyone is permitted to copy and distribute verbatim copies of this\n * license document, but changing it is not allowed.\n */\n/*eslint no-unused-vars: \"off\"*/\n/*eslint no-redeclare: \"off\"*/\n/*eslint no-empty: \"off\"*/\n/*eslint strict: \"off\"*/\n/*eslint no-mixed-operators: \"off\"*/\n/*eslint no-undef: \"off\"*/\n\"use strict\";\n\nimport { findPackageNodePath, Import, Package, InheritClass, CONFIG, logger, New, global, ClassFactory } from \"qcobjects\";\n\nimport mime from \"mime\";\nimport path from \"node:path\";\n\nimport http2 from \"node:http2\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport URL from \"node:url\";\nimport http from \"node:http\";\nimport { FileDispatcher } from \"./main-file\";\nimport { PipeLog } from \"./common-pipelog\";\n\nconst absolutePath = path.resolve(__dirname, \"./\");\n\nconst ImportMicroservice = function (microservicePackage: string) {\n var _ret_;\n var standardPath = findPackageNodePath(microservicePackage) || findPackageNodePath(microservicePackage + \".js\");\n if (standardPath !== null) {\n _ret_ = Import(microservicePackage);\n } else {\n var nonStandardPath = findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage) || findPackageNodePath(absolutePath + \"/backend/\" + microservicePackage + \".js\");\n if (nonStandardPath !== null) {\n _ret_ = Import(absolutePath + \"/backend/\" + microservicePackage);\n } else {\n _ret_ = Promise.resolve((async () => (await import(microservicePackage)))());\n }\n }\n return _ret_;\n};\n\nclass HTTP2ServerResponse extends InheritClass {\n fileDispatcher: any;\n request: any;\n headers!: { [x: string]: string | number };\n stream: any;\n body: any;\n constructor({\n headers = {\n \":status\": 200,\n \"content-type\": \"text/html\",\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n },\n body = \"\",\n request = null,\n fileDispatcher = null,\n stream = null\n }) {\n super();\n var self = this;\n self.request = request || {};\n self.stream = stream;\n self.headers = headers;\n self.body = body;\n self.fileDispatcher = fileDispatcher;\n \n // Initialize request properties if not set\n if (!self.request.scriptname || !self.request.pathname) {\n const defaultPath = \"/\";\n self.request.pathname = self.request.pathname || defaultPath;\n self.request.scriptname = self.request.scriptname || CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n }\n \n self._generateResponse();\n }\n\n sendFile(stream: { respondWithFD: (arg0: any, arg1: { \"content-length\": any; \"last-modified\": any; \"content-type\": any; \"cache-control\": any; }) => void; on: (arg0: string, arg1: { (): void; (): void; }) => void; end: () => void; respond: (arg0: { \":status\": number; \"content-type\": any; }) => void; write: (arg0: string) => void; }, fileName: string) {\n // read and send file content in the stream\n\n try {\n const fd = fs.openSync(fileName, \"r\");\n const stat = fs.fstatSync(fd);\n const headers = {\n \"content-length\": stat.size,\n \"last-modified\": stat.mtime.toUTCString(),\n \"content-type\": mime.getType(fileName),\n \"cache-control\": CONFIG.get(\"cacheControl\", \"max-age=31536000\")\n };\n stream.respondWithFD(fd, headers);\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n fs.closeSync(fd);\n });\n stream.end();\n\n } catch (e: any) {\n logger.debug(\"[HTTP2ServerResponse][sendFile][ERROR] Something went wrong when trying to send the response as file \" + fileName);\n if (e.errno == -2) {\n const headers = {\n \":status\": 404,\n \"content-type\": mime.getType(fileName)\n };\n stream.respond(headers);\n stream.write(\"<h1>404 - FILE NOT FOUND</h1>\");\n stream.on(\"close\", () => {\n logger.debug(\"closing file \" + fileName);\n });\n stream.end();\n }\n }\n }\n _generateResponse() {\n var response = this;\n response.fileDispatcher = New(FileDispatcher, {\n scriptname: response.request.scriptname,\n pathname: response.request.pathname,\n done(headers: { [x: string]: number; }, body: any, templateURI: any, isTemplate: any) {\n response.headers = headers;\n var stream = response.stream;\n if (isTemplate) {\n response.body = body;\n stream.respond(response.headers);\n stream.write(response.body);\n stream.end();\n } else if (headers[\":status\"] == 200) {\n response.sendFile(stream, templateURI);\n } else {\n stream.respond(response.headers);\n stream.end();\n }\n }\n });\n\n }\n\n}\n\nclass HTTP2ServerRequest extends InheritClass {\n constructor({\n scriptname = \"\",\n path = \"\",\n method = \"\",\n url = \"\",\n headers = null,\n flags = null,\n protocol = null,\n slashes = null,\n auth = null,\n host = null,\n port = null,\n hostname = null,\n hash = null,\n search = \"\",\n query = \"\",\n pathname = \"\",\n href = \"\"\n }) {\n super({\n scriptname,\n path,\n method,\n url,\n headers,\n flags,\n protocol,\n slashes,\n auth,\n host,\n port,\n hostname,\n hash,\n search,\n query,\n pathname,\n href\n });\n }\n}\n\n\n\nexport class HTTP2Server extends InheritClass {\n server!: http2.Http2SecureServer<typeof import(\"http\").IncomingMessage, typeof import(\"http\").ServerResponse, typeof http2.Http2ServerRequest, typeof http2.Http2ServerResponse>;\n interceptorInstances: any;\n request: any;\n response: any;\n constructor({\n request = null,\n response = \"\",\n server = null,\n scriptname = \"\",\n interceptorInstances = []\n }: { request: any, response: any, server?: any, scriptname: string, interceptorInstances: any[] }) {\n super({\n request,\n response,\n server,\n scriptname,\n interceptorInstances\n });\n\n const welcometo = \"Welcome to \\n\";\n const instructions = \"HTTP2Server \\n\";\n const logo = \" .d88888b. .d8888b. .d88888b. 888 d8b 888 \\r\\nd88P\\\" \\\"Y88bd88P Y88bd88P\\\" \\\"Y88b888 Y8P 888 \\r\\n888 888888 888888 888888 888 \\r\\n888 888888 888 88888888b. 8888 .d88b. .d8888b888888.d8888b \\r\\n888 888888 888 888888 \\\"88b \\\"888d8P Y8bd88P\\\" 888 88K \\r\\n888 Y8b 888888 888888 888888 888 88888888888888 888 \\\"Y8888b. \\r\\nY88b.Y8b88PY88b d88PY88b. .d88P888 d88P 888Y8b. Y88b. Y88b. X88 \\r\\n \\\"Y888888\\\" \\\"Y8888P\\\" \\\"Y88888P\\\" 88888P\\\" 888 \\\"Y8888 \\\"Y8888P \\\"Y888 88888P' \\r\\n Y8b 888 \\r\\n d88P \\r\\n 888P\\\" \";\n console.log(welcometo);\n console.log(logo);\n console.log(instructions);\n logger.debug(this.showIPAddress());\n logger.info(\"Listening on HTTP PORT: \" + CONFIG.get(\"serverPortHTTP\").toString());\n logger.info(\"Listening on HTTPS PORT: \" + CONFIG.get(\"serverPortHTTPS\").toString());\n logger.info(\"Go to: \\n\" + this.showPossibleURL());\n\n const http2ServerInstance = this;\n http2ServerInstance.server = http2.createSecureServer({\n key: fs.readFileSync(CONFIG.get(\"private-key-pem\")),\n cert: fs.readFileSync(CONFIG.get(\"private-cert-pem\")),\n allowHTTP1: CONFIG.get(\"allowHTTP1\"),\n origins: [\"https://\" + CONFIG.get(\"domain\"), \"http://\" + CONFIG.get(\"domain\")]\n });\n server = http2ServerInstance.server;\n\n server.on(\"error\", (err: any) => console.error(err));\n\n server.on(\"session\", (session: { altsvc: (arg0: string, arg1: string) => void; origin: (arg0: string, arg1: string) => void; }) => {\n // Set altsvc for origin https://example.org:80\n session.altsvc(\"h2=\\\":8000\\\"\", \"https://\" + CONFIG.get(\"domain\"));\n session.altsvc(\"https=\\\":\" + CONFIG.get(\"serverPortHTTPS\") + \"\\\"\", \"https://\" + CONFIG.get(\"domain\"));\n session.altsvc(\"http=\\\":\" + CONFIG.get(\"serverPortHTTP\") + \"\\\"\", \"http://\" + CONFIG.get(\"domain\"));\n session.origin(\"https://\" + CONFIG.get(\"domain\"), \"http://\" + CONFIG.get(\"domain\"));\n\n });\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Loading backend interceptors...\");\n const interceptors = CONFIG.get(\"backend\", {}).interceptors;\n if (typeof interceptors !== \"undefined\") {\n logger.info(\"Backend Interceptors Available\");\n interceptors.map((interceptor: { microservice: string; }) => {\n ImportMicroservice(interceptor.microservice);\n var interceptorClassFactory = ClassFactory(interceptor.microservice + \".Interceptor\");\n var interceptorInstance = New(interceptorClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n interceptor: interceptor,\n server: server\n });\n http2ServerInstance.interceptorInstances.push(interceptorInstance);\n });\n }\n }\n\n server.on(\"stream\", (stream: { session: { setTimeout: (arg0: any) => void; setMaxListeners: (arg0: number) => void; removeListener: (arg0: string, arg1: () => void) => void; on: (arg0: string, arg1: () => void) => void; altsvc: (arg0: string, arg1: any) => void; }; destroyed: any; respond: (arg0: { \":status\": number; \"content-type\": string; }) => void; on: (arg0: string, arg1: () => void) => void; write: (arg0: string) => void; end: () => void; id: any; }, headers: { [x: string]: any; }, flags: any) => {\n CONFIG.set(\"backendTimeout\", CONFIG.get(\"backendTimeout\") || 20000);\n stream.session.setTimeout(CONFIG.get(\"backendTimeout\"));\n stream.session.setMaxListeners(9999999999);\n var timeoutHandler = () => {\n // end the stream on timeout\n try {\n if (!stream.destroyed) {\n logger.info(\"A timeout occurred... \" + CONFIG.get(\"backendTimeout\").toString());\n logger.info(\"Killing session...\");\n stream.respond({\n \":status\": 500,\n \"content-type\": \"text/html\"\n });\n stream.on(\"error\", () => { });\n stream.write(\"<h1>500 - INTERNAL SERVER ERROR (TIMEOUT)</h1>\");\n stream.end();\n } else {\n logger.debug(\"Session was normally finishing...\");\n }\n } catch (e: any) {\n logger.debug(`An unhandled error occurred during timeout catching: ${e}`);\n }\n\n if (!stream.destroyed) {\n stream.session.removeListener(\"timeout\", timeoutHandler);\n } else {\n server.removeListener(\"timeout\", timeoutHandler);\n }\n\n };\n if (!stream.destroyed) {\n stream.session.on(\"timeout\", timeoutHandler);\n }\n\n stream.session.altsvc(\"h2=\\\":8000\\\"\", stream.id);\n stream.session.altsvc(\"https=\\\":\" + CONFIG.get(\"serverPortHTTPS\") + \"\\\"\", stream.id);\n stream.session.altsvc(\"http=\\\":\" + CONFIG.get(\"serverPortHTTP\") + \"\\\"\", stream.id);\n const request = Object.assign(New(HTTP2ServerRequest), URL.parse(headers[\":path\"]));\n request.headers = headers;\n request.flags = flags;\n http2ServerInstance.request = request;\n http2ServerInstance.request.method = headers[\":method\"];\n http2ServerInstance.request.path = headers[\":path\"];\n\n // Fix pathname and scriptname initialization\n const pathParts = http2ServerInstance.request.pathname.split(\"/\");\n if (pathParts.length > 0) {\n if (http2ServerInstance.request.pathname.indexOf(\".\") < 0) {\n http2ServerInstance.request.scriptname = CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n // Keep the original pathname as is, no need to reassign\n } else {\n http2ServerInstance.request.scriptname = pathParts[pathParts.length - 1];\n http2ServerInstance.request.pathname = http2ServerInstance.request.pathname.substr(0, http2ServerInstance.request.pathname.lastIndexOf(\"/\"));\n }\n } else {\n http2ServerInstance.request.scriptname = CONFIG.get(\"documentRootFileIndex\", \"index.html\");\n http2ServerInstance.request.pathname = \"/\";\n }\n\n logger.debug(PipeLog.pipe(this.request));\n\n if (global.get(\"backendAvailable\")) {\n logger.info(\"Backend Microservices Available...\");\n\n logger.info(\"Loading backend routes...\");\n const routes = CONFIG.get(\"backend\", {}).routes;\n const selectedRoute = routes.filter((route: { path: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\");\n return (new RegExp(standardRoutePath, \"g\")).test(request.path);\n });\n if (selectedRoute.length > 0) {\n selectedRoute.map((route: { path: string; microservice: string; }) => {\n const standardRoutePath = route.path.replace(/{(.*?)}/g, \"(?<$1>.*)\"); //allowing {param}\n console.log(standardRoutePath);\n const selectedRouteParams = {\n ...[...request.path.matchAll((new RegExp(standardRoutePath, \"g\")))][0][\"groups\"]\n };\n ImportMicroservice(route.microservice).then(function () {\n logger.debug(`Trying to execute ${route.microservice + \".Microservice\"}...`);\n var microServiceClassFactory = ClassFactory(route.microservice + \".Microservice\");\n if (typeof microServiceClassFactory !== \"undefined\") {\n http2ServerInstance.response = New(microServiceClassFactory, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n route: route,\n routeParams: selectedRouteParams,\n server: server,\n stream: stream,\n request: request\n });\n\n } else {\n throw Error(`${route.microservice + \".Microservice\"} not defined.`);\n }\n }).catch((e: string | undefined) => {\n throw Error(e);\n });\n });\n } else {\n this.response = New(HTTP2ServerResponse, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n server: server,\n stream: stream,\n request: request\n });\n }\n\n } else {\n // ...\n\n this.response = New(HTTP2ServerResponse, {\n domain: CONFIG.get(\"domain\"),\n basePath: CONFIG.get(\"basePath\"),\n projectPath: CONFIG.get(\"projectPath\"),\n server: server,\n stream: stream,\n request: request\n });\n\n }\n\n });\n\n }\n\n showIPAddress() {\n var _ret_ = \"\";\n var ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach(function (iface) {\n ifaces[iface]?.map(function (ipGroup: any) {\n _ret_ += iface + \": \" + PipeLog.pipe(ipGroup) + \"\\n\";\n });\n });\n return _ret_;\n }\n showPossibleURL(): string {\n let _ret_ = \"\";\n const ifaces = os.networkInterfaces();\n Object.keys(ifaces).forEach((iface) => {\n ifaces[iface]?.forEach((ipGroup: any) => {\n if (ipGroup.family.toLowerCase() === \"ipv4\") {\n _ret_ += `http://${ipGroup.address}:${CONFIG.get(\"serverPortHTTP\")}/\\n`;\n _ret_ += `https://${ipGroup.address}:${CONFIG.get(\"serverPortHTTPS\")}/\\n`;\n }\n });\n });\n return _ret_;\n }\n\n start() {\n var server = this.server;\n\n // http2 port is 8443 but normally is used 443 by replacing current https\n\n\n const httpServer = http.createServer((req , res) => {\n res.writeHead(301, {\n Location: `https://${req.headers.host}${req.url}`\n });\n res.end();\n });\n\n httpServer.listen(CONFIG.get(\"serverPortHTTP\"));\n server.listen(CONFIG.get(\"serverPortHTTPS\"));\n }\n\n}\n\nPackage(\"org.quickcorp.qcobjects.main.http2.server\", [\n HTTP2ServerResponse, HTTP2ServerRequest, HTTP2Server\n\n]);\n\n\n\n\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCA,uBAA8G;AAE9G,kBAAiB;AACjB,uBAAiB;AAEjB,wBAAkB;AAClB,qBAAe;AACf,qBAAe;AACf,sBAAgB;AAChB,uBAAiB;AACjB,uBAA+B;AAC/B,4BAAwB;AAExB,MAAM,eAAe,iBAAAA,QAAK,QAAQ,WAAW,IAAI;AAEjD,MAAM,qBAAqB,gCAAU,qBAA6B;AAChE,MAAI;AACJ,MAAI,mBAAe,sCAAoB,mBAAmB,SAAK,sCAAoB,sBAAsB,KAAK;AAC9G,MAAI,iBAAiB,MAAM;AACzB,gBAAQ,yBAAO,mBAAmB;AAAA,EACpC,OAAO;AACL,QAAI,sBAAkB,sCAAoB,eAAe,cAAc,mBAAmB,SAAK,sCAAoB,eAAe,cAAc,sBAAsB,KAAK;AAC3K,QAAI,oBAAoB,MAAM;AAC5B,kBAAQ,yBAAO,eAAe,cAAc,mBAAmB;AAAA,IACjE,OAAO;AACL,cAAQ,QAAQ,SAAS,YAAa,MAAM,OAAO,sBAAuB,CAAC;AAAA,IAC7E;AAAA,EACF;AACA,SAAO;AACT,GAd2B;AAgB3B,MAAM,4BAA4B,8BAAa;AAAA,EA/D/C,OA+D+C;AAAA;AAAA;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,MACR,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,iBAAiB,wBAAO,IAAI,gBAAgB,kBAAkB;AAAA,IAChE;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,SAAS;AAAA,EACX,GAAG;AACD,UAAM;AACN,QAAI,OAAO;AACX,SAAK,UAAU,WAAW,CAAC;AAC3B,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,OAAO;AACZ,SAAK,iBAAiB;AAGtB,QAAI,CAAC,KAAK,QAAQ,cAAc,CAAC,KAAK,QAAQ,UAAU;AACtD,YAAM,cAAc;AACpB,WAAK,QAAQ,WAAW,KAAK,QAAQ,YAAY;AACjD,WAAK,QAAQ,aAAa,KAAK,QAAQ,cAAc,wBAAO,IAAI,yBAAyB,YAAY;AAAA,IACvG;AAEA,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,SAAS,QAAqU,UAAkB;AAG9V,QAAI;AACF,YAAM,KAAK,eAAAC,QAAG,SAAS,UAAU,GAAG;AACpC,YAAM,OAAO,eAAAA,QAAG,UAAU,EAAE;AAC5B,YAAM,UAAU;AAAA,QACd,kBAAkB,KAAK;AAAA,QACvB,iBAAiB,KAAK,MAAM,YAAY;AAAA,QACxC,gBAAgB,YAAAC,QAAK,QAAQ,QAAQ;AAAA,QACrC,iBAAiB,wBAAO,IAAI,gBAAgB,kBAAkB;AAAA,MAChE;AACA,aAAO,cAAc,IAAI,OAAO;AAChC,aAAO,GAAG,SAAS,MAAM;AACvB,gCAAO,MAAM,kBAAkB,QAAQ;AACvC,uBAAAD,QAAG,UAAU,EAAE;AAAA,MACjB,CAAC;AACD,aAAO,IAAI;AAAA,IAEb,SAAS,GAAQ;AACf,8BAAO,MAAM,0GAA0G,QAAQ;AAC/H,UAAI,EAAE,SAAS,IAAI;AACjB,cAAM,UAAU;AAAA,UACd,WAAW;AAAA,UACX,gBAAgB,YAAAC,QAAK,QAAQ,QAAQ;AAAA,QACvC;AACA,eAAO,QAAQ,OAAO;AACtB,eAAO,MAAM,+BAA+B;AAC5C,eAAO,GAAG,SAAS,MAAM;AACvB,kCAAO,MAAM,kBAAkB,QAAQ;AAAA,QACzC,CAAC;AACD,eAAO,IAAI;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EACA,oBAAoB;AAClB,QAAI,WAAW;AACf,aAAS,qBAAiB,sBAAI,iCAAgB;AAAA,MAC5C,YAAY,SAAS,QAAQ;AAAA,MAC7B,UAAU,SAAS,QAAQ;AAAA,MAC3B,KAAK,SAAmC,MAAW,aAAkB,YAAiB;AACpF,iBAAS,UAAU;AACnB,YAAI,SAAS,SAAS;AACtB,YAAI,YAAY;AACd,mBAAS,OAAO;AAChB,iBAAO,QAAQ,SAAS,OAAO;AAC/B,iBAAO,MAAM,SAAS,IAAI;AAC1B,iBAAO,IAAI;AAAA,QACb,WAAW,QAAQ,SAAS,KAAK,KAAK;AACpC,mBAAS,SAAS,QAAQ,WAAW;AAAA,QACvC,OAAO;AACL,iBAAO,QAAQ,SAAS,OAAO;AAC/B,iBAAO,IAAI;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EAEH;AAEF;AAEA,MAAM,2BAA2B,8BAAa;AAAA,EA/J9C,OA+J8C;AAAA;AAAA;AAAA,EAC5C,YAAY;AAAA,IACV,aAAa;AAAA,IACb,MAAAF,QAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,IACP,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,OAAO;AAAA,EACT,GAAG;AACD,UAAM;AAAA,MACJ;AAAA,MACA,MAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAIO,MAAM,oBAAoB,8BAAa;AAAA,EA3M9C,OA2M8C;AAAA;AAAA;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA,IACb,uBAAuB,CAAC;AAAA,EAC1B,GAAmG;AACjG,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,YAAY;AAClB,UAAM,eAAe;AACrB,UAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACb,YAAQ,IAAI,SAAS;AACrB,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,YAAY;AACxB,4BAAO,MAAM,KAAK,cAAc,CAAC;AACjC,4BAAO,KAAK,6BAA6B,wBAAO,IAAI,gBAAgB,EAAE,SAAS,CAAC;AAChF,4BAAO,KAAK,8BAA8B,wBAAO,IAAI,iBAAiB,EAAE,SAAS,CAAC;AAClF,4BAAO,KAAK,cAAc,KAAK,gBAAgB,CAAC;AAEhD,UAAM,sBAAsB;AAC5B,wBAAoB,SAAS,kBAAAG,QAAM,mBAAmB;AAAA,MACpD,KAAK,eAAAF,QAAG,aAAa,wBAAO,IAAI,iBAAiB,CAAC;AAAA,MAClD,MAAM,eAAAA,QAAG,aAAa,wBAAO,IAAI,kBAAkB,CAAC;AAAA,MACpD,YAAY,wBAAO,IAAI,YAAY;AAAA,MACnC,SAAS,CAAC,aAAa,wBAAO,IAAI,QAAQ,GAAG,YAAY,wBAAO,IAAI,QAAQ,CAAC;AAAA,IAC/E,CAAC;AACD,aAAS,oBAAoB;AAE7B,WAAO,GAAG,SAAS,CAAC,QAAa,QAAQ,MAAM,GAAG,CAAC;AAEnD,WAAO,GAAG,WAAW,CAAC,YAA6G;AAEjI,cAAQ,OAAO,cAAgB,aAAa,wBAAO,IAAI,QAAQ,CAAC;AAChE,cAAQ,OAAO,aAAc,wBAAO,IAAI,iBAAiB,IAAI,KAAM,aAAa,wBAAO,IAAI,QAAQ,CAAC;AACpG,cAAQ,OAAO,YAAa,wBAAO,IAAI,gBAAgB,IAAI,KAAM,YAAY,wBAAO,IAAI,QAAQ,CAAC;AACjG,cAAQ,OAAO,aAAa,wBAAO,IAAI,QAAQ,GAAG,YAAY,wBAAO,IAAI,QAAQ,CAAC;AAAA,IAEpF,CAAC;AAED,QAAI,wBAAO,IAAI,kBAAkB,GAAG;AAClC,8BAAO,KAAK,iCAAiC;AAC7C,YAAM,eAAe,wBAAO,IAAI,WAAW,CAAC,CAAC,EAAE;AAC/C,UAAI,OAAO,iBAAiB,aAAa;AACvC,gCAAO,KAAK,gCAAgC;AAC5C,qBAAa,IAAI,CAAC,gBAA2C;AAC3D,6BAAmB,YAAY,YAAY;AAC3C,cAAI,8BAA0B,+BAAa,YAAY,eAAe,cAAc;AACpF,cAAI,0BAAsB,sBAAI,yBAAyB;AAAA,YACrD,QAAQ,wBAAO,IAAI,QAAQ;AAAA,YAC3B,UAAU,wBAAO,IAAI,UAAU;AAAA,YAC/B,aAAa,wBAAO,IAAI,aAAa;AAAA,YACrC;AAAA,YACA;AAAA,UACF,CAAC;AACD,8BAAoB,qBAAqB,KAAK,mBAAmB;AAAA,QACnE,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,GAAG,UAAU,CAAC,QAAwb,SAAgC,UAAe;AAC1f,8BAAO,IAAI,kBAAkB,wBAAO,IAAI,gBAAgB,KAAK,GAAK;AAClE,aAAO,QAAQ,WAAW,wBAAO,IAAI,gBAAgB,CAAC;AACtD,aAAO,QAAQ,gBAAgB,UAAU;AACzC,UAAI,iBAAiB,6BAAM;AAEzB,YAAI;AACF,cAAI,CAAC,OAAO,WAAW;AACrB,oCAAO,KAAK,2BAA2B,wBAAO,IAAI,gBAAgB,EAAE,SAAS,CAAC;AAC9E,oCAAO,KAAK,oBAAoB;AAChC,mBAAO,QAAQ;AAAA,cACb,WAAW;AAAA,cACX,gBAAgB;AAAA,YAClB,CAAC;AACD,mBAAO,GAAG,SAAS,MAAM;AAAA,YAAE,CAAC;AAC5B,mBAAO,MAAM,gDAAgD;AAC7D,mBAAO,IAAI;AAAA,UACb,OAAO;AACL,oCAAO,MAAM,mCAAmC;AAAA,UAClD;AAAA,QACF,SAAS,GAAQ;AACf,kCAAO,MAAM,wDAAwD,CAAC,EAAE;AAAA,QAC1E;AAEA,YAAI,CAAC,OAAO,WAAW;AACrB,iBAAO,QAAQ,eAAe,WAAW,cAAc;AAAA,QACzD,OAAO;AACL,iBAAO,eAAe,WAAW,cAAc;AAAA,QACjD;AAAA,MAEF,GA1BqB;AA2BrB,UAAI,CAAC,OAAO,WAAW;AACrB,eAAO,QAAQ,GAAG,WAAW,cAAc;AAAA,MAC7C;AAEA,aAAO,QAAQ,OAAO,cAAgB,OAAO,EAAE;AAC/C,aAAO,QAAQ,OAAO,aAAc,wBAAO,IAAI,iBAAiB,IAAI,KAAM,OAAO,EAAE;AACnF,aAAO,QAAQ,OAAO,YAAa,wBAAO,IAAI,gBAAgB,IAAI,KAAM,OAAO,EAAE;AACjF,YAAMG,WAAU,OAAO,WAAO,sBAAI,kBAAkB,GAAG,gBAAAC,QAAI,MAAM,QAAQ,OAAO,CAAC,CAAC;AAClF,MAAAD,SAAQ,UAAU;AAClB,MAAAA,SAAQ,QAAQ;AAChB,0BAAoB,UAAUA;AAC9B,0BAAoB,QAAQ,SAAS,QAAQ,SAAS;AACtD,0BAAoB,QAAQ,OAAO,QAAQ,OAAO;AAGlD,YAAM,YAAY,oBAAoB,QAAQ,SAAS,MAAM,GAAG;AAChE,UAAI,UAAU,SAAS,GAAG;AACxB,YAAI,oBAAoB,QAAQ,SAAS,QAAQ,GAAG,IAAI,GAAG;AACzD,8BAAoB,QAAQ,aAAa,wBAAO,IAAI,yBAAyB,YAAY;AAAA,QAE3F,OAAO;AACL,8BAAoB,QAAQ,aAAa,UAAU,UAAU,SAAS,CAAC;AACvE,8BAAoB,QAAQ,WAAW,oBAAoB,QAAQ,SAAS,OAAO,GAAG,oBAAoB,QAAQ,SAAS,YAAY,GAAG,CAAC;AAAA,QAC7I;AAAA,MACF,OAAO;AACL,4BAAoB,QAAQ,aAAa,wBAAO,IAAI,yBAAyB,YAAY;AACzF,4BAAoB,QAAQ,WAAW;AAAA,MACzC;AAEA,8BAAO,MAAM,8BAAQ,KAAK,KAAK,OAAO,CAAC;AAEvC,UAAI,wBAAO,IAAI,kBAAkB,GAAG;AAClC,gCAAO,KAAK,oCAAoC;AAEhD,gCAAO,KAAK,2BAA2B;AACvC,cAAM,SAAS,wBAAO,IAAI,WAAW,CAAC,CAAC,EAAE;AACzC,cAAM,gBAAgB,OAAO,OAAO,CAAC,UAA6B;AAChE,gBAAM,oBAAoB,MAAM,KAAK,QAAQ,YAAY,WAAW;AACpE,iBAAQ,IAAI,OAAO,mBAAmB,GAAG,EAAG,KAAKA,SAAQ,IAAI;AAAA,QAC/D,CAAC;AACD,YAAI,cAAc,SAAS,GAAG;AAC5B,wBAAc,IAAI,CAAC,UAAmD;AACpE,kBAAM,oBAAoB,MAAM,KAAK,QAAQ,YAAY,WAAW;AACpE,oBAAQ,IAAI,iBAAiB;AAC7B,kBAAM,sBAAsB;AAAA,cAC1B,GAAG,CAAC,GAAGA,SAAQ,KAAK,SAAU,IAAI,OAAO,mBAAmB,GAAG,CAAE,CAAC,EAAE,CAAC,EAAE,QAAQ;AAAA,YACjF;AACA,+BAAmB,MAAM,YAAY,EAAE,KAAK,WAAY;AACtD,sCAAO,MAAM,qBAAqB,MAAM,eAAe,eAAe,KAAK;AAC3E,kBAAI,+BAA2B,+BAAa,MAAM,eAAe,eAAe;AAChF,kBAAI,OAAO,6BAA6B,aAAa;AACnD,oCAAoB,eAAW,sBAAI,0BAA0B;AAAA,kBAC3D,QAAQ,wBAAO,IAAI,QAAQ;AAAA,kBAC3B,UAAU,wBAAO,IAAI,UAAU;AAAA,kBAC/B,aAAa,wBAAO,IAAI,aAAa;AAAA,kBACrC;AAAA,kBACA,aAAa;AAAA,kBACb;AAAA,kBACA;AAAA,kBACA,SAASA;AAAA,gBACX,CAAC;AAAA,cAEH,OAAO;AACL,sBAAM,MAAM,GAAG,MAAM,eAAe,eAAe,eAAe;AAAA,cACpE;AAAA,YACF,CAAC,EAAE,MAAM,CAAC,MAA0B;AAClC,oBAAM,MAAM,CAAC;AAAA,YACf,CAAC;AAAA,UACH,CAAC;AAAA,QACH,OAAO;AACL,eAAK,eAAW,sBAAI,qBAAqB;AAAA,YACvC,QAAQ,wBAAO,IAAI,QAAQ;AAAA,YAC3B,UAAU,wBAAO,IAAI,UAAU;AAAA,YAC/B,aAAa,wBAAO,IAAI,aAAa;AAAA,YACrC;AAAA,YACA;AAAA,YACA,SAASA;AAAA,UACX,CAAC;AAAA,QACH;AAAA,MAEF,OAAO;AAGL,aAAK,eAAW,sBAAI,qBAAqB;AAAA,UACvC,QAAQ,wBAAO,IAAI,QAAQ;AAAA,UAC3B,UAAU,wBAAO,IAAI,UAAU;AAAA,UAC/B,aAAa,wBAAO,IAAI,aAAa;AAAA,UACrC;AAAA,UACA;AAAA,UACA,SAASA;AAAA,QACX,CAAC;AAAA,MAEH;AAAA,IAEF,CAAC;AAAA,EAEH;AAAA,EAEA,gBAAgB;AACd,QAAI,QAAQ;AACZ,QAAI,SAAS,eAAAE,QAAG,kBAAkB;AAClC,WAAO,KAAK,MAAM,EAAE,QAAQ,SAAU,OAAO;AAC3C,aAAO,KAAK,GAAG,IAAI,SAAU,SAAc;AACzC,iBAAS,QAAQ,OAAO,8BAAQ,KAAK,OAAO,IAAI;AAAA,MAClD,CAAC;AAAA,IACH,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EACA,kBAA0B;AACxB,QAAI,QAAQ;AACZ,UAAM,SAAS,eAAAA,QAAG,kBAAkB;AACpC,WAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,UAAU;AACrC,aAAO,KAAK,GAAG,QAAQ,CAAC,YAAiB;AACvC,YAAI,QAAQ,OAAO,YAAY,MAAM,QAAQ;AAC3C,mBAAS,UAAU,QAAQ,OAAO,IAAI,wBAAO,IAAI,gBAAgB,CAAC;AAAA;AAClE,mBAAS,WAAW,QAAQ,OAAO,IAAI,wBAAO,IAAI,iBAAiB,CAAC;AAAA;AAAA,QACtE;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,QAAI,SAAS,KAAK;AAKlB,UAAM,aAAa,iBAAAC,QAAK,aAAa,CAAC,KAAM,QAAQ;AAClD,UAAI,UAAU,KAAK;AAAA,QACjB,UAAU,WAAW,IAAI,QAAQ,IAAI,GAAG,IAAI,GAAG;AAAA,MACjD,CAAC;AACD,UAAI,IAAI;AAAA,IACV,CAAC;AAED,eAAW,OAAO,wBAAO,IAAI,gBAAgB,CAAC;AAC9C,WAAO,OAAO,wBAAO,IAAI,iBAAiB,CAAC;AAAA,EAC7C;AAEF;AAAA,IAEA,0BAAQ,6CAA6C;AAAA,EACnD;AAAA,EAAqB;AAAA,EAAoB;AAE3C,CAAC;",
6
6
  "names": ["path", "fs", "mime", "http2", "request", "URL", "os", "http"]
7
7
  }
@@ -351,10 +351,15 @@ class HTTPServerResponse extends InheritClass {
351
351
  super(o);
352
352
  var self = this;
353
353
  self.body = "";
354
- self.request = o.request;
354
+ self.request = o.request || {};
355
355
  self.stream = o.stream;
356
356
  self.headers = o.headers;
357
357
  self.fileDispatcher = o.fileDispatcher;
358
+ if (!self.request.scriptname || !self.request.pathname) {
359
+ const defaultPath = "/";
360
+ self.request.pathname = self.request.pathname || defaultPath;
361
+ self.request.scriptname = self.request.scriptname || CONFIG.get("documentRootFileIndex", "index.html");
362
+ }
358
363
  self._generateResponse();
359
364
  this.headers = {
360
365
  ":status": 200,