2323import com .hedera .hashgraph .sdk .Query ;
2424import com .hedera .hashgraph .sdk .SubscriptionHandle ;
2525import com .hedera .hashgraph .sdk .TokenAssociateTransaction ;
26- import com .hedera .hashgraph .sdk .TokenDissociateTransaction ;
2726import com .hedera .hashgraph .sdk .TokenBurnTransaction ;
2827import com .hedera .hashgraph .sdk .TokenCreateTransaction ;
28+ import com .hedera .hashgraph .sdk .TokenDissociateTransaction ;
2929import com .hedera .hashgraph .sdk .TokenMintTransaction ;
3030import com .hedera .hashgraph .sdk .TopicCreateTransaction ;
31- import com .hedera .hashgraph .sdk .TopicUpdateTransaction ;
3231import com .hedera .hashgraph .sdk .TopicDeleteTransaction ;
3332import com .hedera .hashgraph .sdk .TopicMessageQuery ;
3433import com .hedera .hashgraph .sdk .TopicMessageSubmitTransaction ;
34+ import com .hedera .hashgraph .sdk .TopicUpdateTransaction ;
3535import com .hedera .hashgraph .sdk .Transaction ;
3636import com .hedera .hashgraph .sdk .TransactionReceipt ;
3737import com .hedera .hashgraph .sdk .TransactionRecord ;
4141import com .openelements .hiero .base .HieroException ;
4242import com .openelements .hiero .base .data .Account ;
4343import com .openelements .hiero .base .data .ContractParam ;
44+ import com .openelements .hiero .base .interceptors .ReceiveRecordInterceptor ;
45+ import com .openelements .hiero .base .interceptors .ReceiveRecordInterceptor .ReceiveRecordHandler ;
46+ import com .openelements .hiero .base .protocol .ProtocolLayerClient ;
47+ import com .openelements .hiero .base .protocol .TransactionListener ;
4448import com .openelements .hiero .base .protocol .data .AccountBalanceRequest ;
4549import com .openelements .hiero .base .protocol .data .AccountBalanceResponse ;
4650import com .openelements .hiero .base .protocol .data .AccountCreateRequest ;
6569import com .openelements .hiero .base .protocol .data .FileInfoResponse ;
6670import com .openelements .hiero .base .protocol .data .FileUpdateRequest ;
6771import com .openelements .hiero .base .protocol .data .FileUpdateResult ;
68- import com .openelements .hiero .base .protocol .ProtocolLayerClient ;
6972import com .openelements .hiero .base .protocol .data .TokenAssociateRequest ;
7073import com .openelements .hiero .base .protocol .data .TokenAssociateResult ;
71- import com .openelements .hiero .base .protocol .data .TokenDissociateRequest ;
72- import com .openelements .hiero .base .protocol .data .TokenDissociateResult ;
7374import com .openelements .hiero .base .protocol .data .TokenBurnRequest ;
7475import com .openelements .hiero .base .protocol .data .TokenBurnResult ;
7576import com .openelements .hiero .base .protocol .data .TokenCreateRequest ;
7677import com .openelements .hiero .base .protocol .data .TokenCreateResult ;
78+ import com .openelements .hiero .base .protocol .data .TokenDissociateRequest ;
79+ import com .openelements .hiero .base .protocol .data .TokenDissociateResult ;
7780import com .openelements .hiero .base .protocol .data .TokenMintRequest ;
7881import com .openelements .hiero .base .protocol .data .TokenMintResult ;
7982import com .openelements .hiero .base .protocol .data .TokenTransferRequest ;
8083import com .openelements .hiero .base .protocol .data .TokenTransferResult ;
8184import com .openelements .hiero .base .protocol .data .TopicCreateRequest ;
8285import com .openelements .hiero .base .protocol .data .TopicCreateResult ;
83- import com .openelements .hiero .base .protocol .data .TopicUpdateRequest ;
84- import com .openelements .hiero .base .protocol .data .TopicUpdateResult ;
8586import com .openelements .hiero .base .protocol .data .TopicDeleteRequest ;
8687import com .openelements .hiero .base .protocol .data .TopicDeleteResult ;
8788import com .openelements .hiero .base .protocol .data .TopicMessageRequest ;
8889import com .openelements .hiero .base .protocol .data .TopicMessageResult ;
8990import com .openelements .hiero .base .protocol .data .TopicSubmitMessageRequest ;
9091import com .openelements .hiero .base .protocol .data .TopicSubmitMessageResult ;
91- import com .openelements .hiero .base .protocol .TransactionListener ;
92+ import com .openelements .hiero .base .protocol .data .TopicUpdateRequest ;
93+ import com .openelements .hiero .base .protocol .data .TopicUpdateResult ;
9294import com .openelements .hiero .base .protocol .data .TransactionType ;
9395import java .util .List ;
9496import java .util .Objects ;
9597import java .util .concurrent .CopyOnWriteArrayList ;
98+ import java .util .concurrent .atomic .AtomicReference ;
9699import java .util .function .Consumer ;
97100import org .jspecify .annotations .NonNull ;
98101import org .slf4j .Logger ;
@@ -108,11 +111,20 @@ public class ProtocolLayerClientImpl implements ProtocolLayerClient {
108111
109112 private final HieroContext hieroContext ;
110113
114+ private final AtomicReference <ReceiveRecordInterceptor > recordInterceptor = new AtomicReference <>(
115+ ReceiveRecordInterceptor .DEFAULT_INTERCEPTOR );
116+
111117 public ProtocolLayerClientImpl (@ NonNull final HieroContext hieroContext ) {
112118 this .hieroContext = Objects .requireNonNull (hieroContext , "hieroContext must not be null" );
113119 listeners = new CopyOnWriteArrayList <>();
114120 }
115121
122+ public void setRecordInterceptor (
123+ @ NonNull final ReceiveRecordInterceptor recordInterceptor ) {
124+ Objects .requireNonNull (recordInterceptor , "recordInterceptor must not be null" );
125+ this .recordInterceptor .set (recordInterceptor );
126+ }
127+
116128 @ Override
117129 public AccountBalanceResponse executeAccountBalanceQuery (@ NonNull final AccountBalanceRequest request )
118130 throws HieroException {
@@ -618,7 +630,10 @@ private <T extends Transaction<T>> TransactionRecord executeTransactionAndWaitOn
618630 try {
619631 log .debug ("Waiting for record of transaction '{}' of type {}" , receipt .transactionId ,
620632 transaction .getClass ().getSimpleName ());
621- return receipt .transactionId .getRecord (hieroContext .getClient ());
633+
634+ final ReceiveRecordHandler data = new ReceiveRecordHandler (transaction , receipt ,
635+ r -> r .transactionId .getRecord (hieroContext .getClient ()));
636+ return recordInterceptor .get ().getRecordFor (data );
622637 } catch (final Exception e ) {
623638 throw new HieroException ("Failed to receive record of transaction '" + receipt .transactionId + "' of type "
624639 + transaction .getClass (), e );
0 commit comments