@haelp/teto
Version:
A typescript-based controllable TETR.IO client.
1 lines • 5.69 kB
Source Map (JSON)
{"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"}