正在查看: Brevistay v5.8.2 应用的 IngestService.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Brevistay v5.8.2 应用的 IngestService.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package a.a.clarity.services;
import a.a.clarity.stores.FileStore;
import a.a.clarity.stores.WriteMode;
import a.a.clarity.utils.HttpUtils;
import a.a.clarity.utils.SerializationUtils;
import a.a.clarity.utils.e;
import android.content.Context;
import android.net.Uri;
import android.os.Trace;
import androidx.appcompat.R;
import androidx.autofill.HintConstants;
import androidx.browser.trusted.sharing.ShareTarget;
import androidx.compose.ui.graphics.Fields;
import com.microsoft.clarity.models.AssetType;
import com.microsoft.clarity.models.SessionMetadata;
import com.microsoft.clarity.models.ingest.AssetCheck;
import com.microsoft.clarity.models.ingest.AssetMetadata;
import com.microsoft.clarity.models.ingest.CollectRequest;
import com.microsoft.clarity.models.ingest.Envelope;
import com.microsoft.clarity.models.ingest.IngestConfigs;
import com.microsoft.clarity.models.ingest.SerializedSessionPayload;
import com.microsoft.clarity.models.telemetry.AggregatedMetric;
import com.squareup.moshi.Moshi;
import com.squareup.moshi.Types;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.zip.GZIPOutputStream;
import kotlin.Metadata;
import kotlin.Pair;
import kotlin.TuplesKt;
import kotlin.collections.CollectionsKt;
import kotlin.collections.MapsKt;
import kotlin.io.CloseableKt;
import kotlin.jvm.internal.DefaultConstructorMarker;
import kotlin.jvm.internal.Intrinsics;
import kotlin.text.Charsets;
@Metadata(d1 = {"\u0000\u0084\u0001\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010$\n\u0002\u0010\u000e\n\u0002\u0010\u000b\n\u0002\b\u0003\n\u0002\u0010 \n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0010\u0006\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0010\u0002\n\u0002\b\u0007\n\u0002\u0010\u0012\n\u0002\b\u0004\b\u0001\u0018\u00002\u00020\u0001B\u001d\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u0012\u0006\u0010\u0004\u001a\u00020\u0005\u0012\u0006\u0010\u0006\u001a\u00020\u0007¢\u0006\u0002\u0010\bJ2\u0010\u000f\u001a\u000e\u0012\u0004\u0012\u00020\u0011\u0012\u0004\u0012\u00020\u00120\u00102\u0006\u0010\u0013\u001a\u00020\u00112\u0006\u0010\u0014\u001a\u00020\u00112\f\u0010\u0015\u001a\b\u0012\u0004\u0012\u00020\u00170\u0016H\u0016J\u0018\u0010\u0018\u001a\u00020\u00192\u0006\u0010\u001a\u001a\u00020\u001b2\u0006\u0010\u001c\u001a\u00020\u001dH\u0002J\u0018\u0010\u001e\u001a\u00020\u00112\u0006\u0010\u0013\u001a\u00020\u00112\u0006\u0010\u0014\u001a\u00020\u0011H\u0002J\u001c\u0010\u001f\u001a\u000e\u0012\u0004\u0012\u00020\u0011\u0012\u0004\u0012\u00020\u00110\u00102\u0006\u0010 \u001a\u00020\u0012H\u0002J\u0010\u0010!\u001a\u00020\u00112\u0006\u0010\u0013\u001a\u00020\u0011H\u0002J\u0010\u0010\"\u001a\u00020#2\u0006\u0010\u0014\u001a\u00020\u0011H\u0016J\u0018\u0010$\u001a\u00020\u00112\u0006\u0010%\u001a\u00020\u00112\u0006\u0010&\u001a\u00020'H\u0002J\u0010\u0010(\u001a\u00020\u00112\u0006\u0010\u0014\u001a\u00020\u0011H\u0002J(\u0010)\u001a\u00020\u00112\u0006\u0010\u0013\u001a\u00020\u00112\u0006\u0010\u0014\u001a\u00020\u00112\u0006\u0010*\u001a\u00020\u00112\u0006\u0010+\u001a\u00020,H\u0002J \u0010-\u001a\u00020\u00112\u0006\u0010\u0013\u001a\u00020\u00112\u0006\u0010\u0014\u001a\u00020\u00112\u0006\u0010.\u001a\u00020\u0011H\u0002J\u0018\u0010/\u001a\u0002002\u0006\u00101\u001a\u00020\u00112\u0006\u00102\u001a\u00020\u001dH\u0002J \u00103\u001a\u0002002\u0006\u0010\u0014\u001a\u00020\u00112\u0006\u00104\u001a\u00020\u00112\u0006\u00105\u001a\u00020'H\u0002J(\u00106\u001a\u00020\u00122\u0006\u00102\u001a\u00020\u001d2\u0006\u0010*\u001a\u00020\u00112\u0006\u00107\u001a\u0002082\u0006\u0010+\u001a\u00020,H\u0016J \u00109\u001a\u00020\u00122\u0006\u0010\u001a\u001a\u00020\u001b2\u0006\u00102\u001a\u00020\u001d2\u0006\u0010 \u001a\u00020\u0012H\u0016J0\u0010:\u001a\u00020\u00122\u0006\u0010\u0013\u001a\u00020\u00112\u0006\u0010\u0014\u001a\u00020\u00112\u0006\u0010.\u001a\u00020\u00112\u0006\u0010;\u001a\u00020\u00112\u0006\u00107\u001a\u000208H\u0016R\u0016\u0010\t\u001a\n \u000b*\u0004\u0018\u00010\n0\nX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0002\u001a\u00020\u0003X\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0004\u001a\u00020\u0005X\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\f\u001a\u00020\rX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u000e\u001a\u00020\rX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0006\u001a\u00020\u0007X\u0082\u0004¢\u0006\u0002\n\u0000¨\u0006<"}, d2 = {"Lcom/microsoft/clarity/services/IngestService;", "Lcom/microsoft/clarity/services/IIngestService;", "context", "Landroid/content/Context;", "faultyCollectRequestsStore", "Lcom/microsoft/clarity/stores/FileStore;", "telemetryService", "Lcom/microsoft/clarity/services/ITelemetryService;", "(Landroid/content/Context;Lcom/microsoft/clarity/stores/FileStore;Lcom/microsoft/clarity/services/ITelemetryService;)V", "checkAssetsMapType", "Ljava/lang/reflect/ParameterizedType;", "kotlin.jvm.PlatformType", "ingestConfigMoshi", "Lcom/squareup/moshi/Moshi;", "moshi", "checkIfAssetsExist", "", "", "", "ingestUrl", "projectId", "assets", "", "Lcom/microsoft/clarity/models/ingest/AssetCheck;", "createCollectRequest", "Lcom/microsoft/clarity/models/ingest/CollectRequest;", "serializedSessionPayload", "Lcom/microsoft/clarity/models/ingest/SerializedSessionPayload;", "metadata", "Lcom/microsoft/clarity/models/SessionMetadata;", "getCheckAssetsUrl", "getCollectHeaders", "compress", "getCollectUrl", "getIngestConfigs", "Lcom/microsoft/clarity/models/ingest/IngestConfigs;", "getSerializedMetric", HintConstants.AUTOFILL_HINT_NAME, "size", "", "getTagUrl", "getUploadAssetUrl", "hash", "assetMetadata", "Lcom/microsoft/clarity/models/ingest/AssetMetadata;", "getUploadWebAssetUrl", "version", "saveFaultyCollectRequest", "", "request", "sessionMetadata", "traceMetric", "metric", "value", "uploadAsset", "asset", "", "uploadSessionPayload", "uploadWebAsset", "path", "sdk_prodRelease"}, k = 1, mv = {1, 6, 0}, xi = R.styleable.AppCompatTheme_checkboxStyle)
public final class IngestService implements IIngestService {
public final Context f157a;
public final FileStore b;
public final ITelemetryService c;
public final ParameterizedType d;
public final Moshi e;
public final Moshi f;
public IngestService(Context context, FileStore fileStore, ITelemetryService iTelemetryService) {
Intrinsics.checkNotNullParameter(context, "context");
Intrinsics.checkNotNullParameter(fileStore, "faultyCollectRequestsStore");
Intrinsics.checkNotNullParameter(iTelemetryService, "telemetryService");
this.f157a = context;
this.b = fileStore;
this.c = iTelemetryService;
this.d = Types.newParameterizedType(Map.class, new Type[]{String.class, Boolean.class});
SerializationUtils.a aVar = SerializationUtils.f169a;
this.e = aVar.b();
this.f = aVar.a();
}
@Override
public Map<String, Boolean> a(String str, String str2, List<AssetCheck> list) {
Intrinsics.checkNotNullParameter(str, "ingestUrl");
Intrinsics.checkNotNullParameter(str2, "projectId");
Intrinsics.checkNotNullParameter(list, "assets");
if (list.isEmpty()) {
return MapsKt.emptyMap();
}
HttpUtils.a aVar = HttpUtils.f166a;
String uri = Uri.parse(str).buildUpon().appendPath(str2).appendPath("check-asset").build().toString();
Intrinsics.checkNotNullExpressionValue(uri, "parse(ingestUrl)\n …)\n .toString()");
HttpURLConnection a2 = aVar.a(uri, ShareTarget.METHOD_POST, MapsKt.mapOf(TuplesKt.to("Content-Type", "application/json")));
try {
String json = this.e.adapter(List.class).toJson(list);
Intrinsics.checkNotNullExpressionValue(json, "moshi.adapter(List::class.java).toJson(assets)");
byte[] bytes = json.getBytes(Charsets.UTF_8);
Intrinsics.checkNotNullExpressionValue(bytes, "this as java.lang.String).getBytes(charset)");
long length = bytes.length;
aVar.a(a2, bytes);
a2.connect();
String a3 = aVar.a(a2);
long length2 = length + a3.length();
if (aVar.b(a2)) {
a(str2, "Clarity_CheckAssetBytes", length2);
}
Map<String, Boolean> map = (Map) this.e.adapter(this.d).fromJson(a3);
if (map == null) {
map = MapsKt.emptyMap();
}
return map;
} finally {
a2.disconnect();
}
}
public final void a(String str, SessionMetadata sessionMetadata) {
String str2 = sessionMetadata.getSessionId() + '_' + System.currentTimeMillis() + ".json";
e.c("Bad collect request for session " + sessionMetadata.getSessionId() + ". Saved at " + str2 + '.');
this.b.a(str2, str, WriteMode.OVERWRITE);
}
@Override
public IngestConfigs a(String str) {
HttpURLConnection a2;
Intrinsics.checkNotNullParameter(str, "projectId");
HttpUtils.a aVar = HttpUtils.f166a;
String uri = Uri.parse("https://www.clarity.ms/").buildUpon().appendPath("tag").appendPath("mobile").appendPath(str).build().toString();
Intrinsics.checkNotNullExpressionValue(uri, "parse(BuildConfig.API_BA…)\n .toString()");
a2 = aVar.a(uri, ShareTarget.METHOD_GET, (r4 & 4) != 0 ? MapsKt.emptyMap() : null);
try {
a2.connect();
String a3 = aVar.a(a2);
if (aVar.b(a2)) {
a(str, "Clarity_TagBytes", a3.length());
}
Object fromJson = this.f.adapter(IngestConfigs.class).fromJson(a3);
Intrinsics.checkNotNull(fromJson);
return (IngestConfigs) fromJson;
} finally {
a2.disconnect();
}
}
public final void a(String str, String str2, double d) {
try {
Trace.setCounter(str2, (long) d);
Intrinsics.checkNotNullParameter(str2, HintConstants.AUTOFILL_HINT_NAME);
double d2 = d - 0.0d;
double d3 = 1;
List listOf = CollectionsKt.listOf(new AggregatedMetric("1.3.0", str2, 1, d + 0.0d, d, d, Math.sqrt(((d2 * (d - ((d2 / d3) + 0.0d))) + 0.0d) / d3), 0, 128, (DefaultConstructorMarker) null));
SerializationUtils.a aVar = SerializationUtils.f169a;
String json = SerializationUtils.d.adapter(SerializationUtils.b).toJson(listOf);
Intrinsics.checkNotNullExpressionValue(json, "SerializationUtils.moshi….toJson(aggregatedMetric)");
this.c.a(str, json);
} catch (Exception unused) {
}
}
@Override
public boolean a(SessionMetadata sessionMetadata, String str, byte[] bArr, AssetMetadata assetMetadata) {
Intrinsics.checkNotNullParameter(sessionMetadata, "sessionMetadata");
Intrinsics.checkNotNullParameter(str, "hash");
Intrinsics.checkNotNullParameter(bArr, "asset");
Intrinsics.checkNotNullParameter(assetMetadata, "assetMetadata");
HttpUtils.a aVar = HttpUtils.f166a;
Uri.Builder appendPath = Uri.parse(sessionMetadata.getIngestUrl()).buildUpon().appendPath(sessionMetadata.getProjectId()).appendPath("upload-asset").appendPath(str).appendPath(String.valueOf(assetMetadata.getAssetType().ordinal()));
if (assetMetadata.getAssetType() == AssetType.Image) {
appendPath.appendQueryParameter("width", String.valueOf(assetMetadata.getWidth())).appendQueryParameter("height", String.valueOf(assetMetadata.getHeight()));
}
String uri = appendPath.build().toString();
Intrinsics.checkNotNullExpressionValue(uri, "uri\n .build()\n .toString()");
HttpURLConnection a2 = aVar.a(uri, ShareTarget.METHOD_POST, MapsKt.mapOf(new Pair[]{TuplesKt.to("Content-Type", "application/octet-stream"), TuplesKt.to("Content-Hash", str)}));
try {
aVar.a(a2, bArr);
a2.connect();
boolean b = aVar.b(a2);
if (b) {
a(sessionMetadata.getProjectId(), "Clarity_UploadAssetBytes", bArr.length);
}
return b;
} finally {
a2.disconnect();
}
}
@Override
public boolean a(SerializedSessionPayload serializedSessionPayload, SessionMetadata sessionMetadata, boolean z) {
byte[] byteArray;
Intrinsics.checkNotNullParameter(serializedSessionPayload, "serializedSessionPayload");
Intrinsics.checkNotNullParameter(sessionMetadata, "sessionMetadata");
HttpUtils.a aVar = HttpUtils.f166a;
String uri = Uri.parse(sessionMetadata.getIngestUrl()).buildUpon().appendPath("collect").build().toString();
Intrinsics.checkNotNullExpressionValue(uri, "parse(ingestUrl)\n …)\n .toString()");
Map<String, String> mutableMapOf = MapsKt.mutableMapOf(new Pair[]{TuplesKt.to("Content-Type", "application/json")});
if (z) {
mutableMapOf.put("Accept", "application/x-clarity-gzip");
mutableMapOf.put("Accept-Encoding", "gzip, deflate, br");
}
String packageName = this.f157a.getPackageName();
Intrinsics.checkNotNullExpressionValue(packageName, "context.packageName");
mutableMapOf.put("ApplicationPackage", packageName);
HttpURLConnection a2 = aVar.a(uri, ShareTarget.METHOD_POST, mutableMapOf);
try {
String serialize = new CollectRequest(new Envelope(sessionMetadata, serializedSessionPayload.getPageNum(), serializedSessionPayload.getSequence(), serializedSessionPayload.getStart(), serializedSessionPayload.getDuration()), serializedSessionPayload.getEvents(), serializedSessionPayload.getFrames()).serialize();
if (z) {
Intrinsics.checkNotNullParameter(serialize, "content");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
GZIPOutputStream gZIPOutputStream = new GZIPOutputStream(byteArrayOutputStream);
Charset charset = StandardCharsets.UTF_8;
Intrinsics.checkNotNullExpressionValue(charset, "UTF_8");
Writer outputStreamWriter = new OutputStreamWriter(gZIPOutputStream, charset);
BufferedWriter bufferedWriter = outputStreamWriter instanceof BufferedWriter ? (BufferedWriter) outputStreamWriter : new BufferedWriter(outputStreamWriter, Fields.Shape);
try {
bufferedWriter.write(serialize);
CloseableKt.closeFinally(bufferedWriter, (Throwable) null);
byteArray = byteArrayOutputStream.toByteArray();
Intrinsics.checkNotNullExpressionValue(byteArray, "bos.toByteArray()");
} finally {
}
} else {
byteArray = serialize.getBytes(Charsets.UTF_8);
Intrinsics.checkNotNullExpressionValue(byteArray, "this as java.lang.String).getBytes(charset)");
}
aVar.a(a2, byteArray);
a2.connect();
boolean b = aVar.b(a2);
if (b) {
a(sessionMetadata.getProjectId(), "Clarity_UploadSessionSegmentBytes", byteArray.length);
} else {
a(serialize, sessionMetadata);
}
return b;
} finally {
a2.disconnect();
}
}
@Override
public boolean a(String str, String str2, String str3, String str4, byte[] bArr) {
Intrinsics.checkNotNullParameter(str, "ingestUrl");
Intrinsics.checkNotNullParameter(str2, "projectId");
Intrinsics.checkNotNullParameter(str3, "version");
Intrinsics.checkNotNullParameter(str4, "path");
Intrinsics.checkNotNullParameter(bArr, "asset");
HttpUtils.a aVar = HttpUtils.f166a;
String uri = Uri.parse(str).buildUpon().appendPath(str2).appendPath("upload-web-asset").appendPath(str3).build().toString();
Intrinsics.checkNotNullExpressionValue(uri, "parse(ingestUrl)\n …)\n .toString()");
HttpURLConnection a2 = aVar.a(uri, ShareTarget.METHOD_POST, MapsKt.mapOf(new Pair[]{TuplesKt.to("Content-Type", "application/octet-stream"), TuplesKt.to("Content-Path", str4)}));
try {
aVar.a(a2, bArr);
a2.connect();
boolean b = aVar.b(a2);
if (b) {
a(str2, "Clarity_UploadWebAssetBytes", bArr.length);
}
return b;
} finally {
a2.disconnect();
}
}
}