Files
discord-decomp/modules/quests/QuestDecisionRoundtripTracker.tsx
T
2026-11-01 12:12:55 +02:00

133 lines
4.7 KiB
TypeScript

// Metro module 9474 (f9475).
import NetworkStore from "../../stores/NetworkStore";
import QuestStore from "./QuestStore";
import { AnalyticEvents } from "../../Constants";
import { getSignalStrength } from "../network/NetStats.android";
import AnalyticsUtils from "../../utils/AnalyticsUtils";
import getDeviceMetadata_native from "../device/getDeviceMetadata.native";
import { isForegrounded } from "../analytics_sessions/SessionForegroundUtils.native";
import NewAdRequestBehaviorExperiment from "./experiments/NewAdRequestBehaviorExperiment";
const trackRoundtrip = function trackRoundtrip(a0, a1, a2) {
if (!(Math.random() > 0.1)) {
const api_latency_ms = a0.apiResponseTimestamp == null ? null : a0.apiResponseTimestamp - a0.initialSendTimestamp;
const signalStrength = getSignalStrength();
const QUEST_DECISION_ROUNDTRIP = AnalyticEvents.QUEST_DECISION_ROUNDTRIP;
const r30 = {
...getDeviceMetadata_native(),
endpoint: a0.endpoint,
was_successful: a0.wasSuccessful,
api_latency_ms,
mobile_network_type: NetworkStore.getType(),
...signalStrength != null && {
mobile_signal_strength_level: signalStrength
},
caller_source: a0.callerSource,
ad_request_id: a0.adRequestId,
fetched_at: a2
};
const previousAdDecision = a0.previousAdDecision;
let previous_ad_request_id = previousAdDecision == null ? void 0 : previousAdDecision.adDecisionData?.decision_id;
if (previous_ad_request_id == null) {
previous_ad_request_id = null;
}
r30.previous_ad_request_id = previous_ad_request_id;
let previous_fetched_at = a0.previousAdDecision?.fetchedAt;
if (previous_fetched_at == null) {
previous_fetched_at = null;
}
r30.previous_fetched_at = previous_fetched_at;
r30.transition_case = a1;
r30.is_foregrounded = isForegrounded();
AnalyticsUtils.track(QUEST_DECISION_ROUNDTRIP, r30);
}
};
class QuestDecisionRoundtripTracker {
constructor() {
return {
__proto__: new.target.prototype,
pendingRequests: new Map()
};
}
recordQuestRequestAttempt(a0, a1) {
let placement = arguments[2];
if (placement === void 0) {
placement = null;
}
const enableNewRequestBehavior = NewAdRequestBehaviorExperiment.getConfig({
location: "recordQuestRequestAttempt"
}).enableNewRequestBehavior;
let previousAdDecision = null;
if (enableNewRequestBehavior) {
const r3 = placement != null;
previousAdDecision = null;
if (r3) {
let r23 = QuestStore.questAdDecisionByPlacement.get(placement);
if (r23 == null) {
r23 = null;
}
previousAdDecision = r23;
}
}
this.pendingRequests.set(a0, {
initialSendTimestamp: Date.now(),
endpoint: a0,
apiResponseTimestamp: null,
wasSuccessful: false,
callerSource: a1,
adRequestId: null,
previousAdDecision,
placement
});
setTimeout(() => {
const pendingRequests = this.pendingRequests;
const r6 = pendingRequests.get(a0);
if (r6 != null) {
trackRoundtrip(r6, "timeout", null);
this.pendingRequests.delete(a0);
}
}, 30000);
}
recordQuestRequestApiResponse(a0, { wasSuccessful, adRequestId = null, currentQuestId = null, currentFetchedAt = null }) {
const r12 = this.pendingRequests.get(a0);
if (r12 != null) {
const enableNewRequestBehavior = NewAdRequestBehaviorExperiment.getConfig({
location: "recordQuestRequestApiResponse"
}).enableNewRequestBehavior;
let r31 = "legacy";
let r32 = null;
if (enableNewRequestBehavior) {
const r14 = currentFetchedAt !== null ? {
questId: currentQuestId,
adCreativeId: currentQuestId,
fetchedAt: currentFetchedAt,
ttlMillis: 0,
adDecisionData: adRequestId != null ? {
decision_id: adRequestId
} : void 0
} : null;
const previousAdDecision = r12.previousAdDecision;
const r36 = previousAdDecision == null;
let r19 = "null";
const r18 = r36 ? "null" : previousAdDecision.questId == null ? "no_serve" : "quest";
if (r14 != null) {
r19 = r14.questId == null ? "no_serve" : "quest";
}
r31 = r18 === "quest" && r19 === "quest" ? previousAdDecision?.questId === r14?.questId ? "same_quest" : "different_quest" : `${r18}_to_${r19}`;
r32 = currentFetchedAt;
}
trackRoundtrip({
...r12,
apiResponseTimestamp: Date.now(),
wasSuccessful,
adRequestId
}, r31, r32);
this.pendingRequests.delete(a0);
}
}
}
const r36 = {
__proto__: QuestDecisionRoundtripTracker.prototype,
pendingRequests: new Map()
};
export default r36;