{"version":3,"sources":["jsdelivr-header.js","/npm/minecraft-dynmap@0.1.0/index.js"],"names":[],"mappings":"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","file":"/npm/minecraft-dynmap@0.1.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/minecraft-dynmap@0.1.0/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","'use strict';\n\n// at least one world must be tracked in order to track players\n// due to the design of the dynmap API.\nconst EventEmitter = require('events');\nconst rp = require('request-promise');\n\n/**\n * Class representing the Dynmap server\n * This can only be used once the 'ready' event has been fired\n */\nclass Dynmap extends EventEmitter {\n  /**\n   * Constructor for the Dynmap class\n   * @param {String} url Base URL of the map, eg. http://dynmap.starcatcher.us/\n   * @param {Object} [options] The options object\n   * @param {String} options.configPath Location of the configuration\n   */\n  constructor(url, options = {}) {\n    super();\n    this.url = url;\n    this.options = options;\n\n    this.tracking = {};\n    this.players = {};\n    this.markers = {};\n    this.worlds = {};\n    this.updateURL = null;\n    this.titleURL = null;\n    this.markerURL = null;\n    this.loginURL = null;\n    this.config = null;\n    this.defaultWorld = null;\n    this.serverTime = null;\n\n    this._init();\n  }\n  /**\n   * Internal function to fetch initial data from the server\n   * @return {Promise}\n   */\n  async _init() {\n    let configPath = this.options.configPath || 'standalone/config.js';\n    let preConfig;\n    try {\n      preConfig = await rp(this.url + configPath);\n    } catch (err) {\n      return this.emit('error', err);\n    }\n    let configuration = preConfig.match(/configuration: '(.+)',?/)[1];\n    this.updateURL = preConfig.match(/update: '(.+)'/)[1];\n    this.tileURL = preConfig.match(/tiles: '(.+)'/)[1];\n    this.markerURL = preConfig.match(/markers: '(.+)'/)[1];\n    this.loginURL = preConfig.match(/login: '(.+)'/)[1];\n    let config;\n    try {\n      config = await rp(this.url + configuration, { json: true });\n    } catch (err) {\n      return this.emit('error', err);\n    }\n    if (config.error === 'login-required') {\n      throw new Error('Login required to access');\n    }\n    this.config = config;\n    this.defaultWorld = this.config.defaultworld;\n    for (let i of Object.keys(this.config.worlds)) {\n      let world = this.config.worlds[i];\n      this.worlds[world.name] = world;\n    }\n    this.emit('ready');\n    this.on('update', data => this.serverTime = data.servertime);\n  }\n  /**\n   * Start fetching events for a specific world\n   * @param {String} world World name to start tracking\n   */\n  track(world = this.defaultWorld) {\n    if (!(world in this.worlds)) throw new Error('No such world');\n    if (world in this.tracking) {\n      throw new Error('Already tracking world ' + world);\n    }\n    this.tracking[world] = setInterval(async () => {\n      let time = Date.now();\n      let update;\n      try {\n        update = await rp(\n          this.url + this.updateURL\n          .replace('{world}', world)\n          .replace('{timestamp}', time),\n          { json: true }\n        );\n      } catch (err) {\n        return this.emit('error', err);\n      }\n      this.emit('update', update);\n      let newPlayers = {};\n      for (let i of Object.keys(update.players)) {\n        let player = update.players[i];\n        // \"-some-other-bogus-world-\" for the world means the player is\n        // not visible, this is a workaround\n        if (player.world === '-some-other-bogus-world-') {\n          player.visible = false;\n        } else player.visible = true;\n        if (player.account in this.players) this.emit('playerUpdate', player);\n          else this.emit('playerAdded', player);\n        this.players[player.account] = player;\n        newPlayers[player.account] = player;\n      }\n      for (let i in this.players) {\n        if (!(i in newPlayers)) {\n          this.emit('playerRemoved', this.players[i]);\n          delete(this.players[i]);\n        }\n      }\n      this.tracking[world].lastUpdate = time;\n    }, this.config.updaterate);\n    this.tracking[world].lastUpdate = null;\n  }\n  /**\n   * Stop tracking a world\n   * @param {String} world World to stop tracking\n   */\n  untrack(world) {\n    if (!(world in this.tracking)) {\n      throw new Error('World is not being tracked');\n    }\n    clearInterval(this.tracking[world]);\n    delete this.tracking[world];\n    if (Object.keys(this.tracking).length === 0) this.players = {};\n  }\n  /**\n   * Get server time\n   * Only needed if no world is currently being tracked. If tracking is active,\n   * use dynmap.time instead\n   * @param {String} world World name\n   * @return {Promise}\n   */\n  async getServerTime(world) {\n    let body;\n    body = await rp(\n      this.url + this.updateURL\n      .replace('{world}', world)\n      .replace('{timestamp}', Date.now()),\n      { json: true }\n    );\n    this.serverTime = body.servertime;\n    return this.serverTime;\n  }\n  /**\n   * Get markers in a world\n   * @param {String} world World name\n   * @return {Promise}\n   */\n  async getMarkers(world) {\n    if (!(world in this.worlds)) throw new Error('No such world');\n    let body = await rp(\n      this.url + this.markerURL + '_markers_/marker_' + world + '.json',\n      { json: true }\n    );\n    this.markers = body.sets;\n    return this.markers;\n  }\n}\n\nmodule.exports = Dynmap;\nmodule.exports.Dynmap = module.exports;\n"]}