{"version":3,"file":"shell.mjs","sources":["../out/config-man.js","../out/logger.js","../out/utils.js","../out/http-req.js","../out/http-server/req-res.js","../out/http-server/content-types.js","../out/http-server/middleware.js","../out/http-server/static-file-server.js","../out/http-server/sse-server.js","../../node_modules/.pnpm/path-to-regexp@8.4.2/node_modules/path-to-regexp/dist/index.js","../out/http-server/router.js","../out/http-server/main.js","../out/bs-plugin.js","../out/main.js"],"sourcesContent":["/**\n * Config manager module. Provides functions to retrieve config values from various sources like\n * CLI, environment variables, and env file. Includes utility functions to handle config value\n * lookup, type conversion, error handling etc.\n */\n// imports here\nimport * as fs from \"node:fs\";\n// Config consts here\n// The env var that contains the name of the .env file\nconst CFG_ENV_FILE = \"ENV_FILE\";\n// The env var that contains the name of the cfg file\nconst CFG_CFG_FILE = \"CFG_FILE\";\n// Private variables here\n// Stores the parsed contents of the .env file as key-value pairs\nlet _envFileStore;\n// Stores the parsed contents of the cfg file as an object\nlet _cfgFileStore;\n// Stores the messages generated during configuration.\n// NOTE: This is used because the configuration manager is used by Logger\n// and it becomes a chicken/egg situation when initialising the Logger\nlet _messageStore;\n/**\n * Enumeration of supported configuration value types.\n * Can be used when retrieving a config value to specify the expected type.\n */\nexport var ConfigType;\n(function (ConfigType) {\n    ConfigType[\"String\"] = \"String\";\n    ConfigType[\"Number\"] = \"Number\";\n    ConfigType[\"Boolean\"] = \"Boolean\";\n    ConfigType[\"Object\"] = \"Object\";\n    ConfigType[\"Array\"] = \"Array\";\n})(ConfigType || (ConfigType = {}));\n/**\n * Represents an error that occurred while retrieving a config value\n */\nexport class ConfigError {\n    message;\n    constructor(message) {\n        this.message = message;\n    }\n}\n// Private methods here\n/**\n * Converts a string value to the specified configuration type.\n *\n * NOTE: This is not used for the config files so we dont check\n * for Object or Array types.\n *\n * @param value - The string value to convert.\n * @param type - The expected configuration type.\n * @returns The converted value as a number, string, or boolean.\n */\nfunction convertValue(value, type) {\n    //Check the type\n    switch (type) {\n        case ConfigType.Number:\n            return parseInt(value);\n        case ConfigType.Boolean:\n            // Only accept Y or TRUE (case insensitive) to mean true\n            if (value.toUpperCase() === \"Y\" || value.toUpperCase() === \"TRUE\") {\n                return true;\n            }\n            // Everything else is false\n            return false;\n        default:\n            // All that is left is String and this is already a string!\n            return value;\n    }\n}\n/**\n * Checks the command line arguments for a configuration value matching the\n * specified configuration key.\n *\n * @param config - The configuration key to look for in the command line arguments.\n * @param type - The expected type of the configuration value.\n * @param options - Additional options for configuring the behavior of the function.\n * @returns The configuration value from the command line arguments, converted to the specified type, or `null` if the configuration value is not found.\n */\nfunction checkCli(config, type, options) {\n    // Ignore the first 2 params (node bin and executable file)\n    let cliParams = process.argv.slice(2);\n    // The convention used for config params on the command line is:\n    // Convert to lowercase, replace '_' with '-' and prepend \"--\"\n    let cliParam = `--${config.toLowerCase().replaceAll(\"_\", \"-\")}`;\n    // Command line flags are just prepended with a '-'\n    let cmdLineFlag = options.cmdLineFlag !== undefined ? `-${options.cmdLineFlag}` : \"\";\n    // If the param is assigned a value on the cli it has the format:\n    //   --param=value\n    // otherwise the format is and it implies true:\n    //   --parm or -flag\n    let regExp;\n    if (options.cmdLineFlag === undefined) {\n        // No flag specified so only look for the param and an assigned value\n        regExp = new RegExp(`^${cliParam}=(.+)$`);\n    }\n    else {\n        // Look for param and an assigned value or cmd line flag\n        regExp = new RegExp(`^${cliParam}=(.+)$|^${cliParam}$|^${cmdLineFlag}$`);\n    }\n    let value;\n    // Step through each cli params until you find a match\n    for (let i = 0; i < cliParams.length; i++) {\n        let match = cliParams[i].match(regExp);\n        let paramOrFlag;\n        if (match === null) {\n            // There was no match so look at the next param\n            continue;\n        }\n        // If a value was supplied then match[1] will contain a value\n        if (match[1] !== undefined) {\n            paramOrFlag = match[0];\n            value = match[1];\n        }\n        else {\n            paramOrFlag = match[0];\n            // The presence of the flag/param without a value implies a true value\n            value = \"Y\";\n        }\n        // Check if we can or should log that we found it\n        // NOTE: If we log it we want to indicate is was found on the CLI\n        if (!options.silent) {\n            _messageStore.add(`CLI parameter/flag (${paramOrFlag}) = (${options.redact ? \"redacted\" : value})`);\n        }\n        // We are done so break out of the loop\n        break;\n    }\n    // Return null if we have no value\n    if (value === undefined) {\n        return null;\n    }\n    return convertValue(value, type);\n}\n/**\n * Retrieves a configuration value from an environment variable.\n *\n * @param config - The configuration key to retrieve from the environment.\n * @param type - The expected type of the configuration value.\n * @param options - Additional options for configuring the behavior of the function.\n * @returns The configuration value converted to the specified type, or `null` if the environment variable is not set.\n */\nfunction checkEnvVar(config, type, options) {\n    // NOTE: Always convert to upper case for env vars\n    let evar = config.toUpperCase();\n    let value = process.env[evar];\n    // Return null if we have no value\n    if (value === undefined) {\n        return null;\n    }\n    // If we are here then we found it, now lets check if we can or should\n    // log that we found it\n    // NOTE: If we log it we want to indicate is was found in an env var\n    if (!options.silent) {\n        _messageStore.add(`Env var (${evar}) = (${options.redact ? \"redacted\" : value})`);\n    }\n    return convertValue(value, type);\n}\n/**\n * Retrieves a configuration value from an environment file store.\n *\n * @param config - The configuration key to retrieve from the environment file.\n * @param type - The expected type of the configuration value.\n * @param options - Additional options for configuring the behavior of the function.\n * @returns The configuration value converted to the specified type, or `null` if the configuration is not found in the environment file.\n */\nfunction checkEnvFile(config, type, options) {\n    // NOTE: Always convert to upper case when checking the env file store\n    let evar = config.toUpperCase();\n    let value = _envFileStore.get(evar);\n    // Return null if we have no value\n    if (value === undefined) {\n        return null;\n    }\n    // If we are here then we found it, now lets check if we can or should\n    // log that we found it\n    // NOTE: If we log it we want to indicate it was found in the env file\n    if (!options.silent) {\n        _messageStore.add(`Env var from env file (${evar}) = (${options.redact ? \"redacted\" : value})`);\n    }\n    return convertValue(value, type);\n}\n/**\n * Retrieves a configuration value from a configuration file store.\n *\n * @param config - The configuration key to retrieve from the configuration file.\n * @param options - Additional options for configuring the behavior of the function.\n * @returns The configuration value, or `null` if the configuration is not found in the configuration file.\n */\nfunction checkCfgFile(config, options) {\n    let value = _cfgFileStore.get(config);\n    // Return null if we have no value\n    if (value === undefined) {\n        return null;\n    }\n    // If we are here then we found it, now lets check if we can or should\n    // log that we found it\n    // NOTE: If we log it we want to indicate it was found in the cfg file\n    if (!options.silent) {\n        _messageStore.add(`Config from cfg file (${config}) = (${options.redact ? \"redacted\" : JSON.stringify(value)})`);\n    }\n    // No need for any convertions, just return the value\n    return value;\n}\n/**\n * Retrieves a configuration value from various sources, with the following precedence:\n * 1. Command-line arguments\n * 2. Environment variables\n * 3. Environment file (.env)\n * 4. Configuration file\n *\n * If the configuration value is not found in any of these sources, a default value can be provided.\n *\n * @param config - The configuration key to retrieve.\n * @param type - The expected type of the configuration value.\n * @param defaultVal - The default value to use if the configuration is not found.\n * @param configOptions - Additional options for configuring the behavior of the function.\n * @returns The configuration value, or the default value if the configuration is not found.\n * @throws {ConfigError} If the configuration is required and not found.\n */\nfunction get(config, type, defaultVal, configOptions) {\n    // Set up the defaults if not provided\n    let options = {\n        silent: false,\n        redact: false,\n        ...configOptions,\n    };\n    // Check the CLI first, i.e. CLI has higher precedence then env vars\n    // of the cfg file\n    let value = checkCli(config, type, options);\n    if (value !== null) {\n        return value;\n    }\n    // OK it's not in the CLI so lets check the env vars, env var has higher\n    // precedence then the .env file\n    value = checkEnvVar(config, type, options);\n    if (value !== null) {\n        return value;\n    }\n    // OK it's not in the env vars either so check the env file store\n    value = checkEnvFile(config, type, options);\n    if (value !== null) {\n        return value;\n    }\n    // OK it's not in the env file store either so check the cfg store\n    value = checkCfgFile(config, options);\n    if (value !== null) {\n        return value;\n    }\n    // If we are here then the value was not found - use default provided\n    // NOTE: The default SHOULD have the correct type so do not do a conversion\n    if (defaultVal === undefined) {\n        // If the default was not provided then the config WAS required. In this\n        // scenario we need to throw an error\n        throw new ConfigError(`Config parameter (${config}) not found!`);\n    }\n    // Lets check if we can or should log the default value\n    // NOTE: If we log it we want to indicate is the default value\n    if (!options.silent) {\n        _messageStore.add(`Default value used for (${config}) = (${options.redact ? \"redacted\" : defaultVal})`);\n    }\n    return defaultVal;\n}\n/**\n * Reads the contents of the specified .env file and adds the key-value\n * pairs to the _envFileStore.\n *\n * @param envFile - The path to the .env file to read.\n * @throws {ConfigError} If an error occurs while reading the .env file.\n */\nfunction parseEnvFile(envFile) {\n    let lines = [];\n    try {\n        _messageStore.add(`Reading config info from .env file (${envFile})`);\n        // Read env file and split it into lines ...\n        let contents = fs.readFileSync(envFile, \"utf8\");\n        // ... makes sure if works for DOS and linux files!\n        lines = contents.split(/\\r?\\n/);\n    }\n    catch (e) {\n        throw new ConfigError(`The following error occured when trying to open the .env file (${envFile}) - (${e})`);\n    }\n    // Iterate through each line\n    for (let line of lines) {\n        // If the line is commented out or blank then skip it\n        if (line.length === 0 || line.startsWith(\"#\")) {\n            continue;\n        }\n        // Don't use split() here because the value may contain an \"=\"\n        let index = line.indexOf(\"=\");\n        // Check if there was an equal in the line - if not then skip this line\n        if (index === -1) {\n            continue;\n        }\n        // Get the key/value pair - make sure to trim them as well\n        let key = line.slice(0, index).trim();\n        let value = line.slice(index + 1).trim();\n        // Check if the value is delimited with single or double quotes\n        if ((value.startsWith('\"') && value.endsWith('\"')) ||\n            (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n            // Strip them away\n            value = value.slice(1, value.length - 1);\n        }\n        // Stick it in the env file store\n        // NOTE: Make key upper case to match env vars conventions\n        _envFileStore.set(key.toUpperCase(), value);\n        _messageStore.add(`Added (${key.toUpperCase()}) to the env file store`);\n    }\n}\n/**\n * Reads the contents of a cfg file and adds the key-value pairs to the\n * configuration store.\n *\n * @param cfgFile - The path to the configuration file to read.\n * @throws {ConfigError} If an error occurs while reading or parsing the configuration file.\n */\nfunction readCfgFile(cfgFile) {\n    let contents;\n    try {\n        _messageStore.add(`Reading config info from cfg file (${cfgFile})`);\n        // Read the cfg file\n        contents = fs.readFileSync(cfgFile, \"utf8\");\n    }\n    catch (e) {\n        throw new ConfigError(`The following error occured when trying to open the cfg file (${cfgFile}) - (${e})`);\n    }\n    try {\n        _messageStore.add(\"Adding the cfg file contents to the cfg store\");\n        _cfgFileStore = new Map(Object.entries(JSON.parse(contents)));\n    }\n    catch (e) {\n        throw new ConfigError(`The following error occured when trying to add (${contents}) to the cfg store - (${e})`);\n    }\n}\n/**\n * Initializes the configuration manager by setting up the necessary stores and\n * parsing any specified environment and configuration files.\n *\n * The function first initializes the `_envFileStore`, `_cfgFileStore`, and\n * `_messageStore` stores. It then checks if a `.env` file has been specified\n * in the configuration and, if so, calls the `parseEnvFile` function to parse\n * the contents of the file and add the key-value pairs to the `_envFileStore`.\n *\n * Next, the function checks if a configuration file has been specified in the\n * configuration and, if so, calls the `readCfgFile` function to read the\n * contents of the file and add the key-value pairs to the `_cfgFileStore`.\n *\n * This function is typically called during the initialization of the\n * application to ensure that the configuration manager is properly set up and\n * ready to use.\n */\nfunction init() {\n    // Initialise the stores\n    _envFileStore = new Map();\n    _cfgFileStore = new Map();\n    _messageStore = new Set();\n    // Check if the user has specified a .env file\n    let envFile = configMan.getStr(CFG_ENV_FILE, \"\");\n    if (envFile.length > 0) {\n        parseEnvFile(envFile);\n    }\n    else if (fs.existsSync(\".env\")) {\n        envFile = \".env\";\n        _messageStore.add(`Defaulting the env-file to ${envFile}`);\n        parseEnvFile(envFile);\n    }\n    else {\n        _messageStore.add(\"No .env file specified or found\");\n    }\n    // Check if the user has specified a cfg file\n    // NOTE: The cfg file config CAN be specified in the .env file since it\n    // has already been parsed\n    let cfgFile = configMan.getStr(CFG_CFG_FILE, \"\");\n    if (cfgFile.length > 0) {\n        readCfgFile(cfgFile);\n    }\n    else {\n        _messageStore.add(\"No cfg file specified\");\n    }\n}\n// Public methods here\n/**\n * Provides a set of functions for retrieving configuration values from various\n * sources, including environment variables and configuration files.\n *\n * The `configMan` object is a frozen object that contains the following methods:\n *\n * - `getStr(config: string, defaultVal?: string, options?: ConfigOptions): string`\n *   - Retrieves a string configuration value with a default value if not set.\n * - `getBool(config: string, defaultVal?: boolean, options?: ConfigOptions): boolean`\n *   - Retrieves a boolean configuration value with a default value if not set.\n * - `getNum(config: string, defaultVal?: number, options?: ConfigOptions): number`\n *   - Retrieves a number configuration value with a default value if not set.\n * - `getMessages(): IterableIterator<[string, string]>`\n *   - Retrieves an iterator over the key-value pairs of the message store.\n * - `clearMessages(): void`\n *   - Clears all messages stored in the message store.`\n *\n * NOTE: Freezing the object prevents modifications to the exported API.\n */\nexport const configMan = Object.freeze({\n    /**\n     * Retrieves a string configuration value with a default value if not set.\n     *\n     * @param config - The name of the config parameter to retrieve.\n     * @param defaultVal - A default value if the config is not set. NOTE: This must be of the correct type.\n     * @param configOptions - The config options.\n     * @returns The string configuration value, or the default value if not set.\n     */\n    getStr: (config, defaultVal, options) => {\n        return get(config, ConfigType.String, defaultVal, options);\n    },\n    /**\n     * Retrieves a boolean configuration value with a default value if not set.\n     *\n     * @param config - The name of the config parameter to retrieve.\n     * @param defaultVal - A default value if the config is not set. NOTE: This must be of the correct type.\n     * @param configOptions - The config options.\n     * @returns The boolean configuration value, or the default value if not set.\n     */\n    getBool: (config, defaultVal, options) => {\n        return get(config, ConfigType.Boolean, defaultVal, options);\n    },\n    /**\n     * Retrieves a number configuration value with a default value if not set.\n     *\n     * @param config - The name of the config parameter to retrieve.\n     * @param defaultVal - A default value if the config is not set. NOTE: This must be of the correct type.\n     * @param configOptions - The config options.\n     * @returns The number configuration value, or the default value if not set.\n     */\n    getNum: (config, defaultVal, options) => {\n        return get(config, ConfigType.Number, defaultVal, options);\n    },\n    /**\n     * Retrieves an object configuration value with a default value if not set.\n     *\n     * @param config - The name of the config parameter to retrieve.\n     * @param defaultVal - A default value if the config is not set. NOTE: This must be of the correct type.\n     * @param configOptions - The config options.\n     * @returns The object configuration value, or the default value if not set.\n     */\n    getObject: (config, defaultVal, options) => {\n        return get(config, ConfigType.Object, defaultVal, options);\n    },\n    /**\n     * Retrieves an array configuration value with a default value if not set.\n     *\n     * @param config - The name of the config parameter to retrieve.\n     * @param defaultVal - A default value if the config is not set. NOTE: This must be of the correct type.\n     * @param configOptions - The config options.\n     * @returns The array configuration value, or the default value if not set.\n     */\n    getArray: (config, defaultVal, options) => {\n        return get(config, ConfigType.Array, defaultVal, options);\n    },\n    /**\n     * Retrieves an iterator over the key-value pairs of the message store.\n     *\n     * @returns An iterator over the key-value pairs of the message store.\n     */\n    getMessages: () => {\n        return _messageStore.entries();\n    },\n    /**\n     * Clears all messages stored in the message store.\n     */\n    clearMessages: () => {\n        _messageStore.clear();\n    },\n});\n// Time to kick this puppy!\ninit();\n//# sourceMappingURL=config-man.js.map","// imports here\nimport { configMan } from \"./config-man.js\";\nimport * as util from \"node:util\";\n// Config consts here\nconst CFG_LOG_LEVEL = \"LOG_LEVEL\";\nconst CFG_LOG_TIMESTAMP = \"LOG_TIMESTAMP\";\nconst CFG_LOG_TIMESTAMP_LOCALE = \"LOG_TIMESTAMP_LOCALE\";\nconst CFG_LOG_TIMESTAMP_TZ = \"LOG_TIMESTAMP_TZ\";\n// Types here\nexport var LogLevel;\n(function (LogLevel) {\n    LogLevel[LogLevel[\"COMPLETE_SILENCE\"] = 0] = \"COMPLETE_SILENCE\";\n    LogLevel[LogLevel[\"QUIET\"] = 100] = \"QUIET\";\n    LogLevel[LogLevel[\"INFO\"] = 200] = \"INFO\";\n    LogLevel[LogLevel[\"START_UP\"] = 250] = \"START_UP\";\n    LogLevel[LogLevel[\"DEBUG\"] = 300] = \"DEBUG\";\n    LogLevel[LogLevel[\"TRACE\"] = 400] = \"TRACE\";\n})(LogLevel || (LogLevel = {}));\n// Logger class here\nexport class Logger {\n    // Private properties here\n    _name;\n    _timestamp;\n    _timestampLocale;\n    _timestampTz;\n    _logLevel;\n    _formatter;\n    // Private methods here\n    /**\n     * Generates a timestamp string to prefix log messages.\n     * Returns an empty string if timestamps are disabled. Otherwise returns\n     * the formatted timestamp string.\n     */\n    timestamp() {\n        // If we are not supposed to generate timestamps then return nothing\n        if (!this._timestamp) {\n            return \"\";\n        }\n        let now = new Date();\n        // Check if we should formet the time in ISO format\n        if (this._timestampLocale === \"ISO\") {\n            // Make sure to add a trailing space!\n            return `${now.toISOString()} `;\n        }\n        // Make sure to add a trailing space!\n        return `${this._formatter.format(now)} `;\n    }\n    convertLevel(level) {\n        let logLevel;\n        switch (level.toUpperCase()) {\n            case \"\": // This is in case it is not set\n                logLevel = LogLevel.INFO;\n                break;\n            case \"SILENT\":\n                logLevel = LogLevel.COMPLETE_SILENCE;\n                break;\n            case \"QUIET\":\n                logLevel = LogLevel.QUIET;\n                break;\n            case \"INFO\":\n                logLevel = LogLevel.INFO;\n                break;\n            case \"STARTUP\":\n                logLevel = LogLevel.START_UP;\n                break;\n            case \"DEBUG\":\n                logLevel = LogLevel.DEBUG;\n                break;\n            case \"TRACE\":\n                logLevel = LogLevel.TRACE;\n                break;\n            default:\n                throw new Error(`Log Level (${level}) is unknown.`);\n        }\n        return logLevel;\n    }\n    // constructor here\n    constructor(name) {\n        this._name = name;\n        this._timestamp = configMan.getBool(CFG_LOG_TIMESTAMP, false);\n        this._timestampLocale = configMan.getStr(CFG_LOG_TIMESTAMP_LOCALE, \"ISO\");\n        this._timestampTz = configMan.getStr(CFG_LOG_TIMESTAMP_TZ, \"UTC\");\n        this._logLevel = this.convertLevel(configMan.getStr(CFG_LOG_LEVEL, \"\"));\n        this._formatter = new Intl.DateTimeFormat(this._timestampLocale, {\n            timeZone: this._timestampTz,\n            year: \"numeric\",\n            month: \"2-digit\",\n            day: \"2-digit\",\n            hour: \"2-digit\",\n            minute: \"2-digit\",\n            second: \"2-digit\",\n            hour12: false,\n            fractionalSecondDigits: 3,\n        });\n        // Now get the messages from the confgiMan for display\n        let messages = configMan.getMessages();\n        for (const message of messages) {\n            this.startupMsg(\"Logger\", message[0]);\n        }\n        configMan.clearMessages();\n    }\n    fatal(...args) {\n        // fatals are always logged\n        let msg = util.format(`${this.timestamp()}FATAL: ${this._name}: ${args[0]}`, ...args.slice(1));\n        console.error(msg);\n    }\n    error(...args) {\n        // errors are always logged unless level = LOG_COMPLETE_SILENCE\n        if (this._logLevel > LogLevel.COMPLETE_SILENCE) {\n            let msg = util.format(`${this.timestamp()}ERROR: ${this._name}: ${args[0]}`, ...args.slice(1));\n            console.error(msg);\n        }\n    }\n    warn(...args) {\n        // warnings are always logged unless level = LOG_COMPLETE_SILENCE\n        if (this._logLevel > LogLevel.COMPLETE_SILENCE) {\n            let msg = util.format(`${this.timestamp()}WARN: ${this._name}: ${args[0]}`, ...args.slice(1));\n            console.warn(msg);\n        }\n    }\n    info(...args) {\n        if (this._logLevel >= LogLevel.INFO) {\n            let msg = util.format(`${this.timestamp()}INFO: ${this._name}: ${args[0]}`, ...args.slice(1));\n            console.info(msg);\n        }\n    }\n    startupMsg(...args) {\n        if (this._logLevel >= LogLevel.START_UP) {\n            let msg = util.format(`${this.timestamp()}STARTUP: ${this._name}: ${args[0]}`, ...args.slice(1));\n            console.info(msg);\n        }\n    }\n    shutdownMsg(...args) {\n        if (this._logLevel >= LogLevel.START_UP) {\n            let msg = util.format(`${this.timestamp()}SHUTDOWN: ${this._name}: ${args[0]}`, ...args.slice(1));\n            console.info(msg);\n        }\n    }\n    debug(...args) {\n        if (this._logLevel >= LogLevel.DEBUG) {\n            let msg = util.format(`${this.timestamp()}DEBUG: ${this._name}: ${args[0]}`, ...args.slice(1));\n            console.info(msg);\n        }\n    }\n    trace(...args) {\n        if (this._logLevel >= LogLevel.TRACE) {\n            let msg = util.format(`${this.timestamp()}TRACE: ${this._name}: ${args[0]}`, ...args.slice(1));\n            console.info(msg);\n        }\n    }\n    force(...args) {\n        // forces are always logged even if level == LOG_COMPLETE_SILENCE\n        let msg = util.format(`${this.timestamp()}FORCED: ${this._name}: ${args[0]}`, ...args.slice(1));\n        console.error(msg);\n    }\n    setLevel(level) {\n        this._logLevel = level;\n    }\n}\n//# sourceMappingURL=logger.js.map","// imports here\nimport * as readline from \"node:readline\";\nimport * as crypto from \"node:crypto\";\n// Consts here\nconst SECRET_IV_SIZE = 12;\nconst SECRET_KEY_SIZE = 32;\nconst SECRET_ALGO = \"aes-256-gcm\";\nexport const sleep = async (durationInSeconds) => {\n    // Convert duration to ms\n    let ms = Math.round(durationInSeconds * 1000);\n    return new Promise((resolve) => {\n        setTimeout(resolve, ms);\n    });\n};\nexport const question = async (ask, questionOptions) => {\n    let input = process.stdin;\n    let output = process.stdout;\n    let options = {\n        muteAnswer: false,\n        muteChar: \"*\",\n        ...questionOptions,\n    };\n    return new Promise((resolve) => {\n        let rl = readline.createInterface({\n            input,\n            output,\n        });\n        if (options.muteAnswer) {\n            input.on(\"keypress\", () => {\n                // get the number of characters entered so far:\n                var len = rl.line.length;\n                if (options.muteChar.length === 0) {\n                    // move cursor back one since we will always be at the start\n                    readline.moveCursor(output, -1, 0);\n                    // clear everything to the right of the cursor\n                    readline.clearLine(output, 1);\n                }\n                else {\n                    // move cursor back to the beginning of the input\n                    readline.moveCursor(output, -len, 0);\n                    // clear everything to the right of the cursor\n                    readline.clearLine(output, 1);\n                    // If there is a muteChar then replace the original input with it\n                    for (var i = 0; i < len; i++) {\n                        // In case the user passes a string just use the 1st char\n                        output.write(options.muteChar[0]);\n                    }\n                }\n            });\n        }\n        // Insert a space after the question for convience\n        rl.question(`${ask} `, (answer) => {\n            resolve(answer);\n            rl.close();\n        });\n    });\n};\nexport const encryptSecret = (secret, key, outputEncoding = \"base64\", // used for strings and Buffers\ninputEncoding = \"utf-8\") => {\n    // Make sure the key len is 32 - this is a requirement\n    if (key.length !== SECRET_KEY_SIZE) {\n        return null;\n    }\n    // Check if the secret is a buffer or string\n    const isBuffer = Buffer.isBuffer(secret);\n    // Create a random IV\n    const iv = crypto.randomBytes(SECRET_IV_SIZE);\n    // Create a new cipher object\n    const cipher = crypto.createCipheriv(SECRET_ALGO, key, iv);\n    // Encrypt the secret - check if it is a string or Buffer\n    let cipherText = isBuffer\n        ? cipher.update(secret, undefined, outputEncoding) // No inputEncoding for Buffers\n        : cipher.update(secret, inputEncoding, outputEncoding);\n    cipherText += cipher.final(outputEncoding);\n    // Generate the authentication tag\n    const tag = cipher.getAuthTag();\n    const encrypted = {\n        isBuffer,\n        iv: iv.toString(outputEncoding), // convert the Buffer to string\n        authTag: tag.toString(outputEncoding), // convert the Buffer to string\n        cipherText,\n    };\n    return encrypted;\n};\nexport const decryptSecret = (secret, key, inputEncoding = \"base64\", // outputEncoding from encryptSecret\noutputEncoding = \"utf-8\") => {\n    // Make sure the key len is 32 - this is a requirement\n    if (key.length !== SECRET_KEY_SIZE) {\n        return null;\n    }\n    // Create a decipher object\n    const iv = Buffer.from(secret.iv, inputEncoding);\n    const decipher = crypto.createDecipheriv(SECRET_ALGO, key, iv);\n    // Set the  authentication tag\n    const tag = Buffer.from(secret.authTag, inputEncoding);\n    decipher.setAuthTag(tag);\n    let decrypted = null;\n    // Decrypt the secret\n    try {\n        // Check if the secret is a Buffer or a string\n        if (secret.isBuffer) {\n            decrypted = Buffer.concat([\n                decipher.update(secret.cipherText, inputEncoding), // no outputEncoding for Buffers\n                decipher.final(), // no outputEncoding for Buffers\n            ]);\n        }\n        else {\n            decrypted =\n                decipher.update(secret.cipherText, inputEncoding, outputEncoding) +\n                    decipher.final(outputEncoding);\n        }\n    }\n    catch (_) { }\n    return decrypted;\n};\n//# sourceMappingURL=utils.js.map","// NOTE: To use this with endpoints using self signed certs add this env var\n// NODE_TLS_REJECT_UNAUTHORIZED=0\n// imports here\nimport { sleep } from \"./utils.js\";\nimport { Logger } from \"./logger.js\";\nimport { performance } from \"node:perf_hooks\";\n// Misc consts here\nconst LOG_TAG = \"request\";\n// Module private variables here\nconst _logger = new Logger(LOG_TAG);\n// Error classes here\nexport class ReqAborted {\n    timedOut;\n    message;\n    constructor(timedOut, message) {\n        this.timedOut = timedOut;\n        this.message = message;\n    }\n}\nexport class ReqError {\n    status;\n    message;\n    constructor(status, message) {\n        this.status = status;\n        this.message = message;\n    }\n}\n// Private methods here\nasync function callFetch(origin, path, options, body) {\n    // Build the url\n    let url = `${origin}${path}`;\n    // And add the query string if one has been provided\n    if (options.searchParams !== undefined) {\n        url += `?${new URLSearchParams(options.searchParams)}`;\n    }\n    let results;\n    let timeoutTimer;\n    let attempt = 0;\n    do {\n        // Increment attempt\n        attempt += 1;\n        // Create an AbortController and use a timer if no signal has been provided\n        if (options.signal === undefined) {\n            const controller = new AbortController();\n            options.signal = controller.signal;\n            // Start your engines!\n            timeoutTimer = setTimeout(() => {\n                controller.abort();\n            }, options.timeoutS * 1000);\n        }\n        results = await fetch(url, {\n            method: options.method,\n            headers: options.headers,\n            body,\n            keepalive: options.keepalive,\n            cache: options.cache,\n            credentials: options.credentials,\n            mode: options.mode,\n            redirect: options.redirect,\n            referrer: options.referrer,\n            referrerPolicy: options.referrerPolicy,\n            signal: options.signal,\n        }).catch((e) => {\n            // OK, there was an error - check if the request was aborted\n            if (e.name === \"AbortError\") {\n                // If there was a timeoutTimer then the req must have timed out\n                if (timeoutTimer !== undefined) {\n                    // NOTE: We DO NOT need to clear the timer since it already fired\n                    throw new ReqAborted(true, `Request timeout out after ${options.timeoutS} seconds`);\n                }\n                throw new ReqAborted(false, \"Request aborted\");\n            }\n            // Check if we started a timer and if so stop it - it hasnt expired yet\n            if (timeoutTimer !== undefined) {\n                clearTimeout(timeoutTimer);\n            }\n            // We don't know what the error is so pass it up the chain\n            throw e;\n        });\n        // Check if we started a timer and if so stop it - it hasnt expired yet\n        if (timeoutTimer !== undefined) {\n            clearTimeout(timeoutTimer);\n        }\n        // Check if the fetch failed\n        if (!results.ok) {\n            // Figure out if we wait and try again or throw an error\n            const status = results.status;\n            if (attempt < options.retries + 1 && // Still attempts left (note mac attempts are numRetries + 1)\n                (status >= 500 || // Server error\n                    status === 408 || // Req timeout\n                    status === 429) // Too many requests\n            ) {\n                // We can go again, now we need to introduce a delay\n                // Use baseDelay as a multiple of the attempts and some random jitter\n                const delay = options.baseDelayMs * 2 ** attempt;\n                const jitter = Math.random() * delay * 0.5;\n                const totalDelay = Math.round(delay + jitter);\n                _logger.trace(\"Call to (%s) failed. Retrying in (%d) ms.\", url, totalDelay);\n                // Now just sleep for the delay\n                await sleep(totalDelay / 1000);\n            }\n            else {\n                // If we are here we are not going to retry\n                // So, get the last error and throw it\n                let message = await results.text();\n                throw new ReqError(status, message.length === 0 ? results.statusText : message);\n            }\n        }\n        // Loop if the results are NOT OK\n    } while (!results.ok);\n    // We can only be here if everything was OK\n    return results;\n}\nasync function handleResponseData(results) {\n    // No point worrying if the body is JSON at first, because we know its text\n    const body = await results.text();\n    // If the body exists then check if it is JSON\n    if (body.length > 0) {\n        // Check if the content type is JSON\n        const contentType = results.headers.get(\"content-type\");\n        if (contentType?.startsWith(\"application/json\")) {\n            return JSON.parse(body);\n        }\n    }\n    // If we are here, the body wasnt JSON so just return the text\n    return body;\n}\n// Public methods here\nexport let request = async (origin, path, reqOptions) => {\n    // We need to remember the start time\n    const startTime = performance.now();\n    _logger.trace(\"Request for origin (%s) path (%s)\", origin, path);\n    // Set the default values\n    let options = {\n        method: \"GET\",\n        timeoutS: 60,\n        retries: 3,\n        baseDelayMs: 500,\n        keepalive: true,\n        handleResponse: true,\n        cache: \"no-store\",\n        mode: \"cors\",\n        credentials: \"include\",\n        redirect: \"follow\",\n        referrerPolicy: \"no-referrer\",\n        ...reqOptions,\n    };\n    // Make sure the headers is set to something for later\n    if (options.headers === undefined) {\n        options.headers = {};\n    }\n    // If a bearer token is provided then add a Bearer auth header\n    if (options.bearerToken !== undefined) {\n        options.headers.Authorization = `Bearer ${options.bearerToken}`;\n    }\n    // If the basic auth creds are provided add a Basic auth header\n    if (options.auth !== undefined) {\n        let token = Buffer.from(`${options.auth.username}:${options.auth.password}`).toString(\"base64\");\n        options.headers.Authorization = `Basic ${token}`;\n    }\n    let payloadBody;\n    // Automatically stringify and set the header if this is a JSON payload\n    // BUT dont do it for GETs and DELETE since they can have no body\n    if (options.body !== undefined &&\n        options.method !== \"GET\" &&\n        options.method !== \"DELETE\") {\n        // Rem an array is an object to!\n        if (typeof options.body === \"object\") {\n            // Add the content-type if it hasn't been provided\n            if (options.headers?.[\"content-type\"] === undefined) {\n                options.headers[\"content-type\"] = \"application/json; charset=utf-8\";\n            }\n            payloadBody = JSON.stringify(options.body);\n        }\n        else {\n            payloadBody = options.body;\n        }\n    }\n    // Call fetch\n    let response = await callFetch(origin, path, options, payloadBody);\n    // Build the response\n    let res = {\n        statusCode: response.status,\n        headers: response.headers,\n        body: undefined, // set to undefined for now\n        responseTime: 0,\n    };\n    // Check if we should handle the response for the user\n    if (options.handleResponse) {\n        // Yes, so handle and set the body\n        res.body = await handleResponseData(response).catch((e) => {\n            const msg = `Error handling response data for (${origin}) (${path}) - (${e}))`;\n            throw new Error(msg);\n        });\n    }\n    else {\n        // No, so set the response\n        res.response = response;\n    }\n    // Don't forget to set the response time\n    res.responseTime = Math.round(performance.now() - startTime);\n    _logger.trace(\"Request for origin (%s) path (%s) took (%i) ms\", origin, path, res.responseTime);\n    return res;\n};\n//# sourceMappingURL=http-req.js.map","import { performance } from \"node:perf_hooks\";\nimport { Readable } from \"node:stream\";\n// Classes here\nexport class HttpError {\n    status;\n    message;\n    constructor(status, message = \"Achtung Baby!\") {\n        this.status = status;\n        this.message = message;\n    }\n}\nexport class HttpRedirect {\n    statusCode;\n    location;\n    message;\n    constructor(statusCode = 302, location, message = \"\") {\n        this.statusCode = statusCode;\n        this.location = location;\n        this.message = message;\n    }\n}\n// This method enhances an existing IncomingMessage to be a ServerRequest\nexport const enhanceIncomingMessage = (req) => {\n    // Treat req like a ServerRequest (which it is minus some props and methods)\n    let enhancedReq = req;\n    // Now set all of the props that make it a ServerRequest\n    // Check for a valid url or \"new URL()\" to throw\n    // NOTE: I can not figure out a good way to tell if the req is HTTP or HTTPS\n    // but I dont think it matters here unless someone needs the protocol prop\n    enhancedReq.validUrl = URL.canParse(req.url, `https://${req.headers.host}`);\n    // If URL is valid check to see if the it has any encodings that arent valid\n    if (enhancedReq.validUrl) {\n        try {\n            // This will not throw if everything is good\n            decodeURIComponent(req.url);\n        }\n        catch {\n            // if we are here then the URL encoding is not valid so flag it\n            enhancedReq.validUrl = false;\n        }\n    }\n    // If the URL is not valid then we should return now\n    if (!enhancedReq.validUrl) {\n        return enhancedReq;\n    }\n    // If we are here we know the URL is valid so it is safe to use it\n    enhancedReq.urlObj = new URL(req.url, `https://${req.headers.host}`);\n    enhancedReq.params = {};\n    enhancedReq.handled = false;\n    // By default we will compress the response\n    enhancedReq.compressResponse = true;\n    // By default we shld check all the different types of routes\n    enhancedReq.checkApiRoutes = true;\n    enhancedReq.checkSsrRoutes = true;\n    enhancedReq.checkStaticFiles = true;\n    // By default the req handler is expected to handle the 404\n    enhancedReq.handle404 = true;\n    // Now set all of the public methods that make it a ServerRequest\n    enhancedReq.getCookie = (cookieName) => {\n        // Get the cookie header and spilt it up by cookies -\n        // NOTE: cookies are separated by semi colons\n        let cookies = enhancedReq.headers.cookie?.split(\";\");\n        if (cookies === undefined) {\n            // Nothing to do so just return\n            return null;\n        }\n        // Loop through the cookies\n        for (let cookie of cookies) {\n            // Split the cookie up into a key value pair\n            // NOTE: key/value is separated by an equals sign and has leading spaces\n            let [name, value] = cookie.trim().split(\"=\");\n            // Make sure it was a validly formatted cookie\n            if (value === undefined) {\n                // It is not a valid cookie so skip it\n                continue;\n            }\n            // Check if we found the cookie\n            if (name === cookieName) {\n                // Return the cookie value\n                return value;\n            }\n        }\n        return null;\n    };\n    enhancedReq.setServerTimingHeader = (value) => {\n        enhancedReq.headers[\"Server-Timing\"] = value;\n    };\n    enhancedReq.getBearerToken = () => {\n        const authzHeader = req.headers[\"authorization\"];\n        // The authz header MUST be a string\n        if (typeof authzHeader !== \"string\") {\n            return null;\n        }\n        // This is the length of \"Bearer \" in the authZ header\n        // NOTE: Must include the space at the end!\n        const LEN_OF_BEARER = 7;\n        if (authzHeader.length > LEN_OF_BEARER &&\n            authzHeader.slice(0, LEN_OF_BEARER).toLowerCase().startsWith(\"bearer \")) {\n            return authzHeader.slice(LEN_OF_BEARER);\n        }\n        return null;\n    };\n    return enhancedReq;\n};\n// This method enhances an existing ServerResponse to be a ServerResponse\nexport const enhanceServerResponse = (res) => {\n    // Treat res like a ServerResponse (which it is minus the props and methods)\n    let enhancedRes = res;\n    // Now set all of the props that make it a ServerRequest\n    // NOTE: enhancedRes will be created at the same time as ServerRequest\n    enhancedRes.receiveTime = performance.now();\n    enhancedRes.redirected = false;\n    enhancedRes.latencyMetricName = \"latency\";\n    enhancedRes.serverTimingsMetrics = [];\n    enhancedRes.enhancedReq = enhancedRes.req;\n    // Now set all of the public methods that make it a ServerResponse\n    enhancedRes.setCookies = (cookies) => {\n        let setCookiesValue = [];\n        // Check for exiting cookies and add them to the setCookiesValue array\n        let existing = enhancedRes.getHeader(\"Set-Cookie\");\n        if (typeof existing === \"string\") {\n            setCookiesValue.push(existing);\n        }\n        else if (Array.isArray(existing)) {\n            setCookiesValue = existing;\n        }\n        // Loop through each cookie and build the cookie values\n        for (let cookie of cookies) {\n            // Set the cookie value first\n            let value = `${cookie.name}=${cookie.value}`;\n            // if there is a maxAge then set it - NOTE: put \";\" first\n            if (cookie.maxAge !== undefined) {\n                value += `; Max-Age=${cookie.maxAge}`;\n            }\n            // If there is a path then set it or use default path of \"/\" - NOTE: put \";\" first\n            if (cookie.path !== undefined) {\n                value += `; Path=${cookie.path}`;\n            }\n            else {\n                value += `; Path=/`;\n            }\n            // If httpOnly is indicated then add it - NOTE: put \";\" first\n            if (cookie.httpOnly === true) {\n                value += \"; HttpOnly\";\n            }\n            // If secure is indicated set then add it - NOTE: put \";\" first\n            if (cookie.secure === true) {\n                value += \"; Secure\";\n            }\n            // If sameSite has been provided then add it - NOTE: put \";\" first\n            if (cookie.sameSite !== undefined) {\n                value += `; SameSite=${cookie.sameSite}`;\n            }\n            // If domain has been provided then add it - NOTE: put \";\" first\n            if (cookie.domain !== undefined) {\n                value += `; Domain=${cookie.domain}`;\n            }\n            // Save the cookie\n            setCookiesValue.push(value);\n        }\n        // Finally set the cookie/s in the response header\n        enhancedRes.setHeader(\"Set-Cookie\", setCookiesValue);\n    };\n    enhancedRes.clearCookies = (cookies, domain) => {\n        let httpCookies = [];\n        for (let cookie of cookies) {\n            // To clear a cookie - set value to empty string and max age to -1\n            httpCookies.push({ name: cookie, value: \"\", maxAge: -1, domain });\n        }\n        enhancedRes.setCookies(httpCookies);\n    };\n    enhancedRes.setServerTimingHeader = () => {\n        let serverTimingHeaders = [];\n        // Check if the req has a Server-Timing header. This is not normal but I\n        // want to something like a forwardAuth server to be able to add it's\n        // metrics to the response header\n        if (enhancedRes?.req?.headers[\"server-timing\"] !== undefined) {\n            const reqTimings = enhancedRes.req.headers[\"server-timing\"];\n            // Check if there are multiple headers\n            if (Array.isArray(reqTimings)) {\n                // If so then since this is the first just use it as the headers array\n                serverTimingHeaders = reqTimings;\n            }\n            else {\n                // If not then just add it to the array\n                serverTimingHeaders.push(reqTimings);\n            }\n        }\n        let serverTimingValue = \"\";\n        // Add each additional metric added to the res next so they are in\n        // the order they were added\n        for (let metric of enhancedRes.serverTimingsMetrics) {\n            // Check if we have a string or a metric object\n            if (typeof metric === \"string\") {\n                // The string version is already formatted so just add to the array\n                serverTimingHeaders.push(metric);\n                continue;\n            }\n            // If we are here then we have a metric object so add the name\n            serverTimingValue += metric.name;\n            // Check if there is an optional duration\n            if (metric.duration !== undefined) {\n                serverTimingValue += `;dur=${metric.duration}`;\n            }\n            // Check if there is an optional description\n            if (metric.description !== undefined) {\n                serverTimingValue += `;desc=\"${metric.description}\"`;\n            }\n            serverTimingValue += \", \";\n        }\n        // Finally add the total latency for the endpoint to the array\n        const latency = Math.round(performance.now() - enhancedRes.receiveTime);\n        serverTimingValue += `${enhancedRes.latencyMetricName};dur=${latency}`;\n        serverTimingHeaders.push(serverTimingValue);\n        // Of course don't forget to set the header!!\n        enhancedRes.setHeader(\"Server-Timing\", serverTimingHeaders);\n    };\n    enhancedRes.redirect = (location, statusCode = 302, message = \"\") => {\n        enhancedRes.redirected = true;\n        let htmlMessage = message.length > 0\n            ? message\n            : `Redirected to <a href=\"${location}\">here</a>`;\n        // Write a little something something for good measure\n        enhancedRes.body = `\n    <html>\n      <body>\n        <p>${htmlMessage}</p>\n      </body>\n    </html>`;\n        enhancedRes.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n        enhancedRes.setHeader(\"Location\", location);\n        enhancedRes.statusCode = statusCode;\n    };\n    enhancedRes.addServerTimingMetric = (name, duration, description) => {\n        // This adds a metric to the Server-Timing header for this response\n        enhancedRes.serverTimingsMetrics.push({ name, duration, description });\n    };\n    enhancedRes.addServerTimingHeader = (header) => {\n        // This adds a complete Server-Timing header to this response\n        enhancedRes.serverTimingsMetrics.push(header);\n    };\n    return enhancedRes;\n};\nexport class WebRequest extends Request {\n    req;\n    res;\n    constructor(req, res) {\n        // Get the headers so we can pass them on\n        const headers = new Headers();\n        for (const [name, value] of Object.entries(req.headers)) {\n            // Skip headers with no values\n            if (value === undefined) {\n                continue;\n            }\n            // Value can be an array so we need to handle that\n            if (Array.isArray(value)) {\n                // Append each value as the header name\n                for (const item of value) {\n                    headers.append(name, item);\n                }\n            }\n            else {\n                headers.append(name, value);\n            }\n        }\n        // Set the basic options for the Request\n        let opts = {\n            method: req.method,\n            headers,\n        };\n        // Check if there is a body that we should pass as part of the Request\n        // First check the req type - only pass body for POST, PUT and PATCH reqs\n        if (req.method === \"POST\" ||\n            req.method === \"PUT\" ||\n            req.method === \"PATCH\") {\n            // Next check the is content indicated by either:\n            // 1 - content length exists and is not \"0\" OR\n            // 2 - content length doesnt exist and the transfer encoding is \"chunked\"\n            const contentLength = req.headers[\"content-length\"];\n            const transferEncoding = req.headers[\"transfer-encoding\"];\n            if ((contentLength !== undefined && contentLength !== \"0\") ||\n                (contentLength === undefined && transferEncoding === \"chunked\")) {\n                // If we are here we want to pass the body\n                opts.body = Readable.toWeb(req);\n                opts.duplex = \"half\";\n            }\n        }\n        // Now call the super constructor to create the Request\n        // NOTE: Request is a Web standard and doesnt use Buffers so convert req.body\n        super(req.urlObj, opts);\n        // Make sure to tack on the nodeJs req/res\n        this.req = req;\n        this.res = res;\n    }\n}\n//# sourceMappingURL=req-res.js.map","export const contentTypes = {\n    \"123\": \"application/vnd.lotus-1-2-3\",\n    \"1km\": \"application/vnd.1000minds.decision-model+xml\",\n    \"3dml\": \"text/vnd.in3d.3dml\",\n    \"3ds\": \"image/x-3ds\",\n    \"3g2\": \"video/3gpp2\",\n    \"3gp\": \"video/3gpp\",\n    \"3gpp\": \"video/3gpp\",\n    \"3mf\": \"model/3mf\",\n    \"7z\": \"application/x-7z-compressed\",\n    \"disposition-notification\": \"message/disposition-notification\",\n    \"n-gage\": \"application/vnd.nokia.n-gage.symbian.install\",\n    \"sfd-hdstx\": \"application/vnd.hydrostatix.sof-data\",\n    \"vbox-extpack\": \"application/x-virtualbox-vbox-extpack\",\n    aab: \"application/x-authorware-bin\",\n    aac: \"audio/x-aac\",\n    aam: \"application/x-authorware-map\",\n    aas: \"application/x-authorware-seg\",\n    abw: \"application/x-abiword\",\n    ac: \"application/vnd.nokia.n-gage.ac+xml\",\n    acc: \"application/vnd.americandynamics.acc\",\n    ace: \"application/x-ace-compressed\",\n    acu: \"application/vnd.acucobol\",\n    acutc: \"application/vnd.acucorp\",\n    adp: \"audio/adpcm\",\n    adts: \"audio/aac\",\n    aep: \"application/vnd.audiograph\",\n    afm: \"application/x-font-type1\",\n    afp: \"application/vnd.ibm.modcap\",\n    age: \"application/vnd.age\",\n    ahead: \"application/vnd.ahead.space\",\n    ai: \"application/postscript\",\n    aif: \"audio/x-aiff\",\n    aifc: \"audio/x-aiff\",\n    aiff: \"audio/x-aiff\",\n    air: \"application/vnd.adobe.air-application-installer-package+zip\",\n    ait: \"application/vnd.dvb.ait\",\n    ami: \"application/vnd.amiga.ami\",\n    aml: \"application/automationml-aml+xml\",\n    amlx: \"application/automationml-amlx+zip\",\n    amr: \"audio/amr\",\n    apk: \"application/vnd.android.package-archive\",\n    apng: \"image/apng\",\n    appcache: \"text/cache-manifest\",\n    appinstaller: \"application/appinstaller\",\n    application: \"application/x-ms-application\",\n    appx: \"application/appx\",\n    appxbundle: \"application/appxbundle\",\n    apr: \"application/vnd.lotus-approach\",\n    arc: \"application/x-freearc\",\n    arj: \"application/x-arj\",\n    asc: \"application/pgp-signature\",\n    asf: \"video/x-ms-asf\",\n    asm: \"text/x-asm\",\n    aso: \"application/vnd.accpac.simply.aso\",\n    asx: \"video/x-ms-asf\",\n    atc: \"application/vnd.acucorp\",\n    atom: \"application/atom+xml\",\n    atomcat: \"application/atomcat+xml\",\n    atomdeleted: \"application/atomdeleted+xml\",\n    atomsvc: \"application/atomsvc+xml\",\n    atx: \"application/vnd.antix.game-component\",\n    au: \"audio/basic\",\n    avci: \"image/avci\",\n    avcs: \"image/avcs\",\n    avi: \"video/x-msvideo\",\n    avif: \"image/avif\",\n    aw: \"application/applixware\",\n    azf: \"application/vnd.airzip.filesecure.azf\",\n    azs: \"application/vnd.airzip.filesecure.azs\",\n    azv: \"image/vnd.airzip.accelerator.azv\",\n    azw: \"application/vnd.amazon.ebook\",\n    b16: \"image/vnd.pco.b16\",\n    bat: \"application/x-msdownload\",\n    bcpio: \"application/x-bcpio\",\n    bdf: \"application/x-font-bdf\",\n    bdm: \"application/vnd.syncml.dm+wbxml\",\n    bdoc: \"application/x-bdoc\",\n    bed: \"application/vnd.realvnc.bed\",\n    bh2: \"application/vnd.fujitsu.oasysprs\",\n    bin: \"application/octet-stream\",\n    blb: \"application/x-blorb\",\n    blorb: \"application/x-blorb\",\n    bmi: \"application/vnd.bmi\",\n    bmml: \"application/vnd.balsamiq.bmml+xml\",\n    bmp: \"image/x-ms-bmp\",\n    book: \"application/vnd.framemaker\",\n    box: \"application/vnd.previewsystems.box\",\n    boz: \"application/x-bzip2\",\n    bpk: \"application/octet-stream\",\n    bsp: \"model/vnd.valve.source.compiled-map\",\n    btf: \"image/prs.btif\",\n    btif: \"image/prs.btif\",\n    buffer: \"application/octet-stream\",\n    bz2: \"application/x-bzip2\",\n    bz: \"application/x-bzip\",\n    c11amc: \"application/vnd.cluetrust.cartomobile-config\",\n    c11amz: \"application/vnd.cluetrust.cartomobile-config-pkg\",\n    c4d: \"application/vnd.clonk.c4group\",\n    c4f: \"application/vnd.clonk.c4group\",\n    c4g: \"application/vnd.clonk.c4group\",\n    c4p: \"application/vnd.clonk.c4group\",\n    c4u: \"application/vnd.clonk.c4group\",\n    c: \"text/x-c\",\n    cab: \"application/vnd.ms-cab-compressed\",\n    caf: \"audio/x-caf\",\n    cap: \"application/vnd.tcpdump.pcap\",\n    car: \"application/vnd.curl.car\",\n    cat: \"application/vnd.ms-pki.seccat\",\n    cb7: \"application/x-cbr\",\n    cba: \"application/x-cbr\",\n    cbr: \"application/x-cbr\",\n    cbt: \"application/x-cbr\",\n    cbz: \"application/x-cbr\",\n    cc: \"text/x-c\",\n    cco: \"application/x-cocoa\",\n    cct: \"application/x-director\",\n    ccxml: \"application/ccxml+xml\",\n    cdbcmsg: \"application/vnd.contact.cmsg\",\n    cdf: \"application/x-netcdf\",\n    cdfx: \"application/cdfx+xml\",\n    cdkey: \"application/vnd.mediastation.cdkey\",\n    cdmia: \"application/cdmi-capability\",\n    cdmic: \"application/cdmi-container\",\n    cdmid: \"application/cdmi-domain\",\n    cdmio: \"application/cdmi-object\",\n    cdmiq: \"application/cdmi-queue\",\n    cdx: \"chemical/x-cdx\",\n    cdxml: \"application/vnd.chemdraw+xml\",\n    cdy: \"application/vnd.cinderella\",\n    cer: \"application/pkix-cert\",\n    cfs: \"application/x-cfs-compressed\",\n    cgm: \"image/cgm\",\n    chat: \"application/x-chat\",\n    chm: \"application/vnd.ms-htmlhelp\",\n    chrt: \"application/vnd.kde.kchart\",\n    cif: \"chemical/x-cif\",\n    cii: \"application/vnd.anser-web-certificate-issue-initiation\",\n    cil: \"application/vnd.ms-artgalry\",\n    cjs: \"application/node\",\n    cla: \"application/vnd.claymore\",\n    class: \"application/java-vm\",\n    cld: \"model/vnd.cld\",\n    clkk: \"application/vnd.crick.clicker.keyboard\",\n    clkp: \"application/vnd.crick.clicker.palette\",\n    clkt: \"application/vnd.crick.clicker.template\",\n    clkw: \"application/vnd.crick.clicker.wordbank\",\n    clkx: \"application/vnd.crick.clicker\",\n    clp: \"application/x-msclip\",\n    cmc: \"application/vnd.cosmocaller\",\n    cmdf: \"chemical/x-cmdf\",\n    cml: \"chemical/x-cml\",\n    cmp: \"application/vnd.yellowriver-custom-menu\",\n    cmx: \"image/x-cmx\",\n    cod: \"application/vnd.rim.cod\",\n    coffee: \"text/coffeescript\",\n    com: \"application/x-msdownload\",\n    conf: \"text/plain\",\n    cpio: \"application/x-cpio\",\n    cpl: \"application/cpl+xml\",\n    cpp: \"text/x-c\",\n    cpt: \"application/mac-compactpro\",\n    crd: \"application/x-mscardfile\",\n    crl: \"application/pkix-crl\",\n    crt: \"application/x-x509-ca-cert\",\n    crx: \"application/x-chrome-extension\",\n    cryptonote: \"application/vnd.rig.cryptonote\",\n    csh: \"application/x-csh\",\n    csl: \"application/vnd.citationstyles.style+xml\",\n    csml: \"chemical/x-csml\",\n    csp: \"application/vnd.commonspace\",\n    css: \"text/css\",\n    cst: \"application/x-director\",\n    csv: \"text/csv\",\n    cu: \"application/cu-seeme\",\n    curl: \"text/vnd.curl\",\n    cwl: \"application/cwl\",\n    cww: \"application/prs.cww\",\n    cxt: \"application/x-director\",\n    cxx: \"text/x-c\",\n    dae: \"model/vnd.collada+xml\",\n    daf: \"application/vnd.mobius.daf\",\n    dart: \"application/vnd.dart\",\n    dataless: \"application/vnd.fdsn.seed\",\n    davmount: \"application/davmount+xml\",\n    dbf: \"application/vnd.dbf\",\n    dbk: \"application/docbook+xml\",\n    dcr: \"application/x-director\",\n    dcurl: \"text/vnd.curl.dcurl\",\n    dd2: \"application/vnd.oma.dd2+xml\",\n    ddd: \"application/vnd.fujixerox.ddd\",\n    ddf: \"application/vnd.syncml.dmddf+xml\",\n    dds: \"image/vnd.ms-dds\",\n    deb: \"application/x-debian-package\",\n    def: \"text/plain\",\n    deploy: \"application/octet-stream\",\n    der: \"application/x-x509-ca-cert\",\n    dfac: \"application/vnd.dreamfactory\",\n    dgc: \"application/x-dgc-compressed\",\n    dib: \"image/bmp\",\n    dic: \"text/x-c\",\n    dir: \"application/x-director\",\n    dis: \"application/vnd.mobius.dis\",\n    dist: \"application/octet-stream\",\n    distz: \"application/octet-stream\",\n    djv: \"image/vnd.djvu\",\n    djvu: \"image/vnd.djvu\",\n    dll: \"application/x-msdownload\",\n    dmg: \"application/x-apple-diskimage\",\n    dmp: \"application/vnd.tcpdump.pcap\",\n    dms: \"application/octet-stream\",\n    dna: \"application/vnd.dna\",\n    doc: \"application/msword\",\n    docm: \"application/vnd.ms-word.document.macroenabled.12\",\n    docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n    dot: \"application/msword\",\n    dotm: \"application/vnd.ms-word.template.macroenabled.12\",\n    dotx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\",\n    dp: \"application/vnd.osgi.dp\",\n    dpg: \"application/vnd.dpgraph\",\n    dpx: \"image/dpx\",\n    dra: \"audio/vnd.dra\",\n    drle: \"image/dicom-rle\",\n    dsc: \"text/prs.lines.tag\",\n    dssc: \"application/dssc+der\",\n    dtb: \"application/x-dtbook+xml\",\n    dtd: \"application/xml-dtd\",\n    dts: \"audio/vnd.dts\",\n    dtshd: \"audio/vnd.dts.hd\",\n    dump: \"application/octet-stream\",\n    dvb: \"video/vnd.dvb.file\",\n    dvi: \"application/x-dvi\",\n    dwd: \"application/atsc-dwd+xml\",\n    dwf: \"model/vnd.dwf\",\n    dwg: \"image/vnd.dwg\",\n    dxf: \"image/vnd.dxf\",\n    dxp: \"application/vnd.spotfire.dxp\",\n    dxr: \"application/x-director\",\n    ear: \"application/java-archive\",\n    ecelp4800: \"audio/vnd.nuera.ecelp4800\",\n    ecelp7470: \"audio/vnd.nuera.ecelp7470\",\n    ecelp9600: \"audio/vnd.nuera.ecelp9600\",\n    ecma: \"application/ecmascript\",\n    edm: \"application/vnd.novadigm.edm\",\n    edx: \"application/vnd.novadigm.edx\",\n    efif: \"application/vnd.picsel\",\n    ei6: \"application/vnd.pg.osasli\",\n    elc: \"application/octet-stream\",\n    emf: \"image/emf\",\n    eml: \"message/rfc822\",\n    emma: \"application/emma+xml\",\n    emotionml: \"application/emotionml+xml\",\n    emz: \"application/x-msmetafile\",\n    eol: \"audio/vnd.digital-winds\",\n    eot: \"application/vnd.ms-fontobject\",\n    eps: \"application/postscript\",\n    epub: \"application/epub+zip\",\n    es3: \"application/vnd.eszigno3+xml\",\n    esa: \"application/vnd.osgi.subsystem\",\n    esf: \"application/vnd.epson.esf\",\n    et3: \"application/vnd.eszigno3+xml\",\n    etx: \"text/x-setext\",\n    eva: \"application/x-eva\",\n    evy: \"application/x-envoy\",\n    exe: \"application/x-msdownload\",\n    exi: \"application/exi\",\n    exp: \"application/express\",\n    exr: \"image/aces\",\n    ext: \"application/vnd.novadigm.ext\",\n    ez2: \"application/vnd.ezpix-album\",\n    ez3: \"application/vnd.ezpix-package\",\n    ez: \"application/andrew-inset\",\n    f4v: \"video/x-f4v\",\n    f77: \"text/x-fortran\",\n    f90: \"text/x-fortran\",\n    f: \"text/x-fortran\",\n    fbs: \"image/vnd.fastbidsheet\",\n    fcdt: \"application/vnd.adobe.formscentral.fcdt\",\n    fcs: \"application/vnd.isac.fcs\",\n    fdf: \"application/vnd.fdf\",\n    fdt: \"application/fdt+xml\",\n    fe_launch: \"application/vnd.denovo.fcselayout-link\",\n    fg5: \"application/vnd.fujitsu.oasysgp\",\n    fgd: \"application/x-director\",\n    fh4: \"image/x-freehand\",\n    fh5: \"image/x-freehand\",\n    fh7: \"image/x-freehand\",\n    fh: \"image/x-freehand\",\n    fhc: \"image/x-freehand\",\n    fig: \"application/x-xfig\",\n    fits: \"image/fits\",\n    flac: \"audio/x-flac\",\n    fli: \"video/x-fli\",\n    flo: \"application/vnd.micrografx.flo\",\n    flv: \"video/x-flv\",\n    flw: \"application/vnd.kde.kivio\",\n    flx: \"text/vnd.fmi.flexstor\",\n    fly: \"text/vnd.fly\",\n    fm: \"application/vnd.framemaker\",\n    fnc: \"application/vnd.frogans.fnc\",\n    fo: \"application/vnd.software602.filler.form+xml\",\n    for: \"text/x-fortran\",\n    fpx: \"image/vnd.fpx\",\n    frame: \"application/vnd.framemaker\",\n    fsc: \"application/vnd.fsc.weblaunch\",\n    fst: \"image/vnd.fst\",\n    ftc: \"application/vnd.fluxtime.clip\",\n    fti: \"application/vnd.anser-web-funds-transfer-initiation\",\n    fvt: \"video/vnd.fvt\",\n    fxp: \"application/vnd.adobe.fxp\",\n    fxpl: \"application/vnd.adobe.fxp\",\n    fzs: \"application/vnd.fuzzysheet\",\n    g2w: \"application/vnd.geoplan\",\n    g3: \"image/g3fax\",\n    g3w: \"application/vnd.geospace\",\n    gac: \"application/vnd.groove-account\",\n    gam: \"application/x-tads\",\n    gbr: \"application/rpki-ghostbusters\",\n    gca: \"application/x-gca-compressed\",\n    gdl: \"model/vnd.gdl\",\n    gdoc: \"application/vnd.google-apps.document\",\n    ged: \"text/vnd.familysearch.gedcom\",\n    geo: \"application/vnd.dynageo\",\n    geojson: \"application/geo+json\",\n    gex: \"application/vnd.geometry-explorer\",\n    ggb: \"application/vnd.geogebra.file\",\n    ggt: \"application/vnd.geogebra.tool\",\n    ghf: \"application/vnd.groove-help\",\n    gif: \"image/gif\",\n    gim: \"application/vnd.groove-identity-message\",\n    glb: \"model/gltf-binary\",\n    gltf: \"model/gltf+json\",\n    gml: \"application/gml+xml\",\n    gmx: \"application/vnd.gmx\",\n    gnumeric: \"application/x-gnumeric\",\n    gph: \"application/vnd.flographit\",\n    gpx: \"application/gpx+xml\",\n    gqf: \"application/vnd.grafeq\",\n    gqs: \"application/vnd.grafeq\",\n    gram: \"application/srgs\",\n    gramps: \"application/x-gramps-xml\",\n    gre: \"application/vnd.geometry-explorer\",\n    grv: \"application/vnd.groove-injector\",\n    grxml: \"application/srgs+xml\",\n    gsf: \"application/x-font-ghostscript\",\n    gsheet: \"application/vnd.google-apps.spreadsheet\",\n    gslides: \"application/vnd.google-apps.presentation\",\n    gtar: \"application/x-gtar\",\n    gtm: \"application/vnd.groove-tool-message\",\n    gtw: \"model/vnd.gtw\",\n    gv: \"text/vnd.graphviz\",\n    gxf: \"application/gxf\",\n    gxt: \"application/vnd.geonext\",\n    gz: \"application/gzip\",\n    h261: \"video/h261\",\n    h263: \"video/h263\",\n    h264: \"video/h264\",\n    h: \"text/x-c\",\n    hal: \"application/vnd.hal+xml\",\n    hbci: \"application/vnd.hbci\",\n    hbs: \"text/x-handlebars-template\",\n    hdd: \"application/x-virtualbox-hdd\",\n    hdf: \"application/x-hdf\",\n    heic: \"image/heic\",\n    heics: \"image/heic-sequence\",\n    heif: \"image/heif\",\n    heifs: \"image/heif-sequence\",\n    hej2: \"image/hej2k\",\n    held: \"application/atsc-held+xml\",\n    hh: \"text/x-c\",\n    hjson: \"application/hjson\",\n    hlp: \"application/winhlp\",\n    hpgl: \"application/vnd.hp-hpgl\",\n    hpid: \"application/vnd.hp-hpid\",\n    hps: \"application/vnd.hp-hps\",\n    hqx: \"application/mac-binhex40\",\n    hsj2: \"image/hsj2\",\n    htc: \"text/x-component\",\n    htke: \"application/vnd.kenameaapp\",\n    htm: \"text/html\",\n    html: \"text/html\",\n    hvd: \"application/vnd.yamaha.hv-dic\",\n    hvp: \"application/vnd.yamaha.hv-voice\",\n    hvs: \"application/vnd.yamaha.hv-script\",\n    i2g: \"application/vnd.intergeo\",\n    icc: \"application/vnd.iccprofile\",\n    ice: \"x-conference/x-cooltalk\",\n    icm: \"application/vnd.iccprofile\",\n    ico: \"image/x-icon\",\n    ics: \"text/calendar\",\n    ief: \"image/ief\",\n    ifb: \"text/calendar\",\n    ifm: \"application/vnd.shana.informed.formdata\",\n    iges: \"model/iges\",\n    igl: \"application/vnd.igloader\",\n    igm: \"application/vnd.insors.igm\",\n    igs: \"model/iges\",\n    igx: \"application/vnd.micrografx.igx\",\n    iif: \"application/vnd.shana.informed.interchange\",\n    img: \"application/octet-stream\",\n    imp: \"application/vnd.accpac.simply.imp\",\n    ims: \"application/vnd.ms-ims\",\n    in: \"text/plain\",\n    ini: \"text/plain\",\n    ink: \"application/inkml+xml\",\n    inkml: \"application/inkml+xml\",\n    install: \"application/x-install-instructions\",\n    iota: \"application/vnd.astraea-software.iota\",\n    ipfix: \"application/ipfix\",\n    ipk: \"application/vnd.shana.informed.package\",\n    irm: \"application/vnd.ibm.rights-management\",\n    irp: \"application/vnd.irepository.package+xml\",\n    iso: \"application/x-iso9660-image\",\n    itp: \"application/vnd.shana.informed.formtemplate\",\n    its: \"application/its+xml\",\n    ivp: \"application/vnd.immervision-ivp\",\n    ivu: \"application/vnd.immervision-ivu\",\n    jad: \"text/vnd.sun.j2me.app-descriptor\",\n    jade: \"text/jade\",\n    jam: \"application/vnd.jam\",\n    jar: \"application/java-archive\",\n    jardiff: \"application/x-java-archive-diff\",\n    java: \"text/x-java-source\",\n    jhc: \"image/jphc\",\n    jisp: \"application/vnd.jisp\",\n    jls: \"image/jls\",\n    jlt: \"application/vnd.hp-jlyt\",\n    jng: \"image/x-jng\",\n    jnlp: \"application/x-java-jnlp-file\",\n    joda: \"application/vnd.joost.joda-archive\",\n    jp2: \"image/jp2\",\n    jpe: \"image/jpeg\",\n    jpeg: \"image/jpeg\",\n    jpf: \"image/jpx\",\n    jpg2: \"image/jp2\",\n    jpg: \"image/jpeg\",\n    jpgm: \"video/jpm\",\n    jpgv: \"video/jpeg\",\n    jph: \"image/jph\",\n    jpm: \"video/jpm\",\n    jpx: \"image/jpx\",\n    js: \"text/javascript\",\n    json5: \"application/json5\",\n    json: \"application/json\",\n    jsonld: \"application/ld+json\",\n    jsonml: \"application/jsonml+json\",\n    jsx: \"text/jsx\",\n    jt: \"model/jt\",\n    jxr: \"image/jxr\",\n    jxra: \"image/jxra\",\n    jxrs: \"image/jxrs\",\n    jxs: \"image/jxs\",\n    jxsc: \"image/jxsc\",\n    jxsi: \"image/jxsi\",\n    jxss: \"image/jxss\",\n    kar: \"audio/midi\",\n    karbon: \"application/vnd.kde.karbon\",\n    kdbx: \"application/x-keepass2\",\n    key: \"application/x-iwork-keynote-sffkey\",\n    kfo: \"application/vnd.kde.kformula\",\n    kia: \"application/vnd.kidspiration\",\n    kml: \"application/vnd.google-earth.kml+xml\",\n    kmz: \"application/vnd.google-earth.kmz\",\n    kne: \"application/vnd.kinar\",\n    knp: \"application/vnd.kinar\",\n    kon: \"application/vnd.kde.kontour\",\n    kpr: \"application/vnd.kde.kpresenter\",\n    kpt: \"application/vnd.kde.kpresenter\",\n    kpxx: \"application/vnd.ds-keypoint\",\n    ksp: \"application/vnd.kde.kspread\",\n    ktr: \"application/vnd.kahootz\",\n    ktx2: \"image/ktx2\",\n    ktx: \"image/ktx\",\n    ktz: \"application/vnd.kahootz\",\n    kwd: \"application/vnd.kde.kword\",\n    kwt: \"application/vnd.kde.kword\",\n    lasxml: \"application/vnd.las.las+xml\",\n    latex: \"application/x-latex\",\n    lbd: \"application/vnd.llamagraphics.life-balance.desktop\",\n    lbe: \"application/vnd.llamagraphics.life-balance.exchange+xml\",\n    les: \"application/vnd.hhe.lesson-player\",\n    less: \"text/less\",\n    lgr: \"application/lgr+xml\",\n    lha: \"application/x-lzh-compressed\",\n    link66: \"application/vnd.route66.link66+xml\",\n    list3820: \"application/vnd.ibm.modcap\",\n    list: \"text/plain\",\n    listafp: \"application/vnd.ibm.modcap\",\n    litcoffee: \"text/coffeescript\",\n    lnk: \"application/x-ms-shortcut\",\n    log: \"text/plain\",\n    lostxml: \"application/lost+xml\",\n    lrf: \"application/octet-stream\",\n    lrm: \"application/vnd.ms-lrm\",\n    ltf: \"application/vnd.frogans.ltf\",\n    lua: \"text/x-lua\",\n    luac: \"application/x-lua-bytecode\",\n    lvp: \"audio/vnd.lucent.voice\",\n    lwp: \"application/vnd.lotus-wordpro\",\n    lzh: \"application/x-lzh-compressed\",\n    m13: \"application/x-msmediaview\",\n    m14: \"application/x-msmediaview\",\n    m1v: \"video/mpeg\",\n    m21: \"application/mp21\",\n    m2a: \"audio/mpeg\",\n    m2v: \"video/mpeg\",\n    m3a: \"audio/mpeg\",\n    m3u8: \"application/vnd.apple.mpegurl\",\n    m3u: \"audio/x-mpegurl\",\n    m4a: \"audio/x-m4a\",\n    m4p: \"application/mp4\",\n    m4s: \"video/iso.segment\",\n    m4u: \"video/vnd.mpegurl\",\n    m4v: \"video/x-m4v\",\n    ma: \"application/mathematica\",\n    mads: \"application/mads+xml\",\n    maei: \"application/mmt-aei+xml\",\n    mag: \"application/vnd.ecowin.chart\",\n    maker: \"application/vnd.framemaker\",\n    man: \"text/troff\",\n    manifest: \"text/cache-manifest\",\n    map: \"application/json\",\n    mar: \"application/octet-stream\",\n    markdown: \"text/markdown\",\n    mathml: \"application/mathml+xml\",\n    mb: \"application/mathematica\",\n    mbk: \"application/vnd.mobius.mbk\",\n    mbox: \"application/mbox\",\n    mc1: \"application/vnd.medcalcdata\",\n    mcd: \"application/vnd.mcd\",\n    mcurl: \"text/vnd.curl.mcurl\",\n    md: \"text/markdown\",\n    mdb: \"application/x-msaccess\",\n    mdi: \"image/vnd.ms-modi\",\n    mdx: \"text/mdx\",\n    me: \"text/troff\",\n    mesh: \"model/mesh\",\n    meta4: \"application/metalink4+xml\",\n    metalink: \"application/metalink+xml\",\n    mets: \"application/mets+xml\",\n    mfm: \"application/vnd.mfmp\",\n    mft: \"application/rpki-manifest\",\n    mgp: \"application/vnd.osgeo.mapguide.package\",\n    mgz: \"application/vnd.proteus.magazine\",\n    mid: \"audio/midi\",\n    midi: \"audio/midi\",\n    mie: \"application/x-mie\",\n    mif: \"application/vnd.mif\",\n    mime: \"message/rfc822\",\n    mj2: \"video/mj2\",\n    mjp2: \"video/mj2\",\n    mjs: \"text/javascript\",\n    mk3d: \"video/x-matroska\",\n    mka: \"audio/x-matroska\",\n    mkd: \"text/x-markdown\",\n    mks: \"video/x-matroska\",\n    mkv: \"video/x-matroska\",\n    mlp: \"application/vnd.dolby.mlp\",\n    mmd: \"application/vnd.chipnuts.karaoke-mmd\",\n    mmf: \"application/vnd.smaf\",\n    mml: \"text/mathml\",\n    mmr: \"image/vnd.fujixerox.edmics-mmr\",\n    mng: \"video/x-mng\",\n    mny: \"application/x-msmoney\",\n    mobi: \"application/x-mobipocket-ebook\",\n    mods: \"application/mods+xml\",\n    mov: \"video/quicktime\",\n    movie: \"video/x-sgi-movie\",\n    mp21: \"application/mp21\",\n    mp2: \"audio/mpeg\",\n    mp2a: \"audio/mpeg\",\n    mp3: \"audio/mpeg\",\n    mp4: \"video/mp4\",\n    mp4a: \"audio/mp4\",\n    mp4s: \"application/mp4\",\n    mp4v: \"video/mp4\",\n    mpc: \"application/vnd.mophun.certificate\",\n    mpd: \"application/dash+xml\",\n    mpe: \"video/mpeg\",\n    mpeg: \"video/mpeg\",\n    mpf: \"application/media-policy-dataset+xml\",\n    mpg4: \"video/mp4\",\n    mpg: \"video/mpeg\",\n    mpga: \"audio/mpeg\",\n    mpkg: \"application/vnd.apple.installer+xml\",\n    mpm: \"application/vnd.blueice.multipass\",\n    mpn: \"application/vnd.mophun.application\",\n    mpp: \"application/vnd.ms-project\",\n    mpt: \"application/vnd.ms-project\",\n    mpy: \"application/vnd.ibm.minipay\",\n    mqy: \"application/vnd.mobius.mqy\",\n    mrc: \"application/marc\",\n    mrcx: \"application/marcxml+xml\",\n    ms: \"text/troff\",\n    mscml: \"application/mediaservercontrol+xml\",\n    mseed: \"application/vnd.fdsn.mseed\",\n    mseq: \"application/vnd.mseq\",\n    msf: \"application/vnd.epson.msf\",\n    msg: \"application/vnd.ms-outlook\",\n    msh: \"model/mesh\",\n    msi: \"application/x-msdownload\",\n    msix: \"application/msix\",\n    msixbundle: \"application/msixbundle\",\n    msl: \"application/vnd.mobius.msl\",\n    msm: \"application/octet-stream\",\n    msp: \"application/octet-stream\",\n    msty: \"application/vnd.muvee.style\",\n    mtl: \"model/mtl\",\n    mts: \"model/vnd.mts\",\n    mus: \"application/vnd.musician\",\n    musd: \"application/mmt-usd+xml\",\n    musicxml: \"application/vnd.recordare.musicxml+xml\",\n    mvb: \"application/x-msmediaview\",\n    mvt: \"application/vnd.mapbox-vector-tile\",\n    mwf: \"application/vnd.mfer\",\n    mxf: \"application/mxf\",\n    mxl: \"application/vnd.recordare.musicxml\",\n    mxmf: \"audio/mobile-xmf\",\n    mxml: \"application/xv+xml\",\n    mxs: \"application/vnd.triscape.mxs\",\n    mxu: \"video/vnd.mpegurl\",\n    n3: \"text/n3\",\n    nb: \"application/mathematica\",\n    nbp: \"application/vnd.wolfram.player\",\n    nc: \"application/x-netcdf\",\n    ncx: \"application/x-dtbncx+xml\",\n    nfo: \"text/x-nfo\",\n    ngdat: \"application/vnd.nokia.n-gage.data\",\n    nitf: \"application/vnd.nitf\",\n    nlu: \"application/vnd.neurolanguage.nlu\",\n    nml: \"application/vnd.enliven\",\n    nnd: \"application/vnd.noblenet-directory\",\n    nns: \"application/vnd.noblenet-sealer\",\n    nnw: \"application/vnd.noblenet-web\",\n    npx: \"image/vnd.net-fpx\",\n    nq: \"application/n-quads\",\n    nsc: \"application/x-conference\",\n    nsf: \"application/vnd.lotus-notes\",\n    nt: \"application/n-triples\",\n    ntf: \"application/vnd.nitf\",\n    numbers: \"application/x-iwork-numbers-sffnumbers\",\n    nzb: \"application/x-nzb\",\n    oa2: \"application/vnd.fujitsu.oasys2\",\n    oa3: \"application/vnd.fujitsu.oasys3\",\n    oas: \"application/vnd.fujitsu.oasys\",\n    obd: \"application/x-msbinder\",\n    obgx: \"application/vnd.openblox.game+xml\",\n    obj: \"model/obj\",\n    oda: \"application/oda\",\n    odb: \"application/vnd.oasis.opendocument.database\",\n    odc: \"application/vnd.oasis.opendocument.chart\",\n    odf: \"application/vnd.oasis.opendocument.formula\",\n    odft: \"application/vnd.oasis.opendocument.formula-template\",\n    odg: \"application/vnd.oasis.opendocument.graphics\",\n    odi: \"application/vnd.oasis.opendocument.image\",\n    odm: \"application/vnd.oasis.opendocument.text-master\",\n    odp: \"application/vnd.oasis.opendocument.presentation\",\n    ods: \"application/vnd.oasis.opendocument.spreadsheet\",\n    odt: \"application/vnd.oasis.opendocument.text\",\n    oga: \"audio/ogg\",\n    ogex: \"model/vnd.opengex\",\n    ogg: \"audio/ogg\",\n    ogv: \"video/ogg\",\n    ogx: \"application/ogg\",\n    omdoc: \"application/omdoc+xml\",\n    onepkg: \"application/onenote\",\n    onetmp: \"application/onenote\",\n    onetoc2: \"application/onenote\",\n    onetoc: \"application/onenote\",\n    opf: \"application/oebps-package+xml\",\n    opml: \"text/x-opml\",\n    oprc: \"application/vnd.palm\",\n    opus: \"audio/ogg\",\n    org: \"text/x-org\",\n    osf: \"application/vnd.yamaha.openscoreformat\",\n    osfpvg: \"application/vnd.yamaha.openscoreformat.osfpvg+xml\",\n    osm: \"application/vnd.openstreetmap.data+xml\",\n    otc: \"application/vnd.oasis.opendocument.chart-template\",\n    otf: \"font/otf\",\n    otg: \"application/vnd.oasis.opendocument.graphics-template\",\n    oth: \"application/vnd.oasis.opendocument.text-web\",\n    oti: \"application/vnd.oasis.opendocument.image-template\",\n    otp: \"application/vnd.oasis.opendocument.presentation-template\",\n    ots: \"application/vnd.oasis.opendocument.spreadsheet-template\",\n    ott: \"application/vnd.oasis.opendocument.text-template\",\n    ova: \"application/x-virtualbox-ova\",\n    ovf: \"application/x-virtualbox-ovf\",\n    owl: \"application/rdf+xml\",\n    oxps: \"application/oxps\",\n    oxt: \"application/vnd.openofficeorg.extension\",\n    p10: \"application/pkcs10\",\n    p12: \"application/x-pkcs12\",\n    p7b: \"application/x-pkcs7-certificates\",\n    p7c: \"application/pkcs7-mime\",\n    p7m: \"application/pkcs7-mime\",\n    p7r: \"application/x-pkcs7-certreqresp\",\n    p7s: \"application/pkcs7-signature\",\n    p8: \"application/pkcs8\",\n    p: \"text/x-pascal\",\n    pac: \"application/x-ns-proxy-autoconfig\",\n    pages: \"application/x-iwork-pages-sffpages\",\n    pas: \"text/x-pascal\",\n    paw: \"application/vnd.pawaafile\",\n    pbd: \"application/vnd.powerbuilder6\",\n    pbm: \"image/x-portable-bitmap\",\n    pcap: \"application/vnd.tcpdump.pcap\",\n    pcf: \"application/x-font-pcf\",\n    pcl: \"application/vnd.hp-pcl\",\n    pclxl: \"application/vnd.hp-pclxl\",\n    pct: \"image/x-pict\",\n    pcurl: \"application/vnd.curl.pcurl\",\n    pcx: \"image/x-pcx\",\n    pdb: \"application/x-pilot\",\n    pde: \"text/x-processing\",\n    pdf: \"application/pdf\",\n    pem: \"application/x-x509-ca-cert\",\n    pfa: \"application/x-font-type1\",\n    pfb: \"application/x-font-type1\",\n    pfm: \"application/x-font-type1\",\n    pfr: \"application/font-tdpfr\",\n    pfx: \"application/x-pkcs12\",\n    pgm: \"image/x-portable-graymap\",\n    pgn: \"application/x-chess-pgn\",\n    pgp: \"application/pgp-encrypted\",\n    php: \"application/x-httpd-php\",\n    pic: \"image/x-pict\",\n    pkg: \"application/octet-stream\",\n    pki: \"application/pkixcmp\",\n    pkipath: \"application/pkix-pkipath\",\n    pkpass: \"application/vnd.apple.pkpass\",\n    pl: \"application/x-perl\",\n    plb: \"application/vnd.3gpp.pic-bw-large\",\n    plc: \"application/vnd.mobius.plc\",\n    plf: \"application/vnd.pocketlearn\",\n    pls: \"application/pls+xml\",\n    pm: \"application/x-perl\",\n    pml: \"application/vnd.ctc-posml\",\n    png: \"image/png\",\n    pnm: \"image/x-portable-anymap\",\n    portpkg: \"application/vnd.macports.portpkg\",\n    pot: \"application/vnd.ms-powerpoint\",\n    potm: \"application/vnd.ms-powerpoint.template.macroenabled.12\",\n    potx: \"application/vnd.openxmlformats-officedocument.presentationml.template\",\n    ppam: \"application/vnd.ms-powerpoint.addin.macroenabled.12\",\n    ppd: \"application/vnd.cups-ppd\",\n    ppm: \"image/x-portable-pixmap\",\n    pps: \"application/vnd.ms-powerpoint\",\n    ppsm: \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\",\n    ppsx: \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\",\n    ppt: \"application/vnd.ms-powerpoint\",\n    pptm: \"application/vnd.ms-powerpoint.presentation.macroenabled.12\",\n    pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n    pqa: \"application/vnd.palm\",\n    prc: \"model/prc\",\n    pre: \"application/vnd.lotus-freelance\",\n    prf: \"application/pics-rules\",\n    provx: \"application/provenance+xml\",\n    ps: \"application/postscript\",\n    psb: \"application/vnd.3gpp.pic-bw-small\",\n    psd: \"image/vnd.adobe.photoshop\",\n    psf: \"application/x-font-linux-psf\",\n    pskcxml: \"application/pskc+xml\",\n    pti: \"image/prs.pti\",\n    ptid: \"application/vnd.pvi.ptid1\",\n    pub: \"application/x-mspublisher\",\n    pvb: \"application/vnd.3gpp.pic-bw-var\",\n    pwn: \"application/vnd.3m.post-it-notes\",\n    pya: \"audio/vnd.ms-playready.media.pya\",\n    pyo: \"model/vnd.pytha.pyox\",\n    pyox: \"model/vnd.pytha.pyox\",\n    pyv: \"video/vnd.ms-playready.media.pyv\",\n    qam: \"application/vnd.epson.quickanime\",\n    qbo: \"application/vnd.intu.qbo\",\n    qfx: \"application/vnd.intu.qfx\",\n    qps: \"application/vnd.publishare-delta-tree\",\n    qt: \"video/quicktime\",\n    qwd: \"application/vnd.quark.quarkxpress\",\n    qwt: \"application/vnd.quark.quarkxpress\",\n    qxb: \"application/vnd.quark.quarkxpress\",\n    qxd: \"application/vnd.quark.quarkxpress\",\n    qxl: \"application/vnd.quark.quarkxpress\",\n    qxt: \"application/vnd.quark.quarkxpress\",\n    ra: \"audio/x-realaudio\",\n    ram: \"audio/x-pn-realaudio\",\n    raml: \"application/raml+yaml\",\n    rapd: \"application/route-apd+xml\",\n    rar: \"application/x-rar-compressed\",\n    ras: \"image/x-cmu-raster\",\n    rcprofile: \"application/vnd.ipunplugged.rcprofile\",\n    rdf: \"application/rdf+xml\",\n    rdz: \"application/vnd.data-vision.rdz\",\n    relo: \"application/p2p-overlay+xml\",\n    rep: \"application/vnd.businessobjects\",\n    res: \"application/x-dtbresource+xml\",\n    rgb: \"image/x-rgb\",\n    rif: \"application/reginfo+xml\",\n    rip: \"audio/vnd.rip\",\n    ris: \"application/x-research-info-systems\",\n    rl: \"application/resource-lists+xml\",\n    rlc: \"image/vnd.fujixerox.edmics-rlc\",\n    rld: \"application/resource-lists-diff+xml\",\n    rm: \"application/vnd.rn-realmedia\",\n    rmi: \"audio/midi\",\n    rmp: \"audio/x-pn-realaudio-plugin\",\n    rms: \"application/vnd.jcp.javame.midlet-rms\",\n    rmvb: \"application/vnd.rn-realmedia-vbr\",\n    rnc: \"application/relax-ng-compact-syntax\",\n    rng: \"application/xml\",\n    roa: \"application/rpki-roa\",\n    roff: \"text/troff\",\n    rp9: \"application/vnd.cloanto.rp9\",\n    rpm: \"application/x-redhat-package-manager\",\n    rpss: \"application/vnd.nokia.radio-presets\",\n    rpst: \"application/vnd.nokia.radio-preset\",\n    rq: \"application/sparql-query\",\n    rs: \"application/rls-services+xml\",\n    rsat: \"application/atsc-rsat+xml\",\n    rsd: \"application/rsd+xml\",\n    rsheet: \"application/urc-ressheet+xml\",\n    rss: \"application/rss+xml\",\n    rtf: \"text/rtf\",\n    rtx: \"text/richtext\",\n    run: \"application/x-makeself\",\n    rusd: \"application/route-usd+xml\",\n    s3m: \"audio/s3m\",\n    s: \"text/x-asm\",\n    saf: \"application/vnd.yamaha.smaf-audio\",\n    sass: \"text/x-sass\",\n    sbml: \"application/sbml+xml\",\n    sc: \"application/vnd.ibm.secure-container\",\n    scd: \"application/x-msschedule\",\n    scm: \"application/vnd.lotus-screencam\",\n    scq: \"application/scvp-cv-request\",\n    scs: \"application/scvp-cv-response\",\n    scss: \"text/x-scss\",\n    scurl: \"text/vnd.curl.scurl\",\n    sda: \"application/vnd.stardivision.draw\",\n    sdc: \"application/vnd.stardivision.calc\",\n    sdd: \"application/vnd.stardivision.impress\",\n    sdkd: \"application/vnd.solent.sdkm+xml\",\n    sdkm: \"application/vnd.solent.sdkm+xml\",\n    sdp: \"application/sdp\",\n    sdw: \"application/vnd.stardivision.writer\",\n    sea: \"application/x-sea\",\n    see: \"application/vnd.seemail\",\n    seed: \"application/vnd.fdsn.seed\",\n    sema: \"application/vnd.sema\",\n    semd: \"application/vnd.semd\",\n    semf: \"application/vnd.semf\",\n    senmlx: \"application/senml+xml\",\n    sensmlx: \"application/sensml+xml\",\n    ser: \"application/java-serialized-object\",\n    setpay: \"application/set-payment-initiation\",\n    setreg: \"application/set-registration-initiation\",\n    sfs: \"application/vnd.spotfire.sfs\",\n    sfv: \"text/x-sfv\",\n    sgi: \"image/sgi\",\n    sgl: \"application/vnd.stardivision.writer-global\",\n    sgm: \"text/sgml\",\n    sgml: \"text/sgml\",\n    sh: \"application/x-sh\",\n    shar: \"application/x-shar\",\n    shex: \"text/shex\",\n    shf: \"application/shf+xml\",\n    shtml: \"text/html\",\n    sid: \"image/x-mrsid-image\",\n    sieve: \"application/sieve\",\n    sig: \"application/pgp-signature\",\n    sil: \"audio/silk\",\n    silo: \"model/mesh\",\n    sis: \"application/vnd.symbian.install\",\n    sisx: \"application/vnd.symbian.install\",\n    sit: \"application/x-stuffit\",\n    sitx: \"application/x-stuffitx\",\n    siv: \"application/sieve\",\n    skd: \"application/vnd.koan\",\n    skm: \"application/vnd.koan\",\n    skp: \"application/vnd.koan\",\n    skt: \"application/vnd.koan\",\n    sldm: \"application/vnd.ms-powerpoint.slide.macroenabled.12\",\n    sldx: \"application/vnd.openxmlformats-officedocument.presentationml.slide\",\n    slim: \"text/slim\",\n    slm: \"text/slim\",\n    sls: \"application/route-s-tsid+xml\",\n    slt: \"application/vnd.epson.salt\",\n    sm: \"application/vnd.stepmania.stepchart\",\n    smf: \"application/vnd.stardivision.math\",\n    smi: \"application/smil+xml\",\n    smil: \"application/smil+xml\",\n    smv: \"video/x-smv\",\n    smzip: \"application/vnd.stepmania.package\",\n    snd: \"audio/basic\",\n    snf: \"application/x-font-snf\",\n    so: \"application/octet-stream\",\n    spc: \"application/x-pkcs7-certificates\",\n    spdx: \"text/spdx\",\n    spf: \"application/vnd.yamaha.smaf-phrase\",\n    spl: \"application/x-futuresplash\",\n    spot: \"text/vnd.in3d.spot\",\n    spp: \"application/scvp-vp-response\",\n    spq: \"application/scvp-vp-request\",\n    spx: \"audio/ogg\",\n    sql: \"application/x-sql\",\n    src: \"application/x-wais-source\",\n    srt: \"application/x-subrip\",\n    sru: \"application/sru+xml\",\n    srx: \"application/sparql-results+xml\",\n    ssdl: \"application/ssdl+xml\",\n    sse: \"application/vnd.kodak-descriptor\",\n    ssf: \"application/vnd.epson.ssf\",\n    ssml: \"application/ssml+xml\",\n    st: \"application/vnd.sailingtracker.track\",\n    stc: \"application/vnd.sun.xml.calc.template\",\n    std: \"application/vnd.sun.xml.draw.template\",\n    stf: \"application/vnd.wt.stf\",\n    sti: \"application/vnd.sun.xml.impress.template\",\n    stk: \"application/hyperstudio\",\n    stl: \"model/stl\",\n    stpx: \"model/step+xml\",\n    stpxz: \"model/step-xml+zip\",\n    stpz: \"model/step+zip\",\n    str: \"application/vnd.pg.format\",\n    stw: \"application/vnd.sun.xml.writer.template\",\n    styl: \"text/stylus\",\n    stylus: \"text/stylus\",\n    sub: \"text/vnd.dvb.subtitle\",\n    sus: \"application/vnd.sus-calendar\",\n    susp: \"application/vnd.sus-calendar\",\n    sv4cpio: \"application/x-sv4cpio\",\n    sv4crc: \"application/x-sv4crc\",\n    svc: \"application/vnd.dvb.service\",\n    svd: \"application/vnd.svd\",\n    svg: \"image/svg+xml\",\n    svgz: \"image/svg+xml\",\n    swa: \"application/x-director\",\n    swf: \"application/x-shockwave-flash\",\n    swi: \"application/vnd.aristanetworks.swi\",\n    swidtag: \"application/swid+xml\",\n    sxc: \"application/vnd.sun.xml.calc\",\n    sxd: \"application/vnd.sun.xml.draw\",\n    sxg: \"application/vnd.sun.xml.writer.global\",\n    sxi: \"application/vnd.sun.xml.impress\",\n    sxm: \"application/vnd.sun.xml.math\",\n    sxw: \"application/vnd.sun.xml.writer\",\n    t38: \"image/t38\",\n    t3: \"application/x-t3vm-image\",\n    t: \"text/troff\",\n    taglet: \"application/vnd.mynfc\",\n    tao: \"application/vnd.tao.intent-module-archive\",\n    tap: \"image/vnd.tencent.tap\",\n    tar: \"application/x-tar\",\n    tcap: \"application/vnd.3gpp2.tcap\",\n    tcl: \"application/x-tcl\",\n    td: \"application/urc-targetdesc+xml\",\n    teacher: \"application/vnd.smart.teacher\",\n    tei: \"application/tei+xml\",\n    teicorpus: \"application/tei+xml\",\n    tex: \"application/x-tex\",\n    texi: \"application/x-texinfo\",\n    texinfo: \"application/x-texinfo\",\n    text: \"text/plain\",\n    tfi: \"application/thraud+xml\",\n    tfm: \"application/x-tex-tfm\",\n    tfx: \"image/tiff-fx\",\n    tga: \"image/x-tga\",\n    thmx: \"application/vnd.ms-officetheme\",\n    tif: \"image/tiff\",\n    tiff: \"image/tiff\",\n    tk: \"application/x-tcl\",\n    tmo: \"application/vnd.tmobile-livetv\",\n    toml: \"application/toml\",\n    torrent: \"application/x-bittorrent\",\n    tpl: \"application/vnd.groove-tool-template\",\n    tpt: \"application/vnd.trid.tpt\",\n    tr: \"text/troff\",\n    tra: \"application/vnd.trueapp\",\n    trig: \"application/trig\",\n    trm: \"application/x-msterminal\",\n    ts: \"video/mp2t\",\n    tsd: \"application/timestamped-data\",\n    tsv: \"text/tab-separated-values\",\n    ttc: \"font/collection\",\n    ttf: \"font/ttf\",\n    ttl: \"text/turtle\",\n    ttml: \"application/ttml+xml\",\n    twd: \"application/vnd.simtech-mindmapper\",\n    twds: \"application/vnd.simtech-mindmapper\",\n    txd: \"application/vnd.genomatix.tuxedo\",\n    txf: \"application/vnd.mobius.txf\",\n    txt: \"text/plain\",\n    u32: \"application/x-authorware-bin\",\n    u3d: \"model/u3d\",\n    u8dsn: \"message/global-delivery-status\",\n    u8hdr: \"message/global-headers\",\n    u8mdn: \"message/global-disposition-notification\",\n    u8msg: \"message/global\",\n    ubj: \"application/ubjson\",\n    udeb: \"application/x-debian-package\",\n    ufd: \"application/vnd.ufdl\",\n    ufdl: \"application/vnd.ufdl\",\n    ulx: \"application/x-glulx\",\n    umj: \"application/vnd.umajin\",\n    unityweb: \"application/vnd.unity\",\n    uo: \"application/vnd.uoml+xml\",\n    uoml: \"application/vnd.uoml+xml\",\n    uri: \"text/uri-list\",\n    uris: \"text/uri-list\",\n    urls: \"text/uri-list\",\n    usda: \"model/vnd.usda\",\n    usdz: \"model/vnd.usdz+zip\",\n    ustar: \"application/x-ustar\",\n    utz: \"application/vnd.uiq.theme\",\n    uu: \"text/x-uuencode\",\n    uva: \"audio/vnd.dece.audio\",\n    uvd: \"application/vnd.dece.data\",\n    uvf: \"application/vnd.dece.data\",\n    uvg: \"image/vnd.dece.graphic\",\n    uvh: \"video/vnd.dece.hd\",\n    uvi: \"image/vnd.dece.graphic\",\n    uvm: \"video/vnd.dece.mobile\",\n    uvp: \"video/vnd.dece.pd\",\n    uvs: \"video/vnd.dece.sd\",\n    uvt: \"application/vnd.dece.ttml+xml\",\n    uvu: \"video/vnd.uvvu.mp4\",\n    uvv: \"video/vnd.dece.video\",\n    uvva: \"audio/vnd.dece.audio\",\n    uvvd: \"application/vnd.dece.data\",\n    uvvf: \"application/vnd.dece.data\",\n    uvvg: \"image/vnd.dece.graphic\",\n    uvvh: \"video/vnd.dece.hd\",\n    uvvi: \"image/vnd.dece.graphic\",\n    uvvm: \"video/vnd.dece.mobile\",\n    uvvp: \"video/vnd.dece.pd\",\n    uvvs: \"video/vnd.dece.sd\",\n    uvvt: \"application/vnd.dece.ttml+xml\",\n    uvvu: \"video/vnd.uvvu.mp4\",\n    uvvv: \"video/vnd.dece.video\",\n    uvvx: \"application/vnd.dece.unspecified\",\n    uvvz: \"application/vnd.dece.zip\",\n    uvx: \"application/vnd.dece.unspecified\",\n    uvz: \"application/vnd.dece.zip\",\n    vbox: \"application/x-virtualbox-vbox\",\n    vcard: \"text/vcard\",\n    vcd: \"application/x-cdlink\",\n    vcf: \"text/x-vcard\",\n    vcg: \"application/vnd.groove-vcard\",\n    vcs: \"text/x-vcalendar\",\n    vcx: \"application/vnd.vcx\",\n    vdi: \"application/x-virtualbox-vdi\",\n    vds: \"model/vnd.sap.vds\",\n    vhd: \"application/x-virtualbox-vhd\",\n    vis: \"application/vnd.visionary\",\n    viv: \"video/vnd.vivo\",\n    vmdk: \"application/x-virtualbox-vmdk\",\n    vob: \"video/x-ms-vob\",\n    vor: \"application/vnd.stardivision.writer\",\n    vox: \"application/x-authorware-bin\",\n    vrml: \"model/vrml\",\n    vsd: \"application/vnd.visio\",\n    vsf: \"application/vnd.vsf\",\n    vss: \"application/vnd.visio\",\n    vst: \"application/vnd.visio\",\n    vsw: \"application/vnd.visio\",\n    vtf: \"image/vnd.valve.source.texture\",\n    vtt: \"text/vtt\",\n    vtu: \"model/vnd.vtu\",\n    vxml: \"application/voicexml+xml\",\n    w3d: \"application/x-director\",\n    wad: \"application/x-doom\",\n    wadl: \"application/vnd.sun.wadl+xml\",\n    war: \"application/java-archive\",\n    wasm: \"application/wasm\",\n    wav: \"audio/x-wav\",\n    wax: \"audio/x-ms-wax\",\n    wbmp: \"image/vnd.wap.wbmp\",\n    wbs: \"application/vnd.criticaltools.wbs+xml\",\n    wbxml: \"application/vnd.wap.wbxml\",\n    wcm: \"application/vnd.ms-works\",\n    wdb: \"application/vnd.ms-works\",\n    wdp: \"image/vnd.ms-photo\",\n    weba: \"audio/webm\",\n    webapp: \"application/x-web-app-manifest+json\",\n    webm: \"video/webm\",\n    webmanifest: \"application/manifest+json\",\n    webp: \"image/webp\",\n    wg: \"application/vnd.pmi.widget\",\n    wgsl: \"text/wgsl\",\n    wgt: \"application/widget\",\n    wif: \"application/watcherinfo+xml\",\n    wks: \"application/vnd.ms-works\",\n    wm: \"video/x-ms-wm\",\n    wma: \"audio/x-ms-wma\",\n    wmd: \"application/x-ms-wmd\",\n    wmf: \"image/wmf\",\n    wml: \"text/vnd.wap.wml\",\n    wmlc: \"application/vnd.wap.wmlc\",\n    wmls: \"text/vnd.wap.wmlscript\",\n    wmlsc: \"application/vnd.wap.wmlscriptc\",\n    wmv: \"video/x-ms-wmv\",\n    wmx: \"video/x-ms-wmx\",\n    wmz: \"application/x-msmetafile\",\n    woff2: \"font/woff2\",\n    woff: \"font/woff\",\n    wpd: \"application/vnd.wordperfect\",\n    wpl: \"application/vnd.ms-wpl\",\n    wps: \"application/vnd.ms-works\",\n    wqd: \"application/vnd.wqd\",\n    wri: \"application/x-mswrite\",\n    wrl: \"model/vrml\",\n    wsc: \"message/vnd.wfa.wsc\",\n    wsdl: \"application/wsdl+xml\",\n    wspolicy: \"application/wspolicy+xml\",\n    wtb: \"application/vnd.webturbo\",\n    wvx: \"video/x-ms-wvx\",\n    x32: \"application/x-authorware-bin\",\n    x3d: \"model/x3d+xml\",\n    x3db: \"model/x3d+fastinfoset\",\n    x3dbz: \"model/x3d+binary\",\n    x3dv: \"model/x3d-vrml\",\n    x3dvz: \"model/x3d+vrml\",\n    x3dz: \"model/x3d+xml\",\n    x_b: \"model/vnd.parasolid.transmit.binary\",\n    x_t: \"model/vnd.parasolid.transmit.text\",\n    xaml: \"application/xaml+xml\",\n    xap: \"application/x-silverlight-app\",\n    xar: \"application/vnd.xara\",\n    xav: \"application/xcap-att+xml\",\n    xbap: \"application/x-ms-xbap\",\n    xbd: \"application/vnd.fujixerox.docuworks.binder\",\n    xbm: \"image/x-xbitmap\",\n    xca: \"application/xcap-caps+xml\",\n    xcs: \"application/calendar+xml\",\n    xdf: \"application/xcap-diff+xml\",\n    xdm: \"application/vnd.syncml.dm+xml\",\n    xdp: \"application/vnd.adobe.xdp+xml\",\n    xdssc: \"application/dssc+xml\",\n    xdw: \"application/vnd.fujixerox.docuworks\",\n    xel: \"application/xcap-el+xml\",\n    xenc: \"application/xenc+xml\",\n    xer: \"application/patch-ops-error+xml\",\n    xfdf: \"application/xfdf\",\n    xfdl: \"application/vnd.xfdl\",\n    xht: \"application/xhtml+xml\",\n    xhtm: \"application/vnd.pwg-xhtml-print+xml\",\n    xhtml: \"application/xhtml+xml\",\n    xhvml: \"application/xv+xml\",\n    xif: \"image/vnd.xiff\",\n    xla: \"application/vnd.ms-excel\",\n    xlam: \"application/vnd.ms-excel.addin.macroenabled.12\",\n    xlc: \"application/vnd.ms-excel\",\n    xlf: \"application/xliff+xml\",\n    xlm: \"application/vnd.ms-excel\",\n    xls: \"application/vnd.ms-excel\",\n    xlsb: \"application/vnd.ms-excel.sheet.binary.macroenabled.12\",\n    xlsm: \"application/vnd.ms-excel.sheet.macroenabled.12\",\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n    xlt: \"application/vnd.ms-excel\",\n    xltm: \"application/vnd.ms-excel.template.macroenabled.12\",\n    xltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\",\n    xlw: \"application/vnd.ms-excel\",\n    xm: \"audio/xm\",\n    xml: \"text/xml\",\n    xns: \"application/xcap-ns+xml\",\n    xo: \"application/vnd.olpc-sugar\",\n    xop: \"application/xop+xml\",\n    xpi: \"application/x-xpinstall\",\n    xpl: \"application/xproc+xml\",\n    xpm: \"image/x-xpixmap\",\n    xpr: \"application/vnd.is-xpr\",\n    xps: \"application/vnd.ms-xpsdocument\",\n    xpw: \"application/vnd.intercon.formnet\",\n    xpx: \"application/vnd.intercon.formnet\",\n    xsd: \"application/xml\",\n    xsf: \"application/prs.xsf+xml\",\n    xsl: \"application/xslt+xml\",\n    xslt: \"application/xslt+xml\",\n    xsm: \"application/vnd.syncml+xml\",\n    xspf: \"application/xspf+xml\",\n    xul: \"application/vnd.mozilla.xul+xml\",\n    xvm: \"application/xv+xml\",\n    xvml: \"application/xv+xml\",\n    xwd: \"image/x-xwindowdump\",\n    xyz: \"chemical/x-xyz\",\n    xz: \"application/x-xz\",\n    yaml: \"text/yaml\",\n    yang: \"application/yang\",\n    yin: \"application/yin+xml\",\n    yml: \"text/yaml\",\n    ymp: \"text/x-suse-ymp\",\n    z1: \"application/x-zmachine\",\n    z2: \"application/x-zmachine\",\n    z3: \"application/x-zmachine\",\n    z4: \"application/x-zmachine\",\n    z5: \"application/x-zmachine\",\n    z6: \"application/x-zmachine\",\n    z7: \"application/x-zmachine\",\n    z8: \"application/x-zmachine\",\n    zaz: \"application/vnd.zzazz.deck+xml\",\n    zip: \"application/zip\",\n    zir: \"application/vnd.zul\",\n    zirz: \"application/vnd.zul\",\n    zmm: \"application/vnd.handheld-entertainment+xml\",\n};\n//# sourceMappingURL=content-types.js.map","// Imports here\nimport { HttpError } from \"./req-res.js\";\nimport * as crypto from \"node:crypto\";\n// Middleware functions here\nexport const jsonMiddleware = () => {\n    return async (req, _, next) => {\n        // Before we do anything make sure there is a body!\n        let body;\n        if (Buffer.isBuffer(req.body)) {\n            body = req.body;\n        }\n        if (body === undefined || body.length === 0) {\n            // No body to parse so call next middleware and then return\n            await next();\n            return;\n        }\n        let parseOk = true;\n        let errMessage = \"\";\n        // Now check the content-type header to find out what sort of data we have\n        const contentTypeHeader = req.headers[\"content-type\"];\n        if (contentTypeHeader !== undefined) {\n            let contentType = contentTypeHeader.split(\";\")[0];\n            switch (contentType) {\n                case \"application/json\":\n                    try {\n                        req.json = JSON.parse(body.toString());\n                    }\n                    catch (_) {\n                        // Set the error message you want to return\n                        errMessage = \"Can not parse JSON body!\";\n                        parseOk = false;\n                    }\n                    break;\n                case \"application/x-www-form-urlencoded\":\n                    let qry = new URLSearchParams(body.toString());\n                    let jsonBody = {};\n                    for (const [key, value] of qry.entries()) {\n                        jsonBody[key] = value;\n                    }\n                    req.json = jsonBody;\n                    break;\n                default:\n                    break;\n            }\n        }\n        // If the parsing failed then return an error\n        if (!parseOk) {\n            throw new HttpError(400, errMessage);\n        }\n        await next();\n    };\n};\nexport const bodyMiddleware = (options = {}) => {\n    let opts = {\n        maxBodySize: options.maxBodySize ?? 1024 * 1024,\n    };\n    return async (\n    // NOTE: No async here please since this is returning a Promise\n    req, _, next) => {\n        // Cehck if body has already been set\n        if (req.body !== undefined) {\n            // If so just continue down the middleware stack\n            await next();\n            return;\n        }\n        // Store each data \"chunk\" we receive this array\n        let chunks = [];\n        let bodySize = 0;\n        // Iterate of the req's AsyncIterator\n        for await (let chunk of req) {\n            bodySize += chunk.byteLength;\n            // Check if the body is larger then the user is allowing\n            if (bodySize >= opts.maxBodySize) {\n                let msg = `Body length greater than ${opts.maxBodySize} bytes`;\n                throw new HttpError(400, msg);\n            }\n            chunks.push(chunk);\n        }\n        req.body = Buffer.concat(chunks);\n        await next();\n    };\n};\nexport const corsMiddleware = (options = {}) => {\n    let opts = {\n        originsAllowed: options.originsAllowed ?? \"*\",\n        methodsAllowed: options.methodsAllowed ?? [],\n        headersAllowed: options.headersAllowed ?? [],\n        headersExposed: options.headersExposed ?? [],\n        credentialsAllowed: options.credentialsAllowed ?? false,\n        maxAge: options.maxAge ?? 60 * 60, // 1 hour\n    };\n    // NOTE: If credentialsAllowed is enabled then other headers cant be a \"*\"\n    if (opts.credentialsAllowed) {\n        if (opts.methodsAllowed === \"*\") {\n            throw new Error(\"The methodsAllowed MUST be specified when credentialsAllowed is true\");\n        }\n        if (opts.headersAllowed === \"*\") {\n            throw new Error(\"The headersAllowed MUST be specified when credentialsAllowed is true\");\n        }\n        if (opts.headersExposed === \"*\") {\n            throw new Error(\"The headersExposed MUST be specified when credentialsAllowed is true\");\n        }\n    }\n    return async (req, res, next) => {\n        let origin = req.headers[\"origin\"];\n        // Check if this is a CORS preflight request\n        if (req.method === \"OPTIONS\") {\n            // The origin MUST be available or this is not valid\n            if (origin === undefined) {\n                throw new HttpError(400, \"No origin header sent with the CORS request\");\n            }\n            // Set Access-Control-Allow-Origin\n            if (opts.originsAllowed === \"*\" || opts.originsAllowed.includes(origin)) {\n                // Best to set this to the origin for this req and NOT allowed origins\n                res.setHeader(\"Access-Control-Allow-Origin\", origin);\n            }\n            else {\n                throw new HttpError(400, `The origin ${origin} is not allowed`);\n            }\n            // Set Access-Control-Allow-Methods\n            // We know this header exists otherwise we couldn't have gotten here\n            let reqMethod = req.headers[\"access-control-request-method\"];\n            if (opts.methodsAllowed === \"*\") {\n                res.setHeader(\"Access-Control-Allow-Methods\", \"*\");\n            }\n            else if (opts.methodsAllowed.length === 0) {\n                // No methods being specified implies you should use the reqMethod\n                res.setHeader(\"Access-Control-Allow-Methods\", reqMethod);\n            }\n            else if (opts.methodsAllowed.includes(reqMethod)) {\n                res.setHeader(\"Access-Control-Allow-Methods\", opts.methodsAllowed.join(\",\"));\n            }\n            else {\n                throw new HttpError(400, `The access-control-request-method ${reqMethod} is not allowed`);\n            }\n            // Set Access-Control-Allow-Headers\n            if (req.headers[\"access-control-request-headers\"] !== undefined) {\n                if (opts.headersAllowed === \"*\") {\n                    res.setHeader(\"Access-Control-Allow-Headers\", \"*\");\n                }\n                else if (opts.headersAllowed.length) {\n                    // Let the browser handle this one\n                    res.setHeader(\"Access-Control-Allow-Headers\", opts.headersAllowed.join(\",\"));\n                }\n            }\n            // Set Access-Control-Expose-Headers\n            if (opts.headersExposed === \"*\") {\n                res.setHeader(\"Access-Control-Expose-Headers\", \"*\");\n            }\n            else if (opts.headersExposed.length) {\n                res.setHeader(\"Access-Control-Expose-Headers\", opts.headersExposed.join(\",\"));\n            }\n            // Access-Control-Max-Age\n            res.setHeader(\"Access-Control-Max-Age\", opts.maxAge);\n            // Access-Control-Allow-Credentials\n            if (opts.credentialsAllowed) {\n                res.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n            }\n            // Finish up here and do not continue down the middleware stack\n            res.statusCode = 204;\n            res.end();\n            return;\n        }\n        // If we are here this was not a preflight request\n        // The origin needs to be available or we shouldn't set the CORS headers\n        if (origin !== undefined) {\n            if (opts.credentialsAllowed) {\n                res.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n            }\n            if (opts.originsAllowed === \"*\" || opts.originsAllowed.includes(origin)) {\n                // Best to set this to the origin for this req and NOT allowed origins\n                res.setHeader(\"Access-Control-Allow-Origin\", origin);\n            }\n        }\n        // If we are here then continue down the middleware stack\n        await next();\n    };\n};\nexport const expressWrapper = (middleware) => {\n    // Because we need to pass in the express middleware we will return the\n    // middleware, i.e. you need to call this function\n    return async (req, res, next) => {\n        middleware(req, res, (e) => {\n            if (e !== undefined) {\n                throw e;\n            }\n        });\n        await next();\n    };\n};\nexport const csrfChecksMiddleware = (options = {}) => {\n    let opts = {\n        methods: options.methods ?? [\"POST\", \"PUT\", \"PATCH\", \"DELETE\"],\n        checkType: options.checkType ?? \"custom-req-header\",\n        header: options.header ?? \"x-csrf-header\",\n        cookie: options.cookie ?? \"x-csrf-cookie\",\n        secret: options.secret ?? \"\",\n        hashAlgo: options.hashAlgo ?? \"sha256\",\n        signatureSeparator: options.signatureSeparator ?? \".\",\n    };\n    // Need to make sure the header we check for is always lower case\n    opts.header = opts.header.toLowerCase();\n    // If this is \"naive-double-submit-cookie\" check the cookie is supplied\n    if (opts.checkType === \"signed-double-submit-cookie\") {\n        if (opts.secret.length === 0) {\n            throw new Error(\"Must set secret to use the 'signed-double-submit-cookie' CSRF check middleware\");\n        }\n    }\n    let custReqHeader = (req) => {\n        // The custom-req-header check just ensures that the specified\n        // header exists - the value is not important\n        if (req.headers[opts.header] === undefined) {\n            return false;\n        }\n        return true;\n    };\n    let naiveDoubleSubmitCookie = (req) => {\n        // The naive-double-submit-cookie check ensures the value of the\n        // specified cookie matches the value of the specified header\n        let cookie = req.getCookie(opts.cookie);\n        // Note if cookie doesn't exist value is null and if headers doesn't exist\n        // it is undefined\n        if (req.headers[opts.header] !== cookie) {\n            return false;\n        }\n        return true;\n    };\n    let signedDoubleSubmitCookie = (req) => {\n        // The signed-double-submit-cookie check ensures the value of the\n        // specified cookie matches the value of the specified header\n        let cookie = req.getCookie(opts.cookie);\n        // Note if cookie doesn't exist value is null and if headers doesn't exist\n        // it is undefined\n        if (req.headers[opts.header] !== cookie) {\n            return false;\n        }\n        let [token, hash] = cookie.split(opts.signatureSeparator);\n        if (hash !==\n            crypto.createHmac(opts.hashAlgo, opts.secret).update(token).digest(\"hex\")) {\n            return false;\n        }\n        return true;\n    };\n    // Because we need to pass in the options we will return the\n    // middleware, i.e. you need to call this function\n    return async (req, res, next) => {\n        // Make sure the method is one of the ones we want to check\n        if (opts.methods.includes(req.method)) {\n            let passed = false;\n            if (opts.checkType === \"custom-req-header\") {\n                passed = custReqHeader(req);\n            }\n            else if (opts.checkType === \"naive-double-submit-cookie\") {\n                passed = naiveDoubleSubmitCookie(req);\n            }\n            else {\n                passed = signedDoubleSubmitCookie(req);\n            }\n            // If the CSRF check failed then DO NOT continue down the stack\n            if (passed === false) {\n                res.statusCode = 401;\n                res.write(\"The request failed the CSRF check\");\n                return;\n            }\n        }\n        await next();\n    };\n};\nexport const getSecurityHeaders = (options = {}) => {\n    const opts = {\n        headers: options.headers ?? [],\n        useDefaultHeaders: options.useDefaultHeaders ?? true,\n    };\n    // These are the default headers to use\n    const defaultHeaders = [\n        {\n            name: \"Strict-Transport-Security\",\n            value: \"max-age=63072000; includeSubDomains; preload\",\n        },\n        { name: \"X-Content-Type-Options\", value: \"nosniff\" },\n        { name: \"X-Frame-Options\", value: \"DENY\" },\n        { name: \"Referrer-Policy\", value: \"strict-origin-when-cross-origin\" },\n        {\n            name: \"Permissions-Policy\",\n            value: \"geolocation=(), microphone=(), camera=(), payment=(), fullscreen=(self)\",\n        },\n        // { name: \"Cross-Origin-Embedder-Policy\", value: \"require-corp\" },\n        // { name: \"Origin-Agent-Cluster\", value: \"?1\" },\n        { name: \"Cross-Origin-Opener-Policy\", value: \"same-origin\" },\n        { name: \"Cross-Origin-Resource-Policy\", value: \"same-origin\" },\n        { name: \"X-XSS-Protection\", value: \"0\" },\n        { name: \"X-DNS-Prefetch-Control\", value: \"off\" },\n    ];\n    // These are the headers we will use\n    let securityHeaders = [];\n    // Set all of the user supplied headers first\n    for (const header of opts.headers) {\n        // Only add the header if the value is non-null\n        // This allows us remove a header from the defaults\n        if (header.value.length > 0) {\n            securityHeaders.push({ name: header.name, value: header.value });\n        }\n    }\n    // Check if we should use the default headers\n    if (opts.useDefaultHeaders) {\n        for (const header of defaultHeaders) {\n            // Check if the user has already supplied the header (use lower case\n            // to be safe)\n            let found = opts.headers.find((el) => el.name.toLowerCase() === header.name.toLowerCase());\n            if (found !== undefined) {\n                continue;\n            }\n            securityHeaders.push({ name: header.name, value: header.value });\n        }\n    }\n    return securityHeaders;\n};\nexport const securityHeadersMiddleware = (options = {}) => {\n    // Get the security headers\n    const securityHeaders = getSecurityHeaders(options);\n    // Because we need to pass in the options we will return the\n    // middleware, i.e. you need to call this function\n    return async (_, res, next) => {\n        // Set all of the sec headers\n        for (const header of securityHeaders) {\n            res.setHeader(header.name, header.value);\n        }\n        await next();\n    };\n};\nexport const dontCompressResponse = () => {\n    return async (req, _, next) => {\n        // Flag the response should not be compressed\n        req.compressResponse = false;\n        await next();\n    };\n};\nexport const setLatencyMetricName = (name) => {\n    return async (_, res, next) => {\n        // Set the latency metric name\n        res.latencyMetricName = name;\n        await next();\n    };\n};\nexport const injectReqHeaders = (headers) => {\n    return async (req, _, next) => {\n        // Inject the headers and then move on to the next middleware\n        for (const header of headers) {\n            req.headers[header.name] = header.value;\n        }\n        await next();\n    };\n};\n//# sourceMappingURL=middleware.js.map","// imports here\nimport { Logger } from \"../logger.js\";\nimport { contentTypes } from \"./content-types.js\";\nimport { getSecurityHeaders } from \"./middleware.js\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as crypto from \"node:crypto\";\nimport { pipeline } from \"node:stream/promises\";\nimport * as stream from \"node:stream\";\nimport * as zlib from \"node:zlib\";\n// Const here\nconst DefaultCspDirectives = {\n    \"default-src\": \"'self'\",\n    \"connect-src\": \"'self'\",\n    \"base-uri\": \"'self'\",\n    \"font-src\": \"'self' https: data:\",\n    \"form-action\": \"'self'\",\n    \"frame-ancestors\": \"'self'\",\n    \"img-src\": \"'self' data: https:\",\n    \"object-src\": \"'none'\",\n    \"script-src-attr\": \"'none'\",\n    \"style-src\": \"'self' https: 'unsafe-inline'\",\n    \"script-src\": \"'self'\",\n    \"upgrade-insecure-requests\": null,\n};\n// StaticFileServer class here\nexport class StaticFileServer {\n    _logger;\n    _filePath;\n    _immutableRegExp;\n    _defaultDirFile;\n    _defaultCharSet;\n    _stripHtmlExt;\n    _cspHeader;\n    _cspScriptSrcValue;\n    _inlineScriptHashes;\n    _staticFileMap;\n    _redirectUrlMap;\n    _securityHeaders;\n    constructor(loggerName, basePath, config) {\n        // Make sure there is no trailing slash at the end of the path\n        this._logger = new Logger(loggerName);\n        this._logger.startupMsg(\"Creating static file server ...\");\n        this._filePath = config.path.replace(/\\/*$/, \"\");\n        // Initialise the immutable regexs array\n        this._immutableRegExp = [];\n        // Check if user has provided an immutable config value\n        if (config.immutableRegExp !== undefined) {\n            for (const exp of config.immutableRegExp) {\n                // This is an array so iterate through each element and add it to the list\n                this._immutableRegExp.push(new RegExp(exp));\n            }\n        }\n        this._defaultDirFile = config.defaultDirFile ?? \"index.html\";\n        this._defaultCharSet = config.defaultCharSet ?? \"charset=utf-8\";\n        this._stripHtmlExt = config.stripHtmlExt ?? false;\n        this._inlineScriptHashes = config.cspHeader?.inlineScriptHashes ?? false;\n        // If the user set directives use them otherwise use the defaults\n        const directives = config.cspHeader?.directives ?? DefaultCspDirectives;\n        this._cspScriptSrcValue = \"\";\n        // Build up the default CSP header\n        this._cspHeader = \"\";\n        for (const directive in directives) {\n            const value = directives[directive];\n            // If we are caculating the inline script hashes then we should not\n            // add the script-src directive until we parse the file\n            if (this._inlineScriptHashes && directive === \"script-src\") {\n                // Let's take note of the value for later\n                this._cspScriptSrcValue = value;\n                continue;\n            }\n            // Check if the directive has a value or not (null means not!)\n            if (value === null) {\n                // No value means just the directive is given - rem the space at end\n                this._cspHeader += `${directive}; `;\n            }\n            else {\n                // Format is \"<directive> <value>; \" - rem the space at the end\n                this._cspHeader += `${directive} ${value}; `;\n            }\n        }\n        // If the CSP header is gonna be empty then make sure we dont set it\n        // NOTE: If we are generating hashes we need to not set the header to null\n        if (this._cspHeader.length === 0 &&\n            this._cspScriptSrcValue.length === 0 &&\n            !this._inlineScriptHashes) {\n            this._cspHeader = null;\n        }\n        this._staticFileMap = new Map();\n        this._redirectUrlMap = new Map();\n        // Get the standard sec headers to be used\n        // NOTE: We can not set a middleware on the static file server since it\n        // handles the requests itself\n        this._securityHeaders = getSecurityHeaders(config.secHeaderOptons);\n        this.getFiles();\n        // If there is a basePath. e.g. /base, and there is no index.html file\n        // then it is possible the index.html will be SSRed so we need to\n        // ensure there is a redirect from /base -> /base/\n        const strippedBasePath = basePath.replace(/\\/$/, \"\");\n        if (strippedBasePath.length > 0 &&\n            this._redirectUrlMap.get(strippedBasePath) === undefined) {\n            this._logger.trace(\"Adding redirect for base path from (%s) to (%s)\", strippedBasePath, basePath);\n            this._redirectUrlMap.set(strippedBasePath, basePath);\n        }\n    }\n    // Private methods here\n    getFiles(urlPath = \"/\") {\n        // Note: urlPath should always start and end in \"/\"\n        const dir = `${this._filePath}${urlPath}`;\n        let dirFiles = [];\n        // Get a list of files in the dir and check for errors\n        try {\n            dirFiles = fs.readdirSync(dir);\n        }\n        catch (e) {\n            this._logger.warn(\"No permissions to read from dir (%s)\", dir);\n        }\n        // Iterate through each file and check if it is a dir or not\n        for (const file of dirFiles) {\n            const fullPath = `${dir}${file}`;\n            const stats = fs.statSync(fullPath);\n            const url = `${urlPath}${file}`;\n            if (stats.isDirectory()) {\n                // Get the files in this dir\n                this.getFiles(`${url}/`);\n            }\n            else if (stats.isFile()) {\n                // Add the file to the list\n                this.addFile(fullPath, url, stats);\n            }\n        }\n    }\n    lookupType(file) {\n        // Look up the file extension to get content type - drop the leading '.'\n        const ext = path.extname(file).slice(1);\n        const type = contentTypes[ext];\n        if (type !== undefined) {\n            return `${type}; ${this._defaultCharSet}`;\n        }\n        // This is the default content type\n        return `text/plain; ${this._defaultCharSet}`;\n    }\n    isHtml(file) {\n        // Look up the file extension to get content type - drop the leading '.'\n        const ext = path.extname(file).slice(1);\n        const type = contentTypes[ext];\n        // Check if this file is of type HTML\n        if (type === \"text/html\") {\n            return true;\n        }\n        return false;\n    }\n    calcInlineScriptHashes(fileBuffer) {\n        // We need to convert the Buffer to a string we can search\n        const file = fileBuffer.toString(\"utf-8\");\n        // Search for any script tags\n        // NOTE: The group we have defined will be the code in the script tag\n        const scripts = file.matchAll(/<script>([\\s\\S]*?)<\\/script>/g);\n        // we shold have an array of matched scripts\n        let hashes = [];\n        for (const script of scripts) {\n            // The 2nd element of the array is the code in the script tag\n            const code = script[1];\n            // We need to hash is with SHA256 and then encoded it to base64\n            const hash = crypto.createHash(\"sha256\").update(code).digest(\"base64\");\n            hashes.push(`'sha256-${hash}'`);\n        }\n        return hashes;\n    }\n    stripMetaCsp(fileBuffer) {\n        // Convert the Buffer to a string then strip the meta CSP elements\n        let file = fileBuffer.toString(\"utf-8\");\n        let cleaned = file.replace(/<meta\\s+http-equiv=[\"']content-security-policy[\"'][^>]*>/gi, \"\");\n        // Convert the string back to a Buffer\n        return Buffer.from(cleaned, \"utf-8\");\n    }\n    addFile(fullPath, urlPath, stats) {\n        // Use a flag to decide if we add the file to the file map or not\n        let addFile = true;\n        try {\n            // Test if we can read the file\n            fs.accessSync(fullPath, fs.constants.R_OK);\n        }\n        catch (e) {\n            // There was an error which means we cant read the file so DO NOT add it\n            addFile = false;\n            this._logger.warn(\"No permissions to read file : (%s)\", fullPath);\n        }\n        if (addFile === false) {\n            // Can't add file so do nothing\n            return false;\n        }\n        // Add the file and it's details to the map\n        const modTimeMs = stats.mtime.getTime();\n        // Get rid of the ms from the time because we lose it when we convert to a\n        // UTC string which means we get a mismatch checking \"If-Modified-Since\"\n        const modTimeNoMs = Math.trunc(modTimeMs / 1000) * 1000;\n        let fileBuffer = fs.readFileSync(fullPath);\n        // We only add a CSP header for HTML file, so lets check that first\n        let cspHeader = null;\n        if (this.isHtml(fullPath)) {\n            // We need to add a CSP header so check if we are calulating hashes\n            if (this._inlineScriptHashes) {\n                // First calculate the hashes\n                const hashes = this.calcInlineScriptHashes(fileBuffer);\n                // Only append the script-src directive if there are hashes or we\n                // stored a script-src value earlier\n                if (hashes.length > 0 || this._cspScriptSrcValue.length > 0) {\n                    // Append the script-src directive with the value stored earlier\n                    cspHeader = `${this._cspHeader} script-src ${this._cspScriptSrcValue}`;\n                    // Append hashes separated by spaces to the CSP (script-src is at the end)\n                    // Don't forget the space before the hashes!\n                    cspHeader += \" \" + hashes.join(\" \");\n                    // Now strip the Meta CSP elements from the file we will serve\n                    // NOTE: Make sure to do this before we calculate the etag\n                    fileBuffer = this.stripMetaCsp(fileBuffer);\n                }\n            }\n            else {\n                cspHeader = this._cspHeader;\n            }\n        }\n        // Calculate the eTag for the file now that is wont change\n        const eTag = crypto.createHash(\"sha1\").update(fileBuffer).digest(\"hex\");\n        // Default immutable to false until we can prove it is\n        let immutable = false;\n        // Now check if the path matches one of the RegExps\n        for (const regexp of this._immutableRegExp) {\n            if (regexp.test(fullPath)) {\n                immutable = true;\n                break;\n            }\n        }\n        const fileDetails = {\n            contentType: this.lookupType(fullPath), // In case urlPath is a dir\n            size: stats.size,\n            lastModifiedNoMs: modTimeNoMs,\n            lastModifiedMs: modTimeMs,\n            lastModifiedUtcStr: new Date(modTimeNoMs).toUTCString(),\n            eTag,\n            fullPath,\n            immutable,\n            fileBuffer,\n            compressedBuffer: zlib.gzipSync(fileBuffer),\n            cspHeader,\n        };\n        this._staticFileMap.set(urlPath, fileDetails);\n        this._logger.trace(\"Added (%s) to file map. Details: contentType (%s), size (%s), lastModifiedMs(%s), eTag (%s), fullPath (%s), immutable (%j), cspHeader(%s)\", urlPath, fileDetails.contentType, fileDetails.size, fileDetails.lastModifiedMs, fileDetails.eTag, fileDetails.fullPath, fileDetails.immutable, fileDetails.cspHeader);\n        const HTML_EXT = \".html\";\n        // Check if we should strip .html from the file extension\n        if (this._stripHtmlExt && path.extname(urlPath) === HTML_EXT) {\n            // Add the file again but this time without the .html\n            const strippedUrl = urlPath.slice(0, HTML_EXT.length * -1);\n            this._logger.trace(\"Adding striped html file (%s)\", strippedUrl);\n            this._staticFileMap.set(strippedUrl, fileDetails);\n        }\n        // Check if this file is the default dir file\n        if (path.basename(urlPath) === this._defaultDirFile) {\n            const basePath = path.dirname(urlPath);\n            // If we at the root we want / to return /index.html\n            if (basePath === \"/\") {\n                this._logger.trace(\"Adding canonical path (%s)\", basePath);\n                this._staticFileMap.set(basePath, fileDetails);\n            }\n            else {\n                // We want a user to be able to request url like this:\n                //   /about/index.html -> this returns the HTML file\n                //   /about/ -> this returns the HTML file\n                //   /about -> this redirects to /about/\n                const canonicalPath = `${basePath}/`;\n                this._logger.trace(\"Adding canonical path (%s)\", canonicalPath);\n                this._staticFileMap.set(canonicalPath, fileDetails);\n                // Add a redirect for the basePath (/about -> /about/)\n                this._logger.trace(\"Adding redirect from (%s) to (%s)\", basePath, canonicalPath);\n                this._redirectUrlMap.set(basePath, canonicalPath);\n            }\n        }\n        return true;\n    }\n    // Public methods here\n    async handleReq(req, res) {\n        // We only handle GET and HEAD for static files\n        if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n            // Go no further, return with the req not handled\n            return;\n        }\n        this._logger.info(\"%s\", req.urlObj.pathname);\n        // Get the file details\n        const details = this._staticFileMap.get(req.urlObj.pathname);\n        if (details === undefined) {\n            // See if there are any redirects in place for this URL\n            const redirect = this._redirectUrlMap.get(req.urlObj.pathname);\n            if (redirect !== undefined) {\n                // Mark the req as being handled and redirect it\n                req.handled = true;\n                res.redirect(redirect);\n                res.end();\n                return;\n            }\n            // URL doesnt match nor has a redirect so return with req not handled\n            return;\n        }\n        // Mark req as handled before we do anything else\n        req.handled = true;\n        const cacheControl = details.immutable\n            ? \"max-age=31536000, immutable\"\n            : \"no-cache\";\n        // All headers need to be set, except content-length, for a 304\n        res.setHeader(\"Cache-Control\", cacheControl);\n        res.setHeader(\"Etag\", details.eTag);\n        res.setHeader(\"Last-Modified\", details.lastModifiedUtcStr);\n        res.setHeader(\"Date\", new Date().toUTCString());\n        res.setHeader(\"Content-Type\", details.contentType);\n        // Set all of the sec headers\n        for (const header of this._securityHeaders) {\n            res.setHeader(header.name, header.value);\n        }\n        // Check if we have a CSP header to add\n        if (details.cspHeader !== null) {\n            res.setHeader(\"Content-Security-Policy\", details.cspHeader);\n        }\n        // Don't forget to set the server-timing header\n        res.latencyMetricName = \"sf-srv\";\n        res.setServerTimingHeader();\n        // Check if any cache validators exist on the request - check etag first\n        if (req.headers[\"if-none-match\"] === details.eTag) {\n            res.statusCode = 304;\n            res.end();\n            return;\n        }\n        if (req.headers[\"if-modified-since\"] !== undefined) {\n            const modifiedDate = new Date(req.headers[\"if-modified-since\"]).getTime();\n            // NOTE: Check the times are the same, if they are different, even if\n            // details.lastModifiedNoMs is LESS than modifiedDate, it will still\n            // because that implies there is a potential issue and it is best to\n            // be safe\n            if (modifiedDate === details.lastModifiedNoMs) {\n                res.statusCode = 304;\n                res.end();\n                return;\n            }\n        }\n        let fileRead;\n        // Check out if the req will accept a gzip res\n        if (req.headers[\"accept-encoding\"]?.includes(\"gzip\") === true) {\n            // It does ...\n            fileRead = stream.Readable.from(details.compressedBuffer);\n            // Dont set the content-length. Use transfer-encoding instead\n            res.setHeader(\"Transfer-Encoding\", \"chunked\");\n            res.setHeader(\"Content-Encoding\", \"gzip\");\n        }\n        else {\n            // It does not ...\n            fileRead = stream.Readable.from(details.fileBuffer);\n            // Only set the length when we don't do a 304\n            res.setHeader(\"Content-Length\", details.size);\n        }\n        // If it's a HEAD then do not set the body\n        if (req.method === \"HEAD\") {\n            res.end();\n            return;\n        }\n        // NOTE: pipeline will close the res when it is finished\n        await pipeline(fileRead, res).catch((e) => {\n            // We can't do anything else here because either:\n            // - the stream is closed which means we can't send back an error\n            // - we have an internal error, but we have already started streaming\n            //   so we can't do anything\n            this._logger.trace(\"Error attempting to read (%s): (%s)\", fileRead, e);\n        });\n    }\n}\n//# sourceMappingURL=static-file-server.js.map","// SseServer class here\nexport class SseServer {\n    _res;\n    _lastEventId;\n    _pingSeqNum;\n    constructor(req, res, opts) {\n        let retryInterval = opts.retryInterval ?? 0;\n        let pingInterval = opts.pingInterval ?? 0;\n        let pingEventName = opts.pingEventName ?? \"ping\";\n        this._res = res;\n        this._lastEventId = req.headers[\"last-event-id\"];\n        this._pingSeqNum = 0;\n        // Set up the basics first\n        req.socket.setKeepAlive(true);\n        req.socket.setNoDelay(true);\n        req.socket.setTimeout(0);\n        res.setHeader(\"Content-Type\", \"text/event-stream\");\n        res.setHeader(\"Connection\", \"keep-alive\");\n        res.setHeader(\"Cache-Control\", \"no-cache\");\n        res.statusCode = 200;\n        // Check if we should set a new delay interval\n        if (retryInterval > 0) {\n            this.setRetry(retryInterval);\n        }\n        // Check if we should setup a heartbeat ping\n        if (pingInterval > 0) {\n            // Setup a timer to send the heartbeat\n            let interval = setInterval(() => {\n                this.sendData(this._pingSeqNum, { event: pingEventName });\n                // Don't forget to increment the ping seq num\n                this._pingSeqNum += 1;\n            }, pingInterval * 1000);\n            // Make sure to stop the timer if the connection closes\n            res.addListener(\"close\", () => {\n                clearInterval(interval);\n            });\n        }\n    }\n    get lastEventId() {\n        return this._lastEventId;\n    }\n    setRetry(delay) {\n        this._res.write(`retry: ${delay}\\n\\n`);\n    }\n    sendData(data, options) {\n        if (options?.event !== undefined) {\n            this._res.write(`event: ${options.event}\\n`);\n        }\n        if (options?.id !== undefined) {\n            this._res.write(`id: ${options.id}\\n`);\n        }\n        // Rem an array is an object!\n        if (typeof data === \"object\") {\n            this._res.write(`data: ${JSON.stringify(data)}\\n\\n`);\n        }\n        else {\n            this._res.write(`data: ${data}\\n\\n`);\n        }\n    }\n    close() {\n        this._res.end();\n    }\n}\n//# sourceMappingURL=sse-server.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PathError = exports.TokenData = void 0;\nexports.parse = parse;\nexports.compile = compile;\nexports.match = match;\nexports.pathToRegexp = pathToRegexp;\nexports.stringify = stringify;\nconst DEFAULT_DELIMITER = \"/\";\nconst NOOP_VALUE = (value) => value;\nconst ID_START = /^[$_\\p{ID_Start}]$/u;\nconst ID_CONTINUE = /^[$\\u200c\\u200d\\p{ID_Continue}]$/u;\nconst ID = /^[$_\\p{ID_Start}][$\\u200c\\u200d\\p{ID_Continue}]*$/u;\n/**\n * Escape text for stringify to path.\n */\nfunction escapeText(str) {\n    return str.replace(/[{}()\\[\\]+?!:*\\\\]/g, \"\\\\$&\");\n}\n/**\n * Escape a regular expression string.\n */\nfunction escape(str) {\n    return str.replace(/[.+*?^${}()[\\]|/\\\\]/g, \"\\\\$&\");\n}\n/**\n * Tokenized path instance.\n */\nclass TokenData {\n    constructor(tokens, originalPath) {\n        this.tokens = tokens;\n        this.originalPath = originalPath;\n    }\n}\nexports.TokenData = TokenData;\n/**\n * ParseError is thrown when there is an error processing the path.\n */\nclass PathError extends TypeError {\n    constructor(message, originalPath) {\n        let text = message;\n        if (originalPath)\n            text += `: ${originalPath}`;\n        text += `; visit https://git.new/pathToRegexpError for info`;\n        super(text);\n        this.originalPath = originalPath;\n    }\n}\nexports.PathError = PathError;\n/**\n * Parse a string for the raw tokens.\n */\nfunction parse(str, options = {}) {\n    const { encodePath = NOOP_VALUE } = options;\n    const chars = [...str];\n    let index = 0;\n    function consumeUntil(end) {\n        const output = [];\n        let path = \"\";\n        function writePath() {\n            if (!path)\n                return;\n            output.push({\n                type: \"text\",\n                value: encodePath(path),\n            });\n            path = \"\";\n        }\n        while (index < chars.length) {\n            const value = chars[index++];\n            if (value === end) {\n                writePath();\n                return output;\n            }\n            if (value === \"\\\\\") {\n                if (index === chars.length) {\n                    throw new PathError(`Unexpected end after \\\\ at index ${index}`, str);\n                }\n                path += chars[index++];\n                continue;\n            }\n            if (value === \":\" || value === \"*\") {\n                const type = value === \":\" ? \"param\" : \"wildcard\";\n                let name = \"\";\n                if (ID_START.test(chars[index])) {\n                    do {\n                        name += chars[index++];\n                    } while (ID_CONTINUE.test(chars[index]));\n                }\n                else if (chars[index] === '\"') {\n                    let quoteStart = index;\n                    while (index < chars.length) {\n                        if (chars[++index] === '\"') {\n                            index++;\n                            quoteStart = 0;\n                            break;\n                        }\n                        // Increment over escape characters.\n                        if (chars[index] === \"\\\\\")\n                            index++;\n                        name += chars[index];\n                    }\n                    if (quoteStart) {\n                        throw new PathError(`Unterminated quote at index ${quoteStart}`, str);\n                    }\n                }\n                if (!name) {\n                    throw new PathError(`Missing parameter name at index ${index}`, str);\n                }\n                writePath();\n                output.push({ type, name });\n                continue;\n            }\n            if (value === \"{\") {\n                writePath();\n                output.push({\n                    type: \"group\",\n                    tokens: consumeUntil(\"}\"),\n                });\n                continue;\n            }\n            if (value === \"}\" ||\n                value === \"(\" ||\n                value === \")\" ||\n                value === \"[\" ||\n                value === \"]\" ||\n                value === \"+\" ||\n                value === \"?\" ||\n                value === \"!\") {\n                throw new PathError(`Unexpected ${value} at index ${index - 1}`, str);\n            }\n            path += value;\n        }\n        if (end) {\n            throw new PathError(`Unexpected end at index ${index}, expected ${end}`, str);\n        }\n        writePath();\n        return output;\n    }\n    return new TokenData(consumeUntil(\"\"), str);\n}\n/**\n * Compile a string to a template function for the path.\n */\nfunction compile(path, options = {}) {\n    const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;\n    const data = typeof path === \"object\" ? path : parse(path, options);\n    const fn = tokensToFunction(data.tokens, delimiter, encode);\n    return function path(params = {}) {\n        const missing = [];\n        const path = fn(params, missing);\n        if (missing.length) {\n            throw new TypeError(`Missing parameters: ${missing.join(\", \")}`);\n        }\n        return path;\n    };\n}\nfunction tokensToFunction(tokens, delimiter, encode) {\n    const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode));\n    return (data, missing) => {\n        let result = \"\";\n        for (const encoder of encoders) {\n            result += encoder(data, missing);\n        }\n        return result;\n    };\n}\n/**\n * Convert a single token into a path building function.\n */\nfunction tokenToFunction(token, delimiter, encode) {\n    if (token.type === \"text\")\n        return () => token.value;\n    if (token.type === \"group\") {\n        const fn = tokensToFunction(token.tokens, delimiter, encode);\n        return (data, missing) => {\n            const len = missing.length;\n            const value = fn(data, missing);\n            if (missing.length === len)\n                return value;\n            missing.length = len; // Reset optional group.\n            return \"\";\n        };\n    }\n    const encodeValue = encode || NOOP_VALUE;\n    if (token.type === \"wildcard\" && encode !== false) {\n        return (data, missing) => {\n            const value = data[token.name];\n            if (value == null) {\n                missing.push(token.name);\n                return \"\";\n            }\n            if (!Array.isArray(value) || value.length === 0) {\n                throw new TypeError(`Expected \"${token.name}\" to be a non-empty array`);\n            }\n            let result = \"\";\n            for (let i = 0; i < value.length; i++) {\n                if (typeof value[i] !== \"string\") {\n                    throw new TypeError(`Expected \"${token.name}/${i}\" to be a string`);\n                }\n                if (i > 0)\n                    result += delimiter;\n                result += encodeValue(value[i]);\n            }\n            return result;\n        };\n    }\n    return (data, missing) => {\n        const value = data[token.name];\n        if (value == null) {\n            missing.push(token.name);\n            return \"\";\n        }\n        if (typeof value !== \"string\") {\n            throw new TypeError(`Expected \"${token.name}\" to be a string`);\n        }\n        return encodeValue(value);\n    };\n}\n/**\n * Transform a path into a match function.\n */\nfunction match(path, options = {}) {\n    const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;\n    const { regexp, keys } = pathToRegexp(path, options);\n    const decoders = keys.map((key) => {\n        if (decode === false)\n            return NOOP_VALUE;\n        if (key.type === \"param\")\n            return decode;\n        return (value) => value.split(delimiter).map(decode);\n    });\n    return function match(input) {\n        const m = regexp.exec(input);\n        if (!m)\n            return false;\n        const path = m[0];\n        const params = Object.create(null);\n        for (let i = 1; i < m.length; i++) {\n            if (m[i] === undefined)\n                continue;\n            const key = keys[i - 1];\n            const decoder = decoders[i - 1];\n            params[key.name] = decoder(m[i]);\n        }\n        return { path, params };\n    };\n}\n/**\n * Transform a path into a regular expression and capture keys.\n */\nfunction pathToRegexp(path, options = {}) {\n    const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true, } = options;\n    const keys = [];\n    let source = \"\";\n    let combinations = 0;\n    function process(path) {\n        if (Array.isArray(path)) {\n            for (const p of path)\n                process(p);\n            return;\n        }\n        const data = typeof path === \"object\" ? path : parse(path, options);\n        flatten(data.tokens, 0, [], (tokens) => {\n            if (combinations >= 256) {\n                throw new PathError(\"Too many path combinations\", data.originalPath);\n            }\n            if (combinations > 0)\n                source += \"|\";\n            source += toRegExpSource(tokens, delimiter, keys, data.originalPath);\n            combinations++;\n        });\n    }\n    process(path);\n    let pattern = `^(?:${source})`;\n    if (trailing)\n        pattern += \"(?:\" + escape(delimiter) + \"$)?\";\n    pattern += end ? \"$\" : \"(?=\" + escape(delimiter) + \"|$)\";\n    return { regexp: new RegExp(pattern, sensitive ? \"\" : \"i\"), keys };\n}\n/**\n * Generate a flat list of sequence tokens from the given tokens.\n */\nfunction flatten(tokens, index, result, callback) {\n    while (index < tokens.length) {\n        const token = tokens[index++];\n        if (token.type === \"group\") {\n            const len = result.length;\n            flatten(token.tokens, 0, result, (seq) => flatten(tokens, index, seq, callback));\n            result.length = len;\n            continue;\n        }\n        result.push(token);\n    }\n    callback(result);\n}\n/**\n * Transform a flat sequence of tokens into a regular expression.\n */\nfunction toRegExpSource(tokens, delimiter, keys, originalPath) {\n    let result = \"\";\n    let backtrack = \"\";\n    let wildcardBacktrack = \"\";\n    let prevCaptureType = 0;\n    let hasSegmentCapture = 0;\n    let index = 0;\n    function hasInSegment(index, type) {\n        while (index < tokens.length) {\n            const token = tokens[index++];\n            if (token.type === type)\n                return true;\n            if (token.type === \"text\") {\n                if (token.value.includes(delimiter))\n                    break;\n            }\n        }\n        return false;\n    }\n    function peekText(index) {\n        let result = \"\";\n        while (index < tokens.length) {\n            const token = tokens[index++];\n            if (token.type !== \"text\")\n                break;\n            result += token.value;\n        }\n        return result;\n    }\n    while (index < tokens.length) {\n        const token = tokens[index++];\n        if (token.type === \"text\") {\n            result += escape(token.value);\n            backtrack += token.value;\n            if (prevCaptureType === 2)\n                wildcardBacktrack += token.value;\n            if (token.value.includes(delimiter))\n                hasSegmentCapture = 0;\n            continue;\n        }\n        if (token.type === \"param\" || token.type === \"wildcard\") {\n            if (prevCaptureType && !backtrack) {\n                throw new PathError(`Missing text before \"${token.name}\" ${token.type}`, originalPath);\n            }\n            if (token.type === \"param\") {\n                result +=\n                    hasSegmentCapture & 2 // Seen wildcard in segment.\n                        ? `(${negate(delimiter, backtrack)}+)`\n                        : hasInSegment(index, \"wildcard\") // See wildcard later in segment.\n                            ? `(${negate(delimiter, peekText(index))}+)`\n                            : hasSegmentCapture & 1 // Seen parameter in segment.\n                                ? `(${negate(delimiter, backtrack)}+|${escape(backtrack)})`\n                                : `(${negate(delimiter, \"\")}+)`;\n                hasSegmentCapture |= prevCaptureType = 1;\n            }\n            else {\n                result +=\n                    hasSegmentCapture & 2 // Seen wildcard in segment.\n                        ? `(${negate(backtrack, \"\")}+)`\n                        : wildcardBacktrack // No capture in segment, seen wildcard in path.\n                            ? `(${negate(wildcardBacktrack, \"\")}+|${negate(delimiter, \"\")}+)`\n                            : `([^]+)`;\n                wildcardBacktrack = \"\";\n                hasSegmentCapture |= prevCaptureType = 2;\n            }\n            keys.push(token);\n            backtrack = \"\";\n            continue;\n        }\n        throw new TypeError(`Unknown token type: ${token.type}`);\n    }\n    return result;\n}\n/**\n * Block backtracking on previous text/delimiter.\n */\nfunction negate(a, b) {\n    if (b.length > a.length)\n        return negate(b, a); // Longest string first.\n    if (a === b)\n        b = \"\"; // Cleaner regex strings, no duplication.\n    if (b.length > 1)\n        return `(?:(?!${escape(a)}|${escape(b)})[^])`;\n    if (a.length > 1)\n        return `(?:(?!${escape(a)})[^${escape(b)}])`;\n    return `[^${escape(a + b)}]`;\n}\n/**\n * Stringify an array of tokens into a path string.\n */\nfunction stringifyTokens(tokens, index) {\n    let value = \"\";\n    while (index < tokens.length) {\n        const token = tokens[index++];\n        if (token.type === \"text\") {\n            value += escapeText(token.value);\n            continue;\n        }\n        if (token.type === \"group\") {\n            value += \"{\" + stringifyTokens(token.tokens, 0) + \"}\";\n            continue;\n        }\n        if (token.type === \"param\") {\n            value += \":\" + stringifyName(token.name, tokens[index]);\n            continue;\n        }\n        if (token.type === \"wildcard\") {\n            value += \"*\" + stringifyName(token.name, tokens[index]);\n            continue;\n        }\n        throw new TypeError(`Unknown token type: ${token.type}`);\n    }\n    return value;\n}\n/**\n * Stringify token data into a path string.\n */\nfunction stringify(data) {\n    return stringifyTokens(data.tokens, 0);\n}\n/**\n * Stringify a parameter name, escaping when it cannot be emitted directly.\n */\nfunction stringifyName(name, next) {\n    if (!ID.test(name))\n        return JSON.stringify(name);\n    if ((next === null || next === void 0 ? void 0 : next.type) === \"text\" && ID_CONTINUE.test(next.value[0])) {\n        return JSON.stringify(name);\n    }\n    return name;\n}\n//# sourceMappingURL=index.js.map","// imports here\nimport { Logger } from \"../logger.js\";\nimport { SseServer } from \"./sse-server.js\";\nimport { HttpError, HttpRedirect, WebRequest, } from \"./req-res.js\";\nimport { bodyMiddleware, jsonMiddleware, corsMiddleware, expressWrapper, csrfChecksMiddleware, securityHeadersMiddleware, dontCompressResponse, setLatencyMetricName, injectReqHeaders, } from \"./middleware.js\";\nimport { contentTypes } from \"./content-types.js\";\nimport * as PathToRegEx from \"path-to-regexp\";\nimport * as path from \"node:path\";\nimport * as crypto from \"node:crypto\";\nimport * as zlib from \"node:zlib\";\nimport { pipeline } from \"node:stream/promises\";\nimport * as stream from \"node:stream\";\nimport * as streams from \"node:stream/promises\";\n// Router class here\nexport class Router {\n    _httpServerBasePath;\n    _routerBasePath;\n    _minCompressionSize;\n    _defaultCharSet;\n    _logger;\n    _methodListMap;\n    _defaultMiddlewareList;\n    constructor(httpServerBasePath, routerBasePath, config = {}) {\n        // Make sure to the base paths have a trailing \"/\"\n        this._httpServerBasePath = httpServerBasePath.replace(/\\/*$/, \"/\");\n        this._routerBasePath = routerBasePath.replace(/\\/*$/, \"/\");\n        this._minCompressionSize = config.minCompressionSize ?? 1024;\n        this._defaultCharSet = config.defaultCharSet ?? \"charset=utf-8\";\n        this._logger = new Logger(`Router (${this._routerBasePath})`);\n        // Initialise the method list manually\n        this._methodListMap = {\n            ALL: [],\n            GET: [],\n            DELETE: [],\n            PATCH: [],\n            POST: [],\n            PUT: [],\n            OPTIONS: [],\n            HEAD: [],\n        };\n        this._defaultMiddlewareList = [];\n    }\n    // Getter methods here\n    get routerBasePath() {\n        return this._routerBasePath;\n    }\n    get fullBasePath() {\n        return `${this._httpServerBasePath.replace(/\\/*$/, \"\")}${this._routerBasePath}`;\n    }\n    // Private methods here\n    searchMethodElements(req, list) {\n        let matchedEl = null;\n        // Next see if we have a registered callback for the HTTP req path\n        for (let el of list) {\n            let routerMatch = el.match(req.urlObj);\n            // If result is false that means we found nothing\n            if (routerMatch === false) {\n                continue;\n            }\n            // If we are here we found the callback\n            matchedEl = el;\n            // Don't forget to set the matchedInfo and params properties\n            req.matchedInfo = routerMatch.matchedInfo;\n            req.params = routerMatch.params;\n            // Stop looking\n            break;\n        }\n        return matchedEl;\n    }\n    findEndpoint(req) {\n        let method = req.method;\n        // Check for a CORS Preflight request - yes there is middleware for this\n        // but this has to be checked here because we will not have a registered\n        // endpoint under OPTIONS\n        if (req.method === \"OPTIONS\" &&\n            req.headers[\"access-control-request-method\"] !== undefined) {\n            // Get the method this preflight request is checking for and use that\n            // to see there is an endpoint registered for it\n            method = req.headers[\"access-control-request-method\"];\n        }\n        // If the method is HEAD then check the GET method map\n        if (req.method === \"HEAD\") {\n            method = \"GET\";\n        }\n        // Make sure we don't have some odd method we never heard about\n        let list = this._methodListMap[method];\n        if (list === undefined) {\n            return null;\n        }\n        // First search for the routes in the req method list\n        let matchedEl = this.searchMethodElements(req, list);\n        if (matchedEl === null) {\n            // If we are here that means we did not find a callback for the req path\n            // and we should check for a fallback callback\n            matchedEl = this.searchMethodElements(req, this._methodListMap[\"ALL\"]);\n        }\n        return matchedEl;\n    }\n    async callMiddleware(req, res, el, middlewareStack) {\n        // Check if there handlers still be be called on the stack\n        if (middlewareStack.length) {\n            // Call the top handler and pass the rest of the handlers after it\n            await middlewareStack[0](req, res, async () => {\n                await this.callMiddleware(req, res, el, middlewareStack.slice(1));\n            });\n        }\n        else {\n            // No more handlers but make sure is NOT an unhandled preflight check.\n            // If it is then we DO NOT want to call the endpoint handler\n            if (req.method !== \"OPTIONS\") {\n                await this.callEndpoint(req, res, el);\n            }\n        }\n    }\n    async callEndpoint(req, res, el) {\n        // Check if this should be a server sent event endpoint\n        if (el.sseServerOptions !== undefined) {\n            req.sseServer = new SseServer(req, res, el.sseServerOptions);\n        }\n        // The callback can be async or not so check for it\n        if (el.callback.constructor.name === \"AsyncFunction\") {\n            // This is async so use await\n            await el.callback(req, res);\n        }\n        else {\n            // This is a synchronous call\n            el.callback(req, res);\n        }\n    }\n    hasNoBody(res) {\n        // Check if the json prop has been set\n        // NOTE: If the user sets the json AND body prop the json prop will be used\n        if (res.json !== undefined) {\n            // Convert the json to a string and assign it as the body\n            res.body = JSON.stringify(res.json);\n            // Set correct content-type for a json payload\n            res.setHeader(\"Content-Type\", \"application/json; charset=utf-8\");\n            return false;\n        }\n        // Check if the body has NOT been set\n        if (res.body === undefined) {\n            // There is no body which means we should set the statusCode to 204.\n            // However, the user may have set it and if they have then leave it alone\n            // We can tell if the user has NOT changed it because the statusCode will\n            // be the default value 200\n            if (res.statusCode === 200) {\n                // Statuscode has not been changed so set it to the correct value of 204\n                res.statusCode = 204;\n            }\n            else {\n                // Explcitily set the content-length to be 0, because there is no body\n                res.setHeader(\"Content-Length\", 0);\n            }\n            // Don't forget to set the server-timing header\n            res.setServerTimingHeader();\n            return true;\n        }\n        // We know there is a body so make sure the body is a string or a Buffer\n        if (Buffer.isBuffer(res.body) || typeof res.body === \"string\") {\n            // Check if the content-type has NOT been set\n            if (!res.hasHeader(\"Content-Type\")) {\n                // It hasnt so set the default type\n                res.setHeader(\"Content-Type\", \"text/plain; charset=utf-8\");\n            }\n            return false;\n        }\n        // If we are here the body has been set but it is not valid\n        this._logger.error(\"(%s) response body for (%s) is not of type string or Buffer\", res.enhancedReq.method, res.enhancedReq.urlObj.pathname);\n        res.statusCode = 500;\n        return true;\n    }\n    bodyNotModified(res) {\n        // If we are here the body exists, so to keep the compiler happy do this\n        const body = res.body;\n        // Calcuate the etag\n        const etag = crypto.createHash(\"sha1\").update(body).digest(\"hex\");\n        // Do not set content-length header for a 304\n        res.setHeader(\"Cache-Control\", \"no-cache\");\n        res.setHeader(\"Etag\", etag);\n        // Check for cache validators on the request and see if the etag changed\n        if (res.enhancedReq.headers[\"if-none-match\"] === etag) {\n            // Don't forget to set the server-timing header\n            res.setServerTimingHeader();\n            res.statusCode = 304;\n            return true;\n        }\n        // If we are here the body was modified\n        return false;\n    }\n    lookupType(file) {\n        // Look up the file extension to get content type - drop the leading '.'\n        const ext = path.extname(file).slice(1);\n        const type = contentTypes[ext];\n        if (type !== undefined) {\n            return `${type}; ${this._defaultCharSet}`;\n        }\n        // This is the default content type\n        return `text/plain; ${this._defaultCharSet}`;\n    }\n    async streamRes(res) {\n        const streamRes = res.streamRes;\n        // Check if this is a file\n        if (streamRes.fileName !== undefined) {\n            // Set headers that will allow the fiel to be downloaded by the browser\n            res.setHeader(\"Content-Type\", this.lookupType(streamRes.fileName));\n            res.setHeader(\"Content-Disposition\", `attachment; filename=\"${streamRes.fileName}\"`);\n        }\n        // Do not worry about the content-length, always use chunked encoding\n        res.setHeader(\"Transfer-Encoding\", \"chunked\");\n        // Check if the req will accept a gzip res AND\n        // compression is turned on for this request\n        if (res.enhancedReq.headers[\"accept-encoding\"]?.includes(\"gzip\") === true &&\n            res.enhancedReq.compressResponse) {\n            // Set the correct headers for a gzipped body\n            res.setHeader(\"Content-Encoding\", \"gzip\");\n            // Only send the body if this is NOT a HEAD request\n            if (res.enhancedReq.method !== \"HEAD\") {\n                await pipeline(streamRes.body, zlib.createGzip(), res).catch((e) => {\n                    this._logger.error(\"Error during streaming: (%s)\", e);\n                });\n            }\n        }\n        else {\n            // Only send the body if this is NOT a HEAD request\n            if (res.enhancedReq.method !== \"HEAD\") {\n                await pipeline(streamRes.body, res).catch((e) => {\n                    this._logger.error(\"Error during streaming: (%s)\", e);\n                });\n            }\n        }\n    }\n    async addResponseBody(req, res, etag) {\n        // Check if the response should be streamed\n        if (res.streamRes !== undefined) {\n            await this.streamRes(res);\n            return;\n        }\n        // Check if there is no body to send\n        if (this.hasNoBody(res)) {\n            // There is no body so no more to do here\n            return;\n        }\n        // If we are here the body exists, so to keep the compiler happy do this\n        const body = res.body;\n        // Check if we are using etags res AND if the body has NOT changed\n        if (etag && this.bodyNotModified(res)) {\n            // Body is the same so no more to do here\n            return;\n        }\n        // Don't forget to set the server-timing header\n        res.setServerTimingHeader();\n        // Check if the req will accept a gzip res AND\n        // the body is large enough AND\n        // compression is turned on for this request\n        if (req.headers[\"accept-encoding\"]?.includes(\"gzip\") === true &&\n            Buffer.byteLength(body) >= this._minCompressionSize &&\n            req.compressResponse) {\n            // Set the correct headers for a gzipped body\n            res.setHeader(\"Transfer-Encoding\", \"chunked\");\n            res.setHeader(\"Content-Encoding\", \"gzip\");\n            // Only send the body if this is NOT a HEAD request\n            if (req.method !== \"HEAD\") {\n                const passThrough = new stream.PassThrough();\n                passThrough.end(body);\n                // NOTE1: pipeline will close the res when it is finished\n                await pipeline(passThrough, zlib.createGzip(), res).catch((e) => {\n                    // We can't do anything else here because either:\n                    // - the stream is closed which means we can't send back an error\n                    // - we have an internal error, but we have already started streaming\n                    //   so we can't do anything\n                    this._logger.error(\"addResponse had this error during streaming: (%s)\", e);\n                });\n            }\n        }\n        else {\n            // Set the corect content-length\n            res.setHeader(\"Content-Length\", Buffer.byteLength(body));\n            // Only send the body if this is NOT a HEAD request\n            if (req.method !== \"HEAD\") {\n                res.write(body);\n            }\n        }\n    }\n    // Public methods here\n    async handleReq(req, res) {\n        // See if this request matches a registered endpoint\n        let matchedEl = this.findEndpoint(req);\n        if (matchedEl === null) {\n            // Couldn't find a match so return with the req not been handled\n            return;\n        }\n        // We found it so mark this as handled before we do anything else\n        req.handled = true;\n        await this.callMiddleware(req, res, matchedEl, matchedEl.middlewareList).catch((e) => {\n            let message;\n            // If a redirect call res.redirect() and get out of the error handler\n            if (e instanceof HttpRedirect) {\n                res.redirect(e.location, e.statusCode, e.message);\n                return;\n            }\n            // If it is a HttpError assume the error message has already been logged\n            if (e instanceof HttpError) {\n                res.statusCode = e.status;\n                message = e.message;\n            }\n            else {\n                // We don't know what this is so log it and make sure to return a 500\n                this._logger.error(\"Unknown error happened while handling URL (%s) - (%s)\", req.urlObj.pathname, e);\n                res.statusCode = 500;\n                message = \"Unknown error happened\";\n            }\n            // Check if res.write() has NOT been called yet\n            if (!res.headersSent) {\n                res.setHeader(\"Content-Type\", \"text/plain; charset=utf-8\");\n                res.setHeader(\"Content-Length\", Buffer.byteLength(message));\n                res.write(message);\n            }\n            // Check if the res.end() has NOT been called yet\n            if (!res.writableEnded) {\n                // End the response now\n                res.end();\n            }\n        });\n        // If this is an SSE server dont call addResponse or res.end()\n        if (req.sseServer !== undefined) {\n            return;\n        }\n        // Check if res.write() has NOT been called yet\n        if (!res.headersSent) {\n            // Check if there is a body to add\n            await this.addResponseBody(req, res, matchedEl.etag);\n        }\n        // Check if the res.end() has NOT been called yet\n        if (!res.writableEnded) {\n            // End the response now\n            res.end();\n        }\n    }\n    static pathToRegexMatcher(path) {\n        // Create the matching function\n        let match = PathToRegEx.match(path, {\n            decode: decodeURIComponent,\n        });\n        return (url) => {\n            let result = match(url.pathname);\n            if (result === false) {\n                return false;\n            }\n            return {\n                params: result.params,\n                matchedInfo: result,\n            };\n        };\n    }\n    static matchAllMatcher(_) {\n        // This will match everything\n        return (url) => {\n            return {\n                matchedInfo: url.pathname,\n                params: {}, // We dont know that the params are so just ignore them\n            };\n        };\n    }\n    use(middleware) {\n        this._defaultMiddlewareList.push(middleware);\n        return this;\n    }\n    getSsrEndpoint(render) {\n        return async (req, res) => {\n            // Measure the time it took to render the page so capture when we started\n            const startedAt = performance.now();\n            // Create a webRequest object to pass to the render\n            const webReq = new WebRequest(req, res);\n            // Now render the page\n            const webRes = await render(webReq);\n            // Now figure out how long it took to render and store it in the metrics\n            const ssrLatency = Math.round(performance.now() - startedAt);\n            res.addServerTimingMetric(\"ssr\", ssrLatency);\n            // The default status code is always 200. If webRes.status is NOT 200\n            // then it was set by the user so we need to use that status code\n            if (webRes.status !== 200) {\n                res.statusCode = webRes.status;\n            }\n            // Check if the user set any headers on webRes\n            const SET_COOKIE = \"set-cookie\";\n            for (let [name, value] of webRes.headers.entries()) {\n                // Dont bother setting set-cookie headers, we will do that later\n                if (name === SET_COOKIE) {\n                    continue;\n                }\n                res.setHeader(name, value);\n            }\n            // Check if there were any set-cookie headers and if so set them as an array\n            const cookies = webRes.headers.getSetCookie();\n            if (cookies.length > 0) {\n                res.setHeader(SET_COOKIE, cookies);\n            }\n            // This is our last chance to set headers so set the server timings header\n            res.setServerTimingHeader();\n            // Now check if there is a body in the webRes\n            if (webRes.body !== null) {\n                // NOTE1: pipeline will close the res when it is finished\n                // NOTE2: You need to cast as ReadableStream<Uint8Array> or TS will complain\n                await streams\n                    .pipeline(webRes.body, res)\n                    .catch((e) => {\n                    // We can't do anything else here because either:\n                    // - the stream is closed which means we can't send back an error\n                    // - we have an internal error, but we have already started streaming\n                    //   so we can't do anything\n                    this._logger.warn(\"ssrEndpoint had this error during rendering: (%s)\", e);\n                });\n            }\n        };\n    }\n    endpoint(method, path, callback, endpointOptions = {}) {\n        let options = {\n            useDefaultMiddlewares: true,\n            etag: false,\n            generateMatcher: Router.pathToRegexMatcher,\n            ...endpointOptions,\n        };\n        // Make sure we have the middlewares requested\n        let middlewareList = [];\n        // Check if the user wants the default middlewares\n        if (options.useDefaultMiddlewares) {\n            // ... stick the default middlewares in first\n            // NOTE: Any middleware added to the defaults after this endpoint is\n            // added will not be used by this endpoint\n            middlewareList = [...this._defaultMiddlewareList];\n        }\n        if (options.middlewareList !== undefined) {\n            middlewareList = [...middlewareList, ...options.middlewareList];\n        }\n        // Remove traiing \"/\" to make things easier for later\n        const strippedBase = this._httpServerBasePath.replace(/\\/*$/, \"\");\n        // Get the full path - check if the path already includes the basePath\n        let fullPath = path.startsWith(this._routerBasePath)\n            ? `${strippedBase}${path}`\n            : `${strippedBase}${this._routerBasePath.replace(/\\/*$/, \"\")}${path}`;\n        // Finally add it to the list of callbacks\n        this._methodListMap[method].push({\n            match: options.generateMatcher(fullPath),\n            callback,\n            middlewareList,\n            sseServerOptions: options.sseServerOptions,\n            etag: options.etag,\n        });\n        this._logger.startupMsg(\"Added %s endpoint for path (%s)\", method.toUpperCase(), fullPath);\n        return this;\n    }\n    // endpoint helper methods here\n    del(path, callback, endpointOptions = {}) {\n        this.endpoint(\"DELETE\", path, callback, endpointOptions);\n        return this;\n    }\n    get(path, callback, endpointOptions = {}) {\n        this.endpoint(\"GET\", path, callback, endpointOptions);\n        return this;\n    }\n    patch(path, callback, endpointOptions = {}) {\n        this.endpoint(\"PATCH\", path, callback, endpointOptions);\n        return this;\n    }\n    post(path, callback, endpointOptions = {}) {\n        this.endpoint(\"POST\", path, callback, endpointOptions);\n        return this;\n    }\n    put(path, callback, endpointOptions = {}) {\n        this.endpoint(\"PUT\", path, callback, endpointOptions);\n        return this;\n    }\n    all(path, callback, endpointOptions = {}) {\n        this.endpoint(\"ALL\", path, callback, endpointOptions);\n        return this;\n    }\n    route(path) {\n        let server = this;\n        return {\n            get(callback, endpointOptions = {}) {\n                server.endpoint(\"GET\", path, callback, endpointOptions);\n                return server.route(path);\n            },\n            patch(callback, endpointOptions = {}) {\n                server.endpoint(\"PATCH\", path, callback, endpointOptions);\n                return server.route(path);\n            },\n            post(callback, endpointOptions = {}) {\n                server.endpoint(\"POST\", path, callback, endpointOptions);\n                return server.route(path);\n            },\n            put(callback, endpointOptions = {}) {\n                server.endpoint(\"PUT\", path, callback, endpointOptions);\n                return server.route(path);\n            },\n            del(callback, endpointOptions = {}) {\n                server.endpoint(\"DELETE\", path, callback, endpointOptions);\n                return server.route(path);\n            },\n            all(callback, endpointOptions = {}) {\n                server.endpoint(\"ALL\", path, callback, endpointOptions);\n                return server.route(path);\n            },\n        };\n    }\n    // Middleware methods here\n    static body(options = {}) {\n        // Rem we have to call bodyMiddleware since it returns the middleware\n        return bodyMiddleware(options);\n    }\n    static json() {\n        return jsonMiddleware();\n    }\n    static cors(options = {}) {\n        return corsMiddleware(options);\n    }\n    static csrf(options = {}) {\n        return csrfChecksMiddleware(options);\n    }\n    static secHeaders(options) {\n        return securityHeadersMiddleware(options);\n    }\n    static expressWrapper(options) {\n        return expressWrapper(options);\n    }\n    static dontCompressResponse() {\n        return dontCompressResponse();\n    }\n    static setLatencyMetricName(name) {\n        return setLatencyMetricName(name);\n    }\n    static injectReqHeaders(headers) {\n        return injectReqHeaders(headers);\n    }\n}\n//# sourceMappingURL=router.js.map","// imports here\nimport { Logger } from \"../logger.js\";\nimport { enhanceIncomingMessage, enhanceServerResponse, } from \"./req-res.js\";\nimport { StaticFileServer, } from \"./static-file-server.js\";\nimport { Router, } from \"./router.js\";\nexport { Router, } from \"./router.js\";\nimport * as http from \"node:http\";\nimport * as https from \"node:https\";\nimport * as os from \"node:os\";\nimport * as fs from \"node:fs\";\nexport class HttpConfigError {\n    message;\n    constructor(message) {\n        this.message = message;\n    }\n}\n// HttpServer class here\nexport class HttpServer {\n    _logger;\n    _socketMap;\n    _socketId;\n    _networkInterface;\n    _networkPort;\n    _networkIp;\n    _listeningOn;\n    _name;\n    _healthcheckCallbacks;\n    _httpKeepAliveTimeout;\n    _httpHeaderTimeout;\n    _basePath;\n    _healthCheckPath;\n    _healthCheckGoodResCode;\n    _healthCheckBadResCode;\n    _enableHttps;\n    _keyFile;\n    _certFile;\n    _apiRouterList;\n    _defaultApiRouter;\n    _ssrRouter;\n    _staticFileServer;\n    _server;\n    constructor(config) {\n        this._networkInterface = config.networkInterface ?? null;\n        this._networkPort = config.networkPort ?? null;\n        if (this._networkInterface === null || this._networkPort === null) {\n            this._name = \"not-listening\";\n        }\n        else {\n            this._name = `${config.networkInterface}-${config.networkPort}`;\n        }\n        this._logger = new Logger(`HttpServer-${this._name}`);\n        this._httpKeepAliveTimeout = config.keepAliveTimeout ?? 65000;\n        this._httpHeaderTimeout = config.headerTimeout ?? 66000;\n        const basePath = config.basePath ?? \"/\";\n        // Make sure the basePath has a leading and trailing slash\n        this._basePath = basePath.replace(/^\\/*/, \"/\").replace(/\\/*$/, \"/\");\n        this._logger.startupMsg(\"Base Path is (%s)\", this._basePath);\n        this._healthCheckPath = config.healthcheckPath ?? \"/healthcheck\";\n        this._healthCheckGoodResCode = 200;\n        this._healthCheckBadResCode = 503;\n        this._enableHttps = config.enableHttps ?? false;\n        this._socketMap = new Map();\n        this._socketId = 0;\n        this._networkIp = null;\n        this._listeningOn = \"\";\n        this._healthcheckCallbacks = [];\n        this._apiRouterList = [];\n        // Create the default router AFTER you initialise the _routerList\n        this._defaultApiRouter = this.addRouter(config.defaultRouterBasePath ?? \"/api\");\n        // Now we need to add the endpoint for healthchecks\n        this._defaultApiRouter.get(this._healthCheckPath, async (req, res) => this.healthcheckCallback(req, res), { useDefaultMiddlewares: false });\n        if (this._enableHttps) {\n            this._keyFile = config.httpsKeyFile;\n            this._certFile = config.httpsCertFile;\n        }\n        // Check if we are going to add a SSR endpoint\n        if (config.ssrServer === undefined ||\n            config.ssrServer?.render === undefined ||\n            config.ssrServer?.matcher === undefined) {\n            // We are not enabling SSR so mark the router as not existing\n            this._ssrRouter = null;\n            this._logger.startupMsg(\"SSR router NOT created\");\n        }\n        else {\n            // Make sure to NOT add the SSR Router to the\n            // _apiRouterList since it doesnt have a fixed base path\n            this._ssrRouter = new Router(\"/\", \"/\");\n            const ssrEndpoint = this._ssrRouter.getSsrEndpoint(config.ssrServer.render);\n            // Build up the middleware list\n            let middlewareList = [\n                Router.setLatencyMetricName(config.ssrServer.adapterName),\n                Router.secHeaders(config.ssrServer.secHeaderOptons ?? {}),\n            ];\n            // Check if the user wants to inject any headers into the SSR reqs\n            const reqHeaders = config.ssrServer.reqHeaders;\n            if (reqHeaders !== undefined && reqHeaders.length > 0) {\n                middlewareList.push(Router.injectReqHeaders(reqHeaders));\n            }\n            // Add the main SSR route - NOTE: the path is not important since the\n            // matcher will decide if there is a matching page\n            this._ssrRouter.all(\"/\", ssrEndpoint, {\n                generateMatcher: config.ssrServer.matcher,\n                etag: true,\n                middlewareList,\n            });\n            this._logger.startupMsg(\"SSR router created\");\n        }\n        if (config.staticFileServer !== undefined) {\n            this._staticFileServer = new StaticFileServer(`HttpServer-${this._name}/StaticFile`, this._basePath, config.staticFileServer);\n        }\n    }\n    // Getter and setter methods here\n    get networkIp() {\n        return this._networkIp;\n    }\n    get networkPort() {\n        return this._networkPort;\n    }\n    get httpsEnabled() {\n        return this._enableHttps;\n    }\n    get name() {\n        return this._name;\n    }\n    get basePath() {\n        return this._basePath;\n    }\n    get server() {\n        return this._server === undefined ? null : this._server;\n    }\n    get ssrRouter() {\n        return this._ssrRouter;\n    }\n    get reqHandler() {\n        return this.handleReq;\n    }\n    set healthCheckGoodResCode(code) {\n        this._healthCheckGoodResCode = code;\n    }\n    set healthCheckBadResCode(code) {\n        this._healthCheckBadResCode = code;\n    }\n    // Private methods here\n    findInterfaceIp(networkInterface) {\n        const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3}$/;\n        if (ipv4Regex.test(networkInterface)) {\n            this._logger.startupMsg(`Using provided IP (${networkInterface})`);\n            return networkInterface;\n        }\n        this._logger.startupMsg(`Finding IP for interface (${networkInterface})`);\n        let ifaces = os.networkInterfaces();\n        this._logger.startupMsg(\"Interfaces on host: %j\", ifaces);\n        if (ifaces[networkInterface] === undefined) {\n            return null;\n        }\n        let ip = \"\";\n        // Search for the first I/F with a family of type IPv4\n        let found = ifaces[networkInterface]?.find((i) => i.family === \"IPv4\");\n        if (found !== undefined) {\n            ip = found.address;\n            this._logger.startupMsg(`Found IP (${ip}) for interface ${networkInterface}`);\n        }\n        if (ip.length === 0) {\n            return null;\n        }\n        return ip;\n    }\n    async startListening(server) {\n        // Make sure we have an interface and port before we start doing anything\n        if (this._networkIp === null || this._networkPort === null) {\n            this._logger.startupMsg(\"Not listening ...\");\n            return;\n        }\n        // Start listening\n        server.listen(this._networkPort, this._networkIp);\n        // Since this is an async event we need to wait for the \"listening\" event\n        // to fire, so lets wrap this in a Promise and resolve the promise when\n        // it happens\n        return new Promise((resolve, _) => {\n            server.on(\"listening\", () => {\n                this._logger.startupMsg(`Now listening on (${this._listeningOn}${this._basePath}). HTTP manager started!`);\n                resolve();\n            });\n            // We also want to track all of the sockets that are opened\n            server.on(\"connection\", (socket) => {\n                // We need a local copy of the socket ID for this closure to work\n                let socketId = this._socketId++;\n                this._socketMap.set(socketId, socket);\n                this._logger.trace(\"'connection' for socketId (%d) on remote connection (%s/%s)\", socketId, socket.remoteAddress, socket.remotePort);\n                // Check when the socket closes\n                socket.on(\"close\", () => {\n                    // First check if the socket has not been closed during a stop()\n                    if (this._socketMap.has(socketId)) {\n                        this._socketMap.delete(socketId);\n                        this._logger.trace(\"'close' for socketId (%d) on remote connection (%s/%s)\", socketId, socket.remoteAddress, socket.remotePort);\n                    }\n                });\n            });\n        });\n    }\n    async handleReq(req, res) {\n        // Make sure the URL is valid before we go any further\n        if (!req.validUrl) {\n            const message = \"Invalid URL\";\n            res.setHeader(\"Content-Type\", \"text/plain; charset=utf-8\");\n            res.setHeader(\"Content-Length\", Buffer.byteLength(message));\n            res.statusCode = 400;\n            res.write(message);\n            res.end();\n            return;\n        }\n        this._logger.trace(\"Received (%s) req for (%s)\", req.method, req.urlObj.pathname);\n        // Check if we should test for API route matches\n        if (req.checkApiRoutes) {\n            // Look for a router with a basePath that matches the start of the req path\n            // NOTE: Make sure to delimit the pathname in case it is a match for\n            // the root of the basepath\n            let router = this._apiRouterList.find((el) => req.urlObj.pathname.startsWith(el.fullBasePath));\n            // Check if router exists\n            if (router !== undefined) {\n                // Try and handle the request\n                await router.handleReq(req, res);\n                if (req.handled) {\n                    return;\n                }\n            }\n        }\n        // Check if we should test for SSR routes matches\n        if (req.checkSsrRoutes && this._ssrRouter !== null) {\n            await this._ssrRouter.handleReq(req, res);\n            if (req.handled) {\n                return;\n            }\n        }\n        // Check if we should test for static files matches AND if we are serving\n        // static files\n        if (req.checkStaticFiles && this._staticFileServer !== undefined) {\n            await this._staticFileServer.handleReq(req, res);\n            if (req.handled) {\n                return;\n            }\n        }\n        // If we are here then we dont know this URL at all so check if we should\n        // return a 404\n        if (req.handle404) {\n            req.handled = true;\n            const message = \"Route not found\";\n            res.statusCode = 404;\n            res.setHeader(\"Content-Type\", \"text/plain; charset=utf-8\");\n            res.setHeader(\"Content-Length\", Buffer.byteLength(message));\n            res.write(message);\n            res.end();\n        }\n        return;\n    }\n    async healthcheckCallback(_1, res) {\n        let healthy = true;\n        for (let cb of this._healthcheckCallbacks) {\n            healthy = await cb();\n            if (!healthy) {\n                break;\n            }\n        }\n        if (healthy) {\n            res.statusCode = this._healthCheckGoodResCode;\n            res.body = \"Healthy\";\n        }\n        else {\n            res.statusCode = this._healthCheckBadResCode;\n            res.body = \"Not Healthy\";\n        }\n    }\n    // Public methods here\n    async start() {\n        // Make sure we have an interface and port before we start doing anything\n        if (this._networkInterface === null || this._networkPort === null) {\n            this._logger.startupMsg(\"Not initialising HTTP server ...\");\n            return;\n        }\n        this._logger.startupMsg(\"Initialising HTTP server ...\");\n        let ip = this.findInterfaceIp(this._networkInterface);\n        if (ip === null) {\n            throw new Error(`${this._networkInterface} is not an interface on this server`);\n        }\n        this._networkIp = ip;\n        this._logger.startupMsg(`Will listen on interface ${this._networkInterface} (IP: ${this._networkIp})`);\n        // Create either a HTTP or HTTPS server\n        if (this._enableHttps) {\n            this._listeningOn = `https://${this._networkIp}:${this._networkPort}`;\n            if (this._keyFile === undefined) {\n                throw new HttpConfigError(\"HTTPS is enabled but no key file provided!\");\n            }\n            if (this._certFile === undefined) {\n                throw new HttpConfigError(\"HTTPS is enabled but no cert file provided!\");\n            }\n            this._logger.startupMsg(`Attempting to listen on (${this._listeningOn})`);\n            const options = {\n                key: fs.readFileSync(this._keyFile),\n                cert: fs.readFileSync(this._certFile),\n            };\n            this._server = https.createServer(options, (origReq, origRes) => {\n                const req = enhanceIncomingMessage(origReq);\n                const res = enhanceServerResponse(origRes);\n                this.handleReq(req, res);\n            });\n        }\n        else {\n            this._listeningOn = `http://${this._networkIp}:${this._networkPort}`;\n            this._logger.startupMsg(`Attempting to listen on (${this._listeningOn})`);\n            const options = {};\n            this._server = http.createServer(options, (origReq, origRes) => {\n                const req = enhanceIncomingMessage(origReq);\n                const res = enhanceServerResponse(origRes);\n                this.handleReq(req, res);\n            });\n        }\n        this._server.keepAliveTimeout = this._httpKeepAliveTimeout;\n        this._server.headersTimeout = this._httpHeaderTimeout;\n        await this.startListening(this._server);\n    }\n    async stop() {\n        this._logger.shutdownMsg(\"Closing all connections now ...\");\n        // Close all the remote connections\n        this._socketMap.forEach((socket, key) => {\n            socket.destroy();\n            this._logger.trace(\"Destroying socketId (%d) for remote connection (%s/%s)\", key, socket.remoteAddress, socket.remotePort);\n        });\n        // Just in case someone calls stop() a 2nd time\n        this._socketMap.clear();\n        if (this._server !== undefined) {\n            this._logger.shutdownMsg(\"Closing HTTP manager port now ...\");\n            this._server.close();\n            this._logger.shutdownMsg(\"Port closed\");\n            // Just in case someone calls stop() a 2nd time\n            this._server = undefined;\n        }\n        return;\n    }\n    addHealthcheck(callback) {\n        this._healthcheckCallbacks.push(callback);\n    }\n    addRouter(basePath, routerConfig = {}) {\n        // Strip off any leading slashes and make sure it has a trailing slash\n        basePath = basePath.replace(/\\/*$/, \"/\");\n        // Check to make sure this basePath does not overlap with another router's\n        // basePath\n        let found = this._apiRouterList.find((el) => el.routerBasePath.startsWith(basePath));\n        // If there is an overlap with an existing router then \"stop the press\"!\n        if (found !== undefined) {\n            throw new Error(`${basePath} clashes with basePath of ${found.routerBasePath}`);\n        }\n        // If we are here then all is good so create the new router\n        let router = new Router(this._basePath, basePath, routerConfig);\n        this._apiRouterList.push(router);\n        this._logger.startupMsg(\"(%s) router created\", basePath);\n        return router;\n    }\n    router(basePath) {\n        // If no basePath has been defined then return the default router\n        if (basePath === undefined) {\n            return this._defaultApiRouter;\n        }\n        // Make sure there is a trailing \"/\"\n        basePath = basePath.replace(/\\/*$/, \"/\");\n        return this._apiRouterList.find((el) => el.routerBasePath === basePath);\n    }\n    // Methods for the default router here\n    use(middleware) {\n        return this._defaultApiRouter.use(middleware);\n    }\n    del(path, callback, options = {}) {\n        return this._defaultApiRouter.del(path, callback, options);\n    }\n    get(path, callback, options = {}) {\n        return this._defaultApiRouter.get(path, callback, options);\n    }\n    patch(path, callback, options = {}) {\n        return this._defaultApiRouter.patch(path, callback, options);\n    }\n    post(path, callback, options = {}) {\n        return this._defaultApiRouter.post(path, callback, options);\n    }\n    put(path, callback, options = {}) {\n        return this._defaultApiRouter.put(path, callback, options);\n    }\n    endpoint(method, path, callback, options = {}) {\n        return this._defaultApiRouter.endpoint(method, path, callback, options);\n    }\n    route(path) {\n        return this._defaultApiRouter.route(path);\n    }\n}\n//# sourceMappingURL=main.js.map","// imports here\nimport { Logger } from \"./logger.js\";\n// BSPlugin class here\nexport class BSPlugin {\n    _name;\n    _version;\n    _logger;\n    // Constructor here\n    constructor(name, version) {\n        this._name = name;\n        this._version = version;\n        this._logger = new Logger(this._name);\n        this.startupMsg(\"Initialising ...\");\n    }\n    // Protected methods (that can be overridden) here\n    async stop() {\n        // This is a default stop method. Override it if you need to clean up\n        this.shutdownMsg(\"Stopped!\");\n    }\n    // Getters here\n    get name() {\n        return this._name;\n    }\n    get version() {\n        return this._version;\n    }\n    get stopHandler() {\n        return this.stop;\n    }\n    // Protected methods here\n    // Log convinence methods\n    fatal(...args) {\n        this._logger.fatal(...args);\n    }\n    error(...args) {\n        this._logger.error(...args);\n    }\n    warn(...args) {\n        this._logger.warn(...args);\n    }\n    info(...args) {\n        this._logger.info(...args);\n    }\n    startupMsg(...args) {\n        this._logger.startupMsg(...args);\n    }\n    shutdownMsg(...args) {\n        this._logger.shutdownMsg(...args);\n    }\n    debug(...args) {\n        this._logger.debug(...args);\n    }\n    trace(...args) {\n        this._logger.trace(...args);\n    }\n    force(...args) {\n        this._logger.force(...args);\n    }\n}\n//# sourceMappingURL=bs-plugin.js.map","// imports here\nimport { Logger } from \"./logger.js\";\nimport { configMan } from \"./config-man.js\";\nimport * as httpReq from \"./http-req.js\";\nimport * as httpServer from \"./http-server/main.js\";\nimport { sleep, question, encryptSecret, decryptSecret } from \"./utils.js\";\nexport { Logger, LogLevel } from \"./logger.js\";\nexport { ConfigError } from \"./config-man.js\";\nexport { ReqAborted, ReqError } from \"./http-req.js\";\nexport { SseServer } from \"./http-server/sse-server.js\";\nexport { WebRequest, enhanceIncomingMessage, enhanceServerResponse, HttpError, HttpRedirect, } from \"./http-server/req-res.js\";\nexport { HttpServer, HttpConfigError, Router, } from \"./http-server/main.js\";\nexport { BSPlugin } from \"./bs-plugin.js\";\n// Misc consts here\nconst LOGGER_APP_NAME = \"App\";\n// NOTE: BS_VERSION is replaced with package.json#version by a\n// rollup plugin at build time\nconst VERSION = \"BS_VERSION\";\n// Module private variables here\nlet _logger;\nlet _httpServerList;\nlet _pluginMap;\nlet _sharedStore;\nconst _shutdownHandler = async () => {\n    await bs.exit(0);\n};\nconst _exceptionHandler = async (e) => {\n    bs.error(\"Caught unhandled error - (%s)\", e);\n    await bs.exit(1);\n};\nlet _finallyHandler = async () => {\n    bs.shutdownMsg(\"Done!\");\n};\nlet _stopHandler = async () => {\n    bs.shutdownMsg(\"Stopped!\");\n};\nlet _restartHandler = async () => {\n    bs.shutdownMsg(\"Restarted!\");\n};\n// The shell object here\nexport const bs = Object.freeze({\n    // request wrapper\n    request: async (origin, path, reqOptions) => {\n        return httpReq.request(origin, path, reqOptions);\n    },\n    // Config helper methods here\n    /**\n     * Gets a string config value.\n     *\n     * @param config - The config key to get.\n     * @param defaultVal - The default value if config not found.\n     * @param options - Options for getting the config.\n     * @returns The string config value.\n     */\n    getConfigStr: (config, defaultVal, options) => {\n        let value = configMan.getStr(config, defaultVal, options);\n        logConfigManMsgs();\n        return value;\n    },\n    /**\n     * Gets a boolean config value.\n     *\n     * @param config - The config key to get.\n     * @param defaultVal - The default value if config not found.\n     * @param options - Options for getting the config.\n     * @returns The boolean config value.\n     */\n    getConfigBool: (config, defaultVal, options) => {\n        let value = configMan.getBool(config, defaultVal, options);\n        logConfigManMsgs();\n        return value;\n    },\n    /**\n     * Gets a number config value.\n     *\n     * @param config - The config key to get.\n     * @param defaultVal - The default value if config not found.\n     * @param options - Options for getting the config.\n     * @returns The number config value.\n     */\n    getConfigNum: (config, defaultVal, options) => {\n        let value = configMan.getNum(config, defaultVal, options);\n        logConfigManMsgs();\n        return value;\n    },\n    /**\n     * Gets an object config value.\n     *\n     * @param config - The config key to get.\n     * @param defaultVal - The default value if config not found.\n     * @param options - Options for getting the config.\n     * @returns The object config value.\n     */\n    getConfigObj: (config, defaultVal, options) => {\n        let value = (configMan.getObject(config, defaultVal, options));\n        logConfigManMsgs();\n        return value;\n    },\n    /**\n     * Gets an array config value.\n     *\n     * @param config - The config key to get.\n     * @param defaultVal - The default value if config not found.\n     * @param options - Options for getting the config.\n     * @returns The object config value.\n     */\n    getConfigArray: (config, defaultVal, options) => {\n        let value = configMan.getObject(config, defaultVal, options);\n        logConfigManMsgs();\n        return value;\n    },\n    // Log convience methods here\n    fatal: (...args) => {\n        _logger.fatal(...args);\n    },\n    error: (...args) => {\n        _logger.error(...args);\n    },\n    warn: (...args) => {\n        _logger.warn(...args);\n    },\n    info: (...args) => {\n        _logger.info(...args);\n    },\n    startupMsg: (...args) => {\n        _logger.startupMsg(...args);\n    },\n    shutdownMsg: (...args) => {\n        _logger.shutdownMsg(...args);\n    },\n    debug: (...args) => {\n        _logger.debug(...args);\n    },\n    trace: (...args) => {\n        _logger.trace(...args);\n    },\n    force: (...args) => {\n        _logger.force(...args);\n    },\n    setLogLevel: (level) => {\n        _logger.setLevel(level);\n    },\n    // General functions here\n    shellVersion: () => {\n        return VERSION;\n    },\n    setFinallyHandler: (handler) => {\n        _finallyHandler = handler;\n    },\n    setStopHandler: (handler) => {\n        _stopHandler = handler;\n    },\n    setRestartHandler: (handler) => {\n        _restartHandler = handler;\n    },\n    exit: async (code, hard = true) => {\n        bs.shutdownMsg(\"Exiting ...\");\n        // Clear the global and const stores\n        _sharedStore.clear();\n        // Make sure we stop all of the HttpSevers - probably best to do it first\n        for (let httpServer of _httpServerList) {\n            await httpServer.stop();\n        }\n        // Clear the HttpServer list\n        _httpServerList = [];\n        // Stop the application second\n        bs.shutdownMsg(\"Attempting to stop the application ...\");\n        await _stopHandler().catch((e) => {\n            bs.error(e);\n        });\n        // Stop the plugins in the reverse order you started them\n        for (let plugin of [..._pluginMap.values()].reverse()) {\n            bs.shutdownMsg(`Attempting to stop plugin ${plugin.name} ...`);\n            await plugin.stopHandler().catch((e) => {\n                bs.error(e);\n            });\n        }\n        // Clear the plugin list\n        _pluginMap.clear();\n        // If there was a finally handler provided then call it last\n        if (_finallyHandler !== undefined) {\n            bs.shutdownMsg(\"Calling the 'finally handler' ...\");\n            await _finallyHandler().catch((e) => {\n                bs.error(e);\n            });\n        }\n        // Remove the event handlers for catching exit events\n        process.removeListener(\"SIGINT\", _shutdownHandler);\n        process.removeListener(\"SIGTERM\", _shutdownHandler);\n        process.removeListener(\"beforeExit\", _shutdownHandler);\n        process.removeListener(\"uncaughtException\", _exceptionHandler);\n        process.removeListener(\"SIGHUP\", bs.restart);\n        bs.shutdownMsg(\"So long and thanks for all the fish!\");\n        // Check if the exit should also exit the process (a hard stop)\n        if (hard) {\n            process.exit(code);\n        }\n    },\n    restart: async () => {\n        bs.info(\"Restarting now!\");\n        // Re-init the logger in case config values have changed\n        _logger = new Logger(LOGGER_APP_NAME);\n        // Do a soft exit\n        await bs.exit(0, false);\n        // Then re-init this bad boy\n        init();\n        // Now call the users restart handler\n        await _restartHandler();\n    },\n    shutdownError: async (code = 1, testing = false) => {\n        bs.error(\"Heuston, we have a problem. Shutting down now ...\");\n        if (testing) {\n            // Do a soft stop so we don't force any testing code to exit\n            await bs.exit(code, false);\n            return;\n        }\n        await bs.exit(code);\n    },\n    // Utility functions here\n    addHttpServer: async (httpConfig = {}, startServer = true) => {\n        let server = new httpServer.HttpServer(httpConfig);\n        // Automatically start the server if requested\n        if (startServer) {\n            await server.start();\n        }\n        _httpServerList.push(server);\n        return server;\n    },\n    httpServer: (index = 0) => {\n        // Check if there are any http servers first\n        if (_httpServerList.length === 0) {\n            throw Error(`There are no http servers!!`);\n        }\n        // Check if the requested server DOES NOT exist\n        if (index < 0 || index >= _httpServerList.length) {\n            throw Error(`There is no http servers with the index ${index}`);\n        }\n        return _httpServerList[index];\n    },\n    httpServerReady: (index = 0) => {\n        // Check if there are any http servers first\n        if (_httpServerList.length === 0) {\n            return false;\n        }\n        // Check if the requested server DOES NOT exist\n        if (index < 0 || index >= _httpServerList.length) {\n            return false;\n        }\n        return true;\n    },\n    addPlugin: (name, pluginClass, config = {}) => {\n        // Make sure we don't have a duplicate name\n        if (_pluginMap.has(name)) {\n            throw Error(`There is already a plugin with the name ${name}`);\n        }\n        // Create the plugin\n        let plugin = new pluginClass(name, config);\n        // And then cache the plugin\n        _pluginMap.set(name, plugin);\n        return plugin;\n    },\n    plugin: (name) => {\n        // Search for the plugin that has a matching name\n        let plugin = _pluginMap.get(name);\n        // Check if the plugin DOES NOT exist\n        if (plugin === undefined) {\n            throw Error(`There is no plugin with the name ${name}`);\n        }\n        return plugin;\n    },\n    save: (name, value) => {\n        if (_sharedStore.has(name)) {\n            throw Error(`There is already a value saved with the name ${name}`);\n        }\n        _sharedStore.set(name, value);\n    },\n    update: (name, value) => {\n        _sharedStore.set(name, value);\n    },\n    retrieve: (name) => {\n        return _sharedStore.get(name);\n    },\n    sleep,\n    question,\n    encryptSecret,\n    decryptSecret,\n});\n// Private functions here\nlet logConfigManMsgs = () => {\n    let messages = configMan.getMessages();\n    for (let message of messages) {\n        _logger.startupMsg(message[0]);\n    }\n    configMan.clearMessages();\n};\nfunction init() {\n    // Initialise the private variables\n    _logger = new Logger(LOGGER_APP_NAME);\n    _httpServerList = [];\n    _pluginMap = new Map();\n    _sharedStore = new Map();\n    // Now spit out the versions\n    bs.startupMsg(`Bamboo Shell version (${VERSION})`);\n    bs.startupMsg(`NODE_ENV is (${process.env.NODE_ENV === undefined ? \"development\" : process.env.NODE_ENV})`);\n    // Now set up the event handler\n    bs.startupMsg(\"Setting up shutdown event handlers ...\");\n    // Call exit() on a Ctrl-C\n    process.on(\"SIGINT\", _shutdownHandler);\n    // Call exit() when the program is terminated\n    process.on(\"SIGTERM\", _shutdownHandler);\n    // Call exit() during normal programming termination\n    process.on(\"beforeExit\", _shutdownHandler);\n    // Catch and log any execptions and then call exit()\n    process.on(\"uncaughtException\", _exceptionHandler);\n    // Call resatrt() on a HUP signal\n    process.on(\"SIGHUP\", bs.restart);\n    // And it's party time!\n    bs.startupMsg(\"Ready to Rock and Roll baby!\");\n}\n// OK - lets light this candle!\ninit();\n//# sourceMappingURL=main.js.map"],"names":["init","_logger","performance","PathToRegEx.match","httpReq.request","httpServer.HttpServer"],"mappings":"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","x_google_ignoreList":[9]}