{"version":3,"file":"index.mjs","sources":["../src/utils/MCAPIError.ts","../src/classes/misc/MinecraftPacket.ts","../src/utils/requests.ts","../src/classes/player/Player.ts","../src/utils/fn.ts","../src/classes/player/RegularPlayerTextures.ts","../src/classes/player/RegularPlayer.ts","../src/apis/Players.ts","../src/classes/server/ServerPlayers.ts","../src/classes/server/Server.ts","../src/apis/Servers.ts","../src/classes/account/MojangAccountProperties.ts","../src/classes/profile/GameProfile.ts","../src/classes/player/LoggedPlayerTextures.ts","../src/classes/player/LoggedPlayer.ts","../src/classes/profile/MinecraftProfile.ts","../src/classes/profile/OtherProfile.ts","../src/classes/account/MojangAccountProfiles.ts","../src/classes/account/MojangAccount.ts","../src/apis/Accounts.ts","../src/classes/misc/ServiceStatus.ts","../src/index.ts"],"sourcesContent":["/**\r\n * @internal\r\n */\r\nclass MCAPIError extends Error {\r\n  readonly code: number\r\n  readonly date: Date\r\n\r\n  constructor(httpCode: number, ...params: any[]) {\r\n    super(...params)\r\n\r\n    if (Error.captureStackTrace)\r\n      Error.captureStackTrace(this, MCAPIError)\r\n\r\n    this.code = httpCode\r\n    this.date = new Date()\r\n  }\r\n}\r\n\r\nexport {\r\n  MCAPIError,\r\n  MCAPIError as default\r\n}","import { Socket } from \"net\"\r\n\r\n/** \r\n *  @internal\r\n *  Minecraft ping packet builder.\r\n *\r\n *  Also used the wiki.vg documentation about Handshaking.\r\n *  @see {@link https://wiki.vg/Protocol Minecraft Communication Protocol}\r\n *  @see {@link https://wiki.vg/Server_List_Ping Server List Ping}\r\n */\r\nclass MinecraftPacket {\r\n  #buffer = Buffer.from(new Array(1))\r\n  get buffer() { return this.#buffer }\r\n  \r\n  #cursor = 0\r\n  get cursor() { return this.#cursor }\r\n\r\n  writeVarInt(val: number) {\r\n    do {\r\n      var tmp = val & 0b01111111\r\n      val >>>= 7\r\n      tmp |= val != 0 ? 0b10000000 : 0\r\n      this.writeUByte(tmp)\r\n    } while (val != 0)\r\n  }\r\n\r\n  addToBuffer = (num: number) => {\r\n    const exceeds = (this.cursor + num) > this.buffer.length\r\n    if (!exceeds) return\r\n\r\n    const buf = Buffer.from(new Array(num))\r\n    this.appendData(buf)\r\n  }\r\n\r\n  appendData(data: Buffer) {\r\n    this.#buffer = Buffer.concat([this.#buffer, data])\r\n  } \r\n\r\n  writeUByte(val: number) {\r\n    this.addToBuffer(1)\r\n    this.#buffer.writeUInt8(val, this.cursor)\r\n    this.#cursor++\r\n  }\r\n\r\n  writeString(val: string) {\r\n    const len = val.length\r\n    this.writeVarInt(len)\r\n    this.addToBuffer(len)\r\n\r\n    this.buffer.write(val, this.cursor, len, \"utf8\")\r\n    this.#cursor += len\r\n  }\r\n\r\n  writeUShort(val: any) {\r\n    this.writeUByte(val >> 8)\r\n    this.writeUByte(val & 0b11111111)\r\n  }\r\n\r\n  readVarInt() {\r\n    let read: number\r\n\r\n    let cursor = 1\r\n    let value = 0\r\n\r\n    do {\r\n      read = this.buffer.readUInt8(this.cursor + cursor)\r\n      value |= (read & 0x7F) << cursor * 7\r\n      cursor++\r\n    } while ((read & 0b10000000) === 128)\r\n\r\n    this.#cursor += cursor\r\n    return value\r\n  }\r\n\r\n  readString() {\r\n    const len = this.readVarInt()\r\n    return this.buffer.toString(\"utf8\", this.cursor, this.#cursor += len)\r\n  }\r\n\r\n  send(socket: Socket) {\r\n    const length_packet = new MinecraftPacket()\r\n    length_packet.writeVarInt(this.buffer.length)\r\n\r\n    const mergedBuf = Buffer.concat([length_packet.buffer, this.buffer])\r\n    socket.write(mergedBuf)\r\n  }\r\n}\r\n\r\nexport {\r\n  MinecraftPacket,\r\n  MinecraftPacket as default\r\n} \r\n","import net from 'net'\r\n\r\nimport MCAPIError from './MCAPIError.js'\r\nimport MinecraftPacket from '../classes/misc/MinecraftPacket.js'\r\nimport { OnlineServer, PingedServer } from '../classes/server/Server.js'\r\n\r\ntype PingParams = {\r\n  address: string\r\n  port?: number\r\n  protocol?: number\r\n  timeout?: number\r\n}\r\n\r\ntype ReqOptions = {\r\n  method?: string\r\n  payload?: {}\r\n  headers?: {}\r\n}\r\n\r\ntype HttpMethod = \"GET\" | \"POST\" |  \"DELETE\"\r\n\r\nclass Requests {\r\n  private static send = async (url: string, opts: ReqOptions, method?: HttpMethod) => {\r\n    const options: any = null\r\n\r\n    if (method) options.method = method\r\n    if (opts?.payload) options.body = opts.payload\r\n    if (opts?.headers) options.headers = opts.headers || {\r\n      Authorization: `Bearer ${opts}`\r\n    }\r\n\r\n    const isBrowser = typeof window === \"object\"\r\n    if (isBrowser) url = `https://corsproxy.io/?${encodeURIComponent(url)}`\r\n\r\n    return await fetch(url, options)\r\n  }\r\n\r\n  /**\r\n   * Sends an HTTP `GET` request to the input URL.\r\n   *\r\n   * @internal\r\n   * @param url The URL to send the request to.\r\n   * @param opts The options that will be used in the request. (Optional)\r\n   */\r\n  static GET = (url: string, opts?: ReqOptions) => this.send(url, opts)\r\n\r\n  /**\r\n   * Sends an HTTP `POST` request to the input URL.\r\n   *\r\n   * @internal\r\n   * @param url The URL to send the request to.\r\n   * @param opts The options that will be used in the request. (Optional)\r\n   */\r\n  static POST = (url: string, opts?: ReqOptions) => this.send(url, opts, \"POST\")\r\n\r\n  /**\r\n   * Sends an HTTP `DELETE` request to the input URL.\r\n   *\r\n   * @internal\r\n   * @param url The URL to send the request to.\r\n   * @param opts The options that will be used in the request. (Optional)\r\n   */\r\n  static DELETE = (url: string, opts?: ReqOptions) => this.send(url, opts, \"DELETE\")\r\n\r\n  static SOCKET_TIMEOUT = 300000\r\n\r\n  /**\r\n   * Pings a Minecraft server asynchronously and returns a raw object with server data.\r\n   * Should not be called when running outside of a Node process.\r\n   * \r\n   * Used internally to create a new Server instance.\r\n   * ```\r\n   * const server = new Server(data, host, port)\r\n   * console.log(server.players)\r\n   * ```\r\n   *\r\n   * @internal\r\n   * @param address  The server IP address\r\n   * @param port     The server port number\r\n   * @param protocol The protocol to use for the ping\r\n   * @param timeout  Duration in ms before the connection times out\r\n   */\r\n  static sendServerPing(pingParams: PingParams): Promise<OnlineServer | PingedServer> {\r\n    return new Promise((resolve, reject) => {\r\n      const { address, port, protocol, timeout } = pingParams\r\n      const totalReadingDataBuffer = new MinecraftPacket()\r\n\r\n      const connectOpts = { host: address, port, timeout: timeout || this.SOCKET_TIMEOUT }\r\n\r\n      // 'connect' listener\r\n      const client = net.connect(connectOpts, () => { \r\n        const handshake = new MinecraftPacket()\r\n\r\n        handshake.writeVarInt(0)\r\n        handshake.writeVarInt(protocol)\r\n        handshake.writeString(address)\r\n        handshake.writeUShort(port)\r\n        handshake.writeVarInt(1)\r\n        handshake.send(client)\r\n  \r\n        const legacyPing = new MinecraftPacket()\r\n        legacyPing.writeVarInt(0)\r\n        legacyPing.send(client)\r\n      })\r\n      \r\n      client.on('data', buf => {\r\n        // TODO: Eh, should `_buffer` be exposed like this?\r\n        totalReadingDataBuffer.appendData(buf)\r\n        client.end()\r\n      })\r\n\r\n      client.on('close', () => {\r\n        totalReadingDataBuffer.readVarInt()\r\n        const res = totalReadingDataBuffer.readString()\r\n        const data = JSON.parse(res)\r\n\r\n        resolve(data)\r\n      })\r\n\r\n      client.on('timeout', () => {\r\n        client.destroy()\r\n        reject(new MCAPIError(408, \"Timed out\"))\r\n      })\r\n\r\n      client.on('error', (e: Error) => {\r\n        client.destroy()\r\n        reject(e)\r\n      })\r\n    })\r\n  }\r\n}\r\n\r\nexport {\r\n  Requests,\r\n  Requests as default\r\n}","/**  \r\n* @public\r\n* The base class that other Player related classes extend.\r\n* Represents a player and their basic info. (username, uuid, etc.)\r\n*/\r\nclass Player {\r\n  readonly uuid: string\r\n  readonly username: string\r\n  readonly properties: PlayerProperty[]\r\n\r\n  constructor(data: PlayerIdentity) {\r\n    this.uuid = data.id\r\n    this.username = data.name\r\n    this.properties = data.properties\r\n  }\r\n}\r\n\r\nexport type PlayerIdentity = {\r\n  uuid?: string\r\n  id?: string\r\n  name: string\r\n  properties?: PlayerProperty[]\r\n  demo?: boolean\r\n  legacy?: boolean\r\n}\r\n\r\nexport type PlayerProperty = {\r\n  name: string\r\n  value: string\r\n}\r\n\r\nexport {\r\n  Player,\r\n  Player as default\r\n}","/**\r\n * @internal\r\n */\r\nconst Base64 = {\r\n    encode: (data: any) => Buffer.from(data, 'utf8').toString('base64'),\r\n    decode: (data: string) => Buffer.from(data, 'base64').toString('utf-8')\r\n}\r\n\r\nconst isNode = () => typeof process !== \"undefined\" && process?.versions?.node\r\n \r\nexport {\r\n    Base64, isNode\r\n}","import { Base64 } from '../../utils/fn.js'\r\n\r\n/** \r\n * Represents a Minecraft player's skin and cape.\r\n * To manipulate a player skin, use {@link LoggedPlayerTextures}.\r\n */\r\nclass RegularPlayerTextures {\r\n  skin_url: any\r\n  cape_url: any\r\n  slim: boolean\r\n\r\n  uploadedAt: number\r\n\r\n  constructor(textureData: any) {\r\n    const { textures, timestamp } = JSON.parse(Base64.decode(textureData))\r\n    \r\n    const skinTex = textures.SKIN\r\n    const capeTex = textures.CAPE\r\n\r\n    this.skin_url = skinTex?.url\r\n    this.cape_url = capeTex?.url\r\n    this.slim = skinTex?.metadata?.model === \"slim\"\r\n    this.uploadedAt = timestamp\r\n  }\r\n\r\n  getAttributes = () => ({ skinURL: this.skin_url, slim: this.slim })\r\n  setAttributes = (slim: boolean, skinUrl: string) => {\r\n    this.slim = slim\r\n    this.skin_url = skinUrl\r\n  }\r\n}\r\n\r\nexport {\r\n  RegularPlayerTextures,\r\n  RegularPlayerTextures as default\r\n}\r\n","\r\nimport Player, { PlayerIdentity } from './Player.js'\r\nimport RegularPlayerTextures from './RegularPlayerTextures.js'\r\n\r\n/** \r\n * Extends {@link Player} with added skin and cape info.\r\n * - Username history has been removed by Mojang.\r\n */\r\nclass RegularPlayer extends Player {\r\n  readonly legacy: boolean\r\n  readonly demo: boolean\r\n\r\n  textures: RegularPlayerTextures\r\n\r\n  constructor(playerData: PlayerIdentity, logged = false) {\r\n    super(playerData)\r\n\r\n    const { legacy, demo, properties } = playerData\r\n\r\n    this.legacy = legacy || false\r\n    this.demo = demo || false\r\n\r\n    if (!logged) {\r\n      const texturesProp = properties?.find(prop => prop.name === \"textures\")\r\n      if (texturesProp?.value) {\r\n        this.textures = new RegularPlayerTextures(texturesProp.value)\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport {\r\n  RegularPlayer,\r\n  RegularPlayer as default\r\n}\r\n","import reqs from '../utils/requests.js'\r\nimport RegularPlayer from '../classes/player/RegularPlayer.js'\r\nimport MCAPIError from '../utils/MCAPIError.js'\r\n\r\nclass MCAPI_PLAYERS {\r\n  /**\r\n   * Get profile info of an unlogged user.\r\n   * @param username The user's name.\r\n   */\r\n  static async get(username: string, raw = false): Promise<RegularPlayer> {\r\n      try {\r\n        const res: { id: string } = await reqs.GET(\"https://api.mojang.com/users/profiles/minecraft/\" + username).then(res => res.json())\r\n        return await this.getByUUID(res.id, raw)\r\n      }\r\n      catch(e) {\r\n        this.handleError(e, \r\n          \"[UUID Fetcher] - Username not recognized\",\r\n          \"[UUID Fetcher] - You have reached the API request limit\"\r\n        )\r\n\r\n        return null\r\n      }\r\n  }\r\n\r\n  /**\r\n   * Get profile info of an unlogged user by UUID.\r\n   * @param uuid The user's uuid.\r\n   */\r\n  static async getByUUID(uuid: string, raw?: boolean): Promise<RegularPlayer> {\r\n    try {\r\n      // TODO: Provide a type for userData\r\n      const userData = await reqs.GET(\"https://sessionserver.mojang.com/session/minecraft/profile/\" + uuid).then(res => res.json())\r\n      return raw ? userData : new RegularPlayer(userData)\r\n    } catch(e) {\r\n      this.handleError(e, \r\n        \"[Textures Fetcher] - UUID not recognized\",\r\n        \"[Textures Fetcher] - You have reached the API request limit\"\r\n      )\r\n  \r\n      return null\r\n    }\r\n  }\r\n\r\n  private static handleError = (err: Error, msg1: string, msg2: string) => {\r\n    if (err instanceof MCAPIError) {\r\n      const msg = err.code == 429 ? msg2 : msg1\r\n      err = new MCAPIError(err.code, msg)\r\n    }\r\n\r\n    console.error(err)\r\n  }\r\n}\r\n\r\nexport {\r\n  MCAPI_PLAYERS,\r\n  MCAPI_PLAYERS as default\r\n}","import Player from '../player/Player.js'\r\nimport { ServerPlayerData } from './Server.js'\r\n\r\nclass ServerPlayers {\r\n  readonly max: number\r\n  readonly online: number\r\n  readonly list: Player[]\r\n\r\n  constructor(data: ServerPlayerData) {\r\n    this.max = data.max\r\n    this.online = data.online\r\n    this.list = data.list?.map(pl => new Player(pl))\r\n  }\r\n}\r\n\r\nexport {\r\n  ServerPlayers,\r\n  ServerPlayers as default\r\n}","import ServerPlayers from './ServerPlayers.js'\r\nimport MCAPI_SERVERS from '../../apis/Servers.js'\r\nimport { PlayerIdentity } from '../player/Player.js'\r\n\r\nconst remove_start_end_spaces = (str: string) => str.replace(/^ {1,}| {1,}$/g, \"\")\r\n\r\nconst formatMOTD = (motd: string) => {\r\n  if (!motd) return ''\r\n\r\n  const lines = motd.split(/\\n|\\r/g)\r\n  return lines.map(line => {\r\n    line = remove_start_end_spaces(line)\r\n    return line\r\n  }).join(\"\\n\")\r\n}\r\n\r\n/**\r\n * @public\r\n * \r\n * Represents a pinged server. \r\n * An instance of this class is returned after calling {@link Servers}\r\n * - The `data` parameter must adhere to the {@link ServerData} type otherwise some properties may be undefined.\r\n * - If unspecified, the `host` parameter will default to `localhost`.\r\n * - If unspecified, the `port` parameter will default to `25565`.\r\n */\r\nclass Server {\r\n  /**\r\n   * The hostname of the server, e.g. `play.example.net:3000`.\r\n   * @defaultValue `localhost`\r\n   * @readonly\r\n   */\r\n  #host: string\r\n\r\n  get host() { return this.#host }\r\n\r\n  /**\r\n   * The port used by the server.\r\n   * @defaultValue `25565`\r\n   * @readonly\r\n   */\r\n  #port: number\r\n\r\n  get port() { return this.#port }\r\n\r\n  /**\r\n   * The server icon in the form of a {@link Blob}.\r\n   * @readonly\r\n   */\r\n  #icon: string\r\n\r\n  get icon() { return this.#icon }\r\n\r\n  /**\r\n   * The version (or range) this server supports.\r\n   * @readonly\r\n   */\r\n  #version: string\r\n  \r\n  get version() { return this.#version }\r\n\r\n  /**\r\n   * The protocol version number of this server, used to check for incompatibilites\r\n   * between the player's client and the server they are trying to connect to.\r\n   * \r\n   * @see {@link https://wiki.vg/Protocol_version_numbers List of protocol/version mappings.}\r\n   * @readonly\r\n   */\r\n  #protocol: number | NameVersion[]\r\n\r\n  get protocol() { return this.#protocol }\r\n\r\n  /**\r\n   * The instance of {@link ServerPlayers}\r\n   * @readonly\r\n   */\r\n  #players: ServerPlayers\r\n\r\n  get players() { return this.#players }\r\n\r\n  /**\r\n   * The title configured by this server, as shown above the MOTD.\r\n   * @readonly\r\n   */\r\n  #title: string\r\n\r\n  get title() { return this.#title }\r\n\r\n  /**\r\n   * The 'Message of the Day' configured by this server, a.k.a the description\r\n   * shown below the title when connecting via the server list.\r\n   * @readonly\r\n   */\r\n  #motd: ServerMotd\r\n\r\n  get motd() { return this.#motd }\r\n\r\n  /**\r\n   * Denotes whether this server is up and not offline.\r\n   * @readonly\r\n   */\r\n  #online: boolean\r\n\r\n  get online() { return this.#online }\r\n  \r\n  constructor(data: OnlineServer, host = 'localhost', port = 25565) {\r\n    if (!data) throw new Error(`[Server Constructor] - Parameter 'data' is ${data}`)\r\n\r\n    this.#host = host\r\n    this.#port = port\r\n\r\n    this.#init(data)\r\n  }\r\n\r\n  #init(data: OnlineServer) {\r\n    const { \r\n      online, icon, players,\r\n      motd, version, protocol\r\n    } = data\r\n\r\n    this.#online = online\r\n    this.#version = version\r\n    this.#protocol = protocol\r\n    this.#icon = icon\r\n    this.#players = new ServerPlayers(players)\r\n\r\n    if (motd) {\r\n      const title = motd.raw[0]\r\n      const motdText = motd.raw[1]\r\n\r\n      this.#title = title\r\n      this.#motd = {\r\n        raw: motdText || \"\",\r\n        formatted: formatMOTD(motdText)\r\n      }\r\n    }\r\n  }\r\n\r\n  refresh = async () => {\r\n    const data = await MCAPI_SERVERS.ping(this.#host, this.#port)\r\n    this.#init(data as OnlineServer)\r\n  }\r\n}\r\n\r\nexport type ServerMotd = {\r\n  raw: string\r\n  formatted: string\r\n}\r\n\r\nexport type TcpPingedServer = {\r\n  version: {\r\n    name: string\r\n    protocol: number\r\n  }\r\n  protocol: string\r\n  favicon: string\r\n  players: ServerPlayerData\r\n  description: {\r\n    text: string\r\n  }\r\n  enforcesSecureChat: boolean\r\n  previewsChat: boolean\r\n}\r\n\r\nexport type NamesRaw = {\r\n  names: string[]\r\n  raw: string[]\r\n}\r\n\r\ntype NameVersion = {\r\n  name: string\r\n  version: string\r\n}\r\n\r\nexport type RawCleanHtml = {\r\n  raw: string[]\r\n  clean: string[]\r\n  html: string[]\r\n}\r\n\r\nexport type PingedServer = {\r\n  online: boolean\r\n  ip: string\r\n  port: number\r\n  hostname?: string\r\n  debug: {\r\n    ping: boolean\r\n    query: boolean\r\n    srv: boolean\r\n    queryMismatch: boolean\r\n    ipInSrv: boolean\r\n    cnameInSrv: boolean\r\n    animatedMotd: boolean\r\n    cacheHit: boolean\r\n    cacheTime: number\r\n    cacheExpire: number\r\n    apiVersion: number\r\n  }\r\n}\r\n\r\nexport type OnlineServer = PingedServer & ServerOptionals & {\r\n  version: string\r\n  protocol: number | NameVersion[]\r\n  icon?: string\r\n  map: string\r\n  gamemode?: string\r\n  serverId?: string\r\n  eulaBlocked?: boolean\r\n  motd: RawCleanHtml\r\n  players: ServerPlayerData\r\n}\r\n\r\ntype ServerOptionals = Partial<{\r\n  software: string\r\n  plugins: NamesRaw | NameVersion[]\r\n  mods: NamesRaw | NameVersion[]\r\n  info: RawCleanHtml\r\n}>\r\n\r\nexport type ServerPlayerData = {\r\n  online: number\r\n  max: number\r\n  list?: PlayerIdentity[]\r\n  uuid?: {\r\n    [key: string]: string\r\n  }\r\n}\r\n\r\nexport {\r\n  Server,\r\n  Server as default\r\n}","import { Requests as reqs } from '../utils/requests.js'\r\nimport { Server, OnlineServer, PingedServer } from '../classes/server/Server.js'\r\nimport { isNode } from '../utils/fn.js'\r\n\r\nclass MCAPI_SERVERS {\r\n  /**\r\n   * The list of blocked servers. Expressed as SHA1 encoded IP addresses.\r\n   * @see Refer to the '*Blocked Servers*' section of {@link https://wiki.vg/Mojang_API#Blocked_Servers | the wiki}.\r\n   */\r\n  static blockedServers = async (): Promise<null | string[]> => {\r\n    try {\r\n      const res = await fetch(\"https://sessionserver.mojang.com/blockedservers\")\r\n      const serverList = await res.text().catch(console.error)\r\n\r\n      if (!serverList) return null\r\n      return serverList.split(\"\\n\")\r\n    }\r\n    catch(e: any) {\r\n      console.error(e)\r\n      return null\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Pings and retreives info on the requested server.\r\n   *\r\n   * @param host The server IP or hostname.\r\n   * Supports attaching the port number, e.g. `play.example.net:3000`\r\n   * \r\n   * @param port The server port number.\r\n   * If not specified, the \":port\" postfix in the `host` string is used. \r\n   * Otherwise, it will fallback to the default of `25565`.\r\n   */\r\n  static get = async (host: string, port?: number) => {\r\n    const data = await this.ping(host, port)\r\n    return new Server(data as OnlineServer, host, port)\r\n  }\r\n\r\n  /**\r\n   * @internal\r\n   */\r\n  static ping = async (\r\n    host: string, \r\n    port?: number\r\n  ): Promise<null | PingedServer | OnlineServer> => {\r\n    // Seperate address from the port.\r\n    const arr = host.split(\":\")\r\n    const address = arr[0]\r\n\r\n    if (!isNode()) {\r\n      // TCP pings can't be sent in the browser, fallback to API where the response is the same.\r\n      const url = `https://api.mcsrvstat.us/3/${address}`\r\n      const res = await fetch(url).catch(console.error) // TODO: Is it worth using reqs.GET here to use proxy?\r\n\r\n      return res ? await res.json() : null\r\n    }\r\n  \r\n    //#region We are in Node, prefer TCP over HTTP.\r\n    if (!port) {\r\n      port = arr.length > 1 ? parseInt(arr[1]) : 25565\r\n    }\r\n\r\n    try {\r\n      return await reqs.sendServerPing({ address, port })\r\n    } catch(e: any) {\r\n      console.error(e)\r\n      return null\r\n    }\r\n    //#endregion\r\n  } \r\n}\r\n\r\nexport {\r\n  MCAPI_SERVERS,\r\n  MCAPI_SERVERS as default\r\n}","/**  \r\n * Represents a Mojang account's general properties\r\n */\r\nclass MojangAccountProperties {\r\n  readonly suspended: boolean\r\n  readonly blocked: boolean\r\n  readonly secured: boolean\r\n\r\n  readonly legacy: boolean\r\n  readonly migrated: boolean\r\n  readonly migratedUser: boolean\r\n\r\n  readonly hashed: boolean\r\n  readonly emailVerified: boolean\r\n  readonly parentVerified: boolean\r\n\r\n  constructor(data: any) {\r\n    const { user } = data\r\n\r\n    this.suspended = user.suspended\r\n    this.blocked = user.blocked\r\n    this.secured = user.secured\r\n\r\n    this.legacy = user.legacyUser\r\n    this.migrated = user.migrated\r\n    this.migratedUser = user.fromMigratedUser\r\n\r\n    this.hashed = user.hashed\r\n    this.emailVerified = user.emailVerified\r\n    this.parentVerified = user.verifiedByParent\r\n  }\r\n}\r\n\r\nexport { \r\n  MojangAccountProperties,\r\n  MojangAccountProperties as default\r\n} \r\n","import { type MojangAccount } from \"../account/MojangAccount.js\"\r\n\r\nexport interface AuthenticatedProfile {\r\n  name: string\r\n  id: string\r\n  legacy?: boolean\r\n}\r\n\r\nexport interface ProfileProperty extends AuthenticatedProfile {\r\n  legacyProfile?: boolean\r\n  agent?: string\r\n  createdAt: string | number\r\n  tokenId?: string\r\n  suspended: boolean\r\n  migrated: boolean\r\n}\r\n\r\n/** \r\n * Represents a basic Mojang game profile\r\n */\r\nclass GameProfile {\r\n  readonly account: MojangAccount\r\n  readonly created: Date\r\n  readonly game: string\r\n  readonly uuid: string | number\r\n  readonly username: string\r\n  readonly token: string\r\n\r\n  constructor(data: ProfileProperty, associated_account: MojangAccount) {\r\n    const { createdAt, agent, id, name, tokenId } = data\r\n\r\n    this.account = associated_account\r\n    this.created = new Date(createdAt)\r\n    this.game = agent\r\n    this.uuid = id\r\n    this.username = name\r\n    this.token = tokenId\r\n  }\r\n}\r\n\r\nexport {\r\n  GameProfile,\r\n  GameProfile as default\r\n}\r\n","import reqs from '../../utils/requests.js'\r\nimport MCAPIError from '../../utils/MCAPIError.js'\r\n\r\nimport RegularPlayerTextures from './RegularPlayerTextures.js'\r\nimport { skins } from '../../endpoints.json'\r\n\r\n/** \r\n * Represents skin and cape of a logged in player.\r\n * - Extends {@link RegularPlayerTextures} to be able to manipulate skin\r\n */\r\nclass LoggedPlayerTextures extends RegularPlayerTextures {\r\n  readonly associatedAccount: any\r\n\r\n  #authHeader: {}\r\n\r\n  constructor(data: any, associatedAcc: any) {\r\n    super(data)\r\n\r\n    this.associatedAccount = associatedAcc\r\n    this.#authHeader = { \r\n      Authorization: `Bearer ${associatedAcc.tokens.access}`\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @public\r\n   * Removes the current skin and sets it to default (Steve).\r\n   * @returns {boolean} Boolean indicating whether the reset was successful.\r\n   */\r\n  resetSkin = async () => {\r\n    const res = await reqs.DELETE(skins.active, { headers: this.#authHeader }) as any\r\n\r\n    if (res instanceof MCAPIError) {\r\n      if (res.code === 429) {\r\n        console.error(new MCAPIError(429, \"[Skin Reset] - You have reached the API request limit\"))\r\n        return false\r\n      }\r\n    }\r\n\r\n    let code = res.statusCode || res.status\r\n    if (code !== 204) {\r\n      console.error(new MCAPIError(code, '[Skin Reset] - An error occurred sending request.'))\r\n      return false\r\n    }\r\n\r\n    this.skin_url = null\r\n    return true\r\n  }\r\n\r\n  /**\r\n   * Upload a skin to Mojang servers.\r\n   * \r\n   * **NOTE** - This will also overwrite the currently active skin!\r\n   * \r\n   * @param file The PNG file that will be uploaded.\r\n   * @param slim Whether or not the skin should be slim or classic.\r\n   * \r\n   * @returns\r\n   * A {@link Boolean} indicatating if the upload was successful,\r\n   * `false` is also returned if the file input is not a valid PNG.\r\n   */\r\n  uploadSkin = async (file: string | File | Buffer, slim = false) => {\r\n    if (!file) {\r\n      console.error(new MCAPIError(400, `A valid PNG file must be provided! '${file}' was passed.`))\r\n      return false\r\n    }\r\n\r\n    //TODO: Handle MIME type validation\r\n\r\n    const res = await reqs.POST(skins.list, { payload: file, headers: this.#authHeader })\r\n    if (!res) {\r\n      console.error(new MCAPIError(404, `[Upload Skin] - Could not send the request, received ${res}`))\r\n      return false\r\n    }\r\n\r\n    return true\r\n  }\r\n\r\n  /**\r\n   * \r\n   * @param url The URL of the new skin, e.g. http://assets.mojang.com/SkinTemplates/steve.png\r\n   * @param slim Whether or not the skin should be slim or classic.\r\n   * \r\n   * @beta\r\n   */\r\n  useSkinFromURL = async (url: string, slim = false) => {\r\n    if (!url) {\r\n      console.error(new MCAPIError(400, `Valid URL must be provided! '${url}' was passed.`))\r\n      return false\r\n    }\r\n\r\n    const _slim = slim || (this.slim ?? false)\r\n    const body = `variant=\"${(_slim ? \"slim\" : \"classic\")}\"&url=${url}`\r\n\r\n    const res = await reqs.POST(skins.list, { payload: body, headers: this.#authHeader }).then(() => {\r\n        this.setAttributes(_slim, url)\r\n        return true\r\n    }).catch((err: Error) => {\r\n      if (!(err instanceof MCAPIError)) {\r\n        console.error(err)\r\n        return false\r\n      }\r\n        \r\n      // No content (as expected)\r\n      if (err.code === 204) {\r\n        this.setAttributes(_slim, url)\r\n        return true\r\n      }\r\n      \r\n      const errPrefix = '[Skin from URL] - '\r\n      const msg = err.code === 429 \r\n          ? `You have reached the API request limit`\r\n          : `The image couldn't be retrieved from the url`\r\n          \r\n      console.error(new MCAPIError(err.code, `${errPrefix}${msg}`))\r\n      return false\r\n    })\r\n\r\n    return res\r\n  }\r\n}\r\n\r\nexport {\r\n  LoggedPlayerTextures,\r\n  LoggedPlayerTextures as default\r\n} \r\n","import RegularPlayer from './RegularPlayer.js'\r\nimport LoggedPlayerTextures from './LoggedPlayerTextures.js'\r\nimport { PlayerProperty } from './Player.js'\r\n\r\n/** \r\n * Represents a logged in player.\r\n * - Has ability to manipulate their skin via the {@link textures} property.\r\n */\r\nclass LoggedPlayer extends RegularPlayer {\r\n  readonly associated_account: any\r\n  \r\n  // TODO: Give the params proper types.\r\n  constructor(playerData: any, associated_account: any) {\r\n    super(playerData, true)\r\n\r\n    this.associated_account = associated_account\r\n\r\n    const texturesProp = playerData.properties?.find((prop: PlayerProperty) => prop.name === \"textures\")\r\n    if (texturesProp?.value)\r\n      this.textures = new LoggedPlayerTextures(texturesProp.value, associated_account)\r\n  }\r\n}\r\n\r\nexport {\r\n  LoggedPlayer,\r\n  LoggedPlayer as default\r\n} ","import MCAPI_PLAYERS from '../../apis/Players.js'\r\nimport GameProfile from './GameProfile.js'\r\nimport LoggedPlayer from '../player/LoggedPlayer.js'\r\n\r\nimport { type MojangAccount } from '../account/MojangAccount.js'\r\n\r\n/** \r\n * Represents a user's Minecraft profile.\r\n */\r\nclass MinecraftProfile extends GameProfile {\r\n  readonly legacy: boolean\r\n  readonly suspended: boolean\r\n  readonly premium: boolean\r\n  readonly migrated: boolean\r\n\r\n  player: any\r\n\r\n  // TODO: Give `data` param a proper type.\r\n  constructor(data: any, associated_account: MojangAccount) {\r\n    super(data, associated_account)\r\n\r\n    this.legacy = data.legacyProfile\r\n    this.suspended = data.suspended\r\n    this.premium = data.paid\r\n    this.migrated = data.migrated\r\n  }\r\n\r\n  loadPlayer = async () => {\r\n    const data = await MCAPI_PLAYERS.get(this.username, true)\r\n    Object.defineProperty(this, 'player', { \r\n      value: new LoggedPlayer(data, this.account),\r\n      writable: false,\r\n      configurable: false\r\n    })\r\n  }\r\n\r\n  // TODO: Implement this.\r\n  // changeName = async () => {\r\n    \r\n  // }\r\n  \r\n  // TODO: Implement this.\r\n  // isNameAvailable = async () => {\r\n\r\n  // }\r\n}\r\n\r\nexport {\r\n  MinecraftProfile,\r\n  MinecraftProfile as default\r\n}\r\n","import GameProfile, { type ProfileProperty } from './GameProfile.js'\r\nimport { type MojangAccount } from \"../account/MojangAccount.js\"\r\n\r\n/**  \r\n * Represents a Mojang game profile other than Minecraft\r\n */\r\nclass OtherProfile extends GameProfile {\r\n  [name: string]: unknown\r\n\r\n  // TODO: Give the params proper types.\r\n  constructor(data: ProfileProperty, associated_account: MojangAccount) {\r\n    super(data, associated_account)\r\n    Object.assign(this, data)\r\n  }\r\n}\r\n\r\nexport {\r\n  OtherProfile,\r\n  OtherProfile as default\r\n}\r\n","import { type GameProfile } from '../profile/GameProfile.js'\r\nimport MinecraftProfile from '../profile/MinecraftProfile.js'\r\nimport OtherProfile from '../profile/OtherProfile.js'\r\n\r\nimport {\r\n  type MojangAccount,\r\n  type MojangAccountData \r\n} from './MojangAccount.js'\r\n\r\n/**  \r\n * Represents a Mojang Account's game profiles.\r\n */\r\nclass MojangAccountProfiles {\r\n  readonly list: GameProfile[]\r\n  readonly selected: GameProfile\r\n\r\n  constructor(data: MojangAccountData, associated_account: MojangAccount) {\r\n    const profiles = data.availableProfiles ?? []\r\n    \r\n    for (const profile of profiles) {\r\n      const gameProfile = profile.agent === \"minecraft\" \r\n        ? new MinecraftProfile(profile, associated_account) \r\n        : new OtherProfile(profile, associated_account)\r\n\r\n      this.list.push(gameProfile)\r\n\r\n      if (profile.id === data.selectedProfile.id) {\r\n        this.selected = gameProfile\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport {\r\n  MojangAccountProfiles,\r\n  MojangAccountProfiles as default\r\n} \r\n","import MojangAccountProperties from './MojangAccountProperties.js'\r\nimport MojangAccountProfiles from './MojangAccountProfiles.js'\r\nimport { ProfileProperty } from '../profile/GameProfile.js'\r\n\r\n/**  \r\n * Represents a Mojang Account.\r\n */\r\nclass MojangAccount {\r\n  /**\r\n   * @internal\r\n   */\r\n  readonly tokens: { access: string; client: string  }\r\n\r\n  readonly registration: AccountRegistration\r\n  readonly account_id: string\r\n  readonly username: string\r\n  readonly email: string\r\n  readonly properties: MojangAccountProperties\r\n  readonly profiles: MojangAccountProfiles\r\n\r\n  constructor(data: MojangAccountData) {\r\n    // Used by MCAPI\r\n    this.tokens = {\r\n      access: data.accessToken,\r\n      client: data.clientToken\r\n    }\r\n\r\n    // Account info\r\n    this.account_id = data.user.id\r\n    this.email = data.user.email\r\n    this.username = data.user.username\r\n    \r\n    this.registration = {\r\n      ip: data.user.registerIp,\r\n      date: new Date(data.user.registeredAt)\r\n    }\r\n\r\n    this.properties = new MojangAccountProperties(data)\r\n    this.profiles = new MojangAccountProfiles(data, this)\r\n  }\r\n} \r\n\r\nexport type UserProperty = {\r\n  name: string\r\n  value: string\r\n}\r\n\r\nexport type AccountRegistration = {\r\n  ip: string\r\n  date: Date\r\n}\r\n\r\nexport type MojangAccountData = {\r\n  clientToken: string\r\n  accessToken: string\r\n  user: {\r\n    username: string\r\n    properties: UserProperty[]\r\n    id: string\r\n    email?: string\r\n    registerIp?: string\r\n    registeredAt?: string | number\r\n  }\r\n  availableProfiles: ProfileProperty[]\r\n  selectedProfile: ProfileProperty\r\n}\r\n\r\nexport {\r\n  MojangAccount,\r\n  MojangAccount as default\r\n}\r\n","import reqs from '../utils/requests.js'\r\nimport MCAPIError from '../utils/MCAPIError.js'\r\nimport MojangAccount from '../classes/account/MojangAccount.js'\r\nimport MinecraftProfile from '../classes/profile/MinecraftProfile.js'\r\n\r\n/**\r\n * Holds static functions relating to account functionality.\r\n */\r\nclass MCAPI_ACCOUNTS {\r\n  loadAll = false\r\n\r\n  static get loadAll(): boolean {\r\n    return this.loadAll\r\n  }\r\n\r\n  static set loadAll(value) {\r\n    if (!value) this.loadAll = value\r\n  }\r\n\r\n  /**\r\n   * Allows a user to login to their Mojang account.\r\n   *\r\n   * @public \r\n   * @param identity The email or username (legacy accounts) of the user\r\n   * @param password The password of the user\r\n   * \r\n   */\r\n  static async login(identity: string, password: string) {\r\n    if (!identity || !password)\r\n      return new MCAPIError(400, \"[Account Login] - Both identity and password are required!\")\r\n\r\n    const payload = {\r\n      username: identity,\r\n      password: password,\r\n      requestUser: true,\r\n      agent: { \r\n        name: \"Minecraft\", \r\n        version: 1 \r\n      }\r\n    }\r\n\r\n    const body = await reqs.POST(\"https://authserver.mojang.com/authenticate\", { payload }).catch(err => {\r\n        if (!(err instanceof MCAPIError)) return err\r\n\r\n        const errPrefix = \"[Account Login] - \"\r\n        const msg = err.code == 429 \r\n          ? \"You have reached the API request limit.\"\r\n          : \"Identity and/or password not recognized.\"\r\n\r\n        return new MCAPIError(err.code, `${errPrefix}${msg}`)\r\n    })\r\n\r\n    if (!body) {\r\n      console.error(body)\r\n      return null\r\n    }\r\n    \r\n    const account = new MojangAccount(body)\r\n    const accProfiles = account.profiles\r\n    const profiles = this.loadAll ? accProfiles.list : [accProfiles.selected]\r\n    const len = profiles.length\r\n\r\n    for (let i = 0; i < len; i++) {\r\n      const profile = profiles[i]\r\n\r\n      if (!(profile instanceof MinecraftProfile)) continue\r\n      if (!profile.player || profile.game == \"minecraft\") {\r\n        await profile.loadPlayer()\r\n      }\r\n    }\r\n\r\n    return account\r\n  }\r\n}\r\n\r\nexport {\r\n  MCAPI_ACCOUNTS,\r\n  MCAPI_ACCOUNTS as default\r\n}\r\n","/** \r\n * Represents the status of Minecraft services.\r\n */\r\nclass ServiceStatus {\r\n  constructor(statuses: any) {\r\n    for (const service of statuses) {\r\n      const first = Object.keys(service)[0]\r\n\r\n      // @ts-ignore\r\n      this[first] = colorToNumber(service[first])\r\n    }\r\n  }\r\n}\r\n\r\nconst colorToNumber = (color: string) => color === \"green\" ? 1 : (color === \"yellow\" ? 0.5 : 0)\r\n\r\nexport {\r\n  ServiceStatus,\r\n  ServiceStatus as default\r\n}","import MCAPI_PLAYERS from './apis/Players.js'\r\nimport MCAPI_SERVERS from './apis/Servers.js'\r\nimport MCAPI_ACCOUNTS from './apis/Accounts.js'\r\n\r\n/**\r\n * @public\r\n * \r\n * The main entry point for this package.\r\n * Core functionality can be accessed through static properties within this class.\r\n */\r\nclass MCAPI {\r\n  static readonly accounts = MCAPI_ACCOUNTS\r\n  static readonly players  = MCAPI_PLAYERS\r\n  static readonly servers  = MCAPI_SERVERS\r\n\r\n  /**\r\n   * @readonly\r\n   * The current package version\r\n   */\r\n  static get version() {\r\n    return globalThis.process?.env?.npm_package_version\r\n  }\r\n}\r\n\r\nexport * from './classes'\r\nexport { MCAPIError } from './utils/MCAPIError.js'\r\n\r\nexport {\r\n  MCAPI,\r\n  MCAPI as default,\r\n  MCAPI_ACCOUNTS as accounts,\r\n  MCAPI_PLAYERS as players,\r\n  MCAPI_SERVERS as servers\r\n}"],"names":["__privateAdd","__privateGet","__privateSet","reqs","res"],"mappings":"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"}