openzeppelin_relayer/domain/relayer/
util.rs1use crate::{
15 domain::relayer::{RelayerFactory, RelayerFactoryTrait},
16 jobs::JobProducerTrait,
17 models::{
18 ApiError, NetworkRepoModel, NotificationRepoModel, RelayerError, RelayerRepoModel,
19 SignerRepoModel, ThinDataAppState, TransactionRepoModel,
20 },
21 repositories::{
22 ApiKeyRepositoryTrait, NetworkRepository, PluginRepositoryTrait, RelayerRepository,
23 Repository, TransactionCounterTrait, TransactionRepository,
24 },
25};
26
27use super::NetworkRelayer;
28use tracing::instrument;
29
30#[instrument(
42 level = "debug",
43 skip(state),
44 fields(
45 request_id = ?crate::observability::request_id::get_request_id(),
46 relayer_id = %relayer_id,
47 )
48)]
49pub async fn get_relayer_by_id<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>(
50 relayer_id: String,
51 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>,
52) -> Result<RelayerRepoModel, ApiError>
53where
54 J: JobProducerTrait + Send + Sync + 'static,
55 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
56 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
57 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
58 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
59 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
60 TCR: TransactionCounterTrait + Send + Sync + 'static,
61 PR: PluginRepositoryTrait + Send + Sync + 'static,
62 AKR: ApiKeyRepositoryTrait + Send + Sync + 'static,
63{
64 state
65 .relayer_repository
66 .get_by_id(relayer_id)
67 .await
68 .map_err(|e| e.into())
69}
70
71#[instrument(
83 level = "debug",
84 skip(state),
85 fields(
86 request_id = ?crate::observability::request_id::get_request_id(),
87 relayer_id = %relayer_id,
88 )
89)]
90pub async fn get_network_relayer<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>(
91 relayer_id: String,
92 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>,
93) -> Result<NetworkRelayer<J, TR, RR, NR, TCR>, ApiError>
94where
95 J: JobProducerTrait + Send + Sync + 'static,
96 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
97 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
98 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
99 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
100 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
101 TCR: TransactionCounterTrait + Send + Sync + 'static,
102 PR: PluginRepositoryTrait + Send + Sync + 'static,
103 AKR: ApiKeyRepositoryTrait + Send + Sync + 'static,
104{
105 let relayer_model = get_relayer_by_id(relayer_id.clone(), state).await?;
106 let signer_model = state
107 .signer_repository
108 .get_by_id(relayer_model.signer_id.clone())
109 .await?;
110
111 RelayerFactory::create_relayer(relayer_model, signer_model, state)
112 .await
113 .map_err(|e| e.into())
114}
115
116#[instrument(
128 level = "debug",
129 skip(state, relayer_model),
130 fields(
131 request_id = ?crate::observability::request_id::get_request_id(),
132 relayer_id = %relayer_model.id,
133 )
134)]
135pub async fn get_network_relayer_by_model<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>(
136 relayer_model: RelayerRepoModel,
137 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>,
138) -> Result<NetworkRelayer<J, TR, RR, NR, TCR>, ApiError>
139where
140 J: JobProducerTrait + Send + Sync + 'static,
141 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
142 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
143 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
144 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
145 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
146 TCR: TransactionCounterTrait + Send + Sync + 'static,
147 PR: PluginRepositoryTrait + Send + Sync + 'static,
148 AKR: ApiKeyRepositoryTrait + Send + Sync + 'static,
149{
150 let signer_model = state
151 .signer_repository
152 .get_by_id(relayer_model.signer_id.clone())
153 .await?;
154
155 RelayerFactory::create_relayer(relayer_model, signer_model, state)
156 .await
157 .map_err(|e| e.into())
158}
159
160pub fn solana_not_supported_relayer<T>() -> Result<T, RelayerError> {
166 Err(RelayerError::NotSupported(
167 "Endpoint is not supported for Solana relayers".to_string(),
168 ))
169}