{"version":3,"sources":["jsdelivr-header.js","/npm/lets-chat@0.3.10/app.js"],"names":[],"mappings":"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","file":"/npm/lets-chat@0.3.10/app.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/lets-chat@0.3.10/app.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","//\n// Let's Chat\n//\n\n'use strict';\n\nprocess.title = \"letschat\";\n\nvar _ = require('lodash'),\n    fs = require('fs'),\n    colors = require('colors'),\n    express = require('express.oi'),\n    bodyParser = require('body-parser'),\n    cookieParser = require('cookie-parser'),\n    compression = require('compression'),\n    helmet = require('helmet'),\n    http = require('http'),\n    nunjucks = require('nunjucks'),\n    mongoose = require('mongoose'),\n    migroose = require('./migroose'),\n    MongoStore = require('connect-mongo')(express.session),\n    all = require('require-tree');\n\nvar psjon = require('./package.json'),\n    settings = require('./app/config'),\n    httpEnabled = settings.http && settings.http.enable,\n    httpsEnabled = settings.https && settings.https.enable;\n\nvar auth = require('./app/auth/index'),\n    models = all('./app/models'),\n    middlewares = all('./app/middlewares'),\n    controllers = all('./app/controllers'),\n    core = require('./app/core/index'),\n    app;\n\n//\n// express.oi Setup\n//\nif (httpsEnabled) {\n     app = express().https({\n        key: fs.readFileSync(settings.https.key),\n        cert: fs.readFileSync(settings.https.cert)\n    }).io();\n} else {\n    app = express().http().io();\n}\n\nif (settings.env === 'production') {\n    app.set('env', settings.env);\n    app.set('json spaces', undefined);\n    app.enable('view cache');\n}\n\n// Session\nvar sessionStore = new MongoStore({\n    url: settings.database.uri,\n    autoReconnect: true\n});\n\n// Session\nvar session = {\n    key: 'connect.sid',\n    secret: settings.secrets.cookie,\n    store: sessionStore,\n    cookie: { secure: httpsEnabled },\n    resave: false,\n    saveUninitialized: true\n};\n\n// Set compression before any routes\napp.use(compression({ threshold: 512 }));\n\napp.use(cookieParser());\napp.io.session(session);\n\nauth.setup(app, session, core);\n\n// Security protections\napp.use(helmet.crossdomain());\napp.use(helmet.frameguard());\napp.use(helmet.hidePoweredBy());\napp.use(helmet.ieNoOpen());\napp.use(helmet.noSniff());\napp.use(helmet.xssFilter());\napp.use(helmet.hsts({\n    maxAge: 31536000,\n    includeSubdomains: true,\n    force: httpsEnabled,\n    preload: true\n}));\napp.use(helmet.contentSecurityPolicy({\n    defaultSrc: ['\\'none\\''],\n    connectSrc: ['*'],\n    scriptSrc: ['\\'self\\'', '\\'unsafe-eval\\''],\n    styleSrc: ['\\'self\\'', 'fonts.googleapis.com', '\\'unsafe-inline\\''],\n    fontSrc: ['\\'self\\'', 'fonts.gstatic.com'],\n    mediaSrc: ['\\'self\\''],\n    objectSrc: ['\\'self\\''],\n    imgSrc: ['*']\n}));\n\nvar bundles = {};\napp.use(require('connect-assets')({\n    paths: [\n        'media/js',\n        'media/less',\n        // 'media/img',\n        // 'media/font',\n    ],\n    helperContext: bundles,\n    build: settings.env === 'production',\n    fingerprinting: settings.env === 'production',\n    servePath: 'media/dist'\n}));\n\n// Public\napp.use('/media', express.static(__dirname + '/media', {\n    maxAge: '364d',\n}));\n\n// Templates\nvar nun = nunjucks.configure('templates', {\n        autoescape: true,\n        express: app,\n        tags: {\n            blockStart: '<%',\n            blockEnd: '%>',\n            variableStart: '<$',\n            variableEnd: '$>',\n            commentStart: '<#',\n            commentEnd: '#>'\n        }\n    });\n\nfunction wrapBundler(func) {\n    // This method ensures all assets paths start with \"./\"\n    // Making them relative, and not absolute\n    return function() {\n        return func.apply(func, arguments)\n                   .replace(/href=\"\\//g, 'href=\"./')\n                   .replace(/src=\"\\//g, 'src=\"./');\n    };\n}\n\nnun.addFilter('js', wrapBundler(bundles.js));\nnun.addFilter('css', wrapBundler(bundles.css));\nnun.addGlobal('text_search', false);\n\n// HTTP Middlewares\napp.use(bodyParser.json());\napp.use(bodyParser.urlencoded({\n    extended: true\n}));\n\n// IE header\napp.use(function(req, res, next) {\n    res.setHeader('X-UA-Compatible', 'IE=Edge,chrome=1');\n    next();\n});\n\n//\n// Controllers\n//\n_.each(controllers, function(controller) {\n    controller.apply({\n        app: app,\n        core: core,\n        settings: settings,\n        middlewares: middlewares,\n        models: models,\n        controllers: controllers\n    });\n});\n\n//\n// Mongo\n//\n\nmongoose.connection.on('error', function (err) {\n    throw new Error(err);\n});\n\nmongoose.connection.on('disconnected', function() {\n    throw new Error('Could not connect to database');\n});\n\n//\n// Go Time\n//\n\nfunction startApp() {\n    var port = httpsEnabled && settings.https.port ||\n               httpEnabled && settings.http.port;\n\n    var host = httpsEnabled && settings.https.host ||\n               httpEnabled && settings.http.host || '0.0.0.0';\n\n\n\n    if (httpsEnabled && httpEnabled) {\n        // Create an HTTP -> HTTPS redirect server\n        var redirectServer = express();\n        redirectServer.get('*', function(req, res) {\n            var urlPort = port === 80 ? '' : ':' + port;\n            res.redirect('https://' + req.hostname + urlPort + req.path);\n        });\n        http.createServer(redirectServer)\n            .listen(settings.http.port || 5000, host);\n    }\n\n    app.listen(port, host);\n\n    //\n    // XMPP\n    //\n    if (settings.xmpp.enable) {\n        var xmpp = require('./app/xmpp/index');\n        xmpp(core);\n    }\n\n    var art = fs.readFileSync('./app/misc/art.txt', 'utf8');\n    console.log('\\n' + art + '\\n\\n' + 'Release ' + psjon.version.yellow + '\\n');\n}\n\nfunction checkForMongoTextSearch() {\n    var admin = new mongoose.mongo.Admin(mongoose.connection.db);\n    admin.buildInfo(function (err, info) {\n        if (err || !info) {\n            return;\n        }\n\n        var version = info.version.split('.');\n        if (version.length < 2) {\n            return;\n        }\n\n        if(version[0] < 2) {\n            return;\n        }\n\n        if(version[0] === '2' && version[1] < 6) {\n            return;\n        }\n\n        nun.addGlobal('text_search', true);\n    });\n}\n\nmongoose.connect(settings.database.uri, function(err) {\n    if (err) {\n        throw err;\n    }\n\n    checkForMongoTextSearch();\n\n    migroose.needsMigration(function(migrationRequired) {\n        if (migrationRequired) {\n            console.log('Database migration required'.red);\n            console.log('Ensure you backup your database first.');\n            console.log('');\n            console.log(\n                'Run the following command: ' + 'npm run migrate'.yellow\n            );\n\n            return process.exit();\n        }\n\n        startApp();\n    });\n});\n"]}