Skip to content
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ This file follows [Keepachangelog](https://keepachangelog.com/) format.
Please add your entries according to this format.

## Unreleased
* Added ability to log manual transactions. In order to do this call ChuckerCollector#saveTransaction(transaction: ManualHttpTransaction) method and pass ManualHttpTransaction entity to it.

### Added
* Decoding of request and response bodies can now be customized. In order to do this a `BodyDecoder` interface needs to be implemented and installed in the `ChuckerInterceptor` via `ChuckerInterceptor.addBinaryDecoder(decoder)` method. Decoded bodies are then displayed in the Chucker UI.
Expand Down
93 changes: 93 additions & 0 deletions library-no-op/api/library-no-op.api
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public final class com/chuckerteam/chucker/api/ChuckerCollector {
public fun <init> (Landroid/content/Context;ZLcom/chuckerteam/chucker/api/RetentionManager$Period;)V
public synthetic fun <init> (Landroid/content/Context;ZLcom/chuckerteam/chucker/api/RetentionManager$Period;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getShowNotification ()Z
public final fun saveTransaction (Lcom/chuckerteam/chucker/api/entity/ManualHttpTransaction;)V
public final fun setShowNotification (Z)V
public final fun writeTransactions (Landroid/content/Context;Ljava/lang/Long;)Landroid/net/Uri;
}
Expand Down Expand Up @@ -55,3 +56,95 @@ public final class com/chuckerteam/chucker/api/RetentionManager$Period : java/la
public static fun values ()[Lcom/chuckerteam/chucker/api/RetentionManager$Period;
}

public final class com/chuckerteam/chucker/api/entity/ManualHttpTransaction {
public fun <init> ()V
public fun <init> (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ZLjava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Z[B)V
public synthetic fun <init> (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ZLjava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Z[BILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/Long;
public final fun component10 ()Ljava/lang/String;
public final fun component11 ()Ljava/lang/String;
public final fun component12 ()Ljava/lang/Long;
public final fun component13 ()Ljava/lang/String;
public final fun component14 ()Ljava/lang/String;
public final fun component15 ()Ljava/lang/Long;
public final fun component16 ()Ljava/lang/String;
public final fun component17 ()Z
public final fun component18 ()Ljava/lang/Integer;
public final fun component19 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/Long;
public final fun component20 ()Ljava/lang/String;
public final fun component21 ()Ljava/lang/Long;
public final fun component22 ()Ljava/lang/String;
public final fun component23 ()Ljava/lang/String;
public final fun component24 ()Ljava/lang/Long;
public final fun component25 ()Ljava/lang/String;
public final fun component26 ()Z
public final fun component27 ()[B
public final fun component3 ()Ljava/lang/Long;
public final fun component4 ()Ljava/lang/String;
public final fun component5 ()Ljava/lang/String;
public final fun component6 ()Ljava/lang/String;
public final fun component7 ()Ljava/lang/String;
public final fun component8 ()Ljava/lang/String;
public final fun component9 ()Ljava/lang/String;
public final fun copy (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ZLjava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Z[B)Lcom/chuckerteam/chucker/api/entity/ManualHttpTransaction;
public static synthetic fun copy$default (Lcom/chuckerteam/chucker/api/entity/ManualHttpTransaction;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ZLjava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Z[BILjava/lang/Object;)Lcom/chuckerteam/chucker/api/entity/ManualHttpTransaction;
public fun equals (Ljava/lang/Object;)Z
public final fun getError ()Ljava/lang/String;
public final fun getHost ()Ljava/lang/String;
public final fun getMethod ()Ljava/lang/String;
public final fun getPath ()Ljava/lang/String;
public final fun getProtocol ()Ljava/lang/String;
public final fun getRequestBody ()Ljava/lang/String;
public final fun getRequestContentType ()Ljava/lang/String;
public final fun getRequestDate ()Ljava/lang/Long;
public final fun getRequestHeaders ()Ljava/lang/String;
public final fun getRequestHeadersSize ()Ljava/lang/Long;
public final fun getRequestPayloadSize ()Ljava/lang/Long;
public final fun getResponseBody ()Ljava/lang/String;
public final fun getResponseCipherSuite ()Ljava/lang/String;
public final fun getResponseCode ()Ljava/lang/Integer;
public final fun getResponseContentType ()Ljava/lang/String;
public final fun getResponseDate ()Ljava/lang/Long;
public final fun getResponseHeaders ()Ljava/lang/String;
public final fun getResponseHeadersSize ()Ljava/lang/Long;
public final fun getResponseImageData ()[B
public final fun getResponseMessage ()Ljava/lang/String;
public final fun getResponsePayloadSize ()Ljava/lang/Long;
public final fun getResponseTlsVersion ()Ljava/lang/String;
public final fun getScheme ()Ljava/lang/String;
public final fun getTookMs ()Ljava/lang/Long;
public final fun getUrl ()Ljava/lang/String;
public fun hashCode ()I
public final fun isRequestBodyEncoded ()Z
public final fun isResponseBodyEncoded ()Z
public final fun setError (Ljava/lang/String;)V
public final fun setHost (Ljava/lang/String;)V
public final fun setMethod (Ljava/lang/String;)V
public final fun setPath (Ljava/lang/String;)V
public final fun setProtocol (Ljava/lang/String;)V
public final fun setRequestBody (Ljava/lang/String;)V
public final fun setRequestBodyEncoded (Z)V
public final fun setRequestContentType (Ljava/lang/String;)V
public final fun setRequestDate (Ljava/lang/Long;)V
public final fun setRequestHeaders (Ljava/lang/String;)V
public final fun setRequestHeadersSize (Ljava/lang/Long;)V
public final fun setRequestPayloadSize (Ljava/lang/Long;)V
public final fun setResponseBody (Ljava/lang/String;)V
public final fun setResponseBodyEncoded (Z)V
public final fun setResponseCipherSuite (Ljava/lang/String;)V
public final fun setResponseCode (Ljava/lang/Integer;)V
public final fun setResponseContentType (Ljava/lang/String;)V
public final fun setResponseDate (Ljava/lang/Long;)V
public final fun setResponseHeaders (Ljava/lang/String;)V
public final fun setResponseHeadersSize (Ljava/lang/Long;)V
public final fun setResponseImageData ([B)V
public final fun setResponseMessage (Ljava/lang/String;)V
public final fun setResponsePayloadSize (Ljava/lang/Long;)V
public final fun setResponseTlsVersion (Ljava/lang/String;)V
public final fun setScheme (Ljava/lang/String;)V
public final fun setTookMs (Ljava/lang/Long;)V
public final fun setUrl (Ljava/lang/String;)V
public fun toString ()Ljava/lang/String;
}

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.chuckerteam.chucker.api

import android.content.Context
import com.chuckerteam.chucker.api.entity.ManualHttpTransaction
import android.net.Uri

/**
Expand All @@ -12,6 +13,14 @@ public class ChuckerCollector @JvmOverloads constructor(
public var showNotification: Boolean = true,
retentionPeriod: RetentionManager.Period = RetentionManager.Period.ONE_WEEK
) {

/**
* No-op implementation.
*/
public fun saveTransaction(transaction: ManualHttpTransaction) {
// Empty method for the library-no-op artifact
}

@Suppress("FunctionOnlyReturningConstant")
public fun writeTransactions(
context: Context,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.chuckerteam.chucker.api.entity

/**
* No-op implementation.
*/
public data class ManualHttpTransaction(
public var requestDate: Long? = null,
public var responseDate: Long? = null,
public var tookMs: Long? = null,
public var protocol: String? = null,
public var method: String? = null,
public var url: String? = null,
public var host: String? = null,
public var path: String? = null,
public var scheme: String? = null,
public var responseTlsVersion: String? = null,
public var responseCipherSuite: String? = null,
public var requestPayloadSize: Long? = null,
public var requestContentType: String? = null,
public var requestHeaders: String? = null,
public var requestHeadersSize: Long? = null,
public var requestBody: String? = null,
public var isRequestBodyEncoded: Boolean = false,
public var responseCode: Int? = null,
public var responseMessage: String? = null,
public var error: String? = null,
public var responsePayloadSize: Long? = null,
public var responseContentType: String? = null,
public var responseHeaders: String? = null,
public var responseHeadersSize: Long? = null,
public var responseBody: String? = null,
public var isResponseBodyEncoded: Boolean = false,
public var responseImageData: ByteArray? = null
)
93 changes: 93 additions & 0 deletions library/api/library.api
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public final class com/chuckerteam/chucker/api/ChuckerCollector {
public fun <init> (Landroid/content/Context;ZLcom/chuckerteam/chucker/api/RetentionManager$Period;)V
public synthetic fun <init> (Landroid/content/Context;ZLcom/chuckerteam/chucker/api/RetentionManager$Period;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getShowNotification ()Z
public final fun saveTransaction (Lcom/chuckerteam/chucker/api/entity/ManualHttpTransaction;)V
public final fun setShowNotification (Z)V
public final fun writeTransactions (Landroid/content/Context;Ljava/lang/Long;)Landroid/net/Uri;
}
Expand Down Expand Up @@ -54,3 +55,95 @@ public final class com/chuckerteam/chucker/api/RetentionManager$Period : java/la
public static fun values ()[Lcom/chuckerteam/chucker/api/RetentionManager$Period;
}

public final class com/chuckerteam/chucker/api/entity/ManualHttpTransaction {
public fun <init> ()V
public fun <init> (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ZLjava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Z[B)V
public synthetic fun <init> (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ZLjava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Z[BILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/Long;
public final fun component10 ()Ljava/lang/String;
public final fun component11 ()Ljava/lang/String;
public final fun component12 ()Ljava/lang/Long;
public final fun component13 ()Ljava/lang/String;
public final fun component14 ()Ljava/lang/String;
public final fun component15 ()Ljava/lang/Long;
public final fun component16 ()Ljava/lang/String;
public final fun component17 ()Z
public final fun component18 ()Ljava/lang/Integer;
public final fun component19 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/Long;
public final fun component20 ()Ljava/lang/String;
public final fun component21 ()Ljava/lang/Long;
public final fun component22 ()Ljava/lang/String;
public final fun component23 ()Ljava/lang/String;
public final fun component24 ()Ljava/lang/Long;
public final fun component25 ()Ljava/lang/String;
public final fun component26 ()Z
public final fun component27 ()[B
public final fun component3 ()Ljava/lang/Long;
public final fun component4 ()Ljava/lang/String;
public final fun component5 ()Ljava/lang/String;
public final fun component6 ()Ljava/lang/String;
public final fun component7 ()Ljava/lang/String;
public final fun component8 ()Ljava/lang/String;
public final fun component9 ()Ljava/lang/String;
public final fun copy (Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ZLjava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Z[B)Lcom/chuckerteam/chucker/api/entity/ManualHttpTransaction;
public static synthetic fun copy$default (Lcom/chuckerteam/chucker/api/entity/ManualHttpTransaction;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;ZLjava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Z[BILjava/lang/Object;)Lcom/chuckerteam/chucker/api/entity/ManualHttpTransaction;
public fun equals (Ljava/lang/Object;)Z
public final fun getError ()Ljava/lang/String;
public final fun getHost ()Ljava/lang/String;
public final fun getMethod ()Ljava/lang/String;
public final fun getPath ()Ljava/lang/String;
public final fun getProtocol ()Ljava/lang/String;
public final fun getRequestBody ()Ljava/lang/String;
public final fun getRequestContentType ()Ljava/lang/String;
public final fun getRequestDate ()Ljava/lang/Long;
public final fun getRequestHeaders ()Ljava/lang/String;
public final fun getRequestHeadersSize ()Ljava/lang/Long;
public final fun getRequestPayloadSize ()Ljava/lang/Long;
public final fun getResponseBody ()Ljava/lang/String;
public final fun getResponseCipherSuite ()Ljava/lang/String;
public final fun getResponseCode ()Ljava/lang/Integer;
public final fun getResponseContentType ()Ljava/lang/String;
public final fun getResponseDate ()Ljava/lang/Long;
public final fun getResponseHeaders ()Ljava/lang/String;
public final fun getResponseHeadersSize ()Ljava/lang/Long;
public final fun getResponseImageData ()[B
public final fun getResponseMessage ()Ljava/lang/String;
public final fun getResponsePayloadSize ()Ljava/lang/Long;
public final fun getResponseTlsVersion ()Ljava/lang/String;
public final fun getScheme ()Ljava/lang/String;
public final fun getTookMs ()Ljava/lang/Long;
public final fun getUrl ()Ljava/lang/String;
public fun hashCode ()I
public final fun isRequestBodyEncoded ()Z
public final fun isResponseBodyEncoded ()Z
public final fun setError (Ljava/lang/String;)V
public final fun setHost (Ljava/lang/String;)V
public final fun setMethod (Ljava/lang/String;)V
public final fun setPath (Ljava/lang/String;)V
public final fun setProtocol (Ljava/lang/String;)V
public final fun setRequestBody (Ljava/lang/String;)V
public final fun setRequestBodyEncoded (Z)V
public final fun setRequestContentType (Ljava/lang/String;)V
public final fun setRequestDate (Ljava/lang/Long;)V
public final fun setRequestHeaders (Ljava/lang/String;)V
public final fun setRequestHeadersSize (Ljava/lang/Long;)V
public final fun setRequestPayloadSize (Ljava/lang/Long;)V
public final fun setResponseBody (Ljava/lang/String;)V
public final fun setResponseBodyEncoded (Z)V
public final fun setResponseCipherSuite (Ljava/lang/String;)V
public final fun setResponseCode (Ljava/lang/Integer;)V
public final fun setResponseContentType (Ljava/lang/String;)V
public final fun setResponseDate (Ljava/lang/Long;)V
public final fun setResponseHeaders (Ljava/lang/String;)V
public final fun setResponseHeadersSize (Ljava/lang/Long;)V
public final fun setResponseImageData ([B)V
public final fun setResponseMessage (Ljava/lang/String;)V
public final fun setResponsePayloadSize (Ljava/lang/Long;)V
public final fun setResponseTlsVersion (Ljava/lang/String;)V
public final fun setScheme (Ljava/lang/String;)V
public final fun setTookMs (Ljava/lang/Long;)V
public final fun setUrl (Ljava/lang/String;)V
public fun toString ()Ljava/lang/String;
}

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.chuckerteam.chucker.api

import android.content.Context
import com.chuckerteam.chucker.api.entity.ManualHttpTransaction
import android.net.Uri
import com.chuckerteam.chucker.internal.data.entity.HttpTransaction
import com.chuckerteam.chucker.internal.data.repository.RepositoryProvider
Expand Down Expand Up @@ -67,6 +68,15 @@ public class ChuckerCollector @JvmOverloads constructor(
}
}

/**
* Call this method whenever you want to save a transaction that is not collected by Chucker interceptor
*
* @param transaction the manual transaction you want to save it manually
*/
public fun saveTransaction(transaction: ManualHttpTransaction) {
onRequestSent(transaction.convertToHttpTransaction())
}

/**
* Export the Chucker transactions to a file. Please note that this function is blocking
* and performs Disk I/O. Make sure you run it on a separate thread or coroutine.
Expand Down
Loading