{"version":3,"file":"request-capabilities.mjs","names":[],"sources":["../../src/operations/request-capabilities.ts"],"sourcesContent":["import type { SingleConnection } from \"~/client/connection\";\nimport type { IRCMessage } from \"~/message/irc/irc-message\";\nimport { awaitResponse } from \"~/await/await-response\";\nimport { ConnectionError } from \"~/client/errors\";\nimport { CapMessage } from \"~/message/twitch-types/cap\";\n\nexport class CapabilitiesError extends ConnectionError {}\n\nexport function acknowledgesCapabilities(requestedCapabilities: string[]) {\n  return (event: IRCMessage): event is CapMessage =>\n    event instanceof CapMessage &&\n    event.subCommand === \"ACK\" &&\n    requestedCapabilities.every((cap) => event.capabilities.includes(cap));\n}\n\nexport function deniedAnyCapability(requestedCapabilities: string[]) {\n  return (event: IRCMessage): event is CapMessage =>\n    event instanceof CapMessage &&\n    event.subCommand === \"NAK\" &&\n    requestedCapabilities.some((cap) => event.capabilities.includes(cap));\n}\n\nexport async function requestCapabilities(\n  conn: SingleConnection,\n  requestMembershipCapability: boolean,\n): Promise<void> {\n  const capabilities = [\"twitch.tv/commands\", \"twitch.tv/tags\"];\n  if (requestMembershipCapability) {\n    capabilities.push(\"twitch.tv/membership\");\n  }\n  conn.sendRaw(`CAP REQ :${capabilities.join(\" \")}`);\n\n  // CAP ACK :twitch.tv/commands twitch.tv/tags twitch.tv/membership\n  // CAP NAK :twitch.tv/invalid\n  await awaitResponse(conn, {\n    success: acknowledgesCapabilities(capabilities),\n    failure: deniedAnyCapability(capabilities),\n    errorType: (message, cause) => new CapabilitiesError(message, cause),\n    errorMessage: `Failed to request server capabilities ${capabilities.join(\n      \", \",\n    )}`,\n  });\n}\n"],"mappings":";;;;AAMA,IAAa,oBAAb,cAAuC,gBAAgB;AAEvD,SAAgB,yBAAyB,uBAAiC;AACxE,SAAQ,UACN,iBAAiB,cACjB,MAAM,eAAe,SACrB,sBAAsB,OAAO,QAAQ,MAAM,aAAa,SAAS,IAAI,CAAC;;AAG1E,SAAgB,oBAAoB,uBAAiC;AACnE,SAAQ,UACN,iBAAiB,cACjB,MAAM,eAAe,SACrB,sBAAsB,MAAM,QAAQ,MAAM,aAAa,SAAS,IAAI,CAAC;;AAGzE,eAAsB,oBACpB,MACA,6BACe;CACf,MAAM,eAAe,CAAC,sBAAsB,iBAAiB;AAC7D,KAAI,4BACF,cAAa,KAAK,uBAAuB;AAE3C,MAAK,QAAQ,YAAY,aAAa,KAAK,IAAI,GAAG;AAIlD,OAAM,cAAc,MAAM;EACxB,SAAS,yBAAyB,aAAa;EAC/C,SAAS,oBAAoB,aAAa;EAC1C,YAAY,SAAS,UAAU,IAAI,kBAAkB,SAAS,MAAM;EACpE,cAAc,yCAAyC,aAAa,KAClE,KACD;EACF,CAAC"}