Skip to content

Commit 5760575

Browse files
feat: forester: add PHOTON_API_KEY .env var support (#1031)
* Add Photon API key support * Change 'photon_api_key' to Optional * Refactor API key appending for cleanliness
1 parent 203296b commit 5760575

File tree

8 files changed

+90
-3
lines changed

8 files changed

+90
-3
lines changed

forester/src/external_services_config.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ pub struct ExternalServicesConfig {
44
pub ws_rpc_url: String,
55
pub indexer_url: String,
66
pub prover_url: String,
7+
pub photon_api_key: Option<String>,
78
pub derivation: String,
89
}

forester/src/indexer/photon_indexer.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use account_compression::initialize_address_merkle_tree::Pubkey;
33
use light_test_utils::indexer::{Indexer, IndexerError, MerkleProof, NewAddressProofWithContext};
44
use light_test_utils::rpc::rpc_connection::RpcConnection;
55
use log::{debug, info};
6-
use photon_api::apis::configuration::Configuration;
6+
use photon_api::apis::configuration::{ApiKey, Configuration};
77
use photon_api::models::GetCompressedAccountsByOwnerPostRequestParams;
88
use solana_sdk::bs58;
99
use std::fmt::Debug;
@@ -14,9 +14,13 @@ pub struct PhotonIndexer<R: RpcConnection> {
1414
}
1515

1616
impl<R: RpcConnection> PhotonIndexer<R> {
17-
pub fn new(path: String, rpc: R) -> Self {
17+
pub fn new(path: String, api_key: Option<String>, rpc: R) -> Self {
1818
let configuration = Configuration {
1919
base_path: path,
20+
api_key: api_key.map(|key| ApiKey {
21+
prefix: Some("api-key".to_string()),
22+
key,
23+
}),
2024
..Default::default()
2125
};
2226

forester/src/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ async fn run_subscribe_state<R: RpcConnection>(
236236
let indexer_rpc = R::new(config.external_services.rpc_url.to_string(), None);
237237
let indexer = Arc::new(tokio::sync::Mutex::new(PhotonIndexer::new(
238238
config.external_services.indexer_url.to_string(),
239+
config.external_services.photon_api_key.clone(),
239240
indexer_rpc,
240241
)));
241242

@@ -251,6 +252,7 @@ async fn run_subscribe_addresses<R: RpcConnection>(
251252
let indexer_rpc = R::new(config.external_services.rpc_url.to_string(), None);
252253
let indexer = Arc::new(tokio::sync::Mutex::new(PhotonIndexer::new(
253254
config.external_services.indexer_url.to_string(),
255+
config.external_services.photon_api_key.clone(),
254256
indexer_rpc,
255257
)));
256258

@@ -266,6 +268,7 @@ async fn run_nullify_addresses<R: RpcConnection>(
266268
let indexer_rpc = R::new(config.external_services.rpc_url.to_string(), None);
267269
let indexer = Arc::new(tokio::sync::Mutex::new(PhotonIndexer::new(
268270
config.external_services.indexer_url.to_string(),
271+
config.external_services.photon_api_key.clone(),
269272
indexer_rpc,
270273
)));
271274

@@ -281,6 +284,7 @@ async fn run_nullify_state<R: RpcConnection>(
281284
let indexer_rpc = R::new(config.external_services.rpc_url.to_string(), None);
282285
let indexer = Arc::new(tokio::sync::Mutex::new(PhotonIndexer::new(
283286
config.external_services.indexer_url.to_string(),
287+
config.external_services.photon_api_key.clone(),
284288
indexer_rpc,
285289
)));
286290
nullify_state(config.clone(), rpc_pool, indexer, tree_data, rollover_state).await;

forester/src/settings.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ pub enum SettingsKey {
2020
ConcurrencyLimit,
2121
CULimit,
2222
RpcPoolSize,
23+
PhotonApiKey,
2324
}
2425

2526
impl Display for SettingsKey {
@@ -33,6 +34,7 @@ impl Display for SettingsKey {
3334
SettingsKey::WsRpcUrl => "WS_RPC_URL",
3435
SettingsKey::IndexerUrl => "INDEXER_URL",
3536
SettingsKey::ProverUrl => "PROVER_URL",
37+
SettingsKey::PhotonApiKey => "PHOTON_API_KEY",
3638
SettingsKey::ConcurrencyLimit => "CONCURRENCY_LIMIT",
3739
SettingsKey::BatchSize => "PHOTON_BATCH_SIZE",
3840
SettingsKey::MaxRetries => "MAX_RETRIES",
@@ -90,6 +92,9 @@ pub fn init_config() -> ForesterConfig {
9092
let prover_url = settings
9193
.get_string(&SettingsKey::ProverUrl.to_string())
9294
.expect("PROVER_URL not found in config file or environment variables");
95+
let photon_api_key = settings
96+
.get_string(&SettingsKey::PhotonApiKey.to_string())
97+
.ok();
9398
let concurrency_limit = settings
9499
.get_int(&SettingsKey::ConcurrencyLimit.to_string())
95100
.expect("CONCURRENCY_LIMIT not found in config file or environment variables");
@@ -107,6 +112,7 @@ pub fn init_config() -> ForesterConfig {
107112
ws_rpc_url,
108113
indexer_url,
109114
prover_url,
115+
photon_api_key,
110116
derivation: payer.pubkey().to_string(),
111117
},
112118
registry_pubkey: Pubkey::from_str(&registry_pubkey).unwrap(),

forester/tests/interop_address_test.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ async fn test_photon_interop_address() {
5959
let indexer_rpc = SolanaRpcConnection::new(forester_config.external_services.rpc_url, None);
6060
let photon_indexer = PhotonIndexer::new(
6161
forester_config.external_services.indexer_url.to_string(),
62+
forester_config.external_services.photon_api_key.clone(),
6263
indexer_rpc,
6364
);
6465

forester/tests/interop_nullify_test.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,11 @@ async fn test_photon_interop_nullify_account() {
6060
.await;
6161

6262
let rpc = SolanaRpcConnection::new(SolanaRpcUrl::Localnet, None);
63-
let photon_indexer = PhotonIndexer::new(forester_config.external_services.indexer_url, rpc);
63+
let photon_indexer = PhotonIndexer::new(
64+
forester_config.external_services.indexer_url,
65+
forester_config.external_services.photon_api_key,
66+
rpc,
67+
);
6468
let user_index = 0;
6569
let balance = env
6670
.rpc

forester/tests/test_utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ pub fn forester_config() -> ForesterConfig {
8181
ws_rpc_url: "ws://localhost:8900".to_string(),
8282
indexer_url: "http://localhost:8784".to_string(),
8383
prover_url: "http://localhost:3001".to_string(),
84+
photon_api_key: None,
8485
derivation: "En9a97stB3Ek2n6Ey3NJwCUJnmTzLMMEA5C69upGDuQP".to_string(),
8586
},
8687
registry_pubkey: registry_keypair.pubkey(),

photon-api/src/apis/default_api.rs

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010

1111
use super::{configuration, Error};
12+
use crate::apis::configuration::Configuration;
1213
use crate::{apis::ResponseContent, models};
1314
use log::info;
1415
use reqwest;
@@ -220,6 +221,8 @@ pub async fn get_compressed_account_post(
220221
let local_var_client = &local_var_configuration.client;
221222

222223
let local_var_uri_str = format!("{}/getCompressedAccount", local_var_configuration.base_path);
224+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
225+
223226
let mut local_var_req_builder =
224227
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
225228

@@ -264,6 +267,8 @@ pub async fn get_compressed_account_proof_post(
264267
"{}/getCompressedAccountProof",
265268
local_var_configuration.base_path
266269
);
270+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
271+
267272
let mut local_var_req_builder =
268273
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
269274

@@ -308,6 +313,8 @@ pub async fn get_compressed_accounts_by_owner_post(
308313
"{}/getCompressedAccountsByOwner",
309314
local_var_configuration.base_path
310315
);
316+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
317+
311318
let mut local_var_req_builder =
312319
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
313320

@@ -351,6 +358,8 @@ pub async fn get_compressed_balance_by_owner_post(
351358
"{}/getCompressedBalanceByOwner",
352359
local_var_configuration.base_path
353360
);
361+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
362+
354363
let mut local_var_req_builder =
355364
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
356365

@@ -390,6 +399,8 @@ pub async fn get_compressed_balance_post(
390399
let local_var_client = &local_var_configuration.client;
391400

392401
let local_var_uri_str = format!("{}/getCompressedBalance", local_var_configuration.base_path);
402+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
403+
393404
let mut local_var_req_builder =
394405
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
395406

@@ -434,6 +445,8 @@ pub async fn get_compressed_token_account_balance_post(
434445
"{}/getCompressedTokenAccountBalance",
435446
local_var_configuration.base_path
436447
);
448+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
449+
437450
let mut local_var_req_builder =
438451
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
439452

@@ -479,6 +492,8 @@ pub async fn get_compressed_token_accounts_by_delegate_post(
479492
"{}/getCompressedTokenAccountsByDelegate",
480493
local_var_configuration.base_path
481494
);
495+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
496+
482497
let mut local_var_req_builder =
483498
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
484499

@@ -524,6 +539,8 @@ pub async fn get_compressed_token_accounts_by_owner_post(
524539
"{}/getCompressedTokenAccountsByOwner",
525540
local_var_configuration.base_path
526541
);
542+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
543+
527544
let mut local_var_req_builder =
528545
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
529546

@@ -569,6 +586,8 @@ pub async fn get_compressed_token_balances_by_owner_post(
569586
"{}/getCompressedTokenBalancesByOwner",
570587
local_var_configuration.base_path
571588
);
589+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
590+
572591
let mut local_var_req_builder =
573592
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
574593

@@ -614,6 +633,8 @@ pub async fn get_compression_signatures_for_account_post(
614633
"{}/getCompressionSignaturesForAccount",
615634
local_var_configuration.base_path
616635
);
636+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
637+
617638
let mut local_var_req_builder =
618639
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
619640

@@ -659,6 +680,8 @@ pub async fn get_compression_signatures_for_address_post(
659680
"{}/getCompressionSignaturesForAddress",
660681
local_var_configuration.base_path
661682
);
683+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
684+
662685
let mut local_var_req_builder =
663686
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
664687

@@ -704,6 +727,8 @@ pub async fn get_compression_signatures_for_owner_post(
704727
"{}/getCompressionSignaturesForOwner",
705728
local_var_configuration.base_path
706729
);
730+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
731+
707732
let mut local_var_req_builder =
708733
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
709734

@@ -749,6 +774,8 @@ pub async fn get_compression_signatures_for_token_owner_post(
749774
"{}/getCompressionSignaturesForTokenOwner",
750775
local_var_configuration.base_path
751776
);
777+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
778+
752779
let mut local_var_req_builder =
753780
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
754781

@@ -788,6 +815,8 @@ pub async fn get_indexer_health_post(
788815
let local_var_client = &local_var_configuration.client;
789816

790817
let local_var_uri_str = format!("{}/getIndexerHealth", local_var_configuration.base_path);
818+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
819+
791820
let mut local_var_req_builder =
792821
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
793822

@@ -826,6 +855,8 @@ pub async fn get_indexer_slot_post(
826855
let local_var_client = &local_var_configuration.client;
827856

828857
let local_var_uri_str = format!("{}/getIndexerSlot", local_var_configuration.base_path);
858+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
859+
829860
let mut local_var_req_builder =
830861
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
831862

@@ -870,6 +901,8 @@ pub async fn get_latest_compression_signatures_post(
870901
"{}/getLatestCompressionSignatures",
871902
local_var_configuration.base_path
872903
);
904+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
905+
873906
let mut local_var_req_builder =
874907
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
875908

@@ -915,6 +948,8 @@ pub async fn get_latest_non_voting_signatures_post(
915948
"{}/getLatestNonVotingSignatures",
916949
local_var_configuration.base_path
917950
);
951+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
952+
918953
let mut local_var_req_builder =
919954
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
920955

@@ -960,13 +995,16 @@ pub async fn get_multiple_compressed_account_proofs_post(
960995
"{}/getMultipleCompressedAccountProofs",
961996
local_var_configuration.base_path
962997
);
998+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
999+
9631000
let mut local_var_req_builder =
9641001
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
9651002

9661003
if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
9671004
local_var_req_builder =
9681005
local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
9691006
}
1007+
9701008
local_var_req_builder =
9711009
local_var_req_builder.json(&get_multiple_compressed_account_proofs_post_request);
9721010

@@ -1005,6 +1043,8 @@ pub async fn get_multiple_compressed_accounts_post(
10051043
"{}/getMultipleCompressedAccounts",
10061044
local_var_configuration.base_path
10071045
);
1046+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
1047+
10081048
let mut local_var_req_builder =
10091049
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
10101050

@@ -1050,6 +1090,13 @@ pub async fn get_multiple_new_address_proofs_post(
10501090
"{}/getMultipleNewAddressProofs",
10511091
local_var_configuration.base_path
10521092
);
1093+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
1094+
1095+
info!(
1096+
"get_multiple_new_address_proofs_post uri: {}",
1097+
local_var_uri_str
1098+
);
1099+
10531100
let mut local_var_req_builder =
10541101
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
10551102

@@ -1061,6 +1108,12 @@ pub async fn get_multiple_new_address_proofs_post(
10611108
local_var_req_builder.json(&get_multiple_new_address_proofs_post_request);
10621109

10631110
let local_var_req = local_var_req_builder.build()?;
1111+
1112+
info!(
1113+
"get_multiple_new_address_proofs_post request: {:?}",
1114+
local_var_req
1115+
);
1116+
10641117
let local_var_resp = local_var_client.execute(local_var_req).await?;
10651118

10661119
let local_var_status = local_var_resp.status();
@@ -1095,6 +1148,8 @@ pub async fn get_transaction_with_compression_info_post(
10951148
"{}/getTransactionWithCompressionInfo",
10961149
local_var_configuration.base_path
10971150
);
1151+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
1152+
10981153
let mut local_var_req_builder =
10991154
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
11001155

@@ -1134,6 +1189,8 @@ pub async fn get_validity_proof_post(
11341189
let local_var_client = &local_var_configuration.client;
11351190

11361191
let local_var_uri_str = format!("{}/getValidityProof", local_var_configuration.base_path);
1192+
let local_var_uri_str = append_api_key(local_var_configuration, &local_var_uri_str);
1193+
11371194
let mut local_var_req_builder =
11381195
local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
11391196

@@ -1162,3 +1219,12 @@ pub async fn get_validity_proof_post(
11621219
Err(Error::ResponseError(local_var_error))
11631220
}
11641221
}
1222+
1223+
fn append_api_key(configuration: &Configuration, uri_str: &str) -> String {
1224+
let mut uri_str = uri_str.to_string();
1225+
if let Some(ref api_key) = configuration.api_key {
1226+
let prefix = api_key.prefix.clone().unwrap_or("api-key".to_string());
1227+
uri_str = format!("{}?{}={}", uri_str, prefix, api_key.key);
1228+
}
1229+
uri_str
1230+
}

0 commit comments

Comments
 (0)