decord/source/modules/analytics_sessions/SessionHeartbeatScheduler.tsx

383 lines
13 KiB
TypeScript
Raw Normal View History

2026-07-23 10:11:24 +00:00
// Module ID: 6697
2026-07-24 07:16:23 +00:00
// Function ID: 51872
2026-07-20 16:05:17 +00:00
// Name: stopAnalyticsHeartbeat
2026-07-23 10:11:24 +00:00
// Dependencies: [5, 4808, 1194, 4943, 4202, 653, 664, 3, 6698, 6699, 1184, 6700, 6703, 675, 6704, 587, 6705, 645, 686, 566, 491, 2]
2026-07-20 16:05:17 +00:00
// Exports: getActiveSessionUnsafe, initSessionHeartbeatScheduler
2026-07-23 10:11:24 +00:00
// Module 6697 (stopAnalyticsHeartbeat)
import closure_3 from "ME";
import _isNativeReflectConstruct from "_isNativeReflectConstruct";
import importDefaultResult from "_isNativeReflectConstruct";
import closure_6 from "_isNativeReflectConstruct";
import importDefaultResult1 from "_isNativeReflectConstruct";
import ME from "ME";
import importDefaultResult2 from "_isNativeReflectConstruct";
import isForegrounded from "isForegrounded";
import isActiveUserRoute from "isActiveUserRoute";
let closure_10;
let closure_8;
let closure_9;
const require = arg1;
2026-07-20 16:05:17 +00:00
function stopAnalyticsHeartbeat() {
2026-07-23 10:11:24 +00:00
if (null == _null) {
2026-07-20 16:05:17 +00:00
// // eliminated: always false
} else {
2026-07-23 10:11:24 +00:00
const type = _null.type;
2026-07-20 16:05:17 +00:00
if ("timeout" === type) {
const _clearTimeout = clearTimeout;
2026-07-23 10:11:24 +00:00
clearTimeout(_null.id);
_null = null;
2026-07-20 16:05:17 +00:00
} else if ("interval" !== type) {
2026-07-23 10:11:24 +00:00
const type2 = _null.type;
2026-07-20 16:05:17 +00:00
}
const _clearInterval = clearInterval;
2026-07-23 10:11:24 +00:00
clearInterval(_null.id);
2026-07-20 16:05:17 +00:00
}
}
function trackHeartbeat(arg0) {
return _trackHeartbeat(...arguments);
}
async function _trackHeartbeat() {
const timestamp = Date.now();
2026-07-23 10:11:24 +00:00
const tmp2 = yield outer2_41();
2026-07-20 16:05:17 +00:00
if (null != tmp2) {
2026-07-23 10:11:24 +00:00
let obj1 = outer2_1(outer2_2[10]);
let obj = { category: outer2_14, message: "Tracking Heartbeat" };
2026-07-20 16:05:17 +00:00
obj = { initialized: tmp2.createdAtTimestamp };
obj.data = obj;
obj1.addBreadcrumb(obj);
obj1 = { client_heartbeat_initialization_timestamp: tmp2.createdAtTimestamp, client_heartbeat_version: 29 };
2026-07-23 10:11:24 +00:00
const merged = Object.assign(outer2_0(outer2_2[12]).getClientHeartbeatPiggybackProperties());
const idleSince = outer2_6.getIdleSince();
2026-07-20 16:05:17 +00:00
let num5 = 0;
if (null != idleSince) {
num5 = idleSince;
}
2026-07-23 10:11:24 +00:00
const obj2 = { is_idle: outer2_6.isIdle() };
2026-07-20 16:05:17 +00:00
const _Date = Date;
obj2.idle_duration_ms = Date.now() - num5;
2026-07-23 10:11:24 +00:00
obj2.is_afk = outer2_6.isAFK();
obj2.is_system_suspended = outer2_6.getSystemSuspended();
obj2.is_system_locked = outer2_6.getSystemLocked();
2026-07-20 16:05:17 +00:00
const merged1 = Object.assign(obj2);
2026-07-23 10:11:24 +00:00
const obj6 = outer2_0(outer2_2[12]);
outer2_1(outer2_2[13]).track(outer2_8.CLIENT_HEARTBEAT, obj1);
2026-07-20 16:05:17 +00:00
const _performance = performance;
2026-07-23 10:11:24 +00:00
const outer2_19 = performance.now();
const obj8 = outer2_1(outer2_2[13]);
outer2_0(outer2_2[11]).drainClickstream();
const obj9 = outer2_0(outer2_2[11]);
2026-07-20 16:05:17 +00:00
} else {
2026-07-23 10:11:24 +00:00
obj = outer2_1(outer2_2[10]);
2026-07-20 16:05:17 +00:00
const _Error = Error;
const _HermesInternal = HermesInternal;
obj.captureException(Error("Null session when tracking session heartbeat. Waited " + tmp3 - timestamp + "ms"));
}
}
function buildHeartbeatQOSPayload() {
const items = [];
if (tmp) {
2026-07-23 10:11:24 +00:00
if (isForegrounded) {
2026-07-20 16:05:17 +00:00
items.push("foregrounded");
}
if (closure_21 === constants2.RTC_CONNECTED) {
items.push("rtc_connected");
}
}
return { active: items.length > 0, ver: 29, reasons: items };
}
2026-07-23 10:11:24 +00:00
function isActive(isScrollingInBoundsSharedValue, parent_id, channelId) {
2026-07-20 16:05:17 +00:00
return buildHeartbeatQOSPayload().active;
}
function scheduleHeartbeatTracking(APP_STATE_UPDATE) {
2026-07-23 10:11:24 +00:00
let obj = importDefault(1184);
obj = { message: `Heartbeat Track State Parameters Changed. Foregrounded ${isForegrounded}, Connection State: ${closure_21}` };
2026-07-20 16:05:17 +00:00
obj.addBreadcrumb(obj);
if (isActive()) {
2026-07-23 10:11:24 +00:00
(function startAnalyticsHeartbeat() {
if (null == outer1_16) {
2026-07-20 16:05:17 +00:00
let num = 0;
2026-07-23 10:11:24 +00:00
if (0 !== outer1_19) {
2026-07-20 16:05:17 +00:00
const _performance = performance;
2026-07-23 10:11:24 +00:00
num = outer1_11 - (performance.now() - outer1_19);
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
let obj = outer1_1(outer1_2[10]);
2026-07-20 16:05:17 +00:00
obj = {};
const _HermesInternal = HermesInternal;
obj.message = "Received Last Heartbeat Event Timestamp. Time Until Next Heartbeat: " + num / 1000 + " seconds. Scheduling Heartbeat";
obj.addBreadcrumb(obj);
obj = { type: "timeout" };
const _setTimeout = setTimeout;
obj.id = setTimeout(() => {
2026-07-23 10:11:24 +00:00
outer2_26();
const outer2_16 = {
2026-07-20 16:05:17 +00:00
type: "interval",
id: setInterval(() => {
2026-07-23 10:11:24 +00:00
outer3_26();
}, outer2_11)
2026-07-20 16:05:17 +00:00
};
}, num);
2026-07-23 10:11:24 +00:00
outer1_16 = obj;
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
})();
2026-07-20 16:05:17 +00:00
} else {
stopAnalyticsHeartbeat();
}
2026-07-23 10:11:24 +00:00
socket = socket.getSocket();
2026-07-20 16:05:17 +00:00
if (null != socket) {
const result = socket.handleActiveStateChange(buildHeartbeatQOSPayload());
}
}
function scheduleHeartbeatSkippedTracking() {
2026-07-23 10:11:24 +00:00
if (null == obj) {
obj = {};
2026-07-20 16:05:17 +00:00
const _setInterval = setInterval;
obj.id = setInterval(() => {
2026-07-23 10:11:24 +00:00
let result = null != outer1_24;
2026-07-20 16:05:17 +00:00
if (result) {
2026-07-23 10:11:24 +00:00
let obj = outer1_0(outer1_2[14]);
2026-07-20 16:05:17 +00:00
result = obj.shouldLogClientHeartbeatSkipped();
}
if (result) {
const _performance = performance;
2026-07-23 10:11:24 +00:00
if (performance.now() - outer1_19 > outer1_11) {
2026-07-20 16:05:17 +00:00
obj = { client_heartbeat_version: 29 };
2026-07-23 10:11:24 +00:00
outer1_1(outer1_2[13]).track(outer1_8.CLIENT_HEARTBEAT_SKIPPED, obj);
const obj2 = outer1_1(outer1_2[13]);
2026-07-20 16:05:17 +00:00
}
}
}, closure_11);
obj.type = "interval";
}
}
function validateClientSession(Storage) {
let tmp = null;
if (null != Storage) {
let tmp4 = Storage;
2026-07-23 10:11:24 +00:00
if (Storage.version !== require(6705) /* result */.CLIENT_SESSION_STORAGE_VERSION) {
2026-07-20 16:05:17 +00:00
const _HermesInternal = HermesInternal;
2026-07-23 10:11:24 +00:00
importDefaultResult2.warn("Throwing away client session with invalid version: " + Storage.version + ", expected " + require(6705) /* result */.CLIENT_SESSION_STORAGE_VERSION);
2026-07-20 16:05:17 +00:00
tmp4 = null;
}
tmp = tmp4;
}
return tmp;
}
function forceDispatchSessionIdUpdate() {
return _forceDispatchSessionIdUpdate(...arguments);
}
async function _forceDispatchSessionIdUpdate() {
let createdAtTimestamp;
let uuid;
2026-07-23 10:11:24 +00:00
const tmp = yield outer2_41(false);
2026-07-20 16:05:17 +00:00
if (null != tmp) {
2026-07-23 10:11:24 +00:00
const socket = outer2_4.getSocket();
2026-07-20 16:05:17 +00:00
if (null != socket) {
({ createdAtTimestamp, uuid } = tmp);
2026-07-23 10:11:24 +00:00
const result = socket.handleUpdateTimeSpentSessionId(createdAtTimestamp, uuid, outer2_0(outer2_2[17]).clientLaunchId);
2026-07-20 16:05:17 +00:00
}
}
}
function handleAuthenticationChange() {
const token = importDefaultResult.getToken();
2026-07-23 10:11:24 +00:00
if (token !== token) {
const Storage = require(587) /* Storage */.Storage;
Storage.remove(LAST_CLIENT_HEARTBEAT_SESSION);
let closure_20 = { state: "loaded", session: null };
2026-07-20 16:05:17 +00:00
stopAnalyticsHeartbeat();
2026-07-23 10:11:24 +00:00
let c19 = 0;
2026-07-20 16:05:17 +00:00
}
scheduleHeartbeatTracking();
}
function handleRTCStateChange() {
const state = importDefaultResult1.getState();
2026-07-23 10:11:24 +00:00
if (state !== state) {
2026-07-20 16:05:17 +00:00
scheduleHeartbeatTracking();
}
}
function handleWindowFocus(focused) {
focused = focused.focused;
2026-07-23 10:11:24 +00:00
if (focused !== focused) {
2026-07-20 16:05:17 +00:00
scheduleHeartbeatTracking();
}
}
function handleLocationChange() {
2026-07-23 10:11:24 +00:00
const isActiveUserRouteResult = require(6699) /* isActiveUserRoute */.isActiveUserRoute();
if (isActiveUserRoute !== isActiveUserRouteResult) {
isActiveUserRoute = isActiveUserRouteResult;
2026-07-20 16:05:17 +00:00
scheduleHeartbeatTracking();
}
}
function handleAppStateUpdate(state) {
2026-07-23 10:11:24 +00:00
if (isForegrounded !== state.state === constants.ACTIVE) {
isForegrounded = tmp;
2026-07-20 16:05:17 +00:00
scheduleHeartbeatTracking();
}
}
function handleFluxInitialized() {
const state = importDefaultResult1.getState();
2026-07-23 10:11:24 +00:00
let closure_22 = require(6698) /* isForegrounded */.isForegrounded();
const obj = require(6698) /* isForegrounded */;
let closure_23 = require(6699) /* isActiveUserRoute */.isActiveUserRoute();
2026-07-20 16:05:17 +00:00
handleAuthenticationChange();
}
function getSession() {
return _getSession(...arguments);
}
async function _getSession() {
2026-07-23 10:11:24 +00:00
let iter = (function*() {
2026-07-20 16:05:17 +00:00
let flag = arg0;
if (flag === undefined) {
flag = true;
}
let session2;
2026-07-23 10:11:24 +00:00
let c2;
2026-07-20 16:05:17 +00:00
yield undefined;
session2 = null;
2026-07-23 10:11:24 +00:00
let tmp2 = null;
if ("loaded" === outer2_20.state) {
const session = outer2_20.session;
2026-07-20 16:05:17 +00:00
let uuid;
if (null != session) {
uuid = session.uuid;
}
tmp2 = uuid;
}
2026-07-23 10:11:24 +00:00
c2 = tmp2;
if ("uninitialized" === outer2_20.state) {
let Storage = outer2_0(outer2_2[15]).Storage;
session2 = outer2_32(yield Storage.getAfterRefresh(outer2_13));
const tmp6 = outer2_32;
2026-07-20 16:05:17 +00:00
} else {
2026-07-23 10:11:24 +00:00
session2 = outer2_20.session;
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
(() => {
2026-07-20 16:05:17 +00:00
let createdAtTimestamp;
let uuid;
const timestamp = Date.now();
2026-07-23 10:11:24 +00:00
if (outer3_29()) {
2026-07-20 16:05:17 +00:00
let isSessionExpiredResult = null == tmp2;
if (!isSessionExpiredResult) {
2026-07-23 10:11:24 +00:00
isSessionExpiredResult = outer3_0(outer3_2[16]).isSessionExpired(session2);
const obj2 = outer3_0(outer3_2[16]);
2026-07-20 16:05:17 +00:00
}
if (isSessionExpiredResult) {
2026-07-23 10:11:24 +00:00
let obj = { uuid: outer3_0(outer3_2[20]).v4(), createdAtTimestamp: timestamp, lastUsedTimestamp: timestamp, version: outer3_0(outer3_2[16]).CLIENT_SESSION_STORAGE_VERSION };
session2 = obj;
let outer3_18 = 0;
const obj4 = outer3_0(outer3_2[20]);
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
session2.lastUsedTimestamp = timestamp;
2026-07-20 16:05:17 +00:00
const _performance = performance;
2026-07-23 10:11:24 +00:00
const nowResult = performance.now();
if (nowResult - outer3_18 >= outer3_12) {
const Storage = outer3_0(outer3_2[15]).Storage;
const result = Storage.set(outer3_13, tmp14);
outer3_18 = nowResult;
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
tmp14 = session2;
2026-07-20 16:05:17 +00:00
} else {
let isSessionExpiredResult1 = null != tmp2;
if (isSessionExpiredResult1) {
2026-07-23 10:11:24 +00:00
obj = outer3_0(outer3_2[16]);
isSessionExpiredResult1 = obj.isSessionExpired(session2);
2026-07-20 16:05:17 +00:00
}
if (isSessionExpiredResult1) {
2026-07-23 10:11:24 +00:00
session2 = null;
2026-07-20 16:05:17 +00:00
}
}
while (true) {
obj = {};
let str = "loaded";
obj.state = "loaded";
2026-07-23 10:11:24 +00:00
let tmp24 = session2;
obj.session = session2;
let outer3_20 = obj;
let tmp25 = session2;
let tmp26 = null != session2;
2026-07-20 16:05:17 +00:00
if (!tmp26) {
break;
} else {
2026-07-23 10:11:24 +00:00
let tmp27 = c2;
let tmp28 = session2;
tmp26 = c2 !== session2.uuid;
break;
2026-07-20 16:05:17 +00:00
}
if (tmp26) {
tmp26 = flag;
}
if (tmp26) {
2026-07-23 10:11:24 +00:00
let tmp29 = outer3_4;
let socket = outer3_4.getSocket();
2026-07-20 16:05:17 +00:00
if (null != socket) {
2026-07-23 10:11:24 +00:00
let tmp30 = session2;
let tmp31 = session2;
let tmp32 = outer3_0;
let tmp33 = outer3_2;
2026-07-20 16:05:17 +00:00
let num7 = 17;
2026-07-23 10:11:24 +00:00
({ createdAtTimestamp, uuid } = session2);
let result1 = socket.handleUpdateTimeSpentSessionId(createdAtTimestamp, uuid, outer3_0(outer3_2[17]).clientLaunchId);
2026-07-20 16:05:17 +00:00
}
}
2026-07-23 10:11:24 +00:00
let tmp35 = session2;
return session2;
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
})();
})();
iter.next();
return iter;
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
({ AnalyticEvents: closure_8, AppStates: closure_9, RTCConnectionStates: closure_10 } = ME);
let closure_11 = 15 * require("set").Millis.MINUTE;
const SECOND = require("set").Millis.SECOND;
const LAST_CLIENT_HEARTBEAT_SESSION = "LAST_CLIENT_HEARTBEAT_SESSION";
const user = "user";
2026-07-20 16:05:17 +00:00
importDefaultResult2 = new importDefaultResult2("SessionHeartbeatScheduler");
2026-07-23 10:11:24 +00:00
let c16 = null;
let c17 = null;
let c18 = 0;
let c19 = 0;
2026-07-20 16:05:17 +00:00
let closure_20 = { state: "uninitialized" };
2026-07-23 10:11:24 +00:00
let state = importDefaultResult1.getState();
isForegrounded = isForegrounded.isForegrounded();
isActiveUserRoute = isActiveUserRoute.isActiveUserRoute();
let token = importDefaultResult.getToken();
let result = require("_isNativeReflectConstruct").fileFinishedImporting("modules/analytics_sessions/SessionHeartbeatScheduler.tsx");
2026-07-20 16:05:17 +00:00
export const initSessionHeartbeatScheduler = function initSessionHeartbeatScheduler() {
2026-07-23 10:11:24 +00:00
importDefault(1184).addBreadcrumb({ message: "Initializing SessionHeartbeatScheduler" });
2026-07-20 16:05:17 +00:00
importDefaultResult1.addChangeListener(handleRTCStateChange);
importDefaultResult.addChangeListener(handleAuthenticationChange);
2026-07-23 10:11:24 +00:00
const obj = importDefault(1184);
const subscription = importDefault(686).subscribe("WINDOW_FOCUS", handleWindowFocus);
const obj2 = importDefault(686);
const subscription1 = importDefault(686).subscribe("APP_STATE_UPDATE", handleAppStateUpdate);
const obj3 = importDefault(686);
const subscription2 = importDefault(686).subscribe("CONNECTION_OPEN", forceDispatchSessionIdUpdate);
const obj4 = importDefault(686);
const result = require(6699) /* isActiveUserRoute */.subscribeToLocationChanges(handleLocationChange);
2026-07-20 16:05:17 +00:00
scheduleHeartbeatTracking();
scheduleHeartbeatSkippedTracking();
2026-07-23 10:11:24 +00:00
const initialized = importDefault(566).initialized;
2026-07-20 16:05:17 +00:00
initialized.then(handleFluxInitialized);
};
export { getSession };
export const getActiveSessionUnsafe = function getActiveSessionUnsafe() {
if ("uninitialized" === closure_20.state) {
2026-07-23 10:11:24 +00:00
const Storage = require(587) /* Storage */.Storage;
let session = validateClientSession(Storage.get(LAST_CLIENT_HEARTBEAT_SESSION));
2026-07-20 16:05:17 +00:00
} else {
session = closure_20.session;
}
let tmp6 = null;
if (null != session) {
tmp6 = null;
if (!obj.isSessionExpired(session)) {
tmp6 = session;
}
2026-07-23 10:11:24 +00:00
obj = require(6705) /* result */;
2026-07-20 16:05:17 +00:00
}
return tmp6;
};