Files
discord-decomp/modules/rpc/server/commands/subscriptions.tsx
T
2026-11-01 12:12:55 +02:00

119 lines
3.5 KiB
TypeScript

// Metro module 13558 (f13559).
import { RPCCommands, RPCErrors, AnalyticEvents } from "../../../../Constants";
import RPCError from "../../RPCError";
import validateScope from "../../helpers/validateScope";
import AnalyticsUtils from "../../../../utils/AnalyticsUtils";
import { getInitialSubscriptionPayload } from "../events/subscriptionHelpers";
function $mk116546($env) {
return (a0) => {
setImmediate($mk118396($env));
a0({
evt: $env.$parent[2]
});
};
}
function $mk118396($env) {
return () => {
const r2 = $env;
const r1 = $env.$parent;
const r5 = r1[0];
const r12 = r1[1];
const r4 = r1[2];
r5.addSubscription(r12, r4, r1[3], r2[2]);
if (r2[3] != null) {
const r16 = r2[3];
r5.dispatchToSubscriptions(r4, $mk118909(r1), r16);
}
};
}
function $mk118909($env) {
return (a0) => a0.socket.id === $env[1].id;
}
let env9416 = {};
const r19 = {};
r19[RPCCommands.SUBSCRIBE] = {
handler: async (a0) => {
let promise;
let env20532 = {
$parent: env9416
};
env20532[0] = a0.server;
env20532[1] = a0.socket;
env20532[2] = a0.evt;
env20532[3] = a0.args;
let c27510_0, c27510_1;
L21: {
let env30645;
const r34 = env20532;
c27510_1 = r34;
const r13 = env30645 = {
$parent: r34
};
c27510_0 = r13;
env30645[0] = void 0;
env30645[1] = void 0;
env30645[2] = void 0;
env30645[3] = void 0;
const r11 = env20532[0];
const r35 = r11.events[env20532[2]];
env30645[0] = r35;
if (r35 == null) {
throw new RPCError({
errorCode: RPCErrors.INVALID_EVENT
}, `Invalid event: ${env20532[2]}`);
}
if (!validateScope(env20532[1].authorization.scopes, r35.scope)) {
throw new RPCError({
errorCode: RPCErrors.INVALID_PERMISSIONS
}, "Not authenticated or invalid scope");
}
AnalyticsUtils.track(AnalyticEvents.RPC_SUBSCRIPTION_REQUESTED, {
event: env20532[2],
scope: typeof r35.scope === "object" ? JSON.stringify(r35.scope) : r35.scope,
application_id: env20532[1].application.id,
socket_scope: env20532[1].authorization.scopes.toString()
});
if (r35.validation != null) {
env30645[1] = await r11.getJoi();
if (env30645[1].validate(env20532[3], env30645[0].validation(env30645[1]), {
convert: false
}).error == null) {
const r147 = c27510_0;
env30645[2] = env30645[0].handler({
args: env20532[3],
socket: env20532[1]
});
env30645[3] = getInitialSubscriptionPayload(env20532[1], env20532[2], env20532[3]);
promise = new Promise($mk116546(r147));
break L21;
}
throw new RPCError({
errorCode: RPCErrors.INVALID_PAYLOAD
}, "Invalid subscription parameters provided");
}
const r95 = c27510_0;
env30645[2] = env30645[0].handler({
args: env20532[3],
socket: env20532[1]
});
env30645[3] = getInitialSubscriptionPayload(env20532[1], env20532[2], env20532[3]);
return new Promise($mk116546(r95));
}
return promise;
}
};
r19[RPCCommands.UNSUBSCRIBE] = {
handler: ({ server, socket, evt, args }) => {
if (server.events[evt] == null) {
throw new RPCError({
errorCode: RPCErrors.INVALID_EVENT
}, `Invalid event: ${evt}`);
}
server.removeSubscription(socket, evt, args);
return {
evt
};
}
};
export default r19;