decord/source/modules/experiments/ExperimentStore.tsx
2026-07-24 07:16:23 +00:00

1037 lines
32 KiB
TypeScript

// Module ID: 4044
// Function ID: 33673
// Name: _isNativeReflectConstruct
// Dependencies: [6, 7, 15, 17, 18, 57, 1194, 1196, 4045, 653, 3, 4046, 1193, 675, 4049, 587, 22, 686, 2]
// Exports: registerExperiment
// Module 4044 (_isNativeReflectConstruct)
import _isNativeReflectConstruct from "_isNativeReflectConstruct";
import closure_4 from "_isNativeReflectConstruct";
import Storage from "Storage";
import dispatcher from "dispatcher";
import set from "set";
import _slicedToArray from "_slicedToArray";
import closure_9 from "_isNativeReflectConstruct";
import ExperimentBuckets from "ExperimentBuckets";
import ME from "ME";
import importDefaultResult1 from "_getPrototypeOf";
import tmp9 from "_isNativeReflectConstruct";
import importDefaultResult from "_isNativeReflectConstruct";
let closure_10;
let closure_11;
let closure_12;
let closure_13;
let closure_14;
let closure_15;
const require = arg1;
function _isNativeReflectConstruct() {
let closure_0 = !valueOf.call(Reflect.construct(Boolean, [], () => {
}));
function _isNativeReflectConstruct() {
return closure_0;
}
const result = _isNativeReflectConstruct();
}
function _createForOfIteratorHelperLoose(iterable) {
let closure_0 = iterable;
iterable = "undefined" !== typeof Symbol;
if (iterable) {
const _Symbol = Symbol;
iterable = iterable[Symbol.iterator];
}
if (!iterable) {
iterable = iterable[Symbol.iterator];
}
if (iterable) {
const iter = iterable.call(iterable);
const next = iter.next;
return next.bind(iter);
} else {
const _Array = Array;
let tmp = iterable;
if (!Array.isArray(iterable)) {
let tmp2;
if (iterable) {
if ("string" === typeof iterable) {
tmp2 = _arrayLikeToArray(iterable, undefined);
} else {
const toString = {}.toString;
const substr = toString.call(iterable).slice(8, -1);
let name = substr;
if (tmp3) {
name = iterable.constructor.name;
}
if ("Map" !== name) {
if ("Set" !== name) {
if ("Arguments" === name) {
let arr = _arrayLikeToArray(iterable, undefined);
} else {
let obj = /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/;
}
}
tmp2 = arr;
}
const _Array2 = Array;
arr = Array.from(iterable);
const callResult = toString.call(iterable);
tmp3 = "Object" === substr && iterable.constructor;
}
}
tmp = tmp2;
if (!tmp2) {
const _TypeError = TypeError;
const typeError = new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
throw typeError;
}
}
if (tmp) {
closure_0 = tmp;
}
let c1 = 0;
return () => {
if (closure_1 >= length.length) {
let obj = { done: true };
} else {
obj = { done: false };
closure_1 = tmp3 + 1;
obj.value = length[+closure_1];
}
return obj;
};
}
}
function _arrayLikeToArray(arg0, arg1) {
let length;
if (tmp) {
length = arg0.length;
}
const ArrayResult = Array(length);
for (let num = 0; num < length; num = num + 1) {
ArrayResult[num] = arg0[num];
}
return ArrayResult;
}
function getHash(arg0) {
if (undefined === table3[arg0]) {
const v3Result = importDefault(1193).v3(arg0);
table3[arg0] = v3Result;
return v3Result;
} else {
return tmp;
}
}
function userCanUseExperiments(user) {
const flags = user.flags;
let num = 0;
if (null != flags) {
num = flags;
}
return (num & constants5.STAFF) === constants5.STAFF || null != user.personal_connection_id;
}
function getTrackExposureExperimentKey(experimentId, descriptor, _location, arg3) {
const combined = "" + descriptor.type + "|" + experimentId;
let triggerDebuggingEnabled = descriptor.triggerDebuggingEnabled;
if (triggerDebuggingEnabled) {
triggerDebuggingEnabled = undefined !== _location;
}
if (triggerDebuggingEnabled) {
triggerDebuggingEnabled = _location.length > 0;
}
const type = descriptor.type;
if (constants2.USER === type) {
let tmp10 = combined;
if (triggerDebuggingEnabled) {
const _HermesInternal4 = HermesInternal;
const sum = combined + "|" + _location;
let text = sum;
if (arg3) {
text = `${tmp11}|triggerDebugging`;
}
tmp10 = text;
}
return tmp10;
} else if (constants2.GUILD === type) {
const _HermesInternal2 = HermesInternal;
const sum1 = combined + "|" + descriptor.guildId;
let tmp7 = sum1;
if (triggerDebuggingEnabled) {
const _HermesInternal3 = HermesInternal;
const sum2 = sum1 + "|" + _location;
let text1 = sum2;
if (arg3) {
text1 = `${tmp8}|triggerDebugging`;
}
tmp7 = text1;
}
return tmp7;
} else {
const _Error = Error;
const _HermesInternal = HermesInternal;
const error = new Error("Unknown experiment type: " + descriptor);
throw error;
}
}
function getTrackExposureExperimentHash(descriptor) {
const type = descriptor.type;
if (constants2.USER === type) {
const _HermesInternal3 = HermesInternal;
return getHash("" + descriptor.bucket + "|" + descriptor.revision);
} else if (constants2.GUILD === type) {
const _HermesInternal2 = HermesInternal;
return getHash("" + descriptor.bucket + "|" + descriptor.revision + "|" + descriptor.guildId);
} else {
const _Error = Error;
const _HermesInternal = HermesInternal;
const error = new Error("Unknown experiment type: " + descriptor);
throw error;
}
}
function _hasExperimentTrackedExposure(arg0, arg1) {
let tmp2 = null != tmp;
if (tmp2) {
const _Date = Date;
const tmp5 = Date.now() - tmp.time > c33;
let tmp6 = !tmp5;
if (!tmp5) {
tmp6 = tmp.hash === arg1;
}
tmp2 = tmp6;
}
return tmp2;
}
function trackExposure(arg0) {
let _location;
let context;
let descriptor;
let excluded;
let experimentId;
let exposureType;
let fingerprint;
let location_stack;
({ experimentId, descriptor, location: _location, location_stack, context, fingerprint, excluded, exposureType } = arg0);
const assignmentSource = descriptor.assignmentSource;
if ("override" === assignmentSource) {
return false;
} else {
if ("ready_payload" === assignmentSource) {
let flag = false;
if (descriptor.sessionId !== store.getSessionId()) {
flag = true;
}
} else {
flag = true;
if ("logged_out_api" === assignmentSource) {
flag = false;
if (descriptor.fingerprint !== store.getFingerprint()) {
flag = true;
}
}
}
if (descriptor.override) {
return false;
} else {
const tmp10 = getTrackExposureExperimentKey(experimentId, descriptor, _location, exposureType === constants3.AUTO_FALLBACK && descriptor.triggerDebuggingEnabled);
const tmp12 = getTrackExposureExperimentHash(descriptor);
let tmp13 = flag;
if (flag) {
tmp13 = map.get(tmp10) === tmp12;
}
if (tmp13) {
return false;
} else if (_hasExperimentTrackedExposure(tmp10, tmp12)) {
return false;
} else {
const type = descriptor.type;
if (constants2.USER === type) {
let obj = { name: experimentId };
({ revision: obj7.revision, population: obj7.population, bucket: obj7.bucket } = descriptor);
obj.location = _location;
obj.location_stack = location_stack;
obj.hash_result = descriptor.hashResult;
obj.excluded = excluded;
obj.exposure_type = exposureType;
({ assignmentSource: obj7.assignment_source, sessionId: obj7.assignment_session_id, loadedFromCache: obj7.assignment_loaded_from_cache, holdoutName: obj7.holdout_name, holdoutRevision: obj7.holdout_revision, holdoutBucket: obj7.holdout_bucket } = descriptor);
if (null != context) {
obj.context_guild_id = context.guildId;
}
if (flag) {
obj = {};
const merged = Object.assign(obj);
obj["assignment_fingerprint"] = descriptor.fingerprint;
obj["current_session_id"] = store.getSessionId();
obj["current_fingerprint"] = store.getFingerprint();
obj["current_source"] = closure_25.source;
let obj1 = { flush: false, fingerprint };
importDefault(675).track(constants4.EXPERIMENT_USER_TRIGGERED_IGNORED, obj, obj1);
const obj11 = importDefault(675);
} else {
const obj2 = { flush: true, fingerprint };
importDefault(675).track(tmp33, obj, obj2);
const obj8 = importDefault(675);
}
} else if (constants2.GUILD === type) {
obj = { name: experimentId };
({ revision: obj.revision, bucket: obj.bucket, guildId: obj.guild_id } = descriptor);
obj.location = _location;
obj.location_stack = location_stack;
obj.hash_result = descriptor.hashResult;
obj.excluded = excluded;
obj.exposure_type = exposureType;
({ assignmentSource: obj.assignment_source, sessionId: obj.assignment_session_id, loadedFromCache: obj.assignment_loaded_from_cache, holdoutName: obj.holdout_name, holdoutRevision: obj.holdout_revision, holdoutBucket: obj.holdout_bucket } = descriptor);
if (flag) {
const obj3 = {};
const merged1 = Object.assign(obj);
obj3["assignment_fingerprint"] = descriptor.fingerprint;
obj3["current_session_id"] = store.getSessionId();
obj3["current_fingerprint"] = store.getFingerprint();
obj3["current_source"] = closure_25.source;
let obj4 = importDefault(675);
obj4 = { flush: false, fingerprint };
obj4.track(constants4.EXPERIMENT_GUILD_TRIGGERED_IGNORED, obj3, obj4);
} else {
obj1 = importDefault(675);
const obj5 = { flush: true, fingerprint };
obj1.track(tmp17, obj, obj5);
}
}
if (flag) {
const result = map.set(tmp10, tmp12);
} else {
const obj6 = {};
const _Date = Date;
obj6.time = Date.now();
obj6.hash = getTrackExposureExperimentHash(descriptor);
closure_22[getTrackExposureExperimentKey(experimentId, descriptor, _location, tmp4)] = obj6;
saveTrackedExposureExperiments(closure_22);
const tmp53 = getTrackExposureExperimentKey(experimentId, descriptor, _location, tmp4);
}
}
}
}
}
function _loadGuildFilter(arg0) {
let tmp;
let tmp2;
[tmp, tmp2] = arg0;
let tmp3 = null;
if (null != require(4049) /* _createForOfIteratorHelperLoose */.GUILD_FILTERS[tmp]) {
const GUILD_FILTERS = require(4049) /* _createForOfIteratorHelperLoose */.GUILD_FILTERS;
tmp3 = GUILD_FILTERS[tmp](tmp2);
}
return tmp3;
}
function _loadOverrides(arg0) {
let iter4;
const obj = {};
if (null == arg0) {
return obj;
} else {
const tmp2 = _createForOfIteratorHelperLoose(arg0);
let iter = tmp2();
if (!iter.done) {
do {
let value = iter.value;
let tmp4 = _createForOfIteratorHelperLoose;
let tmp5 = _createForOfIteratorHelperLoose(value.k);
let iter2 = tmp5();
if (!iter2.done) {
do {
obj[iter2.value] = tmp3;
let iter3 = tmp5();
iter2 = iter3;
done = iter3.done;
} while (!done);
}
iter4 = tmp2();
iter = iter4;
} while (!iter4.done);
}
return obj;
}
}
function _loadPopulation(arg0) {
const tmp = callback3(arg0, 2);
const first = tmp[0];
return {
buckets: first.map((arg0) => {
let arr;
let tmp;
[tmp, arr] = arg0;
return { bucket: tmp, positions: arr.map((s) => ({ start: s.s, end: s.e })) };
}),
filters: tmp[1].map(_loadGuildFilter),
rawFilterData: tmp[1]
};
}
function handleLoadedExperiments(type) {
let tmp = !c31;
if (!c31) {
tmp = "CONNECTION_OPEN" === type.type;
}
if (tmp) {
tmp = userCanUseExperiments(type.user);
}
if (tmp) {
c31 = true;
}
let tmp3 = "EXPERIMENTS_FETCH_SUCCESS" === type.type && c21;
if (tmp3) {
tmp3 = "ready_payload" === closure_25.source;
}
if (tmp3) {
let obj = importDefault(675);
obj = { fingerprint: type.fingerprint, current_snapshot_source: closure_25.source, current_snapshot_session_id: closure_25.sessionId, current_snapshot_fingerprint: closure_25.fingerprint };
obj.track(constants4.EXPERIMENT_FETCH_IGNORED, obj);
}
let closure_26 = {};
let closure_27 = {};
let closure_28 = {};
let tmp12 = "CONNECTION_OPEN" === type.type;
if (!tmp12) {
tmp12 = null == type.fingerprint;
}
if (!tmp12) {
tmp12 = type.fingerprint === store.getFingerprint();
}
let guildExperiments = type.guildExperiments;
let str3 = "logged_out_api";
if ("CONNECTION_OPEN" === type.type) {
str3 = "ready_payload";
}
if ("sessionId" in type) {
let str4 = type.sessionId;
} else {
const sessionId = store.getSessionId();
str4 = "";
if (null != sessionId) {
str4 = sessionId;
}
}
if (tmp12) {
obj = { rawUserExperiments: type.experiments };
if (null == guildExperiments) {
guildExperiments = [];
}
obj.rawGuildExperiments = guildExperiments;
obj.source = str3;
obj.sessionId = str4;
obj.fingerprint = tmp18;
processRawExperiments(obj, false);
const tmp19 = processRawExperiments;
}
c21 = true;
}
function processRawExperiments(sessionId) {
let rawGuildExperiments;
let rawUserExperiments;
let source;
let flag = arg1;
({ rawUserExperiments, rawGuildExperiments, source } = sessionId);
sessionId = sessionId.sessionId;
const fingerprint = sessionId.fingerprint;
if (arg1 === undefined) {
flag = false;
}
let obj = { rawUserExperiments };
let items = rawGuildExperiments;
if (null == rawGuildExperiments) {
items = [];
}
obj.rawGuildExperiments = items;
obj.source = source;
obj.sessionId = sessionId;
obj.fingerprint = fingerprint;
const item = rawUserExperiments.forEach((arg0) => {
let tmp;
let tmp10;
let tmp11;
let tmp2;
let tmp3;
let tmp4;
let tmp5;
let tmp6;
let tmp7;
let tmp8;
let tmp9;
[tmp, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, tmp11] = arg0;
const obj = { type: "user", revision: tmp2, population: tmp5, bucket: tmp3, override: 0 === tmp4 };
let num = -1;
if (null != tmp6) {
num = tmp6;
}
obj.hashResult = num;
obj.aaMode = 1 === tmp7;
obj.triggerDebuggingEnabled = 1 === tmp8;
obj.assignmentSource = source;
obj.sessionId = sessionId;
obj.loadedFromCache = flag;
obj.fingerprint = fingerprint;
obj.holdoutName = tmp9;
obj.holdoutRevision = tmp10;
obj.holdoutBucket = tmp11;
outer1_26[tmp] = obj;
});
if (null != rawGuildExperiments) {
const item1 = rawGuildExperiments.forEach((arg0) => {
let arr;
let arr2;
let tmp;
let tmp2;
let tmp3;
let tmp4;
let tmp5;
let tmp6;
let tmp7;
let tmp8;
[tmp, tmp2, tmp3, arr, tmp4, arr2, tmp5, tmp6, tmp7, tmp8] = arg0;
const obj = { hashKey: tmp2, revision: tmp3, populations: arr.map(outer1_45), overrides: outer1_44(tmp4) };
if (null == items) {
items = [];
}
obj.overridesFormatted = items.map((arr) => arr.map(outer2_45));
let tmp10 = null;
if (null != tmp5) {
tmp10 = tmp5;
}
obj.holdoutName = tmp10;
let tmp11 = null;
if (null != tmp6) {
tmp11 = tmp6;
}
obj.holdoutControlBucket = tmp11;
obj.aaMode = 1 === tmp7;
obj.triggerDebuggingEnabled = 1 === tmp8;
obj.assignmentSource = source;
obj.sessionId = sessionId;
obj.loadedFromCache = flag;
obj.fingerprint = fingerprint;
outer1_27[tmp] = obj;
});
}
}
function computeGuildExperimentBucketFromPopulationsOrNull(guildId, populations, result) {
let buckets;
let filters;
let closure_0 = result;
const tmp = _createForOfIteratorHelperLoose(populations);
const iter = tmp();
let iter2 = iter;
if (!iter.done) {
while (true) {
({ buckets, filters } = iter2.value);
let flag = true;
let tmp3 = tmp2;
if (null != filters) {
let tmp4 = _createForOfIteratorHelperLoose;
let tmp5 = _createForOfIteratorHelperLoose(filters);
let iter3 = tmp5();
let iter4 = iter3;
flag = true;
let tmp6 = iter3;
let tmp7 = tmp5;
tmp3 = tmp2;
if (!iter3.done) {
while (true) {
let value = iter4.value;
if (null == value) {
let iter5 = tmp5();
iter4 = iter5;
flag = true;
let tmp10 = iter5;
let tmp11 = tmp5;
tmp3 = value;
if (iter5.done) {
break;
}
} else {
flag = false;
let tmp8 = iter4;
let tmp9 = tmp5;
tmp3 = value;
if (!value(guildId)) {
break;
}
}
break;
}
}
}
if (flag) {
break;
} else {
let iter6 = tmp();
iter2 = iter6;
tmp2 = tmp3;
}
}
const found = buckets.find((positions) => {
positions = positions.positions;
return positions.some((start) => {
let tmp2 = outer1_0 >= start.start;
if (tmp2) {
tmp2 = outer1_0 < tmp;
}
return tmp2;
});
});
if (null != found) {
let CONTROL = found.bucket;
} else {
CONTROL = constants.CONTROL;
}
let tmp15 = null;
if (CONTROL !== constants.NOT_ELIGIBLE) {
tmp15 = CONTROL;
}
return tmp15;
}
return null;
}
function computeGuildExperimentDescriptor(guildId, holdoutName) {
const tmp = table2["" + getHash(undefined, holdoutName)];
if (null == tmp) {
return null;
} else {
const triggerDebuggingEnabled = tmp.triggerDebuggingEnabled;
if (null != tmp.overrides[guildId]) {
let tmp23 = null;
if (tmp27 !== constants.NOT_ELIGIBLE) {
let obj = { type: constants2.GUILD, guildId, revision: tmp25, bucket: tmp27, override: true, hashResult: -1, triggerDebuggingEnabled };
tmp23 = obj;
}
return tmp23;
} else {
const hashKey = tmp.hashKey;
let tmp2 = holdoutName;
if (null != hashKey) {
tmp2 = hashKey;
}
const _HermesInternal = HermesInternal;
const result = getHash("" + tmp2 + ":" + guildId) % 10000;
let overridesFormatted = tmp.overridesFormatted;
if (null == overridesFormatted) {
overridesFormatted = [];
}
const tmp4Result = _createForOfIteratorHelperLoose(overridesFormatted);
const iter = tmp4Result();
let iter2 = iter;
if (!iter.done) {
const tmp7 = computeGuildExperimentBucketFromPopulationsOrNull(guildId, iter2.value, result);
while (null === tmp7) {
let iter3 = tmp4Result();
iter2 = iter3;
}
obj = { type: constants2.GUILD, guildId, revision: tmp.revision, bucket: tmp7, override: true, hashResult: result, triggerDebuggingEnabled };
({ assignmentSource: obj.assignmentSource, sessionId: obj.sessionId, loadedFromCache: obj.loadedFromCache } = tmp);
return obj;
}
const tmp10 = computeGuildExperimentBucketFromPopulationsOrNull(guildId, tmp.populations, result);
if (null == tmp10) {
return null;
} else {
let tmp11 = null;
if (null != tmp.holdoutName) {
tmp11 = null;
if (null != tmp.holdoutControlBucket) {
tmp11 = null;
if (tmp.holdoutName !== holdoutName) {
const tmp13 = computeGuildExperimentDescriptor(guildId, tmp.holdoutName);
let bucket;
if (null != tmp13) {
bucket = tmp13.bucket;
}
tmp11 = tmp13;
if (null != bucket) {
if (true !== tmp13.override) {
obj = { experimentId: tmp.holdoutName, descriptor: tmp13 };
trackExposure(obj);
}
let bucket1;
if (null != tmp13) {
bucket1 = tmp13.bucket;
}
tmp11 = tmp13;
if (bucket1 === tmp.holdoutControlBucket) {
return null;
}
}
}
}
}
const obj1 = { type: constants2.GUILD, guildId, revision: tmp.revision, bucket: tmp10, hashResult: result, aaMode: tmp26, triggerDebuggingEnabled };
({ assignmentSource: obj3.assignmentSource, sessionId: obj3.sessionId, loadedFromCache: obj3.loadedFromCache } = tmp);
holdoutName = null;
if (null != tmp11) {
holdoutName = tmp.holdoutName;
}
obj1.holdoutName = holdoutName;
let revision;
if (null != tmp11) {
revision = tmp11.revision;
}
obj1.holdoutRevision = revision;
let bucket2;
if (null != tmp11) {
bucket2 = tmp11.bucket;
}
obj1.holdoutBucket = bucket2;
return obj1;
}
const tmp28 = getHash;
const tmp4 = _createForOfIteratorHelperLoose;
}
}
}
function processGuildExperimentPopulationFromCache(loadedGuildExperiments) {
let obj = {};
for (const key10008 in arg0) {
let tmp10 = key10008;
obj = {};
let tmp11 = obj;
let merged = Object.assign(arg0[key10008]);
obj[key10008] = obj;
let tmp13 = _createForOfIteratorHelperLoose;
let tmp14 = _createForOfIteratorHelperLoose(obj[key10008].populations);
let iter2 = tmp14();
if (!iter2.done) {
do {
let value = iter2.value;
let rawFilterData = value.rawFilterData;
let tmp = _loadGuildFilter;
value.filters = rawFilterData.map(_loadGuildFilter);
let iter = tmp14();
iter2 = iter;
let done = iter.done;
} while (!done);
}
let overridesFormatted = obj[key10008].overridesFormatted;
let tmp2 = _createForOfIteratorHelperLoose;
if (null == overridesFormatted) {
overridesFormatted = [];
}
let tmp2Result = tmp2(overridesFormatted);
let iter3 = tmp2Result();
if (iter3.done) {
continue;
} else {
do {
let tmp4 = _createForOfIteratorHelperLoose;
let tmp5 = _createForOfIteratorHelperLoose(iter3.value);
let iter4 = tmp5();
let iter5 = iter4;
let tmp6 = iter4;
if (!iter4.done) {
do {
value = iter5.value;
let rawFilterData1 = value.rawFilterData;
let tmp7 = _loadGuildFilter;
value.filters = rawFilterData1.map(_loadGuildFilter);
let iter6 = tmp5();
iter5 = iter6;
let tmp8 = iter6;
let done2 = iter6.done;
} while (!done2);
}
let iter7 = tmp2Result();
let tmp9 = tmp5;
iter3 = iter7;
} while (!iter7.done);
}
continue;
}
return obj;
}
function handleOverlayInitialize(serializedExperimentStore) {
let c21;
let closure_22;
let closure_26;
let closure_29;
let closure_30;
serializedExperimentStore = serializedExperimentStore.serializedExperimentStore;
let tmp2 = !c31;
if (!c31) {
tmp2 = userCanUseExperiments(tmp);
}
if (tmp2) {
c31 = true;
}
({ hasLoadedExperiments: c21, trackedExposureExperiments: closure_22, loadedUserExperiments: closure_26, userExperimentOverrides: closure_29, guildExperimentOverrides: closure_30 } = serializedExperimentStore);
const obj = {};
const merged = Object.assign(obj);
obj["source"] = serializedExperimentStore.assignmentSource;
obj["sessionId"] = serializedExperimentStore.assignmentSessionId;
obj["fingerprint"] = serializedExperimentStore.assignmentFingerprint;
let closure_27 = processGuildExperimentPopulationFromCache(serializedExperimentStore.loadedGuildExperiments);
let closure_28 = {};
}
function handleFetchFailure() {
let c21 = true;
}
function handleLogout(isSwitchingAccount) {
const Storage = require(587) /* Storage */.Storage;
Storage.remove(c16);
if (!isSwitchingAccount.isSwitchingAccount) {
const Storage2 = require(587) /* Storage */.Storage;
Storage2.remove(exerimentOverrides);
const Storage3 = require(587) /* Storage */.Storage;
Storage3.remove(userExperimentOverrides);
const Storage4 = require(587) /* Storage */.Storage;
Storage4.remove(guildExperimentOverrides);
let closure_29 = {};
let closure_30 = {};
}
let closure_26 = {};
const obj = {};
const merged = Object.assign(obj);
obj["rawUserExperiments"] = [];
let closure_22 = {};
let c21 = false;
}
function handleLogin() {
let c21 = false;
let closure_22 = {};
let closure_27 = {};
const Storage = require(587) /* Storage */.Storage;
Storage.remove(c16);
}
function loadLocalOverrides() {
const Storage = require(587) /* Storage */.Storage;
let obj = Storage.get(exerimentOverrides);
if (null == obj) {
obj = {};
}
const items = [obj, , ];
const Storage2 = require(587) /* Storage */.Storage;
let value = Storage2.get(userExperimentOverrides);
if (null == value) {
value = {};
}
items[1] = value;
const Storage3 = require(587) /* Storage */.Storage;
let value1 = Storage3.get(guildExperimentOverrides);
if (null == value1) {
value1 = {};
}
items[2] = value1;
let closure_29 = {};
let closure_30 = {};
let num = 0;
let tmp4 = !importDefault(22).isEmpty(items[0]);
let tmp7 = tmp4;
if (0 < items.length) {
do {
let tmp8 = items[num];
let tmp9 = tmp8;
let flag = tmp4;
let tmp10 = tmp5;
let tmp11 = tmp6;
let tmp12 = tmp4;
let keys = Object.keys();
if (keys !== undefined) {
let tmp14 = flag;
tmp5 = tmp10;
tmp6 = tmp11;
tmp12 = flag;
let tmp15 = keys[tmp];
while (tmp15 !== undefined) {
let tmp25 = tmp15;
let tmp26 = tmp8[tmp15];
if (null != tmp26) {
if (null != tmp26.bucket) {
if (true === tmp26.override) {
if (!tmp26.fromCookie) {
let type = tmp26.type;
let tmp16 = constants2;
if (constants2.USER === type) {
let tmp19 = closure_29;
closure_29[tmp15] = tmp26;
tmp10 = tmp15;
tmp11 = tmp26;
continue;
} else {
let tmp17 = constants2;
if (constants2.GUILD === type) {
let tmp18 = closure_30;
closure_30[tmp15] = tmp26;
tmp10 = tmp15;
tmp11 = tmp26;
continue;
} else {
delete tmp2[tmp3];
flag = true;
tmp10 = tmp15;
tmp11 = tmp26;
continue;
}
continue;
}
continue;
}
continue;
}
}
}
delete tmp2[tmp3];
flag = true;
tmp10 = tmp15;
tmp11 = tmp26;
continue;
}
}
num = num + 1;
tmp4 = tmp12;
tmp7 = tmp12;
} while (num < items.length);
}
const obj4 = importDefault(22);
const buildOverrideExperiments = require(4046) /* getAPIEndpoint */.getBuildOverrideExperiments();
let flag2 = false;
let flag3 = false;
const keys1 = Object.keys();
if (keys1 !== undefined) {
flag3 = flag2;
while (keys1[num] !== undefined) {
let tmp27 = tmp22;
let tmp28 = closure_29;
obj = { type: null, revision: 1, population: 0, override: true, fromCookie: true, assignmentSource: "override" };
let tmp29 = constants2;
obj.type = constants2.USER;
obj.bucket = buildOverrideExperiments[tmp22];
closure_29[tmp22] = obj;
let tmp30 = closure_30;
let obj1 = { type: null, revision: 1, override: true, fromCookie: true, assignmentSource: "override" };
let tmp31 = constants2;
obj1.type = constants2.GUILD;
obj1.bucket = buildOverrideExperiments[tmp22];
closure_30[tmp22] = obj1;
flag2 = true;
continue;
}
}
if (!flag3) {
flag3 = tmp7;
}
if (flag3) {
saveExperimentOverrides();
}
}
function saveExperimentOverrides() {
const Storage = require(587) /* Storage */.Storage;
const result = Storage.set(userExperimentOverrides, closure_29);
const Storage2 = require(587) /* Storage */.Storage;
const result1 = Storage2.set(guildExperimentOverrides, closure_30);
}
function saveTrackedExposureExperiments(closure_22) {
const Storage = require(587) /* Storage */.Storage;
const result = Storage.set(c16, { v: 1, e: closure_22 });
}
function handleExperimentOverrideBucket(skipCleanup) {
let experimentBucket;
let experimentId;
let experimentType;
({ experimentId, experimentBucket, experimentType } = skipCleanup);
if (null == experimentType) {
let type;
if (null != dependencyMap[experimentId]) {
type = tmp6.type;
}
experimentType = type;
}
if (null == experimentType) {
return false;
} else {
if (null == experimentBucket) {
let obj = {};
const merged = Object.assign(obj1);
obj1 = obj;
delete tmp[tmp2];
obj = {};
const merged1 = Object.assign(obj);
delete tmp[tmp2];
} else if ("user" === experimentType) {
obj1 = {};
const merged2 = Object.assign(obj1);
const obj2 = { type: experimentType, revision: 1, population: 0, bucket: experimentBucket, override: true };
obj1[experimentId] = obj2;
} else {
obj = {};
const merged3 = Object.assign(obj);
const obj3 = { type: experimentType, revision: 1, bucket: experimentBucket, override: true };
obj[experimentId] = obj3;
}
if (!skipCleanup.skipCleanup) {
const items = [obj1, obj];
for (let num2 = 0; num2 < items.length; num2 = num2 + 1) {
let tmp23 = items[num2];
let tmp24 = tmp23;
let tmp25 = tmp22;
let keys = Object.keys();
if (keys !== undefined) {
tmp22 = tmp25;
let tmp27 = keys[true];
while (tmp27 !== undefined) {
let tmp31 = tmp27;
let tmp32 = dependencyMap;
tmp25 = tmp27;
if (null != dependencyMap[tmp27]) {
continue;
} else {
let tmp28 = obj1;
delete tmp4[tmp3];
tmp25 = tmp27;
continue;
}
continue;
}
}
}
}
saveExperimentOverrides();
}
}
function handleGuildChange(arg0) {
for (const key10008 in closure_28) {
let tmp5 = key10008;
let tmp6 = callback3;
if (tmp3.id !== callback3(key10008.split(":"), 1)[0]) {
continue;
} else {
let tmp4 = closure_28;
delete tmp[tmp2];
continue;
}
continue;
}
}
({ ExperimentBuckets: closure_10, ExperimentTypes: closure_11, ExposureTypes: closure_12 } = ExperimentBuckets);
({ AnalyticEvents: closure_13, EMPTY_STRING_SNOWFLAKE_ID: closure_14, UserFlags: closure_15 } = ME);
let c16 = "scientist:triggered";
const exerimentOverrides = "exerimentOverrides";
const userExperimentOverrides = "userExperimentOverrides";
const guildExperimentOverrides = "guildExperimentOverrides";
importDefaultResult1 = new importDefaultResult1("ExperimentStore");
let c21 = false;
let closure_22 = {};
const map = new Map();
let closure_24 = {};
let closure_25 = { rawUserExperiments: [], rawGuildExperiments: [] };
let closure_26 = {};
let closure_27 = {};
let closure_28 = {};
let closure_29 = {};
let closure_30 = {};
let closure_31 = "staging" === window.GLOBAL_ENV.RELEASE_CHANNEL || true;
let closure_32 = {};
let c33 = 604800000;
let timestamp = Date.now();
tmp9.displayName = "ExperimentStore";
tmp9.LATEST_SNAPSHOT_VERSION = 1;
tmp9 = new tmp9();
let result = require("_possibleConstructorReturn").fileFinishedImporting("modules/experiments/ExperimentStore.tsx");
export default tmp9;
export const registerExperiment = function registerExperiment(experimentId) {
closure_24[experimentId.experimentId] = { type: experimentId.experimentType, title: experimentId.title, description: experimentId.description, buckets: experimentId.buckets, commonTriggerPoint: experimentId.commonTriggerPoint };
};