openzeppelin_relayer/domain/transaction/
util.rs1use actix_web::web::ThinData;
7
8use crate::{
9 domain::get_relayer_by_id,
10 jobs::JobProducerTrait,
11 models::{
12 ApiError, DefaultAppState, NetworkRepoModel, NotificationRepoModel, RelayerRepoModel,
13 SignerRepoModel, ThinDataAppState, TransactionError, TransactionRepoModel,
14 },
15 repositories::{
16 ApiKeyRepositoryTrait, NetworkRepository, PluginRepositoryTrait, RelayerRepository,
17 Repository, TransactionCounterTrait, TransactionRepository,
18 },
19};
20
21use super::{NetworkTransaction, RelayerTransactionFactory};
22
23pub async fn get_transaction_by_id<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>(
35 transaction_id: String,
36 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>,
37) -> Result<TransactionRepoModel, ApiError>
38where
39 J: JobProducerTrait + Send + Sync + 'static,
40 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
41 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
42 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
43 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
44 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
45 TCR: TransactionCounterTrait + Send + Sync + 'static,
46 PR: PluginRepositoryTrait + Send + Sync + 'static,
47 AKR: ApiKeyRepositoryTrait + Send + Sync + 'static,
48{
49 state
50 .transaction_repository
51 .get_by_id(transaction_id)
52 .await
53 .map_err(|e| e.into())
54}
55
56pub async fn get_relayer_transaction(
67 relayer_id: String,
68 state: &ThinData<DefaultAppState>,
69) -> Result<NetworkTransaction, ApiError> {
70 let relayer_model = get_relayer_by_id(relayer_id, state).await?;
71 let signer_model = state
72 .signer_repository
73 .get_by_id(relayer_model.signer_id.clone())
74 .await?;
75
76 RelayerTransactionFactory::create_transaction(
77 relayer_model,
78 signer_model,
79 state.relayer_repository(),
80 state.network_repository(),
81 state.transaction_repository(),
82 state.transaction_counter_store(),
83 state.job_producer(),
84 )
85 .await
86 .map_err(|e| e.into())
87}
88
89pub async fn get_relayer_transaction_by_model(
100 relayer_model: RelayerRepoModel,
101 state: &ThinData<DefaultAppState>,
102) -> Result<NetworkTransaction, ApiError> {
103 let signer_model = state
104 .signer_repository
105 .get_by_id(relayer_model.signer_id.clone())
106 .await?;
107
108 RelayerTransactionFactory::create_transaction(
109 relayer_model,
110 signer_model,
111 state.relayer_repository(),
112 state.network_repository(),
113 state.transaction_repository(),
114 state.transaction_counter_store(),
115 state.job_producer(),
116 )
117 .await
118 .map_err(|e| e.into())
119}
120
121pub fn solana_not_supported_transaction<T>() -> Result<T, TransactionError> {
127 Err(TransactionError::NotSupported(
128 "Endpoint is not supported for Solana relayers".to_string(),
129 ))
130}