{"version":3,"sources":["../../../src/utils/api/users.ts"],"sourcesContent":["import type { APIDefaults } from \".\";\nimport type { User as UserTypes } from \"../../types\";\nimport type { Get, Post } from \"./basic\";\n\nexport namespace Users {\n  /** Data returned from /api/users/me */\n  export interface Me {\n    _id: string;\n    username: string;\n    country: string | null;\n    email?: string | undefined;\n    role: UserTypes.Role;\n    ts: Date;\n    badges: UserTypes.Badge[];\n    xp: number;\n    privacy_showwon: boolean;\n    privacy_showplayed: boolean;\n    privacy_showgametime: boolean;\n    privacy_showcountry: boolean;\n    privacy_privatemode: string;\n    privacy_status_shallow: string;\n    privacy_status_deep: string;\n    privacy_status_exact: string;\n    privacy_dm: string;\n    privacy_invite: string;\n    thanked: boolean;\n    banlist: any[]; // You may want to define a type for this array's contents\n    warnings: any[]; // You may want to define a type for this array's contents\n    bannedstatus: string;\n    records?: UserTypes.Records; // You may want to define a type for this\n    supporter: boolean;\n    supporter_expires: number;\n    total_supported: number;\n    league: UserTypes.League;\n    avatar_revision?: number;\n    banner_revision?: number;\n    bio?: string;\n    zen?: any; // TODO: type\n    distinguishment?: any;\n    totp: {\n      enabled?: boolean;\n      codes_remaining: number;\n    };\n    connections: {\n      [key: string]: any; // You may want to define a type for the values\n    };\n  }\n\n  export interface User {\n    _id: string;\n    username: string;\n    role: string;\n    ts: string;\n    badges: UserTypes.Badge[];\n    xp: number;\n    gamesplayed: number;\n    gameswon: number;\n    gametime: number;\n    country: string;\n    badstanding: boolean;\n    records: UserTypes.Records;\n    supporter: boolean;\n    supporter_tier: number;\n    verified: boolean;\n    league: UserTypes.League;\n    avatar_revision: number;\n    banner_revision: number;\n    bio: string;\n    friendCount: number;\n    friendedYou: boolean;\n  }\n}\n\nexport const users = (get: Get, post: Post, __: APIDefaults) => {\n  /** Checks whethere a user exists */\n  const exists = async (username: string): Promise<boolean> => {\n    const res = await get<{ exists: boolean }>({\n      token: undefined,\n      uri: `users/${username}/exists`\n    });\n    if (res.success === false) throw new Error(res.error.msg);\n    return res.exists;\n  };\n\n  /** Resolves a username to a user ID */\n  const resolve = async (username: string) => {\n    const res = await get<{ _id: string }>({\n      token: undefined,\n      uri: `users/${encodeURIComponent(username.trim())}/resolve`\n    });\n    if (res.success === false) throw new Error(res.error.msg + \": \" + username);\n    return res._id;\n  };\n\n  return {\n    /**\tChecks whether a user exists */\n    exists,\n    authenticate: async (\n      username: string,\n      password: string\n    ): Promise<{ token: string; id: string }> => {\n      const res = await post<{ token: string; userid: string }>({\n        token: undefined,\n        uri: \"users/authenticate\",\n        body: {\n          username,\n          password,\n          totp: \"\"\n        }\n      });\n\n      if (res.success === false) throw new Error(res.error.msg);\n      return {\n        token: res.token,\n        id: res.userid\n      };\n    },\n    me: async (): Promise<Users.Me> => {\n      const res = await get<{ user: Users.Me }>({ uri: \"users/me\" });\n\n      if (res.success === false)\n        throw new Error(\"Failure loading profile: \" + res.error.msg);\n      return res.user;\n    },\n    resolve,\n\n    /** Get a user's profile */\n    get: async (options: { username: string } | { id: string }) => {\n      const res = await get<{ user: Users.User }>({\n        uri:\n          \"users/\" +\n          (\"username\" in options ? await resolve(options.username) : options.id)\n      });\n\n      if (res.success === false)\n        throw new Error(\"Failure loading profile: \" + res.error.msg);\n      return res.user;\n    }\n  };\n};\n"],"names":["users","get","post","__","exists","username","res","token","undefined","uri","success","Error","error","msg","resolve","encodeURIComponent","trim","_id","authenticate","password","body","totp","id","userid","me","user","options"],"mappings":"AAyEA,OAAO,MAAMA,QAAQ,CAACC,KAAUC,MAAYC;IAC1C,kCAAkC,GAClC,MAAMC,SAAS,OAAOC;QACpB,MAAMC,MAAM,MAAML,IAAyB;YACzCM,OAAOC;YACPC,KAAK,CAAC,MAAM,EAAEJ,SAAS,OAAO,CAAC;QACjC;QACA,IAAIC,IAAII,OAAO,KAAK,OAAO,MAAM,IAAIC,MAAML,IAAIM,KAAK,CAACC,GAAG;QACxD,OAAOP,IAAIF,MAAM;IACnB;IAEA,qCAAqC,GACrC,MAAMU,UAAU,OAAOT;QACrB,MAAMC,MAAM,MAAML,IAAqB;YACrCM,OAAOC;YACPC,KAAK,CAAC,MAAM,EAAEM,mBAAmBV,SAASW,IAAI,IAAI,QAAQ,CAAC;QAC7D;QACA,IAAIV,IAAII,OAAO,KAAK,OAAO,MAAM,IAAIC,MAAML,IAAIM,KAAK,CAACC,GAAG,GAAG,OAAOR;QAClE,OAAOC,IAAIW,GAAG;IAChB;IAEA,OAAO;QACL,iCAAiC,GACjCb;QACAc,cAAc,OACZb,UACAc;YAEA,MAAMb,MAAM,MAAMJ,KAAwC;gBACxDK,OAAOC;gBACPC,KAAK;gBACLW,MAAM;oBACJf;oBACAc;oBACAE,MAAM;gBACR;YACF;YAEA,IAAIf,IAAII,OAAO,KAAK,OAAO,MAAM,IAAIC,MAAML,IAAIM,KAAK,CAACC,GAAG;YACxD,OAAO;gBACLN,OAAOD,IAAIC,KAAK;gBAChBe,IAAIhB,IAAIiB,MAAM;YAChB;QACF;QACAC,IAAI;YACF,MAAMlB,MAAM,MAAML,IAAwB;gBAAEQ,KAAK;YAAW;YAE5D,IAAIH,IAAII,OAAO,KAAK,OAClB,MAAM,IAAIC,MAAM,8BAA8BL,IAAIM,KAAK,CAACC,GAAG;YAC7D,OAAOP,IAAImB,IAAI;QACjB;QACAX;QAEA,yBAAyB,GACzBb,KAAK,OAAOyB;YACV,MAAMpB,MAAM,MAAML,IAA0B;gBAC1CQ,KACE,WACC,CAAA,cAAciB,UAAU,MAAMZ,QAAQY,QAAQrB,QAAQ,IAAIqB,QAAQJ,EAAE,AAAD;YACxE;YAEA,IAAIhB,IAAII,OAAO,KAAK,OAClB,MAAM,IAAIC,MAAM,8BAA8BL,IAAIM,KAAK,CAACC,GAAG;YAC7D,OAAOP,IAAImB,IAAI;QACjB;IACF;AACF,EAAE"}