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;
28
29pub async fn get_relayer_by_id<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>(
41 relayer_id: String,
42 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>,
43) -> Result<RelayerRepoModel, ApiError>
44where
45 J: JobProducerTrait + Send + Sync + 'static,
46 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
47 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
48 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
49 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
50 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
51 TCR: TransactionCounterTrait + Send + Sync + 'static,
52 PR: PluginRepositoryTrait + Send + Sync + 'static,
53 AKR: ApiKeyRepositoryTrait + Send + Sync + 'static,
54{
55 state
56 .relayer_repository
57 .get_by_id(relayer_id)
58 .await
59 .map_err(|e| e.into())
60}
61
62pub async fn get_network_relayer<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>(
74 relayer_id: String,
75 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>,
76) -> Result<NetworkRelayer<J, TR, RR, NR, TCR>, ApiError>
77where
78 J: JobProducerTrait + Send + Sync + 'static,
79 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
80 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
81 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
82 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
83 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
84 TCR: TransactionCounterTrait + Send + Sync + 'static,
85 PR: PluginRepositoryTrait + Send + Sync + 'static,
86 AKR: ApiKeyRepositoryTrait + Send + Sync + 'static,
87{
88 let relayer_model = get_relayer_by_id(relayer_id.clone(), state).await?;
89 let signer_model = state
90 .signer_repository
91 .get_by_id(relayer_model.signer_id.clone())
92 .await?;
93
94 RelayerFactory::create_relayer(relayer_model, signer_model, state)
95 .await
96 .map_err(|e| e.into())
97}
98
99pub async fn get_network_relayer_by_model<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>(
111 relayer_model: RelayerRepoModel,
112 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR, AKR>,
113) -> Result<NetworkRelayer<J, TR, RR, NR, TCR>, ApiError>
114where
115 J: JobProducerTrait + Send + Sync + 'static,
116 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
117 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
118 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
119 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
120 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
121 TCR: TransactionCounterTrait + Send + Sync + 'static,
122 PR: PluginRepositoryTrait + Send + Sync + 'static,
123 AKR: ApiKeyRepositoryTrait + Send + Sync + 'static,
124{
125 let signer_model = state
126 .signer_repository
127 .get_by_id(relayer_model.signer_id.clone())
128 .await?;
129
130 RelayerFactory::create_relayer(relayer_model, signer_model, state)
131 .await
132 .map_err(|e| e.into())
133}
134
135pub fn solana_not_supported_relayer<T>() -> Result<T, RelayerError> {
141 Err(RelayerError::NotSupported(
142 "Endpoint is not supported for Solana relayers".to_string(),
143 ))
144}