mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-22 02:12:40 +01:00
Merge branch 'master' into fix/user-profile-colors
This commit is contained in:
commit
9384138dd4
@ -1,7 +0,0 @@
|
|||||||
node_modules
|
|
||||||
dist
|
|
||||||
README.md
|
|
||||||
COPYING
|
|
||||||
src/webrtc
|
|
||||||
scripts/
|
|
||||||
assets
|
|
@ -39,7 +39,9 @@ export default [{
|
|||||||
|
|
||||||
rules: {
|
rules: {
|
||||||
"no-mixed-spaces-and-tabs": "off",
|
"no-mixed-spaces-and-tabs": "off",
|
||||||
"@typescript-eslint/no-inferrable-types": "off",
|
"@typescript-eslint/no-inferrable-types": "off", // Required by typeorm
|
||||||
"@typescript-eslint/no-var-requires": "off",
|
"@typescript-eslint/no-var-requires": "off", // Sometimes requred by typeorm to resolve circular deps
|
||||||
|
"@typescript-eslint/no-require-imports": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": "off",
|
||||||
},
|
},
|
||||||
}];
|
}];
|
7
package-lock.json
generated
7
package-lock.json
generated
@ -1205,7 +1205,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
|
||||||
"integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
|
"integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ajv": "^6.12.4",
|
"ajv": "^6.12.4",
|
||||||
"debug": "^4.3.2",
|
"debug": "^4.3.2",
|
||||||
@ -1257,7 +1256,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
|
||||||
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
|
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
@ -1290,7 +1288,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz",
|
||||||
"integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==",
|
"integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
}
|
}
|
||||||
@ -5899,7 +5896,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
|
||||||
"integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
|
"integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
}
|
}
|
||||||
@ -6765,7 +6761,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz",
|
||||||
"integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==",
|
"integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
@ -11791,4 +11786,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -108,7 +108,6 @@ export async function Authentication(
|
|||||||
req.rights = new Rights(Number(user.rights));
|
req.rights = new Rights(Number(user.rights));
|
||||||
return next();
|
return next();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
||||||
return next(new HTTPError(error!.toString(), 400));
|
return next(new HTTPError(error!.toString(), 400));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,6 @@ router.post(
|
|||||||
await User.update({ id: user.id }, data);
|
await User.update({ id: user.id }, data);
|
||||||
|
|
||||||
// come on, the user has to have an email to reset their password in the first place
|
// come on, the user has to have an email to reset their password in the first place
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
||||||
await Email.sendPasswordChanged(user, user.email!);
|
await Email.sendPasswordChanged(user, user.email!);
|
||||||
|
|
||||||
res.json({ token: await generateToken(user.id) });
|
res.json({ token: await generateToken(user.id) });
|
||||||
|
@ -171,7 +171,6 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
|||||||
// but we do want almost everything from guild.
|
// but we do want almost everything from guild.
|
||||||
// How do you do that without just enumerating the guild props?
|
// How do you do that without just enumerating the guild props?
|
||||||
guild: Object.fromEntries(
|
guild: Object.fromEntries(
|
||||||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
||||||
getDatabase()!
|
getDatabase()!
|
||||||
.getMetadata(Guild)
|
.getMetadata(Guild)
|
||||||
.columns.map((x) => [x.propertyName, true]),
|
.columns.map((x) => [x.propertyName, true]),
|
||||||
|
@ -214,7 +214,6 @@ async function subscribeToMemberEvents(this: WebSocket, user_id: string) {
|
|||||||
export async function onLazyRequest(this: WebSocket, { d }: Payload) {
|
export async function onLazyRequest(this: WebSocket, { d }: Payload) {
|
||||||
// TODO: check data
|
// TODO: check data
|
||||||
check.call(this, LazyRequestSchema, d);
|
check.call(this, LazyRequestSchema, d);
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
const { guild_id, typing, channels, activities, members } =
|
const { guild_id, typing, channels, activities, members } =
|
||||||
d as LazyRequestSchema;
|
d as LazyRequestSchema;
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ import {
|
|||||||
} from "@spacebar/util";
|
} from "@spacebar/util";
|
||||||
import { WebSocket, Payload, OPCODES, Send } from "@spacebar/gateway";
|
import { WebSocket, Payload, OPCODES, Send } from "@spacebar/gateway";
|
||||||
import { check } from "./instanceOf";
|
import { check } from "./instanceOf";
|
||||||
import { FindManyOptions, In, Like } from "typeorm";
|
import { FindManyOptions, ILike, In } from "typeorm";
|
||||||
|
|
||||||
export async function onRequestGuildMembers(this: WebSocket, { d }: Payload) {
|
export async function onRequestGuildMembers(this: WebSocket, { d }: Payload) {
|
||||||
// Schema validation can only accept either string or array, so transforming it here to support both
|
// Schema validation can only accept either string or array, so transforming it here to support both
|
||||||
@ -114,7 +114,7 @@ export async function onRequestGuildMembers(this: WebSocket, { d }: Payload) {
|
|||||||
if (query) {
|
if (query) {
|
||||||
// @ts-expect-error memberFind.where is very much defined
|
// @ts-expect-error memberFind.where is very much defined
|
||||||
memberFind.where.user = {
|
memberFind.where.user = {
|
||||||
username: Like(query + "%"),
|
username: ILike(query + "%"),
|
||||||
};
|
};
|
||||||
} else if (user_ids && user_ids.length > 0) {
|
} else if (user_ids && user_ids.length > 0) {
|
||||||
// @ts-expect-error memberFind.where is still very much defined
|
// @ts-expect-error memberFind.where is still very much defined
|
||||||
@ -166,15 +166,17 @@ export async function onRequestGuildMembers(this: WebSocket, { d }: Payload) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (chunks.length == 0) {
|
||||||
|
chunks.push({
|
||||||
|
...baseData,
|
||||||
|
members: [],
|
||||||
|
presences: presences ? [] : undefined,
|
||||||
|
chunk_index: 0,
|
||||||
|
chunk_count: 1,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (notFound.length > 0) {
|
if (notFound.length > 0) {
|
||||||
if (chunks.length == 0)
|
|
||||||
chunks.push({
|
|
||||||
...baseData,
|
|
||||||
members: [],
|
|
||||||
presences: presences ? [] : undefined,
|
|
||||||
chunk_index: 0,
|
|
||||||
chunk_count: 1,
|
|
||||||
});
|
|
||||||
chunks[0].not_found = notFound;
|
chunks[0].not_found = notFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +99,6 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
|
|||||||
voiceState.token = genVoiceToken();
|
voiceState.token = genVoiceToken();
|
||||||
voiceState.session_id = this.session_id;
|
voiceState.session_id = this.session_id;
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
const { id, ...newObj } = voiceState;
|
const { id, ...newObj } = voiceState;
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
|
@ -46,7 +46,7 @@ export class BaseClassWithoutId extends BaseEntity {
|
|||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
toJSON(): any {
|
toJSON(): any {
|
||||||
return Object.fromEntries(
|
return Object.fromEntries(
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/no-non-null-assertion
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
this.metadata!.columns // @ts-ignore
|
this.metadata!.columns // @ts-ignore
|
||||||
.map((x) => [x.propertyName, this[x.propertyName]])
|
.map((x) => [x.propertyName, this[x.propertyName]])
|
||||||
.concat(
|
.concat(
|
||||||
|
@ -466,8 +466,8 @@ export class Member extends BaseClassWithoutId {
|
|||||||
member[x] = this[x];
|
member[x] = this[x];
|
||||||
});
|
});
|
||||||
|
|
||||||
if (member.roles) member.roles = member.roles.map((x: Role) => x.id);
|
if (this.roles) member.roles = this.roles.map((x: Role) => x.id);
|
||||||
if (member.user) member.user = member.user.toPublicUser();
|
if (this.user) member.user = this.user.toPublicUser();
|
||||||
|
|
||||||
return member as PublicMember;
|
return member as PublicMember;
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,6 @@ export interface MessageCreateSchema {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TypeScript complains once this is used above
|
// TypeScript complains once this is used above
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
interface PollCreationSchema {
|
interface PollCreationSchema {
|
||||||
question: PollMedia;
|
question: PollMedia;
|
||||||
answers: PollAnswer[];
|
answers: PollAnswer[];
|
||||||
|
@ -18,4 +18,5 @@
|
|||||||
|
|
||||||
import { Team } from "@spacebar/util";
|
import { Team } from "@spacebar/util";
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
||||||
export interface TeamListResponse extends Array<Team> {}
|
export interface TeamListResponse extends Array<Team> {}
|
||||||
|
@ -70,7 +70,6 @@ export function enableAutoUpdate(opts: {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
async function download(url: string, dir: string) {
|
async function download(url: string, dir: string) {
|
||||||
try {
|
try {
|
||||||
// TODO: use file stream instead of buffer (to prevent crash because of high memory usage for big files)
|
// TODO: use file stream instead of buffer (to prevent crash because of high memory usage for big files)
|
||||||
|
@ -100,6 +100,7 @@ export async function listenEvent(
|
|||||||
};
|
};
|
||||||
|
|
||||||
const listener = (msg: ProcessEvent) => {
|
const listener = (msg: ProcessEvent) => {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
||||||
msg.type === "event" &&
|
msg.type === "event" &&
|
||||||
msg.id === event &&
|
msg.id === event &&
|
||||||
callback({ ...msg.event, cancel });
|
callback({ ...msg.event, cancel });
|
||||||
|
@ -117,7 +117,7 @@ export const Sentry = {
|
|||||||
Integrations.setupExpressErrorHandler(app);
|
Integrations.setupExpressErrorHandler(app);
|
||||||
|
|
||||||
// The typings for this are broken?
|
// The typings for this are broken?
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
app.use(function onError(err: any, req: any, res: any, next: any) {
|
app.use(function onError(err: any, req: any, res: any, next: any) {
|
||||||
res.statusCode = 500;
|
res.statusCode = 500;
|
||||||
res.end(res.sentry + "\n");
|
res.end(res.sentry + "\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user