aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-01-08 13:28:46 -0800
committerFuwn <[email protected]>2024-01-08 13:28:46 -0800
commit3102f457a583b56e21a4953af5c576e9a86c8025 (patch)
treeec32840486b8eb4cf5b3504dc5e8759df7d1401e
parentfix(hovercover): page scroll height (diff)
downloaddue.moe-3102f457a583b56e21a4953af5c576e9a86c8025.tar.xz
due.moe-3102f457a583b56e21a4953af5c576e9a86c8025.zip
feat(dump): decode hoh's
-rwxr-xr-xbun.lockbbin145821 -> 146194 bytes
-rw-r--r--package.json85
-rw-r--r--src/lib/AniList/user.ts5
-rw-r--r--src/lib/Tools/DumpProfile.svelte35
4 files changed, 80 insertions, 45 deletions
diff --git a/bun.lockb b/bun.lockb
index c45ae991..e31b637b 100755
--- a/bun.lockb
+++ b/bun.lockb
Binary files differ
diff --git a/package.json b/package.json
index 939d34c7..57f8e9b4 100644
--- a/package.json
+++ b/package.json
@@ -1,44 +1,45 @@
{
- "name": "due.moe",
- "version": "0.0.0",
- "private": true,
- "scripts": {
- "dev": "vite dev",
- "build": "vite build",
- "preview": "vite preview",
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
- "lint": "prettier --plugin-search-dir . --check . && eslint .",
- "format": "prettier --plugin-search-dir . --write ."
- },
- "devDependencies": {
- "@sveltejs/adapter-vercel": "next",
- "@sveltejs/kit": "^1.20.4",
- "@types/fast-levenshtein": "^0.0.4",
- "@types/jsdom": "^21.1.6",
- "@typescript-eslint/eslint-plugin": "^5.45.0",
- "@typescript-eslint/parser": "^5.45.0",
- "eslint": "^8.28.0",
- "eslint-config-prettier": "^8.5.0",
- "eslint-plugin-svelte": "^2.30.0",
- "prettier": "^2.8.0",
- "prettier-plugin-svelte": "^2.10.1",
- "sass": "^1.69.7",
- "svelte": "^4.0.5",
- "svelte-check": "^3.4.3",
- "sveltekit-rate-limiter": "^0.4.2",
- "tslib": "^2.4.1",
- "typescript": "^5.0.0",
- "vite": "^4.4.2"
- },
- "type": "module",
- "dependencies": {
- "@vercel/postgres": "^0.5.1",
- "dexie": "^4.0.1-alpha.25",
- "fast-levenshtein": "^3.0.0",
- "jsdom": "^23.0.1",
- "modern-screenshot": "^4.4.33",
- "rss-parser": "^3.13.0",
- "wanakana": "^5.3.1"
- }
+ "name": "due.moe",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "vite dev",
+ "build": "vite build",
+ "preview": "vite preview",
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
+ "lint": "prettier --plugin-search-dir . --check . && eslint .",
+ "format": "prettier --plugin-search-dir . --write ."
+ },
+ "devDependencies": {
+ "@sveltejs/adapter-vercel": "next",
+ "@sveltejs/kit": "^1.20.4",
+ "@types/fast-levenshtein": "^0.0.4",
+ "@types/jsdom": "^21.1.6",
+ "@typescript-eslint/eslint-plugin": "^5.45.0",
+ "@typescript-eslint/parser": "^5.45.0",
+ "eslint": "^8.28.0",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-plugin-svelte": "^2.30.0",
+ "prettier": "^2.8.0",
+ "prettier-plugin-svelte": "^2.10.1",
+ "sass": "^1.69.7",
+ "svelte": "^4.0.5",
+ "svelte-check": "^3.4.3",
+ "sveltekit-rate-limiter": "^0.4.2",
+ "tslib": "^2.4.1",
+ "typescript": "^5.0.0",
+ "vite": "^4.4.2"
+ },
+ "type": "module",
+ "dependencies": {
+ "@vercel/postgres": "^0.5.1",
+ "dexie": "^4.0.1-alpha.25",
+ "fast-levenshtein": "^3.0.0",
+ "jsdom": "^23.0.1",
+ "lz-string": "^1.5.0",
+ "modern-screenshot": "^4.4.33",
+ "rss-parser": "^3.13.0",
+ "wanakana": "^5.3.1"
+ }
}
diff --git a/src/lib/AniList/user.ts b/src/lib/AniList/user.ts
index 93799480..acfb2913 100644
--- a/src/lib/AniList/user.ts
+++ b/src/lib/AniList/user.ts
@@ -40,6 +40,7 @@ export interface FullUser {
createdAt: number;
updatedAt: string;
}[];
+ about: string;
}
export const user = async (username: string): Promise<User> =>
@@ -67,7 +68,7 @@ export const user = async (username: string): Promise<User> =>
).json()
)['data']['User'];
-export const dumpUser = async (username: string): Promise<User> =>
+export const dumpUser = async (username: string): Promise<FullUser> =>
(
await (
await fetch('https://graphql.anilist.co', {
@@ -78,7 +79,7 @@ export const dumpUser = async (username: string): Promise<User> =>
},
body: JSON.stringify({
query: `{ User(name: "${username}") {
- id name
+ id name about
avatar { large medium }
bannerImage bans siteUrl donatorTier donatorBadge moderatorRoles
createdAt updatedAt
diff --git a/src/lib/Tools/DumpProfile.svelte b/src/lib/Tools/DumpProfile.svelte
index f01814e6..1f0eba7e 100644
--- a/src/lib/Tools/DumpProfile.svelte
+++ b/src/lib/Tools/DumpProfile.svelte
@@ -2,8 +2,27 @@
import { dumpUser } from '$lib/AniList/user';
import RateLimited from '$lib/Error/RateLimited.svelte';
import InputTemplate from './InputTemplate.svelte';
+ import LZString from 'lz-string';
let submission = '';
+
+ // Credit: @hoh
+ const decodeJSON = (about: string): JSON | null => {
+ const match = (about || '').match(/^\[\]\(json([A-Za-z0-9+/=]+)\)/);
+
+ if (match)
+ try {
+ return JSON.parse(atob(match[1]));
+ } catch {
+ try {
+ return JSON.parse(LZString.decompressFromBase64(match[1]));
+ } catch {
+ return null;
+ }
+ }
+
+ return null;
+ };
</script>
<!-- svelte-ignore missing-declaration -->
@@ -11,8 +30,22 @@
{#await dumpUser(submission)}
Loading user ... 50%
{:then dump}
- <pre style="margin: 0;">{JSON.stringify(dump, null, 2)}</pre>
+ {@const decoded = decodeJSON(dump.about)}
+
+ <pre>{JSON.stringify(dump, null, 2)}</pre>
+
+ {#if decoded && (dump.about || '').includes('[](json')}
+ <p />
+
+ <pre>{JSON.stringify(decoded, null, 2).replaceAll(/\\n/g, '\n')}</pre>
+ {/if}
{:catch}
<RateLimited type="User" list={false} />
{/await}
</InputTemplate>
+
+<style>
+ pre {
+ margin: 0;
+ }
+</style>