{"version":3,"sources":["jsdelivr-header.js","/npm/@paulallen87/chaturbate-events@1.2.1/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aAEA,MAAM,GAAK,QAAQ,MACb,KAAO,QAAQ,QACf,MAAQ,QAAQ,QAAR,CAAiB,sBACzB,aAAE,cAAiB,QAAQ,WAC3B,QAAE,SAAY,QAAQ,WACtB,QAAU,IAAI,QAAQ,QAAQ,OAAQ,QAAQ,QAQ9C,cAAgB,KACpB,MAAM,EAAiB,KAAK,KAAK,UAAW,cAO5C,OANmB,GAAG,YAAY,GAAgB,KAAI,IACpD,MAAM,sBAAsB,SAErB,QAAQ,gBAAgB,QAGf,QAAO,GAAK,QAAQ,EAAE,QAAO,EAMjD,MAAM,yBAAyB,aAS7B,WAAA,CAAY,EAAS,EAAa,MAChC,QACA,KAAK,QAAU,EACf,KAAK,QAAQ,GAAG,QAAQ,GAAU,KAAK,QAAQ,KAC/C,KAAK,QAAQ,GAAG,QAAQ,IAAM,KAAK,YACnC,KAAK,QAAQ,GAAG,WAAW,GAAU,KAAK,WAAW,KACrD,KAAK,QAAQ,GAAG,SAAS,GAAS,KAAK,SAAS,KAChD,KAAK,QAAQ,GAAG,SAAS,GAAU,KAAK,SAAS,KAEjD,KAAK,WAAa,GAAc,eAClC,CAOA,SAAI,GACF,OAAO,KAAK,WAAW,KAAI,GAAK,EAAE,OACpC,CAQA,OAAA,CAAQ,GACN,MAAM,eAEN,KAAK,KAAK,OAAQ,EACpB,CAOA,OAAA,GACE,MAAM,kBAEN,KAAK,KAAK,cACZ,CAQA,UAAA,CAAW,GACT,MAAM,sBAAsB,EAAE,UAEV,KAAK,WAAW,MAAK,IACvC,GAAI,EAAE,SAAW,EAAE,OAAQ,OAAO,EAClC,GAAI,EAAE,QAAU,EAAE,MAAM,MAAM,KAAM,EAAE,MAAO,OAAO,EACpD,GAAI,EAAE,WAAa,EAAE,SAAS,KAAK,KAAM,EAAE,UAAW,OAAO,EAE7D,IACE,MAAM,EAAS,EAAE,UAAU,MAAM,KAAM,EAAE,MACzC,MAAM,mBAAmB,EAAE,gBAC3B,MAAM,GACN,KAAK,KAAK,EAAE,MAAO,EACrB,CAAE,MAAO,GACP,QAAQ,MAAM,yBAAyB,EAAE,UACzC,QAAQ,MAAM,EAChB,CAEA,OAAO,CAAI,MAIX,QAAQ,KAAK,qCACb,QAAQ,KAAK,GAEjB,CAQA,QAAA,CAAS,GACP,MAAM,kBAAmB,GACzB,QAAQ,MAAM,GACd,KAAK,KAAK,eAAgB,EAC5B,CAQA,QAAA,CAAS,GACP,MAAM,kBAAmB,GAEzB,KAAK,KAAK,eAAgB,EAC5B,EAGF,OAAO,QAAU","file":"/npm/@paulallen87/chaturbate-events@1.2.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@paulallen87/chaturbate-events@1.2.1/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\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst debug = require(\"debug\")(\"chaturbate:events\");\nconst { EventEmitter } = require(\"events\");\nconst { Console } = require(\"console\");\nconst logging = new Console(process.stdout, process.stderr);\n\n/**\n * Loads all known transforms.\n *\n * @return {Array<*>}\n * @constant\n */\nconst getTransforms = () => {\n  const normalizedPath = path.join(__dirname, \"transforms\");\n  const transforms = fs.readdirSync(normalizedPath).map(file => {\n    debug(`loading transform '${file}'...`);\n    // eslint-disable-next-line global-require\n    return require(`./transforms/${file}`);\n  });\n\n  return transforms.filter(t => Boolean(t.event));\n};\n\n/**\n * Event manager for a Chaturbate Browser instance.\n */\nclass ChaturbateEvents extends EventEmitter {\n  /**\n   * Constructor.\n   *\n   * @param {ChaturbateBrowser} browser\n   * @param {Array<*>=} transforms\n   * @constructor\n   * @extends EventEmitter\n   */\n  constructor(browser, transforms = null) {\n    super();\n    this.browser = browser;\n    this.browser.on(\"init\", params => this._onInit(params));\n    this.browser.on(\"open\", () => this._onOpen());\n    this.browser.on(\"message\", params => this._onMessage(params));\n    this.browser.on(\"error\", error => this._onError(error));\n    this.browser.on(\"close\", params => this._onClose(params));\n\n    this.transforms = transforms || getTransforms();\n  }\n\n  /**\n   * Gets a list of known event names.\n   *\n   * @type {Array<string>}\n   */\n  get names() {\n    return this.transforms.map(t => t.event);\n  }\n\n  /**\n   * Called when the browser is initialized.\n   *\n   * @param {Object} e\n   * @private\n   */\n  _onInit(e) {\n    debug(\"initialized\");\n\n    this.emit(\"init\", e);\n  }\n\n  /**\n   * Called when the websocket is open.\n   *\n   * @private\n   */\n  _onOpen() {\n    debug(\"websocket open\");\n\n    this.emit(\"socket_open\");\n  }\n\n  /**\n   * Called when the websocket forwards a message.\n   *\n   * @param {Object} e\n   * @private\n   */\n  _onMessage(e) {\n    debug(`websocket message: ${e.method}`);\n\n    const transformed = this.transforms.some(t => {\n      if (t.method !== e.method) return false;\n      if (t.match && !t.match.apply(this, e.args)) return false;\n      if (t.callback && !t.callback.call(this, e.callback)) return false;\n\n      try {\n        const result = t.transform.apply(this, e.args);\n        debug(`transformed to '${t.event}' event`);\n        debug(result);\n        this.emit(t.event, result);\n      } catch (err) {\n        logging.error(`transform failed for '${e.event}'`);\n        logging.error(err);\n      }\n\n      return true;\n    });\n\n    if (!transformed) {\n      logging.warn(\"unable to find matching transform\");\n      logging.warn(e);\n    }\n  }\n\n  /**\n   * Called when the websocket throws and error.\n   *\n   * @param {Error} error\n   * @private\n   */\n  _onError(error) {\n    debug(\"websocket error\", error);\n    logging.error(error);\n    this.emit(\"socket_error\", error);\n  }\n\n  /**\n   * Called when the websocket closes.\n   *\n   * @param {Event} e\n   * @private\n   */\n  _onClose(e) {\n    debug(\"websocket close\", e);\n\n    this.emit(\"socket_close\", e);\n  }\n}\n\nmodule.exports = ChaturbateEvents;\n"]}