summary refs log tree commit diff
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-10-31 19:37:46 +1100
committerMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-10-31 19:37:46 +1100
commit427a8f55ba5f3ec2843078c3426eade3d1b6daac (patch)
tree7bc81861e4babf4378971455bf7722f985c0b365
parentFix message patching sending old message rather than updated one (diff)
downloadserver-427a8f55ba5f3ec2843078c3426eade3d1b6daac.tar.xz
Fast connect but send identify
-rw-r--r--assets/client_test/index.html75
-rw-r--r--scripts/client.js6
2 files changed, 80 insertions, 1 deletions
diff --git a/assets/client_test/index.html b/assets/client_test/index.html
index 7306db60..31be10f1 100644
--- a/assets/client_test/index.html
+++ b/assets/client_test/index.html
@@ -46,7 +46,80 @@
 	</script>
 
 	<!-- fast connect -->
-	<script>!function () { if (null != window.WebSocket) { if (function (n) { try { var e = localStorage.getItem(n); return null == e ? null : JSON.parse(e); } catch (n) { return null; } }("token") && !window.__OVERLAY__) { var n = null != window.DiscordNative || null != window.require ? "etf" : "json", e = window.GLOBAL_ENV.GATEWAY_ENDPOINT + "/?encoding=" + n + "&v=" + window.GLOBAL_ENV.API_VERSION + "&compress=zlib-stream"; console.log("[FAST CONNECT] connecting to: " + e); var o = new WebSocket(e); o.binaryType = "arraybuffer"; var t = Date.now(), i = { open: !1, identify: !1, gateway: e, messages: [] }; o.onopen = function () { console.log("[FAST CONNECT] connected in " + (Date.now() - t) + "ms"), i.open = !0; }, o.onclose = o.onerror = function () { window._ws = null; }, o.onmessage = function (n) { i.messages.push(n); }, window._ws = { ws: o, state: i }; } } }();</script>
+	<!-- <script>!function () { if (null != window.WebSocket) { if (function (n) { try { var e = localStorage.getItem(n); return null == e ? null : JSON.parse(e); } catch (n) { return null; } }("token") && !window.__OVERLAY__) { var n = null != window.DiscordNative || null != window.require ? "etf" : "json", e = window.GLOBAL_ENV.GATEWAY_ENDPOINT + "/?encoding=" + n + "&v=" + window.GLOBAL_ENV.API_VERSION + "&compress=zlib-stream"; console.log("[FAST CONNECT] connecting to: " + e); var o = new WebSocket(e); o.binaryType = "arraybuffer"; var t = Date.now(), i = { open: !1, identify: !1, gateway: e, messages: [] }; o.onopen = function () { console.log("[FAST CONNECT] connected in " + (Date.now() - t) + "ms"), i.open = !0; }, o.onclose = o.onerror = function () { window._ws = null; }, o.onmessage = function (n) { i.messages.push(n); }, window._ws = { ws: o, state: i }; } } }();</script> -->
+
+	<!-- fast identify -->
+	<script>
+		(() => {
+			if (window.WebSocket == null) return;
+			if (window.__OVERLAY__) return;
+
+			const getStorage = (key) => {
+				try {
+					return JSON.parse(localStorage.getItem(key));
+				}
+				catch (e) {
+					return undefined;
+				}
+			};
+
+			const token = getStorage("token");
+			if (!token) return;
+
+			const encoding = window.DiscordNative != null || window.require != null ? "etf" : "json";
+			const url = window.GLOBAL_ENV.GATEWAY_ENDPOINT +
+				"/?encoding=" +
+				encoding +
+				"&v=" +
+				window.GLOBAL_ENV.API_VERSION +
+				"&compress=zlib-stream";
+
+			console.log("[FAST IDENTIFY] connecting to:", url);
+
+			const socket = new WebSocket(url);
+			socket.binaryType = "arraybuffer";
+			const start = Date.now();
+			const state = { open: false, identity: false, gateway: url, messages: [] };
+
+			socket.onopen = function () {
+				console.log(`[FAST IDENTIFY] connected in ${Date.now() - start}ms`);
+				state.open = true;
+
+				console.log("[FAST IDENTIFY] Sending payload");
+				state.identity = true;
+				const payload = {
+					op: 2,
+					d: {
+						token: token,
+						capabilities: 509,
+						properties: {
+							...(getStorage("deviceProperties") || {}),
+							browser_user_agent: navigator.userAgent,
+						},
+						compress: false,
+						presence: {
+							status: getStorage("UserSettingsStore")?.status || "online",
+							since: 0,
+							activities: [],
+							afk: false,
+						},
+					}
+				};
+				socket.send(JSON.stringify(payload));
+			};
+
+			socket.onclose = socket.onerror = (e) => {
+				console.log("[FAST IDENTIFY] Failed", e);
+				window._ws = null;
+			};
+
+			socket.onmessage = (message) => {
+				state.messages.push(message);
+			};
+
+			window._ws = { ws: socket, state };
+		})();
+	</script>
 
 	<!-- preload plugin marker -->
 </head>
diff --git a/scripts/client.js b/scripts/client.js
index b31f2fcc..b42217a0 100644
--- a/scripts/client.js
+++ b/scripts/client.js
@@ -119,6 +119,12 @@ const doPatch = (content) => {
 		"console.log('Prevented deletion of localStorage')"
 	);
 
+	// fast identify
+	content = content.replaceAll(
+		"e.isFastConnect=t;t?e._doFastConnectIdentify():e._doResumeOrIdentify()",
+		"e.isFastConnect=t; if (t !== undefined) e._doResumeOrIdentify();"
+	);
+
 	return content;
 };