{"version":3,"sources":["jsdelivr-header.js","/npm/dropperjs@0.1.3/index.js"],"names":[],"mappings":"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","file":"/npm/dropperjs@0.1.3/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/dropperjs@0.1.3/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","//Global Function\r\n\r\nfunction Dropper(server) {\r\n  function Instance(config) {\r\n    var username = config.username,\r\n    name = config.appName,\r\n    pass = config.password\r\n    server = server || config.server,\r\n    apiKey = config.apiKey,\r\n    appRoute = config.appRoute || \"/dropper\",\r\n    logs = config.logs || false,\r\n    secure = config.secure || false,\r\n    perms = config.perms;\r\n\r\n    if (appRoute[0] != \"/\") appRoute = \"/\"+ appRoute;\r\n    if (!apiKey || apiKey.length == 0) {\r\n      console.error(\"Please provide any apiKey in the options to secure the Droppet instance\");\r\n      return\r\n    }\r\n\r\n    const events = require('events');\r\n    const express = require('express');\r\n    const bodyParser = require('body-parser');\r\n    const em = new events.EventEmitter();\r\n    em.setMaxListeners(0)\r\n    const uuid = require('uuid/v1');\r\n    const fs = require('fs');\r\n\t  const ip = require(\"ip\")\r\n    const pug = require('pug');\r\n    const cors = require('cors');\r\n    //const Datastore = require('nedb');\r\n    //const db = new Datastore({ filename: './store/datastore.json', autoload: true });\r\n    const expressWs = require('express-ws')(server);\r\n    const xterm = require('xterm');\r\n\r\n    // Open Websocket connection\r\n\r\n    var ids = [];\r\n    var aWss = expressWs.getWss(appRoute);\r\n    var clients = aWss.clients;\r\n    var sign = false;\r\n\r\n    server.use(cors());\r\n    server.use(bodyParser.json());\r\n\r\n    server.get(appRoute, function(req, res, next) {\r\n      var auth = req.get(\"Authorization\");\r\n      var id = req.query.id;\r\n      var checkProtocol = req.connection.encrypted;\r\n      if (!id) {\r\n        res.send(JSON.stringify({message:\"Wrong auth credentials.\",bool:false}))\r\n        em.emit(\"sign\", sign)\r\n        return next();\r\n      }\r\n      if (secure && !checkProtocol) {\r\n        aWss.clients.forEach((client) => {\r\n          if (client.id == id) client.close(1002, \"Not Secure.\")\r\n        });\r\n        res.send(JSON.stringify({message:\"Set the the secure option to false to allow not seccure connections.\",bool:false}))\r\n        return next();\r\n      }\r\n      if (auth != apiKey) {\r\n        aWss.clients.forEach((client) => {\r\n          if (client.id == id) client.close(4001, \"Unauthorized\");\r\n        });\r\n        res.send(JSON.stringify({message:\"Wrong auth credentials.\",bool:false}))\r\n        em.emit(\"sign\", sign, id)\r\n      }else {\r\n        sign = true;\r\n        em.emit(\"sign\", sign, id)\r\n        res.send(JSON.stringify({message:\"Success connection.\",bool:true}));\r\n      }\r\n    });\r\n\r\n    server.ws(appRoute, function(ws, req) {\r\n      ws.id = req.query.id;\r\n      var refID = ws.id;\r\n      ids.push(refID);\r\n      ws.on('message', function(msg) {\r\n        var pre = msg;\r\n        if (isJson(msg)) {\r\n          pre = JSON.parse(msg);\r\n        }\r\n        if (pre.event == \"dataSync\") {\r\n          em.emit(\"dataSync\", {ws: ws, id:ws.id, data:pre.message});\r\n        }else {\r\n          em.emit(\"message\", msg);\r\n        }\r\n      });\r\n      ws.on(\"close\", function() {\r\n        var id = ws.id;\r\n        for (var i = 0; i < ids.length; i++) {\r\n          if (ids[i] == id) {ids = ids.splice(i,1); break;}\r\n        }\r\n        var msg = {id:id, all:ids}; \r\n        em.emit(\"d-disconnection\", msg);\r\n        var model = {event:\"dropper_disconnection\", message:msg};\r\n        aWss.clients.forEach((client) => {\r\n          client.send(JSON.stringify(model));\r\n        });\r\n        em.emit(\"close\", ws);\r\n      })\r\n    });\r\n\r\n    aWss.on(\"connection\", (ws) => {\r\n      var msg = {id:ws.id, all:ids}\r\n      em.emit(\"d-connection\", msg);\r\n      var model = {event:\"dropper_connection\", message:msg};\r\n      aWss.clients.forEach((client) => {\r\n        client.send(JSON.stringify(model));\r\n      });\r\n    })\r\n\r\n    em.on(\"sign\", (data, id) => {\r\n      if (!data && id) {\r\n        aWss.clients.forEach((client) => {\r\n          if (id == client.id) client.close();\r\n        })\r\n      }\r\n    })\r\n\r\n    // Find User/Instance\r\n\r\n    /*db.find({username:username}, function(err, doc) {\r\n      if (err) throw err;\r\n      if (doc.length > 1) {\r\n        throw \"User already taken, take another username to this new instance.\";\r\n      }else if (doc.length == 0){\r\n        var newUserModel = {\r\n          username: username,\r\n          password: pass,\r\n          encription: encriptionKey,\r\n          apps: {\r\n            [app]: {}\r\n          }\r\n        }\r\n        var keys = Object.keys(newUserModel);\r\n        for (var i = 0; i < keys.length; i++) {\r\n          if (newUserModel[keys[i]] == null && newUserModel[keys[i]] == undefined) {\r\n            throw \"Seem like you're missconfigurating the \"+keys[i]+\" value in your Dropper instance.\"\r\n          }\r\n        }\r\n        db.insert(newUserModel, function(err, newdoc) {\r\n          if (err) throw err\r\n        })\r\n      }else if (doc.length == 1) {\r\n        doc = doc[0];\r\n        if (!doc.apps[app]) {\r\n          var route = \"apps.\"+app;\r\n          db.update({username:username},{$set: {[route]:{}}}, {}, function(err, changed) {\r\n            if (err) throw err;\r\n          });\r\n        }\r\n      }\r\n    });\r\n*/\r\n    //Expected Console Connectios\r\n\r\n    var clientRoute = appRoute + \"/console\"\r\n    const index = pug.compileFile(__dirname +'/lib/console/index.pug');\r\n\r\n    server.use(clientRoute, express.static(__dirname + '/lib/console/public'));\r\n\r\n    server.get(clientRoute, function(req, res) {\r\n      res.send(index({\r\n        title: \"Dropper Web Console - \" + name,\r\n        appname: name\r\n      }))\r\n    });\r\n\r\n    //WebSocket api\r\n\r\n    this.client = function(clientID) {\r\n      if (typeof clientID == \"undefined\") return \"No conection detected, please execute this on events methods.\"\r\n      aWss.clients.forEach((client) => {\r\n        if (client.id == clientID) {\r\n          return client;\r\n        }\r\n      })\r\n    }\r\n\r\n    this.client.id = function() {\r\n      if (aWss.clients.length <= 0) return \"No conection detected, please execute this on events methods.\"\r\n      aWss.clients.forEach((client) => {\r\n        if (client.id == clientID) {\r\n          return client.id;\r\n        }\r\n      })\r\n    };\r\n\r\n    this.clients = aWss.clients;\r\n\r\n    this.clients.ids = ids;\r\n\r\n    //Websocket main triggers\r\n\r\n    this.emit = function(evt, data) {\r\n      if (typeof data == \"undefined\") {\r\n        data = evt;\r\n        evt = null;\r\n        aWss.clients.forEach((client) => {\r\n          client.send(JSON.stringify({message:data}));\r\n        });\r\n      }else {\r\n        aWss.clients.forEach((client) => {\r\n          client.send(JSON.stringify({event:evt, message:data}));\r\n        });\r\n      }\r\n    }\r\n\r\n    this.close = function(c,r,id) {\r\n      var code = c || 1000;\r\n      var reason = r || \"\";\r\n      if (!id) {\r\n        aWss.clients.forEach((client) => {\r\n          client.close();\r\n        })\r\n      }else {\r\n        aWss.clients.forEach((client) => {\r\n          if (client.id == id) {\r\n            client.close();\r\n          }\r\n        })\r\n      }\r\n    }\r\n\r\n    this.client.emit = function(clientID, evt, data) {\r\n      if (typeof clientID == \"undefined\") return \"Please, introduce a ClientID to send the event.\"\r\n\r\n      if (typeof data == \"undefined\") {\r\n        data = evt;\r\n        evt = null;\r\n        aWss.clients.forEach((client) => {\r\n          if (client.id == clientID) {\r\n            client.send(JSON.stringify({message:data}));\r\n          }\r\n        });\r\n      }else {\r\n        aWss.clients.forEach((client) => {\r\n          if (client.id == clientID) {\r\n            client.send(JSON.stringify({event:evt, message:data}));\r\n          }\r\n        });\r\n      }\r\n    }\r\n\r\n    //Websocket event Listeners\r\n\r\n    this.on = function(evt, cb) {\r\n      switch (evt) {\r\n        case \"dropper_connection\":\r\n          em.on(\"d-connection\", function(msg) {\r\n            return cb(msg)\r\n          });\r\n          break;\r\n        case \"dropper_disconnection\":\r\n          em.on(\"d-disconnection\", function(msg) {\r\n            return cb(msg)\r\n          });\r\n          break;\r\n        case \"dataSync\":\r\n          em.on(\"dataSync\", function(msg) {\r\n            return cb(msg.ws,msg.id,msg.data)\r\n          })\r\n          break;\r\n        case \"message\":\r\n          em.on(\"message\", function(msg) {\r\n            if (isJson(msg)) {\r\n              msg = JSON.parse(msg);\r\n            }\r\n            if (msg.channel) return;\r\n            return cb(msg)\r\n          });\r\n          break;\r\n        case \"close\":\r\n          em.on(\"close\", function(id) {\r\n            return cb(id)\r\n          });\r\n          break;\r\n        default:\r\n          em.on(\"message\", function(msg) {\r\n            if (isJson(msg)) {\r\n              msg = JSON.parse(msg);\r\n            }\r\n            if (msg.channel) return;\r\n            if (msg.event == evt) return cb(msg)\r\n            return;\r\n          });\r\n          break;\r\n      }\r\n    }\r\n\r\n    // Channels API\r\n\r\n    this.subscribe = function(channelName) {\r\n      var bind = function (evt, cb) {\r\n        em.on(\"message\", function(msg) {\r\n          if (isJson(msg)) {\r\n            msg = JSON.parse(msg);\r\n          }\r\n          if (!msg.channel) return;\r\n          if (msg.channel != channelName) return;\r\n          if (msg.event == evt) return cb(msg.message)\r\n          return;\r\n        })\r\n      }\r\n      return {\r\n        bind: bind\r\n      }\r\n    }\r\n\r\n    this.trigger = function(channel, evt, data) {\r\n      if (typeof channel == \"undefined\") return console.log(\"Please provide a channel to use the trigger method.\");\r\n      if (typeof data == \"undefined\") {\r\n        data = evt;\r\n        evt = null;\r\n        aWss.clients.forEach((client) => {\r\n          client.send(JSON.stringify({channel:channel, message:data}));\r\n        });\r\n      }else {\r\n        aWss.clients.forEach((client) => {\r\n          client.send(JSON.stringify({channel: channel, event:evt, message:data}));\r\n        });\r\n      }\r\n    }\r\n\r\n    this.test = function() {\r\n      console.log(\"Dropper is working!\");\r\n    }\r\n\r\n    // Utils\r\n\r\n    function isJson(str) {\r\n        try {\r\n            JSON.parse(str);\r\n        } catch (e) {\r\n            return false;\r\n        }\r\n        return true;\r\n    }\r\n  }\r\n  return Instance;\r\n}\r\n\r\nmodule.exports = Dropper;\r\n"]}