{"version":3,"file":"index.mjs","sources":["../src/httpClient.ts","../src/log.ts","../src/api.ts"],"sourcesContent":["const isNode = typeof process === \"object\";\n\nconst $get = (url: string, cb: Function): void => {\n  const req = new XMLHttpRequest();\n  req.onreadystatechange = () => {\n    if (req.readyState === 4 && req.status === 200) {\n      cb(req.responseText);\n    }\n  };\n  req.open(\"GET\", url, true);\n  req.send(null);\n};\n\nconst $post = (url: string, data: any, cb: (...args: any[]) => void): void => {\n  const req = new XMLHttpRequest();\n  req.onreadystatechange = () => {\n    if (req.readyState === 4 && req.status === 200) {\n      cb(JSON.parse(req.responseText));\n    }\n  };\n  req.open(\"POST\", url);\n\n  req.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n  req.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n\n  req.send(JSON.stringify(data));\n};\n\nexport default {\n  get: (url: string): Promise<any> => {\n    return new Promise((resolve) => {\n      $get(url, (response) => resolve(response));\n    });\n  },\n  post: (url: string, data: Object): Promise<any> => {\n    return new Promise((resolve) => {\n      $post(url, data, (response) => resolve(response));\n    });\n  },\n};\n","\n/**\n * Represents a logger\n * @constructor\n * @param {string} prefix - logger prefix\n */\n\nexport default class {\n  public readonly prefix: string;\n  public doOutput: boolean = true;\n\n  /** Creates new logger */\n  constructor( prefix?: string, doOutput?: boolean ) {\n    this.doOutput = doOutput;\n    this.prefix = (prefix ?? '[bitwave.tv API]') + ' ';\n  }\n\n  /** Creates logger info */\n  info( message: String, ...args ): void {\n    this.doOutput && console.log( this.prefix + message, ...args );\n  }\n\n  /** Creates logger warn */\n  warn( message: String, ...args ): void {\n    this.doOutput && console.warn( this.prefix + '[WARN] ' + message, ...args );\n  }\n\n  /** Creates logger error */\n  error( message: String, ...args ): void {\n    this.doOutput && console.error( this.prefix + '[ERROR] ' + message, ...args );\n  }\n}\n","import $http from \"./httpClient\";\nimport logger from \"./log\";\nimport { io } from \"socket.io-client\";\n\nconst $log = new logger(\"[bitwave.tv API]\");\n\nexport interface Message {\n  avatar: string;\n  badge: string;\n  color: string;\n  unum: number;\n  message: string;\n  timestamp: number;\n  username: string;\n  channel: string;\n  global: boolean;\n  type: string;\n  id: string;\n}\n\nexport interface OutgoingMessage {\n  message: string;\n  channel: string;\n  global: boolean;\n  showBadge: boolean;\n}\n\nexport type Credentials = string | Token | void;\n\nexport interface Token {\n  recaptcha: any;\n  page: string;\n  jwt: string;\n}\n\n/* ========================================= */\n\nexport class FedwaveChat {\n  private _socket = null;\n\n  private _chatServer = \"https://fw.rnih.org\";\n  private _apiPrefix = \"https://fw.rnih.org\";\n  private _whisperEndpoint = \"/v1/whispers/send\";\n\n  public async getTrollToken() {\n    try {\n      return await $http.get(this._apiPrefix + \"/mktroll\");\n    } catch (e) {\n      $log.error(`Couldn't get troll token!`, e);\n    }\n  }\n\n  private userProfile: Token = {\n    recaptcha: null,\n    page: \"global\", // room name\n    jwt: null,\n  };\n\n  /**\n   * Uses `credentials` to get a token from the server.\n   *\n   * @return JWT token as string\n   */\n  public async initToken(credentials: Token | void) {\n    if (credentials) {\n      this.userProfile = credentials;\n    } else {\n      this.userProfile.jwt = await this.getTrollToken();\n      this.onUpdateCredentials(this.userProfile.jwt);\n    }\n  }\n\n  public global: boolean | any = true; /**< Global chat mode flag */\n\n  /**\n   * Callback function that receives messages (in bulk)\n   * @param ms Message object array\n   */\n  public rcvMessageBulk(ms: Message[]): void {\n    for (const m of ms) console.log(m);\n  }\n\n  /**\n   * Callback function that receives paid chat alert objects\n   * @param message Alert object\n   */\n  public alert(message: Object): void {\n    $log.warn(`Received alert: `, message);\n  }\n\n  public channelViewers = []; /**< Array of channel viewers.  */\n\n  /**\n   * Callback function that gets called when the list of usernames gets updated.\n   */\n  public async onUpdateUsernames(newViewers: any[]) {}\n\n  /**\n   * Callback function that gets called when current credentials change.\n   */\n  public async onUpdateCredentials(newCredentials: Credentials) {}\n\n  /**\n   * Gets an array of usernames from the server and puts it in channelViewers\n   * It is called automatically at request from the server, but can be called manually\n   * @see channelViewers\n   */\n  public async updateUsernames(): Promise<void> {\n    try {\n      const res = await $http.get(this._apiPrefix + \"/v1/chat/channels\");\n      const data = JSON.parse(res);\n      if (data && data.success) {\n        await this.onUpdateUsernames(data.data);\n        this.channelViewers = data.data;\n      }\n    } catch (e) {\n      $log.error(`Couldn't update usernames!`);\n      console.error(e);\n    }\n  }\n\n  public onHydrate(data: Message[]) {\n    this.rcvMessageBulk(data);\n  }\n\n  /**\n   * Requests messages from the server (called hydration)\n   * It is called automatically when reconnecting.\n   * @see socketError()\n   * @return False if unsuccessful or empty\n   */\n  public async hydrate(): Promise<boolean> {\n    try {\n      const url: string =\n        this._apiPrefix +\n        \"/v1/messages/\" +\n        (!this.global && this.userProfile.page ? this.userProfile.page : \"\");\n      const data = JSON.parse(await $http.get(url));\n      if (!data.size)\n        return $log.warn(\"Hydration data was empty\") === undefined && false;\n\n      this.onHydrate(data.data);\n      return true;\n    } catch (e) {\n      $log.error(`Couldn't get chat hydration data!`);\n      console.error(e);\n      return false;\n    }\n  }\n\n  /**\n   * This function is called when connecting to the server\n   */\n  public socketConnect() {\n    this._socket.emit(\"new user\", this.userProfile);\n    $log.info(`Connected to chat! (${this.userProfile.page})`);\n  }\n\n  /**\n   * This function is called when the server issues a reconnect.\n   * It force hydrates chat to catch up.\n   */\n  public async socketReconnect() {\n    $log.info(\"Socket issued 'reconnect'. Forcing hydration...\");\n    await this.hydrate();\n  }\n\n  /**\n   * This function is called when there's a socket error.\n   */\n  public async socketError(message: string, error) {\n    $log.error(`Socket error: ${message}`, error);\n    // TODO: handle error\n  }\n\n  public blocked(data) {\n    $log.info(\"TODO: handle blocked event\", data);\n  }\n\n  public pollstate(data) {\n    $log.info(\"TODO: handle pollstate event\", data);\n  }\n\n  public constructor(doLogging?: boolean) {\n    $log.doOutput = doLogging;\n  }\n\n  /**\n   * Inits data and starts connection to server\n   * @param room is a string for the channel you wish to connect to\n   * @param credentials User credentials if falsy, gets a new troll token. If a string, it's taken as the JWT chat token\n   * @param specificServer URI to a specific chat server\n   */\n  async connect(\n    room: string,\n    credentials: string | Token | void,\n    specificServer?: string\n  ) {\n    if (typeof credentials === \"string\") this.userProfile.jwt = credentials;\n    else this.initToken(credentials);\n\n    this.userProfile.page = room;\n\n    const socketOptions = { transports: [\"websocket\"] };\n    this._socket = io(specificServer || this._chatServer, socketOptions);\n\n    const sockSetup = new Map([\n      [\n        \"connect\",\n        async () => {\n          this._socket.emit(\"new user\", this.userProfile);\n          $log.info(`Connected to chat! (${this.userProfile.page})`);\n          await this.socketConnect.call(this);\n        },\n      ],\n      [\n        \"reconnect\",\n        async () => {\n          $log.info(\"Socket issued 'reconnect'. Forcing hydration...\");\n          await this.hydrate();\n          await this.socketReconnect.call(this);\n        },\n      ],\n      [\n        \"error\",\n        async (error: Object) => {\n          // TODO: handle error\n          $log.error(`Socket error: Connection Failed`, error);\n          await this.socketError.call(this, `Connection Failed`, error);\n        },\n      ],\n      [\n        \"disconnect\",\n        async (data: Object) =>\n          await $log.error(`Socket error: Connection Lost`, data),\n      ],\n      [\"update usernames\", async () => await this.updateUsernames()],\n      [\n        \"bulkmessage\",\n        async (data: Message[]) => await this.rcvMessageBulk(data),\n      ],\n      [\"alert\", async (data) => await this.alert(data)],\n    ]);\n\n    sockSetup.forEach((cb, event) => {\n      this._socket.on(event, cb);\n    });\n  }\n\n  get room() {\n    return this.userProfile.page;\n  } /**< Current room */\n  set room(r) {\n    this.userProfile.page = r;\n    $log.info(`Changed to room ${r}`);\n  }\n\n  get doLogging() {\n    return $log.doOutput;\n  } /**< Enable log output */\n  set doLogging(r) {\n    $log.doOutput = r;\n  }\n\n  get socket() {\n    return this._socket;\n  } /**< Deprecated, but allows access to underlying socket */\n  set socket(s) {\n    this._socket = s;\n  }\n\n  disconnect(): void {\n    this.socket?.off();\n    this.socket?.disconnect();\n  }\n\n  /**\n   * Sends message with current config (this.userProfile)\n   * @param msg Message to be sent. Can be an object: { message, channel, global, showBadge }, or just a string (in which case channel/global use current values)\n   */\n  sendMessage(msg: OutgoingMessage | string): void {\n    switch (typeof msg) {\n      case \"object\":\n        this._socket.emit(\"message\", msg);\n        break;\n      case \"string\":\n        this._socket.emit(\"message\", {\n          message: msg,\n          channel: this.userProfile.page,\n          global: this.global,\n          showBadge: true,\n        });\n        break;\n    }\n  }\n\n  async sendWhisper(recipient: string, msg: string): Promise<void> {\n    this._socket.emit(\"whisper\", {\n      to: recipient,\n      message: msg,\n    });\n  }\n}\n"],"names":["$get","url","cb","req","XMLHttpRequest","onreadystatechange","readyState","status","responseText","open","send","$post","data","JSON","parse","setRequestHeader","stringify","get","Promise","resolve","response","post","prefix","doOutput","info","message","console","log","warn","error","$log","logger","FedwaveChat","getTrollToken","$http","_apiPrefix","e","initToken","credentials","userProfile","jwt","onUpdateCredentials","rcvMessageBulk","ms","m","alert","onUpdateUsernames","newViewers","newCredentials","updateUsernames","res","success","channelViewers","onHydrate","hydrate","global","page","size","undefined","socketConnect","_socket","emit","socketReconnect","socketError","blocked","pollstate","doLogging","_chatServer","_whisperEndpoint","recaptcha","connect","room","specificServer","socketOptions","transports","io","sockSetup","Map","call","forEach","event","on","disconnect","socket","off","sendMessage","msg","channel","showBadge","sendWhisper","recipient","to","r","s"],"mappings":"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"}