-
Notifications
You must be signed in to change notification settings - Fork 0
/
util.ts
54 lines (44 loc) · 1.33 KB
/
util.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import got from "got";
import { WebSocket } from "ws";
const { USER_SESSION } = process.env;
export const generatePresenceId = () => {
return `${Math.round(Math.random() * (Math.pow(2, 31) - 1))}_${Math.round(
Date.now() / 1000
)}`;
};
export const decodeSession = (sessionId: string) => {
const [rawEvent, idk] = sessionId.split("--");
const eventString = Buffer.from(rawEvent, "base64").toString("utf8");
const event = JSON.parse(eventString);
return [event, idk];
};
export const getWebsocketSessionId = async () => {
const githubResponse = await got("https://github.com", {
headers: {
Cookie: `user_session=${USER_SESSION}`,
},
});
const myRegexp = /wss:\/\/alive.github.com\/_sockets\/u\/.+?(?=")/;
const match = myRegexp.exec(githubResponse.body);
// @ts-ignore
const rawParams = match[0].split("?")[1];
const params = new URLSearchParams(rawParams);
const sessionId = params.get("session");
return sessionId;
}
export const sendPacket = (ws: WebSocket, packet: any) => {
const payload = JSON.stringify(packet);
ws.send(payload);
};
export const subscribe = (ws: WebSocket, sessionId: string) => {
sendPacket(ws, {
subscribe: {
[sessionId]: "",
},
});
};
export const unsubscribe = (ws: WebSocket, sessionId: string) => {
sendPacket(ws, {
unsubscribe: [sessionId],
});
};