{"version":3,"file":"roomstate-tracker.mjs","names":[],"sources":["../../src/mixins/roomstate-tracker.ts"],"sourcesContent":["import EventEmitter from \"eventemitter3\";\n\nimport type { ClientMixin } from \"./base-mixin\";\nimport type { ChatClient } from \"~/client/client\";\nimport {\n  type RoomState,\n  type RoomstateMessage,\n  hasAllStateTags,\n} from \"~/message/twitch-types/roomstate\";\nimport { debugLogger } from \"~/utils/debug-logger\";\n\nconst log = debugLogger(\"dank-twitch-irc:roomstate-tracker\");\n\nexport interface RoomStateTrackerEvents {\n  newChannelState: (channelLogin: string, newState: RoomState) => void;\n}\n\n/**\n * Tracks the state of the logged in user (the bot) in all channels the bot operates in\n */\nexport class RoomStateTracker\n  extends EventEmitter<RoomStateTrackerEvents>\n  implements ClientMixin\n{\n  private readonly channelStates: Record<string, RoomState> = {};\n\n  public getChannelState(channelName: string): RoomState | undefined {\n    return this.channelStates[channelName];\n  }\n\n  public applyToClient(client: ChatClient): void {\n    client.on(\"ROOMSTATE\", this.onRoomstateMessage.bind(this));\n  }\n\n  private onRoomstateMessage(message: RoomstateMessage): void {\n    const currentState: RoomState | undefined = this.getChannelState(\n      message.channel.login,\n    );\n    const extractedState: Partial<RoomState> = message.extractRoomState();\n\n    if (currentState == null) {\n      if (!hasAllStateTags(extractedState)) {\n        log.warn(\n          \"Got incomplete ROOMSTATE before receiving complete roomstate:\",\n          message.rawSource,\n        );\n        return;\n      }\n      this.channelStates[message.channel.login] = extractedState;\n      this.emit(\"newChannelState\", message.channel.login, extractedState);\n    } else {\n      const newState = Object.assign({}, currentState, extractedState);\n      this.channelStates[message.channel.login] = newState;\n      this.emit(\"newChannelState\", message.channel.login, newState);\n    }\n  }\n}\n"],"mappings":";;;;AAWA,MAAM,MAAM,YAAY,oCAAoC;;;;AAS5D,IAAa,mBAAb,cACU,aAEV;CACE,gBAA4D,EAAE;CAE9D,gBAAuB,aAA4C;AACjE,SAAO,KAAK,cAAc;;CAG5B,cAAqB,QAA0B;AAC7C,SAAO,GAAG,aAAa,KAAK,mBAAmB,KAAK,KAAK,CAAC;;CAG5D,mBAA2B,SAAiC;EAC1D,MAAM,eAAsC,KAAK,gBAC/C,QAAQ,QAAQ,MACjB;EACD,MAAM,iBAAqC,QAAQ,kBAAkB;AAErE,MAAI,gBAAgB,MAAM;AACxB,OAAI,CAAC,gBAAgB,eAAe,EAAE;AACpC,QAAI,KACF,iEACA,QAAQ,UACT;AACD;;AAEF,QAAK,cAAc,QAAQ,QAAQ,SAAS;AAC5C,QAAK,KAAK,mBAAmB,QAAQ,QAAQ,OAAO,eAAe;SAC9D;GACL,MAAM,WAAW,OAAO,OAAO,EAAE,EAAE,cAAc,eAAe;AAChE,QAAK,cAAc,QAAQ,QAAQ,SAAS;AAC5C,QAAK,KAAK,mBAAmB,QAAQ,QAAQ,OAAO,SAAS"}