Files
discord-decomp/sources/modules/rpc/server/commands/setActivity.tsx
T
2026-07-27 16:20:00 +03:00

549 lines
22 KiB
TypeScript

/* Metro module 13040; source: modules/rpc/server/commands/setActivity.tsx; dependencies: [4234, 4135, 661, 4122, 8079, 8844, 8076, 694, 6884, 8045, 22, 672, 6873, 683, 2] */
function _fun99543(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#99543, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13230:6, offset: 0x021ccb42, size: 345 bytes, params: 8, frame: 24
var object2;
const env0_0 = require;
const Object = global.Object;
Object.defineProperty(exports, '__esModule', {value: true});
const applicationStore = importDefault(4234) /* metro dependency 4234: ApplicationStore */;
let value = require(4135) /* metro dependency 4135: Constants */;
const RPC_SCOPE_CONFIG = value.RPC_SCOPE_CONFIG;
const RPC_LOCAL_SCOPE = value.RPC_LOCAL_SCOPE;
const env0_4 = value.TransportTypes;
value = require(661) /* metro dependency 661: Constants */;
const env0_5 = value.ActivityGamePlatforms;
const env0_6 = value.ActivityPartyPrivacy;
const env0_7 = value.ActivityTypes;
const env0_8 = value.AnalyticEvents;
const RPCCommands = value.RPCCommands;
const env0_9 = value.RPCErrors;
const env0_10 = ['1402418171662569542'];
object2 = {};
const SET_ACTIVITY = RPCCommands.SET_ACTIVITY;
const ANY = RPC_SCOPE_CONFIG.ANY;
const {RPC, RPC_ACTIVITIES_WRITE} = (require(4122) /* metro dependency 4122: OAuth2Scopes */).OAuth2Scopes;
object2[SET_ACTIVITY] = {scope: {[ANY]: [RPC, RPC_ACTIVITIES_WRITE, RPC_LOCAL_SCOPE]}, validation: validation_99544,
handler: handler_99545};
(require(2) /* metro dependency 2 */).fileFinishedImporting('modules/rpc/server/commands/setActivity.tsx');
exports.default = object2;
}
function validation_99544(a0) { // fn#99544, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13230:449, offset: 0x021ccc9b, size: 1470 bytes, params: 2, frame: 34
const value3 = (importDefault(8079) /* metro dependency 8079: createRpcJoiSchemaObject */)(a0).required();
const keys = value3.keys;
const object8 = {};
const value4 = a0.number();
object8.pid = value4.min(0);
const value5 = (importDefault(8079) /* metro dependency 8079: createRpcJoiSchemaObject */)(a0);
const keys2 = value5.keys;
const object9 = {};
const value7 = a0.string().min(1);
object9.name = value7.max(128);
object9.state = a0.string().min(2).max(128);
object9.state_url = a0.string().uri().min(1).max(256);
object9.details = a0.string().min(2).max(128);
object9.details_url = a0.string().uri().min(1).max(256);
const value18 = (importDefault(8079) /* metro dependency 8079: createRpcJoiSchemaObject */)(a0);
const keys3 = value18.keys;
const object10 = {};
object10.start = a0.number().min(1);
object10.end = a0.number().min(1);
object9.timestamps = Reflect.apply(keys3, value18, [object10]);
const value21 = (importDefault(8079) /* metro dependency 8079: createRpcJoiSchemaObject */)(a0);
const keys4 = value21.keys;
const object11 = {};
object11.large_image = a0.string().min(1).max(300);
object11.large_text = a0.string().min(2).max(128);
object11.large_url = a0.string().uri().min(1).max(256);
object11.small_image = a0.string().min(1).max(300);
object11.small_text = a0.string().min(2).max(128);
object11.small_url = a0.string().uri().min(1).max(256);
object11.invite_cover_image = a0.string().min(1).max(300);
object9.assets = Reflect.apply(keys4, value21, [object11]);
const value38 = (importDefault(8079) /* metro dependency 8079: createRpcJoiSchemaObject */)(a0);
const keys5 = value38.keys;
const object12 = {};
object12.id = a0.string().min(2).max(128);
const value41 = a0.array();
let items2 = value41.items;
const value42 = a0.number();
object12.size = Reflect.apply(items2, value41, [value42.min(0)]).length(2);
const value44 = a0.number();
let PRIVATE = ActivityPartyPrivacy.PRIVATE;
const value45 = value44.default(PRIVATE);
let valid = value45.valid;
PRIVATE = ActivityPartyPrivacy.PRIVATE;
const PUBLIC = ActivityPartyPrivacy.PUBLIC;
object12.privacy = Reflect.apply(valid, value45, [[PRIVATE, PUBLIC]]);
object9.party = Reflect.apply(keys5, value38, [object12]);
const value46 = (importDefault(8079) /* metro dependency 8079: createRpcJoiSchemaObject */)(a0);
const keys6 = value46.keys;
const object13 = {};
object13.match = a0.string().min(2).max(128);
object13.join = a0.string().min(2).max(128);
object13.spectate = a0.string().min(2).max(128);
object9.secrets = Reflect.apply(keys6, value46, [object13]);
const value53 = a0.array();
items2 = value53.items;
const value54 = (importDefault(8079) /* metro dependency 8079: createRpcJoiSchemaObject */)(a0);
const keys7 = value54.keys;
const object14 = {};
object14.label = a0.string().min(1).max(32).required();
object14.url = a0.string().uri().min(1).max(512).required();
object9.buttons = Reflect.apply(items2, value53, [Reflect.apply(keys7, value54, [object14])]).min(1).max(2);
object9.instance = a0.boolean();
const value64 = a0.array();
items2 = value64.items;
const value66 = a0.string().min(1);
object9.supported_platforms = Reflect.apply(items2, value64, [value66.max(32)]).min(1).max(10);
const value69 = a0.number();
let PLAYING = ActivityTypes.PLAYING;
const value70 = value69.default(PLAYING);
valid = value70.valid;
PLAYING = ActivityTypes.PLAYING;
const LISTENING = ActivityTypes.LISTENING;
const WATCHING = ActivityTypes.WATCHING;
const COMPETING = ActivityTypes.COMPETING;
object9.type = Reflect.apply(valid, value70, [PLAYING, LISTENING, WATCHING, COMPETING]);
const value72 = a0.number().optional();
valid = value72.valid;
const {NAME, STATE, DETAILS} = (require(8844) /* metro dependency 8844: StatusDisplayTypes */).StatusDisplayTypes;
object9.status_display_type = Reflect.apply(valid, value72, [NAME, STATE, DETAILS]);
object8.activity = Reflect.apply(keys2, value5, [object9]).allow(null);
return Reflect.apply(keys, value3, [object8]);
}
function handler_99545({socket, args, isSocketConnected}) { // fn#99545, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13230:1903, offset: 0x021cd259, size: 1551 bytes, params: 2, frame: 32
var r8;
var r12;
var privacy;
var r14;
var r5;
var prototype;
var name;
var application;
var id;
var value5;
var getApplication;
var value6;
var instance;
var party;
var moduleValue;
var computeActivityFlags;
var value8;
var moduleValue2;
var canLaunchFrame;
var canLaunchFrame2;
var activityFlags;
var value9;
var assets;
var secrets;
var timestamps;
var buttons;
var PLAYING;
var value11;
var defaultImport2;
var intersection;
var length;
var binding;
var defaultImport3;
var uniq;
var length2;
var map;
var Object;
var keys;
var value13;
var property;
var Date;
var now;
var value14;
var toString;
var property2;
var length3;
var Math;
var floor;
var property3;
var Millis;
var SECOND;
var value15;
var fetchAssetIds;
var large_image;
var small_image;
var invite_cover_image;
var Error;
var error;
const pid = args.pid;
const activity = args.activity;
let value = undefined;
const IPC = TransportTypes.IPC;
let object = [IPC];
const WEBSOCKET = TransportTypes.WEBSOCKET;
object[1] = WEBSOCKET;
const POST_MESSAGE = TransportTypes.POST_MESSAGE;
object[2] = POST_MESSAGE;
let includes = object.includes;
if (Reflect.apply(includes, object, [socket.transport])) {
if (pid == null) {
reducibleJoin4: while (true) {
if (TransportTypes.IPC === socket.transport) {
value = importDefault(8076) /* metro dependency 8076: RPCError */;
value = new value({errorCode: RPCErrors.INVALID_COMMAND}, 'nonzero pid required');
throw value;
}
break reducibleJoin4;
}
}
if (activity == null) {
(importDefault(694) /* metro dependency 694: Dispatcher */).dispatch({type: 'LOCAL_ACTIVITY_UPDATE',
socketId: socket.id, pid: pid, activity: activity});
return global.Promise.resolve(activity);
}
object = {};
name = activity.name;
reducibleJoin7: while (true) {
if (name) {
break reducibleJoin7;
}
application = socket.application;
name = application.name;
activity.name = name;
break reducibleJoin7;
}
application = socket.application;
id = application.id;
activity.application_id = id;
value5 = socket.transport === TransportTypes.POST_MESSAGE;
r8 = value5 ? ActivityGamePlatforms.EMBEDDED : ActivityGamePlatforms.DESKTOP;
activity.platform = r8;
getApplication = ApplicationStore.getApplication;
r8 = id ?? value;
value6 = Reflect.apply(getApplication, ApplicationStore, [r8]);
instance = activity.instance;
r12 = instance != null && instance;
party = activity.party;
reducibleJoin14: while (true) {
if (party == null) {
privacy = value;
break reducibleJoin14;
}
privacy = party.privacy;
break reducibleJoin14;
}
delete activity.instance;
party = activity.party;
reducibleJoin16: while (true) {
if (party == null) {
break reducibleJoin16;
}
delete party.privacy;
break reducibleJoin16;
}
moduleValue = require(6884) /* metro dependency 6884: ActivityFlagUtils */;
computeActivityFlags = moduleValue.computeActivityFlags;
value8 = value6 != null;
reducibleJoin18: while (true) {
if (value8) {
moduleValue2 = require(8045) /* metro dependency 8045: canLaunchFrame */;
canLaunchFrame = moduleValue2.canLaunchFrame;
canLaunchFrame2 = Reflect.apply(canLaunchFrame, moduleValue2, [value6]);
r8 = canLaunchFrame2;
break reducibleJoin18;
}
r8 = value8;
break reducibleJoin18;
}
r8 = r8 && value5;
activityFlags = Reflect.apply(computeActivityFlags, moduleValue, [activity, r12, value5, r8, privacy]);
value9 = 0;
reducibleJoin21: while (true) {
if (activityFlags > value9) {
activity.flags = activityFlags;
break reducibleJoin21;
}
break reducibleJoin21;
}
assets = activity.assets;
party = activity.party;
secrets = activity.secrets;
timestamps = activity.timestamps;
buttons = activity.buttons;
reducibleJoin23: while (true) {
if (activity.type != null) {
break reducibleJoin23;
}
PLAYING = ActivityTypes.PLAYING;
activity.type = PLAYING;
break reducibleJoin23;
}
if (secrets != null) {
value11 = (importDefault(22) /* metro dependency 22 */).values(secrets).filter(function(a0) {
return !!a0;
});
reducibleJoin30: while (true) {
reducibleJoin28: while (true) {
if (party == null) {
break reducibleJoin28;
}
defaultImport2 = importDefault(22) /* metro dependency 22 */;
intersection = defaultImport2.intersection;
id = party.id;
length = Reflect.apply(intersection, defaultImport2, [value11, [id]]).length;
if (length > value9) {
binding = env0_10;
includes = binding.includes;
application = socket.application;
id = application.id;
if (!Reflect.apply(includes, binding, [id])) {
value = importDefault(8076) /* metro dependency 8076: RPCError */;
value = new value({errorCode: RPCErrors.INVALID_ACTIVITY_SECRET},
'secrets cannot match the party id');
throw value;
}
break reducibleJoin28;
}
break reducibleJoin28;
}
defaultImport3 = importDefault(22) /* metro dependency 22 */;
uniq = defaultImport3.uniq;
length = Reflect.apply(uniq, defaultImport3, [value11]).length;
length2 = value11.length;
if (length < length2) {
value = importDefault(8076) /* metro dependency 8076: RPCError */;
value = new value({errorCode: RPCErrors.INVALID_ACTIVITY_SECRET}, 'secrets must be unique');
throw value;
}
if (buttons != null) {
value = importDefault(8076) /* metro dependency 8076: RPCError */;
value = new value({errorCode: RPCErrors.INVALID_ACTIVITY_SECRET},
'secrets cannot currently be sent with buttons');
throw value;
}
break reducibleJoin30;
}
}
reducibleJoin32: while (true) {
if (buttons == null) {
break reducibleJoin32;
}
map = buttons.map;
object.button_urls = Reflect.apply(map, buttons, [_fun99547]);
map = buttons.map;
activity.buttons = Reflect.apply(map, buttons, [_fun99548]);
break reducibleJoin32;
}
activity.metadata = object;
reducibleJoin37: while (true) {
if (timestamps == null) {
break reducibleJoin37;
}
Object = global.Object;
keys = Object.keys;
value13 = Reflect.apply(keys, Object, [timestamps]);
length = value13.length;
if (!(value9 < length)) {
break reducibleJoin37;
}
r14 = value9;
reducibleLoop34: while (true) {
property = value13[r14];
Date = global.Date;
now = Date.now;
value14 = Reflect.apply(now, Date, []);
toString = value14.toString;
length = Reflect.apply(toString, value14, []).length;
property2 = timestamps[property];
toString = property2.toString;
length3 = Reflect.apply(toString, property2, []).length;
reducibleJoin36: while (true) {
if (length - length3 > 2) {
Math = global.Math;
floor = Math.floor;
property3 = timestamps[property];
Millis = (importDefault(672) /* metro dependency 672: Durations */).Millis;
SECOND = Millis.SECOND;
timestamps[property] = Reflect.apply(floor, Math, [property3 * SECOND]);
break reducibleJoin36;
}
break reducibleJoin36;
}
value15 = typeof r14 === 'bigint' ? r14 + 1n : +r14 + 1;
length = value13.length;
if (value15 < length) {
r14 = value15;
continue reducibleLoop34;
}
break reducibleJoin37;
}
}
if (assets == null) {
r5 = global.Promise.resolve([]);
} else {
application = socket.application;
reducibleJoin43: while (true) {
reducibleJoin41: while (true) {
if (application == null) {
break reducibleJoin41;
}
application = socket.application;
id = application.id;
if (id == null) {
break reducibleJoin41;
}
value = require(6873) /* metro dependency 6873: ApplicationAssetUtils */;
fetchAssetIds = value.fetchAssetIds;
application = socket.application;
id = application.id;
large_image = assets.large_image;
small_image = assets.small_image;
invite_cover_image = assets.invite_cover_image;
value = Reflect.apply(fetchAssetIds, value, [id, [large_image, small_image, invite_cover_image]]);
r5 = value;
break reducibleJoin43;
}
Error = global.Error;
prototype = Error.prototype;
value = Object.create(prototype, {constructor: {value: Error}});
error = new Error();
value = error instanceof Object ? error : value;
throw value;
}
}
return r5.then(_fun99549);
}
value = importDefault(8076) /* metro dependency 8076: RPCError */;
const INVALID_COMMAND = RPCErrors.INVALID_COMMAND;
value = new value({errorCode: INVALID_COMMAND}, 'command not available from "' + socket.transport + '" transport');
throw value;
}
function _fun99549(a0) { // fn#99549, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13230:3811, offset: 0x021cd868, size: 704 bytes, params: 2, frame: 20
var r0;
var r1;
var r3;
var r2;
var r7;
var item3;
var value3;
var item4;
var value4;
var value6;
var defaultImport;
var dispatch;
var object2;
var socketBinding;
var id;
var activityBinding;
var secrets;
var party;
var details;
var value7;
const iterator = a0[Symbol.iterator]();
const iterator2 = iterator.next;
let item2 = Reflect.apply(iterator2, iterator, []);
let item = item2.value;
item2 = item2.done ? undefined : iterator;
let value = undefined;
const value2 = item2 === value;
const r4 = value2 ? value : item;
if (value2) {
r0 = item2;
r1 = value2;
r3 = value;
} else {
item3 = Reflect.apply(iterator2, item2, []);
item = item3.value;
item3 = item3.done ? undefined : item2;
value3 = item3 === value;
if (value3) {
r0 = item3;
r1 = value3;
r3 = value;
} else {
r0 = item3;
r1 = value3;
r3 = item;
}
}
if (r1) {
r2 = value;
} else {
item4 = Reflect.apply(iterator2, r0, []);
item = item4.value;
item4 = item4.done ? undefined : r0;
value4 = item4 === value;
if (value4) {
r0 = item4;
r1 = value4;
r2 = value;
} else {
r0 = item4;
r1 = value4;
r2 = item;
}
}
if (!r1) {
r0.return();
}
if (assets != null) {
if (r4 != null) {
assets.large_image = r4;
} else {
delete assets.large_image;
}
if (r3 != null) {
assets.small_image = r3;
} else {
delete assets.small_image;
}
if (r2 != null) {
assets.invite_cover_image = r2;
} else {
delete assets.invite_cover_image;
}
}
if (isSocketConnected()) {
value6 = environment.__proto__;
defaultImport = importDefault(694) /* metro dependency 694: Dispatcher */;
dispatch = defaultImport.dispatch;
socketBinding = socket;
id = socketBinding.id;
activityBinding = activity;
Reflect.apply(dispatch, defaultImport, [{type: 'LOCAL_ACTIVITY_UPDATE', socketId: id, pid: pid,
activity: activityBinding, partyPrivacy: privacy}]);
secrets = activityBinding.secrets;
party = activityBinding.party;
object2 = {};
id = socketBinding.application.id;
object2.application_id = id;
object2.type = activityBinding.type;
object2.name = activityBinding.name;
object2.status_display_type = activityBinding.status_display_type;
details = activityBinding.details;
value7 = '';
object2.details = details ?? value7;
r7 = activity.state ?? value7;
object2.state = r7;
r7 = activity.state_url != null || activity.details_url != null;
r7 = !r7 ? (activity.assets == null ? value : activity.assets.large_url) != null : r7;
r7 = !r7 ? (activity.assets == null ? value : activity.assets.small_url) != null : r7;
object2.has_urls = r7;
if (secrets != null) {
object2.has_match_secret = !!secrets.match;
object2.has_join_secret = !!secrets.join;
}
if (assets != null) {
r3 = assets.large_image || assets.small_image;
r3 = !r3 ? assets.invite_cover_image : r3;
object2.has_images = !!r3;
}
if (party != null) {
object2.party_max = party.size != null && party.size[1] > 0 ? party.size[1] : value;
object2.party_id = party.id;
}
value = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
value.track(AnalyticEvents.ACTIVITY_UPDATED, object2);
return activity;
}
return value;
}