This commit is contained in:
pixtaded 2025-05-10 23:11:02 +03:00
parent b826061e96
commit fccf98f1e5
11 changed files with 3274 additions and 210 deletions

File diff suppressed because it is too large Load Diff

187
package-lock.json generated
View File

@ -33,6 +33,7 @@
"json-bigint": "^1.0.0",
"jsonwebtoken": "^9.0.2",
"lambert-server": "^1.2.12",
"medooze-spacebar-wrtc": "^1.0.6",
"missing-native-js-functions": "^1.4.3",
"module-alias": "^2.2.3",
"morgan": "^1.10.0",
@ -2150,11 +2151,9 @@
}
},
"node_modules/@babel/runtime": {
"version": "7.26.0",
"license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz",
"integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==",
"engines": {
"node": ">=6.9.0"
}
@ -2180,6 +2179,34 @@
"node": ">=12"
}
},
"node_modules/@dank074/medooze-media-server": {
"version": "1.156.4",
"resolved": "https://registry.npmjs.org/@dank074/medooze-media-server/-/medooze-media-server-1.156.4.tgz",
"integrity": "sha512-snn1LJkt2YJtUSYKhbOGidOoVKS5BawO6jRklRzE3Uy17N6jTMwqZXOq3oosm1JrGGaQGbOHRQudNHur2SrPEg==",
"hasInstallScript": true,
"dependencies": {
"lfsr": "0.0.3",
"medooze-event-emitter": "^1.2.0",
"nan": "^2.18.0",
"semantic-sdp": "^3.31.1",
"uuid": "^3.3.2"
},
"optionalDependencies": {
"netlink": "^0"
},
"peerDependencies": {
"medooze-media-server-src": "^3.1.1"
}
},
"node_modules/@dank074/medooze-media-server/node_modules/uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
"deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
"bin": {
"uuid": "bin/uuid"
}
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.1",
"dev": true,
@ -2948,6 +2975,18 @@
"node-pre-gyp": "bin/node-pre-gyp"
}
},
"node_modules/@noble/hashes": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
"optional": true,
"engines": {
"node": "^14.21.3 || >=16"
},
"funding": {
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"dev": true,
@ -3548,6 +3587,15 @@
"@opentelemetry/api": "^1.1.0"
}
},
"node_modules/@paralleldrive/cuid2": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
"integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
"optional": true,
"dependencies": {
"@noble/hashes": "^1.1.5"
}
},
"node_modules/@peculiar/asn1-schema": {
"version": "2.3.13",
"license": "MIT",
@ -4335,8 +4383,9 @@
},
"node_modules/@types/node-fetch": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz",
"integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
"form-data": "^4.0.0"
@ -4902,8 +4951,9 @@
}
},
"node_modules/axios": {
"version": "1.7.7",
"license": "MIT",
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz",
"integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",
"optional": true,
"dependencies": {
"follow-redirects": "^1.15.6",
@ -5824,6 +5874,11 @@
"node": ">=6"
}
},
"node_modules/equals-ignore-case": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/equals-ignore-case/-/equals-ignore-case-1.0.1.tgz",
"integrity": "sha512-krgK/Px09jhcc7wK5/lxApRv7XmIT/fSgrMwdaW/V1FmPJEIJMNGEMhe0U9tJ/97rPe75MHKPRqi7/8Tqz6NMA=="
},
"node_modules/err-code": {
"version": "2.0.3",
"license": "MIT",
@ -6504,12 +6559,13 @@
}
},
"node_modules/formidable": {
"version": "2.1.2",
"license": "MIT",
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.5.tgz",
"integrity": "sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==",
"optional": true,
"dependencies": {
"@paralleldrive/cuid2": "^2.2.2",
"dezalgo": "^1.0.4",
"hexoid": "^1.0.0",
"once": "^1.4.0",
"qs": "^6.11.0"
},
@ -6816,14 +6872,6 @@
"node": ">=10.0.0"
}
},
"node_modules/hexoid": {
"version": "1.0.0",
"license": "MIT",
"optional": true,
"engines": {
"node": ">=8"
}
},
"node_modules/htmlparser2": {
"version": "9.1.0",
"funding": [
@ -7338,6 +7386,11 @@
"node": ">= 0.8.0"
}
},
"node_modules/lfsr": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/lfsr/-/lfsr-0.0.3.tgz",
"integrity": "sha512-ULgtgP6beEo825H4BExHQgNeD3YuKK/roMnWKdDbWA/g1PzFPkAb2tF0yPdMCF4T4OJ6LhzhG3TRQu56usjFfA=="
},
"node_modules/libbase64": {
"version": "1.3.0",
"license": "MIT",
@ -7542,6 +7595,29 @@
"node": ">= 0.6"
}
},
"node_modules/medooze-event-emitter": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/medooze-event-emitter/-/medooze-event-emitter-1.2.1.tgz",
"integrity": "sha512-1gu3IGm+aj6xdjVKNdE8qABP6s4/m6qNUKxmEg5LOLxsNNd9AB+/h/K4iAN77338e/XxigTdfuzk0EZMyTw0Pw=="
},
"node_modules/medooze-media-server-src": {
"version": "3.1.8",
"resolved": "https://registry.npmjs.org/medooze-media-server-src/-/medooze-media-server-src-3.1.8.tgz",
"integrity": "sha512-DnruJ2K0u1CfGTQcfX+HXmOwxZJ2sLxp0jZKUEWUeEUNWIMNOfQKOozGzcYmNoEbvP7PqLivZygSnsHxnT60rg==",
"peer": true
},
"node_modules/medooze-spacebar-wrtc": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/medooze-spacebar-wrtc/-/medooze-spacebar-wrtc-1.0.6.tgz",
"integrity": "sha512-z+eSmyaX+XSp6awRObVpcrd2uC6aY+6puNYYULkhZQq6tc6Yf8RkneUPjTFKiGkmTKbqdKHv3bfucJirvV3oHg==",
"dependencies": {
"@dank074/medooze-media-server": "1.156.4",
"semantic-sdp": "^3.31.1"
},
"peerDependencies": {
"spacebar-webrtc-types": "github:dank074/spacebar-webrtc-types"
}
},
"node_modules/merge-descriptors": {
"version": "1.0.3",
"license": "MIT",
@ -7848,6 +7924,11 @@
"safe-buffer": "~5.1.0"
}
},
"node_modules/nan": {
"version": "2.22.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz",
"integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ=="
},
"node_modules/natural-compare": {
"version": "1.4.0",
"dev": true,
@ -7882,6 +7963,27 @@
"node": ">= 0.6"
}
},
"node_modules/netlink": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/netlink/-/netlink-0.3.0.tgz",
"integrity": "sha512-rv4E4AAdtzhmltFKdzgOPSrFqM/D5YcJR+t99zwoQ997KMmx0W52AxyUkOILyk+zGZzr7U9M60BXoSTHfkmCPg==",
"hasInstallScript": true,
"optional": true,
"dependencies": {
"@types/node": "^12.0.0",
"node-addon-api": "*",
"node-gyp-build": "^4.2.3"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/netlink/node_modules/@types/node": {
"version": "12.20.55",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
"integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==",
"optional": true
},
"node_modules/netmask": {
"version": "2.0.2",
"license": "MIT",
@ -7988,6 +8090,17 @@
"node": ">= 10.12.0"
}
},
"node_modules/node-gyp-build": {
"version": "4.8.4",
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
"integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
"optional": true,
"bin": {
"node-gyp-build": "bin.js",
"node-gyp-build-optional": "optional.js",
"node-gyp-build-test": "build-test.js"
}
},
"node_modules/node-gyp-build-optional-packages": {
"version": "5.1.1",
"license": "MIT",
@ -8893,6 +9006,14 @@
],
"license": "MIT"
},
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dependencies": {
"safe-buffer": "^5.1.0"
}
},
"node_modules/range-parser": {
"version": "1.2.1",
"license": "MIT",
@ -9001,10 +9122,6 @@
"version": "0.2.2",
"license": "Apache-2.0"
},
"node_modules/regenerator-runtime": {
"version": "0.14.1",
"license": "MIT"
},
"node_modules/require-directory": {
"version": "2.1.1",
"license": "MIT",
@ -9122,6 +9239,24 @@
"version": "1.4.1",
"license": "ISC"
},
"node_modules/sdp-transform": {
"version": "2.15.0",
"resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.15.0.tgz",
"integrity": "sha512-KrOH82c/W+GYQ0LHqtr3caRpM3ITglq3ljGUIb8LTki7ByacJZ9z+piSGiwZDsRyhQbYBOBJgr2k6X4BZXi3Kw==",
"bin": {
"sdp-verify": "checker.js"
}
},
"node_modules/semantic-sdp": {
"version": "3.31.1",
"resolved": "https://registry.npmjs.org/semantic-sdp/-/semantic-sdp-3.31.1.tgz",
"integrity": "sha512-esBGP11uWeHyvGwqDT1sf1p45H+kb7m5D49TIBHwYXXepzDFD24ar91eIwBQ8kwWWO8MNZfizsZ7CvBgYV9GuA==",
"dependencies": {
"equals-ignore-case": "^1.0.0",
"randombytes": "^2.0.3",
"sdp-transform": "^2"
}
},
"node_modules/semver": {
"version": "7.6.3",
"license": "ISC",
@ -9378,7 +9513,6 @@
"node_modules/spacebar-webrtc-types": {
"version": "1.0.1",
"resolved": "git+ssh://git@github.com/dank074/spacebar-webrtc-types.git#fcab265b1c2c4ea4426c8bf5832ce75edbf1741d",
"dev": true,
"license": "ISC"
},
"node_modules/split2": {
@ -9908,8 +10042,9 @@
}
},
"node_modules/tar-fs": {
"version": "2.1.1",
"license": "MIT",
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz",
"integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==",
"optional": true,
"dependencies": {
"chownr": "^1.1.1",

View File

@ -94,6 +94,7 @@
"json-bigint": "^1.0.0",
"jsonwebtoken": "^9.0.2",
"lambert-server": "^1.2.12",
"medooze-spacebar-wrtc": "^1.0.6",
"missing-native-js-functions": "^1.4.3",
"module-alias": "^2.2.3",
"morgan": "^1.10.0",

View File

@ -0,0 +1,19 @@
diff --git a/node_modules/medooze-spacebar-wrtc/src/MedoozeSignalingDelegate.ts b/node_modules/medooze-spacebar-wrtc/src/MedoozeSignalingDelegate.ts
index 76213eb..1cca6ef 100644
--- a/node_modules/medooze-spacebar-wrtc/src/MedoozeSignalingDelegate.ts
+++ b/node_modules/medooze-spacebar-wrtc/src/MedoozeSignalingDelegate.ts
@@ -40,11 +40,9 @@ export class MedoozeSignalingDelegate implements SignalingDelegate {
): Promise<WebRtcClient<any>> {
// if this is guild-voice or dm-voice, make sure user isn't already in a room of those types
// user can be in many simultanous go live stream rooms though (can be in a voice channel and watching a stream for example, or watching multiple streams)
- const rooms = type === "stream" ? [] : this.rooms
- .values()
- .filter((room) =>
- room.type === "dm-voice" || room.type === "guild-voice",
- );
+ const rooms = type === "stream" ? [] : Array.from(this.rooms.values()).filter((room) =>
+ room.type === "dm-voice" || room.type === "guild-voice"
+ );
let existingClient;
for (const room of rooms) {

View File

@ -50,6 +50,11 @@ router.post(
}),
async (req: Request, res: Response) => {
const body = req.body as RegisterSchema;
const username = body.username
? body.username
: body.global_name
? body.global_name
: "";
const { register, security, limits } = Config.get();
const ip = getIpAdress(req);
@ -276,7 +281,7 @@ router.post(
) {
console.log(
`Global register ratelimit exceeded for ${getIpAdress(req)}, ${
req.body.username
username
}, ${req.body.invite || "No invite given"}`,
);
throw FieldErrors({
@ -288,7 +293,7 @@ router.post(
}
const { maxUsername } = Config.get().limits.user;
if (body.username.length > maxUsername) {
if (username.length > maxUsername || !username) {
throw FieldErrors({
username: {
code: "BASE_TYPE_BAD_LENGTH",
@ -297,7 +302,7 @@ router.post(
});
}
const user = await User.register({ ...body, req });
const user = await User.register({ ...body, username, req });
if (body.invite) {
// await to fail if the invite doesn't exist (necessary for requireInvite to work properly) (username only signups are possible)

View File

@ -62,7 +62,7 @@ router.get(
const apiKey = getGifApiKey();
const agent = new ProxyAgent();
const agent = new ProxyAgent({ family: 4 });
const response = await fetch(
`https://g.tenor.com/v1/search?q=${q}&media_format=${media_format}&locale=${locale}&key=${apiKey}`,

View File

@ -57,7 +57,7 @@ router.get(
const apiKey = getGifApiKey();
const agent = new ProxyAgent();
const agent = new ProxyAgent({ family: 4 });
const response = await fetch(
`https://g.tenor.com/v1/trending?media_format=${media_format}&locale=${locale}&key=${apiKey}`,

View File

@ -52,7 +52,7 @@ router.get(
const apiKey = getGifApiKey();
const agent = new ProxyAgent();
const agent = new ProxyAgent({ family: 4 });
const [responseSource, trendGifSource] = await Promise.all([
fetch(

View File

@ -490,9 +490,32 @@ export async function onIdentify(this: WebSocket, data: Payload) {
guilds.filter((guild) => !guild.unavailable) as Guild[]
).map((guild) => {
return {
voice_states: guild.voice_states.map((state) =>
state.toPublicVoiceState(),
),
voice_states: guild.voice_states.map((state) => {
if (typeof state.toPublicVoiceState === "function") {
return state.toPublicVoiceState();
} else {
console.log("Returning non-standard voice state");
return {
user_id: state.user_id,
suppress: state.suppress,
session_id: state.session_id,
self_video: state.self_video,
self_mute: state.self_mute,
self_deaf: state.self_deaf,
self_stream: state.self_stream ?? false,
request_to_speak_timestamp:
state.request_to_speak_timestamp
? new Date(
state.request_to_speak_timestamp,
).toISOString()
: null,
mute: state.mute,
deaf: state.deaf,
channel_id: state.channel_id,
guild_id: state.guild_id,
};
}
}),
id: guild.id,
embedded_activities: [],
};

View File

@ -20,7 +20,7 @@ export interface RegisterSchema {
/**
* @minLength 2
*/
username: string;
username?: string;
/**
* @minLength 1
* @maxLength 72
@ -44,5 +44,8 @@ export interface RegisterSchema {
// part of pomelo
unique_username_registration?: boolean;
/**
* @minLength 2
*/
global_name?: string;
}

View File

@ -28,4 +28,5 @@ export interface VoiceIdentifySchema {
quality: number;
}[];
max_secure_frames_version?: number;
max_dave_protocol_version?: number;
}