summary refs log tree commit diff
path: root/src/gateway/opcodes
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2023-09-22 15:39:15 +1000
committerMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2023-09-22 15:46:35 +1000
commit3c4691499249e184f4e418ae798379f98d5f4cff (patch)
tree952a1f634bd860aec68064151580aed0cbbfb78f /src/gateway/opcodes
parenta ton of broken shit and approx 1 nice function (diff)
parentMerge branch 'master' of github.com:spacebarchat/server (diff)
downloadserver-feat/federation.tar.xz
Merge branch 'master' into feat/federation feat/federation
Diffstat (limited to 'src/gateway/opcodes')
-rw-r--r--src/gateway/opcodes/Identify.ts65
1 files changed, 36 insertions, 29 deletions
diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts

index 7610901a..9a3128d9 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts
@@ -17,49 +17,57 @@ */ import { - WebSocket, - Payload, - setupListener, - Capabilities, CLOSECODES, + Capabilities, OPCODES, + Payload, Send, + WebSocket, + setupListener, } from "@spacebar/gateway"; import { - checkToken, + Application, + Config, + DMChannel, + DefaultUserGuildSettings, + EVENTEnum, + Guild, + GuildOrUnavailable, + IdentifySchema, Intents, Member, - ReadyEventData, - Session, - EVENTEnum, - Config, - PublicUser, - PrivateUserProjection, - ReadState, - Application, - emitEvent, - SessionsReplace, - PrivateSessionProjection, MemberPrivateProjection, + OPCodes, + Permissions, PresenceUpdateEvent, - IdentifySchema, - DefaultUserGuildSettings, - ReadyGuildDTO, - Guild, + PrivateSessionProjection, + PrivateUserProjection, + PublicUser, PublicUserProjection, + ReadState, + ReadyEventData, + ReadyGuildDTO, ReadyUserGuildSettingsEntries, - UserSettings, - Permissions, - DMChannel, - GuildOrUnavailable, Recipient, - OPCodes, + Session, + SessionsReplace, + UserSettings, + checkToken, + emitEvent, } from "@spacebar/util"; import { check } from "./instanceOf"; // TODO: user sharding // TODO: check privileged intents, if defined in the config +const tryGetUserFromToken = async (...args: Parameters<typeof checkToken>) => { + try { + return (await checkToken(...args)).user; + } catch (e) { + return null; + } +}; + export async function onIdentify(this: WebSocket, data: Payload) { if (this.user_id) { // we've already identified @@ -74,7 +82,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { this.capabilities = new Capabilities(identify.capabilities || 0); - const { user } = await checkToken(identify.token, { + const user = await tryGetUserFromToken(identify.token, { relations: ["relationships", "relationships.to", "settings"], select: [...PrivateUserProjection, "relationships"], }); @@ -332,10 +340,9 @@ export async function onIdentify(this: WebSocket, data: Payload) { // TODO how is active determined? // in our lazy request impl, we just pick the 'most relevant' session active: x.session_id == session.session_id, - activities: x.activities, + activities: x.activities ?? [], client_info: x.client_info, - // TODO: what does all mean? - session_id: x.session_id == session.session_id ? "all" : x.session_id, + session_id: x.session_id, // TODO: discord.com sends 'all', what is that??? status: x.status, }));