导航菜单

页面标题

页面副标题

Brevistay v5.8.2 - IngestService.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();
        }
    }
}