From 909db909ac8d6be0059b4438598577828b61d05d Mon Sep 17 00:00:00 2001 From: spiral Date: Thu, 7 Apr 2022 06:01:08 -0400 Subject: [PATCH 1/5] fix(stats): show data on header even in cluster mode --- src/pages/status.svelte | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/pages/status.svelte b/src/pages/status.svelte index fab2524b..4c254c03 100644 --- a/src/pages/status.svelte +++ b/src/pages/status.svelte @@ -36,9 +36,6 @@ shard.last_heartbeat = new Date(Number(shard.last_heartbeat) * 1000).toUTCString().match(/([0-9][0-9]:[0-9][0-9]:[0-9][0-9])/)?.shift() return shard; }); - console.log(data[0].cluster_id); - - pingAverage = Math.trunc(pings / shards.length).toString(); currentCommitMsg = `Current Git commit: ${pkdata.version.slice(0,7)}`; @@ -49,10 +46,11 @@ clusterData[shard.cluster_id].push(shard); }); clusters = clusterData; - } else { - shards = data; } + shards = data; + pingAverage = Math.trunc(pings / shards.length).toString(); + message = ""; }; @@ -142,7 +140,7 @@ - {#if shards.length > 0} + {#if Object.keys(clusters).length == 0 && shards.length > 0} From d837eb3e99877769a72d498b22b267146e4f1300 Mon Sep 17 00:00:00 2001 From: spiral Date: Thu, 7 Apr 2022 06:30:51 -0400 Subject: [PATCH 2/5] feat: add API ratelimting --- src/api/index.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/api/index.ts b/src/api/index.ts index 7f95846e..d63bd690 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -5,6 +5,15 @@ const baseUrl = () => localStorage.isBeta ? "https://api.beta.pluralkit.me" : "h const methods = ['get', 'post', 'delete', 'patch', 'put']; const noop = () => {}; +const scheduled = []; +const runAPI = () => { + if (scheduled.length == 0) return; + const {axiosData, res, rej} = scheduled.shift(); + axios(axiosData).then((resp) => res(parseData(resp.status, resp.data))).catch(rej); +} + +setInterval(runAPI, 500); + export default function() { const route = []; const handler = { @@ -12,7 +21,7 @@ export default function() { if (route.length == 0 && name != "private") route.push("v2"); if (methods.includes(name)) { - return ({ data = undefined, auth = true, token = null, query = null } = {}) => new Promise((res, rej) => axios({ + return ({ data = undefined, auth = true, token = null, query = null } = {}) => new Promise((res, rej) => scheduled.push({ res, rej, axiosData: { url: baseUrl() + "/" + route.join("/") + (query ? `?${Object.keys(query).map(x => `${x}=${query[x]}`).join("&")}` : ""), method: name, headers: { @@ -21,7 +30,7 @@ export default function() { }, data: !!data ? JSON.stringify(data) : undefined, validateStatus: () => true, - }).then((resp) => res(parseData(resp.status, resp.data))).catch(rej)); + }})); } route.push(name); return new Proxy(noop, handler); From 621272c842626baef9c6f5174d1897c485879d37 Mon Sep 17 00:00:00 2001 From: spiral Date: Thu, 7 Apr 2022 07:26:52 -0400 Subject: [PATCH 3/5] feat: add Sentry and Plausible integrations --- index.html | 3 ++- package.json | 2 ++ src/api/index.ts | 8 +++++- src/main.ts | 16 ++++++++++++ yarn.lock | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 95 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index ddd50aad..a82a2d15 100644 --- a/index.html +++ b/index.html @@ -31,8 +31,9 @@ ); } }(window.location)) - + +
diff --git a/package.json b/package.json index 7c1c9ea4..aac54545 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,8 @@ "vite": "^2.7.0" }, "dependencies": { + "@sentry/browser": "^6.19.5", + "@sentry/tracing": "^6.19.5", "@types/twemoji": "^12.1.2", "axios": "^0.24.0", "discord-markdown": "^2.5.1", diff --git a/src/api/index.ts b/src/api/index.ts index d63bd690..260bb0b2 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,4 +1,5 @@ import axios from 'axios'; +import * as Sentry from '@sentry/browser'; const baseUrl = () => localStorage.isBeta ? "https://api.beta.pluralkit.me" : "https://api.pluralkit.me"; @@ -9,7 +10,12 @@ const scheduled = []; const runAPI = () => { if (scheduled.length == 0) return; const {axiosData, res, rej} = scheduled.shift(); - axios(axiosData).then((resp) => res(parseData(resp.status, resp.data))).catch(rej); + axios(axiosData) + .then((resp) => res(parseData(resp.status, resp.data))) + .catch((err) => { + Sentry.captureException("Fetch error", err); + rej(err); + }); } setInterval(runAPI, 500); diff --git a/src/main.ts b/src/main.ts index d8200ac4..77475248 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,3 +1,19 @@ +import * as Sentry from "@sentry/browser"; +import { Integrations } from "@sentry/tracing"; + +Sentry.init({ + dsn: "https://58109fec589f4c2bbfa190329acf679a@sentry.pluralkit.me/4", + integrations: [new Integrations.BrowserTracing()], + + enabled: true, + debug: false, + release: "dev", + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for performance monitoring. + // We recommend adjusting this value in production + tracesSampleRate: 1.0, +}); + import App from './App.svelte' const app = new App({ diff --git a/yarn.lock b/yarn.lock index 988ec05f..60141f29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36,6 +36,69 @@ estree-walker "^2.0.1" picomatch "^2.2.2" +"@sentry/browser@^6.19.5": + version "6.19.5" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.19.5.tgz#77d4c860ab86f89a41d4b15a8eafb42417c47888" + integrity sha512-dmk15tTm9J+6v/N8nSoc7dUnpS/EJdwfOd3YSRk2iaJLJkWvJ7ELRe5SnH4MnK89Qpw7FKC5OjB977TeK11QAA== + dependencies: + "@sentry/core" "6.19.5" + "@sentry/types" "6.19.5" + "@sentry/utils" "6.19.5" + tslib "^1.9.3" + +"@sentry/core@6.19.5": + version "6.19.5" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.5.tgz#b8e0d54a22f588f8cbe2740913b8d06ec76fb1bb" + integrity sha512-PSrJYdhti5IWBo+1hLn4olRPQXJxsnkrB5X7Wk2peEYKGk6Vx98B9h7lQ4Tgsg9sUUOH4HsmNwU2kZKtMRVB5Q== + dependencies: + "@sentry/hub" "6.19.5" + "@sentry/minimal" "6.19.5" + "@sentry/types" "6.19.5" + "@sentry/utils" "6.19.5" + tslib "^1.9.3" + +"@sentry/hub@6.19.5": + version "6.19.5" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.5.tgz#978849b003ff130225540355fddfdc3feb4fc7a8" + integrity sha512-aMpsQFOcsdkfjbruIretxetmU+XbQNrheaFHJSOt1hB4LZr1fU4M29wKkK5Hj5ELiaNcC23u+0G7y5Nizwzsnw== + dependencies: + "@sentry/types" "6.19.5" + "@sentry/utils" "6.19.5" + tslib "^1.9.3" + +"@sentry/minimal@6.19.5": + version "6.19.5" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.5.tgz#a1b08eadde9e77e063346d5f3170a58aa1da0916" + integrity sha512-zcYGEuqPbLo1gHeYHalna7rNPZIA6+U9dPCDgQpM2GgIGhAxJxvyx57ducatxRQgdPtljn5/VPDxdACiwoc+Jg== + dependencies: + "@sentry/hub" "6.19.5" + "@sentry/types" "6.19.5" + tslib "^1.9.3" + +"@sentry/tracing@^6.19.5": + version "6.19.5" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.19.5.tgz#dfce99842768ff7bde73d1368a848b72e83a734b" + integrity sha512-8jozVkPMj3I7emgmKWCRr0DvblZHwJ2SS5qCAA5gmKo6uNTVwwe6Sh1ovETJ/rrZ72YGfpeC/yYBcNpst8I+iQ== + dependencies: + "@sentry/hub" "6.19.5" + "@sentry/minimal" "6.19.5" + "@sentry/types" "6.19.5" + "@sentry/utils" "6.19.5" + tslib "^1.9.3" + +"@sentry/types@6.19.5": + version "6.19.5" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.5.tgz#628e76351209a5e4fcaa94bcbe56fe788d65ea15" + integrity sha512-G5bGj0ZXRPDrEAxuNO6Jyeq/OG6v9msoE9C/xy1r6JMvVTxX000TmLGKjK1NqqrBbVWdcyFbT3jhJgae0uyBVA== + +"@sentry/utils@6.19.5": + version "6.19.5" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.5.tgz#507312fff2f7332debc8e54240e3b5c6d94db768" + integrity sha512-VuNraZZzEu/qVI11CMiRcSa+JVNwOuUe4HfZrDmnJbfrTpbQgjAdScnekEHLaGILGm8lQ8M2qeOxqfNF6kRn9w== + dependencies: + "@sentry/types" "6.19.5" + tslib "^1.9.3" + "@sveltejs/vite-plugin-svelte@^1.0.0-next.30": version "1.0.0-next.31" resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.31.tgz#5d0d5445ed85a1af613224eacff78c69f14c7fad" @@ -1072,6 +1135,11 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tslib@^2.0.3, tslib@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" From 01f76c77f0cd932fb83c4442da4083baac8876ae Mon Sep 17 00:00:00 2001 From: spiral Date: Thu, 7 Apr 2022 09:21:57 -0400 Subject: [PATCH 4/5] feat: toggle Sentry and API url when loading site from localhost --- src/api/index.ts | 2 +- src/main.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/index.ts b/src/api/index.ts index 260bb0b2..7b0ab795 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,7 +1,7 @@ import axios from 'axios'; import * as Sentry from '@sentry/browser'; -const baseUrl = () => localStorage.isBeta ? "https://api.beta.pluralkit.me" : "https://api.pluralkit.me"; +const baseUrl = () => window.location.origin.includes("localhost") ? "http://localhost:5000" : localStorage.isBeta ? "https://api.beta.pluralkit.me" : "https://api.pluralkit.me"; const methods = ['get', 'post', 'delete', 'patch', 'put']; const noop = () => {}; diff --git a/src/main.ts b/src/main.ts index 77475248..e2e5253c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,7 +5,7 @@ Sentry.init({ dsn: "https://58109fec589f4c2bbfa190329acf679a@sentry.pluralkit.me/4", integrations: [new Integrations.BrowserTracing()], - enabled: true, + enabled: !window.location.origin.includes("localhost"), debug: false, release: "dev", // Set tracesSampleRate to 1.0 to capture 100% From e0e0ab57746a9b65364bf3149b2e9aa0e0636ce8 Mon Sep 17 00:00:00 2001 From: spiral Date: Thu, 7 Apr 2022 09:22:35 -0400 Subject: [PATCH 5/5] feat: add Discord login --- src/App.svelte | 2 ++ src/pages/DiscordLogin.svelte | 33 +++++++++++++++++++++++++++++++++ src/pages/Home.svelte | 12 ++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 src/pages/DiscordLogin.svelte diff --git a/src/App.svelte b/src/App.svelte index 8eae36e2..c137f34d 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -11,6 +11,7 @@ import Member from './pages/Member.svelte'; import Group from './pages/Group.svelte'; import { Alert } from 'sveltestrap'; +import DiscordLogin from "./pages/DiscordLogin.svelte"; // theme cdns (I might make some myself too) let light = "https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css"; @@ -51,6 +52,7 @@ + diff --git a/src/pages/DiscordLogin.svelte b/src/pages/DiscordLogin.svelte new file mode 100644 index 00000000..4754b5eb --- /dev/null +++ b/src/pages/DiscordLogin.svelte @@ -0,0 +1,33 @@ + + + + + + {text} + + + \ No newline at end of file diff --git a/src/pages/Home.svelte b/src/pages/Home.svelte index 2c2db0de..187c9bfe 100644 --- a/src/pages/Home.svelte +++ b/src/pages/Home.svelte @@ -108,6 +108,18 @@
+
+ + Or, + + + + {/if}