{"version":3,"file":"expanded.mjs","names":[],"sources":["../../src/config/expanded.ts"],"sourcesContent":["import type {\n  BasicTcpTransportConfiguration,\n  ClientConfiguration,\n  DuplexTransportConfiguration,\n  RateLimitsConfig,\n  TcpTransportConfiguration,\n  TransportConfiguration,\n  WebSocketTransportConfiguration,\n} from \"./config\";\nimport { type RateLimits, rateLimitPresets } from \"./rate-limits\";\nimport { setDefaults } from \"~/utils/set-defaults\";\n\nexport type ExpandedDuplexTransportConfiguration =\n  Required<DuplexTransportConfiguration>;\n\nexport type ExpandedTcpTransportConfiguration =\n  Required<TcpTransportConfiguration> & {\n    preSetup: false;\n  };\n\nexport type ExpandedWebSocketTransportConfiguration =\n  WebSocketTransportConfiguration & {\n    preSetup: false;\n  };\n\nexport type ExpandedTransportConfiguration =\n  | ExpandedDuplexTransportConfiguration\n  | ExpandedTcpTransportConfiguration\n  | ExpandedWebSocketTransportConfiguration;\n\nexport type ExpandedClientConfiguration = Required<\n  Omit<ClientConfiguration, \"connection\" | \"password\" | \"rateLimits\">\n> & {\n  password: string | undefined;\n  connection: ExpandedTransportConfiguration;\n  rateLimits: RateLimits;\n};\n\nconst defaults: Omit<\n  ExpandedClientConfiguration,\n  \"connection\" | \"rateLimits\"\n> & {\n  connection: BasicTcpTransportConfiguration;\n} = {\n  username: \"justinfan12345\",\n  password: undefined,\n  requestMembershipCapability: false,\n\n  maxChannelCountPerConnection: 90,\n\n  connection: {\n    type: \"tcp\",\n    secure: true,\n  },\n\n  connectionRateLimits: {\n    parallelConnections: 1,\n    releaseTime: 2000, // 2 seconds\n  },\n\n  installDefaultMixins: true,\n};\n\nexport function expandTransportConfig(\n  config: TransportConfiguration | undefined,\n): ExpandedTransportConfiguration {\n  if (config == null) {\n    return expandTransportConfig({\n      secure: true,\n    });\n  }\n\n  switch (config.type) {\n    case \"tcp\":\n    case undefined: {\n      let host;\n      let port;\n\n      if (\"host\" in config && \"port\" in config) {\n        host = config.host;\n        port = config.port;\n      } else {\n        host = \"irc.chat.twitch.tv\";\n        port = config.secure ? 6697 : 6667;\n      }\n\n      return {\n        type: \"tcp\",\n        secure: config.secure,\n        host,\n        port,\n        preSetup: false,\n      };\n    }\n    case \"duplex\": {\n      return setDefaults(config, { preSetup: false });\n    }\n\n    case \"websocket\": {\n      const url = \"url\" in config ? config.url : \"wss://irc-ws.chat.twitch.tv\";\n\n      return {\n        type: \"websocket\",\n        url,\n        preSetup: false,\n      };\n    }\n    default: {\n      throw new Error(\"Unknown transport type\");\n    }\n  }\n}\n\nexport function expandRateLimitsConfig(\n  config: RateLimitsConfig | undefined,\n): RateLimits {\n  if (config == null) {\n    return rateLimitPresets.default;\n  }\n\n  return typeof config === \"string\" ? rateLimitPresets[config] : config;\n}\n\nexport function expandConfig(\n  config?: ClientConfiguration,\n): ExpandedClientConfiguration {\n  const newConfig = setDefaults(\n    config,\n    defaults,\n  ) as ExpandedClientConfiguration;\n\n  newConfig.username = newConfig.username.toLowerCase();\n  newConfig.connection = expandTransportConfig(newConfig.connection);\n  newConfig.rateLimits = expandRateLimitsConfig(newConfig.rateLimits);\n  return newConfig;\n}\n"],"mappings":";;;AAsCA,MAAM,WAKF;CACF,UAAU;CACV,UAAU,KAAA;CACV,6BAA6B;CAE7B,8BAA8B;CAE9B,YAAY;EACV,MAAM;EACN,QAAQ;EACT;CAED,sBAAsB;EACpB,qBAAqB;EACrB,aAAa;EACd;CAED,sBAAsB;CACvB;AAED,SAAgB,sBACd,QACgC;AAChC,KAAI,UAAU,KACZ,QAAO,sBAAsB,EAC3B,QAAQ,MACT,CAAC;AAGJ,SAAQ,OAAO,MAAf;EACE,KAAK;EACL,KAAK,KAAA,GAAW;GACd,IAAI;GACJ,IAAI;AAEJ,OAAI,UAAU,UAAU,UAAU,QAAQ;AACxC,WAAO,OAAO;AACd,WAAO,OAAO;UACT;AACL,WAAO;AACP,WAAO,OAAO,SAAS,OAAO;;AAGhC,UAAO;IACL,MAAM;IACN,QAAQ,OAAO;IACf;IACA;IACA,UAAU;IACX;;EAEH,KAAK,SACH,QAAO,YAAY,QAAQ,EAAE,UAAU,OAAO,CAAC;EAGjD,KAAK,YAGH,QAAO;GACL,MAAM;GACN,KAJU,SAAS,SAAS,OAAO,MAAM;GAKzC,UAAU;GACX;EAEH,QACE,OAAM,IAAI,MAAM,yBAAyB;;;AAK/C,SAAgB,uBACd,QACY;AACZ,KAAI,UAAU,KACZ,QAAO,iBAAiB;AAG1B,QAAO,OAAO,WAAW,WAAW,iBAAiB,UAAU;;AAGjE,SAAgB,aACd,QAC6B;CAC7B,MAAM,YAAY,YAChB,QACA,SACD;AAED,WAAU,WAAW,UAAU,SAAS,aAAa;AACrD,WAAU,aAAa,sBAAsB,UAAU,WAAW;AAClE,WAAU,aAAa,uBAAuB,UAAU,WAAW;AACnE,QAAO"}