UNPKG

@haelp/teto

Version:

A typescript-based controllable TETR.IO client.

1 lines 10.3 kB
{"version":3,"sources":["../../../src/utils/api/basic.ts"],"sourcesContent":["import { type APIDefaults } from \".\";\nimport { pack } from \"..\";\n\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport type Res<T = any> =\n | { success: false; error: { msg: string; [key: string]: any } }\n | ({ success: true } & T);\n\nexport const basic = (defaults: APIDefaults) => {\n return {\n get: async <T = any>({\n token,\n uri,\n headers = {},\n json = false\n }: {\n token?: string | null;\n uri: string;\n headers?: Record<string, string>;\n json?: boolean;\n }): Promise<Res<T>> => {\n let res: Response;\n try {\n res = await fetch(`https://tetr.io/api/${uri}`, {\n headers: {\n Accept: json\n ? \"application/json\"\n : \"application/vnd.osk.theorypack\",\n \"User-Agent\": defaults.userAgent,\n cookie: `${defaults.turnstile ? \"cf_clearance=\" + defaults.turnstile : \"\"}`,\n Authorization:\n token === null ? undefined : `Bearer ${token || defaults.token}`,\n ...headers\n } as any\n });\n } catch (err: any) {\n throw new Error(`Fetch failed on GET to ${uri}: ${err.message || err}`);\n }\n\n const copy = res.clone();\n try {\n return json\n ? ((await res.json()) as Res<T>)\n : pack.unpack(Buffer.from(await res.arrayBuffer()));\n } catch {\n if (res.status === 429)\n throw new Error(`Rate limit (429) on GET to ${uri}`);\n else {\n try {\n await fs.readdir(path.join(os.homedir(), \".trianglejs\", \"errors\"));\n } catch {\n await fs.mkdir(path.join(os.homedir(), \".trianglejs\", \"errors\"), {\n recursive: true\n });\n }\n const now = Date.now();\n const text = await copy.text();\n await fs.writeFile(\n path.join(os.homedir(), \".trianglejs\", \"errors\", `${now}.html`),\n text\n );\n if (copy.status === 404) throw new Error(`404 on GET to ${uri}`);\n\n if (text.includes(\"<title>Server error</title>\"))\n throw new Error(\n `The TETR.IO Servers are currently unavailable. Check https://status.osk.sh for updates. You can view more information at ${path.join(\n os.homedir(),\n \".trianglejs\",\n \"errors\",\n `${now}.html`\n )}`\n );\n if (text.includes(\"<title>Maintenance</title>\"))\n throw new Error(\n `The TETR.IO Servers are under maintanence. Check https://status.osk.sh for updates. You can view more information at ${path.join(\n os.homedir(),\n \".trianglejs\",\n \"errors\",\n `${now}.html`\n )}`\n );\n else\n throw new Error(\n `An error occured. This was likely because it the request was blocked by Cloudflare Turnstile on GET to ${uri}. Try passing in a turnstile token. View the error at ${path.join(\n os.homedir(),\n \".trianglejs\",\n \"errors\",\n `${now}.html`\n )}`\n );\n }\n }\n },\n\n post: async <T = any>({\n token,\n uri,\n body,\n headers = {},\n json = false\n }: {\n token?: string;\n uri: string;\n body: Record<string, any>;\n headers?: Record<string, string>;\n json?: boolean;\n }): Promise<Res<T>> => {\n let res: Response;\n try {\n res = await fetch(`https://tetr.io/api/${uri}`, {\n method: \"POST\",\n //@ts-ignore\n body: json ? JSON.stringify(body) : pack.pack(body),\n headers: {\n Accept: json\n ? \"application/json\"\n : \"application/vnd.osk.theorypack\",\n \"User-Agent\": defaults.userAgent,\n cookie: `${defaults.turnstile ? \"cf_clearance=\" + defaults.turnstile : \"\"}`,\n \"Content-Type\": json\n ? \"application/json\"\n : \"application/vnd.osk.theorypack\",\n\n Authorization:\n token === null ? undefined : `Bearer ${token || defaults.token}`,\n ...headers\n } as any\n });\n } catch (err: any) {\n throw new Error(\n `Fetch failed on POST to ${uri}: ${err.message || err}`\n );\n }\n\n const copy = res.clone();\n try {\n return json\n ? ((await res.json()) as Res<T>)\n : pack.unpack(Buffer.from(await res.arrayBuffer()));\n } catch {\n if (res.status === 429)\n throw new Error(`Rate limit (429) on GET to ${uri}`);\n else {\n try {\n await fs.readdir(path.join(os.homedir(), \".trianglejs\", \"errors\"));\n } catch {\n await fs.mkdir(path.join(os.homedir(), \".trianglejs\", \"errors\"), {\n recursive: true\n });\n }\n const now = Date.now();\n const text = await copy.text();\n await fs.writeFile(\n path.join(os.homedir(), \".trianglejs\", \"errors\", `${now}.html`),\n text\n );\n console.log(text);\n if (copy.status === 404) throw new Error(`404 on POST to ${uri}`);\n if (text.includes(\"<title>Maintenance</title>\"))\n throw new Error(\n `The TETR.IO Servers are under maintanence. Check https://status.osk.sh for updates. You can view more information at ${path.join(\n os.homedir(),\n \".trianglejs\",\n \"errors\",\n `${now}.html`\n )}`\n );\n else\n throw new Error(\n `An error occured. This was likely because the request was blocked by Cloudflare Turnstile on GET to ${uri}. Try passing in a turnstile token. View the error at ${path.join(\n os.homedir(),\n \".trianglejs\",\n \"errors\",\n `${now}.html`\n )}`\n );\n }\n }\n }\n };\n};\n\nexport type Get = ReturnType<typeof basic>[\"get\"];\nexport type Post = ReturnType<typeof basic>[\"post\"];\n"],"names":["pack","fs","os","path","basic","defaults","get","token","uri","headers","json","res","fetch","Accept","userAgent","cookie","turnstile","Authorization","undefined","err","Error","message","copy","clone","unpack","Buffer","from","arrayBuffer","status","readdir","join","homedir","mkdir","recursive","now","Date","text","writeFile","includes","post","body","method","JSON","stringify","console","log"],"mappings":"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"}