Files
discord-decomp/sources/modules/gateway/GatewaySocketAnalytics.tsx
T
2026-07-27 16:20:00 +03:00

562 lines
21 KiB
TypeScript

/* Metro module 12502; source: modules/gateway/GatewaySocketAnalytics.tsx; dependencies: [29, 1878, 661, 20, 14, 683, 2] */
function _fun95253(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#95253, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:6, offset: 0x02136c26, size: 304 bytes, params: 8, frame: 19
const env0_2 = ['guilds', 'merged_presences', 'merged_members', 'read_state', 'private_channels',
'user_guild_settings', 'user_settings', 'user_settings_proto', 'experiments', 'guild_experiments',
'relationships', 'users'];
const env0_3 = ['features'];
const env0_4 = ['threads', 'guild_scheduled_events'];
const Object = global.Object;
Object.defineProperty(exports, '__esModule', {value: true});
const env0_5 = importDefault(29) /* metro dependency 29 */;
const userStore = importDefault(1878) /* metro dependency 1878: UserStore */;
const constantsModule = require(661) /* metro dependency 661: Constants */;
const env0_7 = constantsModule.AnalyticEvents;
const env0_8 = constantsModule.ChannelTypes;
(require(2) /* metro dependency 2 */).fileFinishedImporting('modules/gateway/GatewaySocketAnalytics.tsx');
exports.reportDevtoolsEvent = function() {
};
exports.logReadyPayloadReceived = logReadyPayloadReceived;
exports.getConnectionPath = getConnectionPath;
exports.getReadyPayloadByteSizeAnalytics = getReadyPayloadByteSizeAnalytics;
exports.createResumeAnalytics = function(a0) {
var value = a0;
var object = {'connectTime': null, 'numEvents': 0, 'largestWaitTime': 0, 'dispatchTime': 0, 'totalWaitTime': 0,
'initialWaitTime': 0};
object.connectTime = value ?? 0;
object.startTime = global.performance.now();
object.lastUpdateTime = global.performance.now();
return object;
};
exports.logResumeAnalytics = logResumeAnalytics;
}
function prettyPrintTrace_(a0, a1) { // fn#95254, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:424, offset: 0x02136d56, size: 173 bytes, params: 3, frame: 29
var r2;
var r12;
var r0;
var property;
var micros;
var value4;
var HermesInternal;
var concat;
var value5;
var prettyPrintTrace_Binding;
var calls;
var value6;
if (a0 == null) {
return '';
}
let length = a0.length;
let value = 0;
const value2 = '';
if (value < length) {
r2 = value2;
r12 = value;
reducibleLoop2: while (true) {
property = a0[r12];
value = r12 + 1;
micros = a0[value].micros;
value4 = micros / 1000;
HermesInternal = global.HermesInternal;
concat = HermesInternal.concat;
value5 = r2 + ('\n' + a1 + property + ': ' + value4);
prettyPrintTrace_Binding = prettyPrintTrace_;
calls = a0[value].calls;
value = value5 + prettyPrintTrace_Binding(calls, a1 + '| ');
value6 = r12 + 2;
length = a0.length;
if (value6 < length) {
r2 = value;
r12 = value6;
continue reducibleLoop2;
}
r0 = value;
break reducibleLoop2;
}
} else {
r0 = value2;
}
return r0;
}
function eachTraceCall(a0, a1) { // fn#95255, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:602, offset: 0x02136e03, size: 105 bytes, params: 3, frame: 19
var r5;
var length;
var value;
var value2;
var property;
var property2;
var micros;
var eachTraceCallBinding;
var calls;
reducibleJoin4: while (true) {
if (a0 == null) {
break reducibleJoin4;
}
length = a0.length;
value = 0;
if (!(length > value)) {
break reducibleJoin4;
}
length = a0.length;
value2 = environment;
if (!(value < length)) {
break reducibleJoin4;
}
r5 = value;
reducibleLoop3: while (true) {
property = a0[r5];
property2 = a0[r5 + 1];
micros = property2.micros;
a1(property, micros);
eachTraceCallBinding = eachTraceCall;
calls = property2.calls;
eachTraceCallBinding(calls, a1);
value = r5 + 2;
length = a0.length;
if (value < length) {
r5 = value;
continue reducibleLoop3;
}
break reducibleJoin4;
}
}
}
function getReadyPayloadSizeAnalytics({guilds}) { // fn#95256, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:742, offset: 0x02136e6c, size: 72 bytes, params: 2, frame: 12
guilds.forEach(function(a0) {
var r2;
if (!a0.unavailable) {
r2 = a0.data_mode === 'partial' ? a0.partial_updates.channels : a0.channels;
if (r2 != null && r2.forEach != null) {
r2.forEach(_fun95258);
}
}
});
return {num_guilds: guilds.length, num_guild_channels: 0, num_guild_category_channels: 0};
}
function logReadyPayloadReceived(a0, a1, a2, a3, a4) { // fn#95260, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:1228, offset: 0x02136f44, size: 503 bytes, params: 6, frame: 23
var defaultImport;
var addDetail;
var Math;
let value = getReadyPayloadTraceAnalytics(a1);
if (a3 != null) {
defaultImport = importDefault(20) /* metro dependency 20: AppStartPerformance */;
addDetail = defaultImport.addDetail;
Math = global.Math;
Reflect.apply(addDetail, defaultImport, ['payload_size(kb)', Math.round(a3.uncompressed_byte_size / 1024)]);
}
const defaultImport2 = importDefault(20) /* metro dependency 20: AppStartPerformance */;
defaultImport2.addDetail('server_time(ms)', value.identify_total_server_duration_ms ?? 0);
const object2 = {};
copyDataProperties(object2, a3, undefined);
copyDataProperties(object2, value, undefined);
copyDataProperties(object2, getReadyPayloadSizeAnalytics(a1), undefined);
copyDataProperties(object2, a4, undefined);
object2['duration_ms_since_identify_start'] = a2 - a0.identifyStartTime;
object2['duration_ms_since_connection_start'] = a2 - a0.connectionStartTime;
const Date = global.Date;
object2['duration_ms_since_emit_start'] = Date.now() - a2;
object2['is_reconnect'] = a0.hasConnectedOnce;
object2['is_fast_connect'] = a0.isFastConnect;
object2['did_force_clear_guild_hashes'] = a0.didForceClearGuildHashes;
object2['identify_uncompressed_byte_size'] = a0.identifyUncompressedByteSize;
object2['identify_compressed_byte_size'] = a0.identifyCompressedByteSize;
const hadCacheAtStartup = a0.analytics.hadCacheAtStartup;
object2['had_cache_at_startup'] = hadCacheAtStartup != null && hadCacheAtStartup;
const usedCacheAtStartup = a0.analytics.usedCacheAtStartup;
object2['used_cache_at_startup'] = usedCacheAtStartup != null && usedCacheAtStartup;
(importDefault(14) /* metro dependency 14: TTITracker */).attachReadyPayloadProperties(object2);
value = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
const track = value.track;
const READY_PAYLOAD_RECEIVED = AnalyticEvents.READY_PAYLOAD_RECEIVED;
Reflect.apply(track, value, [READY_PAYLOAD_RECEIVED, object2, {logEventProperties: true}]);
}
function getConnectionPath(a0) { // fn#95263, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:2632, offset: 0x021372ad, size: 147 bytes, params: 2, frame: 18
var r8;
var r2;
var r0;
var _trace;
var value3;
var property;
var value4;
var value5;
var prettyPrintTrace_Binding;
var JSON;
var parse;
var value6;
var error;
var join;
let value = undefined;
reducibleJoin3: while (true) {
reduciblePort22: while (true) {
exceptionLanding21: while (true) {
try {
_trace = a0._trace;
} catch (error) {
break exceptionLanding21;
}
break reducibleJoin3;
}
break reduciblePort22;
}
_trace = a0._trace;
value = '???';
reducibleJoin24: while (true) {
if (_trace != null) {
_trace = a0._trace;
join = _trace.join;
value = Reflect.apply(join, _trace, [' -> ']);
r0 = value;
break reducibleJoin24;
}
r0 = value;
break reducibleJoin24;
}
return r0;
}
const value2 = null;
try {
value3 = value2 == _trace;
} catch (error) {
break exceptionLanding21;
}
reducibleJoin8: while (true) {
if (value3) {
r8 = value;
break reducibleJoin8;
}
try {
property = _trace[0];
} catch (error) {
break exceptionLanding21;
}
r8 = property;
break reducibleJoin8;
}
try {
value4 = value2 == r8;
} catch (error) {
break exceptionLanding21;
}
reducibleJoin18: while (true) {
if (value4) {
r2 = value2;
break reducibleJoin18;
}
value5 = environment;
try {
prettyPrintTrace_Binding = prettyPrintTrace_;
} catch (error) {
break exceptionLanding21;
}
try {
JSON = global.JSON;
} catch (error) {
break exceptionLanding21;
}
try {
parse = JSON.parse;
} catch (error) {
break exceptionLanding21;
}
try {
value6 = Reflect.apply(parse, JSON, [r8]);
} catch (error) {
break exceptionLanding21;
}
try {
value = prettyPrintTrace_Binding(value6, '');
} catch (error) {
break exceptionLanding21;
}
r2 = value;
break reducibleJoin18;
}
try {
value = value2 != r2;
} catch (error) {
break exceptionLanding21;
}
if (value) {
return r2;
}
_trace = a0._trace;
value = '???';
reducibleJoin24: while (true) {
if (_trace != null) {
_trace = a0._trace;
join = _trace.join;
value = Reflect.apply(join, _trace, [' -> ']);
r0 = value;
break reducibleJoin24;
}
r0 = value;
break reducibleJoin24;
}
return r0;
}
function getReadyPayloadByteSizeAnalytics(a0) { // fn#95264, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:2909, offset: 0x02137340, size: 914 bytes, params: 2, frame: 38
const Math = global.Math;
if (Math.random() > 0.01) {
return undefined;
}
let Date = global.Date;
value = Date.now();
const guilds = a0.guilds;
const merged_presences = a0.merged_presences;
const merged_members = a0.merged_members;
const read_state = a0.read_state;
const private_channels = a0.private_channels;
const user_guild_settings = a0.user_guild_settings;
const user_settings = a0.user_settings;
const user_settings_proto = a0.user_settings_proto;
const experiments = a0.experiments;
const guild_experiments = a0.guild_experiments;
const relationships = a0.relationships;
const users = a0.users;
const binding = env0_5;
const value3 = undefined;
const value4 = binding(a0, env0_2);
guilds.forEach(_fun95265);
const object2 = {};
let JSON = global.JSON;
let stringify = JSON.stringify;
let length = Reflect.apply(stringify, JSON,
[(merged_presences == null ? value3 : merged_presences.friends) ?? []]).length;
object2.presences_size = length;
JSON = global.JSON;
object2.users_size = JSON.stringify(users).length;
JSON = global.JSON;
object2.read_states_size = JSON.stringify(read_state).length;
JSON = global.JSON;
object2.private_channels_size = JSON.stringify(private_channels).length;
JSON = global.JSON;
stringify = JSON.stringify;
const value5 = '';
object2.user_settings_size = Reflect.apply(stringify, JSON,
[user_settings ?? value5]).length + (user_settings_proto ?? value5).length;
JSON = global.JSON;
length = JSON.stringify(experiments ?? []).length;
JSON = global.JSON;
object2.experiments_size = length + JSON.stringify(guild_experiments ?? []).length;
JSON = global.JSON;
object2.user_guild_settings_size = JSON.stringify(user_guild_settings).length;
JSON = global.JSON;
object2.relationships_size = JSON.stringify(relationships).length;
JSON = global.JSON;
object2.remaining_data_size = JSON.stringify(value4 ?? ({})).length;
JSON = global.JSON;
object2.guild_channels_size = JSON.stringify([]).length;
JSON = global.JSON;
object2.guild_members_size = JSON.stringify(merged_members ?? []).length;
JSON = global.JSON;
object2.guild_presences_size = JSON.stringify((merged_presences == null ? value3 : merged_presences.guilds) ?? []).length;
JSON = global.JSON;
object2.guild_roles_size = JSON.stringify([]).length;
JSON = global.JSON;
object2.guild_emojis_size = JSON.stringify([]).length;
JSON = global.JSON;
object2.guild_threads_size = JSON.stringify([]).length;
JSON = global.JSON;
object2.guild_stickers_size = JSON.stringify([]).length;
JSON = global.JSON;
object2.guild_events_size = JSON.stringify([]).length;
JSON = global.JSON;
object2.guild_features_size = JSON.stringify([]).length;
JSON = global.JSON;
object2.guild_remaining_data_size = JSON.stringify([]).length;
Date = global.Date;
object2.size_metrics_duration_ms = Date.now() - value;
return object2;
}
function logResumeAnalytics(a0) { // fn#95267, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:5050, offset: 0x02137863, size: 338 bytes, params: 2, frame: 20
var Math;
var defaultImport;
var track;
var CONNECTION_RESUMED;
var object2;
const currentUser = UserStore.getCurrentUser();
if (!((currentUser == null || !currentUser.isStaff()) && global.Math.random() < 0.5)) {
defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */;
track = defaultImport.track;
CONNECTION_RESUMED = AnalyticEvents.CONNECTION_RESUMED;
object2 = {};
object2.connect_time_ms = a0.connectTime;
Math = global.Math;
object2.resume_time_ms = Math.floor(global.performance.now() - a0.startTime);
object2.num_events = a0.numEvents;
Math = global.Math;
object2.largest_wait_time_ms = Math.floor(a0.largestWaitTime);
Math = global.Math;
object2.initial_wait_time_ms = Math.floor(a0.initialWaitTime);
Math = global.Math;
object2.total_wait_time_ms = Math.floor(a0.totalWaitTime);
Math = global.Math;
object2.total_dispatch_time_ms = Math.floor(a0.dispatchTime);
Reflect.apply(track, defaultImport, [CONNECTION_RESUMED, object2, {logEventProperties: true}]);
}
}
function _fun95257(a0) { // fn#95257, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:822, offset: 0x02136eb4, size: 90 bytes, params: 2, frame: 12
var channels;
if (!a0.unavailable) {
channels = a0.data_mode === 'partial' ? a0.partial_updates.channels : a0.channels;
if (channels != null && channels.forEach != null) {
channels.forEach(_fun95258);
}
}
}
function getReadyPayloadTraceAnalytics({_trace}) { // fn#95261, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:1284, owner: logReadyPayloadReceived.getReadyPayloadTraceAnalytics, offset: 0x0213713b, size: 254 bytes, params: 2, frame: 20
var environment;
var r7;
var r5;
var r3;
var JSON;
var value;
var value2;
var property;
var value3;
var value4;
var value5;
var value6;
var value7;
var value8;
var Math;
var floor;
var micros;
var value9;
var value10;
var value11;
var eachTraceCallBinding;
var closure;
var error;
const object2 = {};
try {
JSON = global.JSON;
value = JSON.parse(_trace);
value2 = 0;
property = value[value2];
value3 = property != null;
if (value3) {
property = value[value2];
value4 = property !== '';
r7 = value4;
} else {
r7 = value3;
}
if (r7) {
property = value[value2];
value5 = typeof property === 'string';
r5 = value5;
} else {
r5 = r7;
}
if (r5) {
property = value[value2];
value6 = property.startsWith('gateway-');
r3 = value6;
} else {
r3 = r5;
}
if (r3) {
property = value[1];
value7 = typeof property !== 'object';
if (value7) {
r3 = value2;
} else {
property = value[1];
value8 = 'micros' in property;
if (value8) {
Math = global.Math;
floor = Math.floor;
property = value[1];
micros = property.micros;
value9 = micros / 1000;
value10 = Reflect.apply(floor, Math, [value9]);
r3 = value10;
} else {
r3 = value2;
}
}
object2.identify_total_server_duration_ms = r3;
}
value11 = environment.__proto__;
eachTraceCallBinding = eachTraceCall;
closure = _fun95262;
eachTraceCallBinding(value, closure);
} catch (error) {
}
return object2;
}
function _fun95265(a0) { // fn#95265, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:3290, offset: 0x021376d2, size: 320 bytes, params: 2, frame: 21
var r4;
var features;
var value;
var binding;
var value2;
var threads;
var guild_scheduled_events;
var push;
var data_mode;
if (!a0.unavailable) {
r4 = a0.properties ?? ({});
features = r4.features;
value = environment.__proto__;
binding = env1_5;
value2 = binding(r4, env1_3);
threads = a0.threads;
guild_scheduled_events = a0.guild_scheduled_events;
value = binding(a0, env1_4);
binding = env0_0;
push = binding.push;
data_mode = a0.data_mode;
Reflect.apply(push, binding, [data_mode === 'partial' ? a0.partial_updates.channels : a0.channels]);
binding = env0_1;
push = binding.push;
data_mode = a0.data_mode;
Reflect.apply(push, binding, [data_mode === 'partial' ? a0.partial_updates.roles : a0.roles]);
binding = env0_2;
push = binding.push;
data_mode = a0.data_mode;
Reflect.apply(push, binding, [data_mode === 'partial' ? a0.partial_updates.emojis : a0.emojis]);
binding = env0_3;
binding.push(threads);
binding = env0_4;
push = binding.push;
data_mode = a0.data_mode;
Reflect.apply(push, binding, [data_mode === 'partial' ? a0.partial_updates.stickers : a0.stickers]);
binding = env0_5;
binding.push(features);
binding = env0_6;
binding.push(guild_scheduled_events);
binding = env0_7;
binding.push(value, value2);
}
}
function _fun95258({type}) { // fn#95258, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:950, offset: 0x02136f0e, size: 54 bytes, params: 2, frame: 3
let binding = env1_1;
env1_1 = typeof binding === 'bigint' ? binding + 1n : +binding + 1;
const GUILD_CATEGORY = ChannelTypes.GUILD_CATEGORY;
if (type === GUILD_CATEGORY) {
binding = env1_0;
env1_0 = typeof binding === 'bigint' ? binding + 1n : +binding + 1;
}
}
function _fun95262(a0, a1) { // fn#95262, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12692:1567, offset: 0x02137239, size: 116 bytes, params: 3, frame: 13
if (a0 === 'start_session') {
env0_0.identify_api_duration_ms = global.Math.floor(a1 / 1000);
} else if (a0 === 'guilds_connect') {
env0_0.identify_guilds_duration_ms = global.Math.floor(a1 / 1000);
}
}