@@ -252,28 +252,17 @@ function route_api_request(rd, api_data, rdo) {
252252}
253253
254254// Routes cryptocurrency requests to specific API endpoints based on provider capabilities.
255+ // Invariant: CRYPTO_API_DISPATCH_BY_PROVIDER (keyed on api_data.name) and
256+ // CRYPTO_API_DISPATCH_BY_PAYMENT (keyed on rd.payment) have disjoint keyspaces — the
257+ // payment-routed coins (nimiq/kaspa/monero) use bespoke providers absent from the
258+ // provider table, so no request resolves in both. The provider-first || precedence is
259+ // therefore unambiguous. If a payment-routed coin ever also gains a provider-table
260+ // provider, that precedence becomes load-bearing — add an explicit handler key then.
255261function route_crypto_api ( rd , api_data , rdo ) {
256- // First seven provider checks (mempool.space → blockchair).
257- const provider_order_1 = [ "mempool.space" , "blockchain.info" , "blockcypher" ,
258- "etherscan" , "alchemy" , "ethplorer" , "blockchair"
259- ] ;
260- if ( provider_order_1 . indexOf ( api_data . name ) > - 1 ) {
261- CRYPTO_API_DISPATCH_BY_PROVIDER [ api_data . name ] ( rd , api_data , rdo ) ;
262- return
263- }
264- // nimiq sits between blockchair and dash.org — preserved.
265- if ( rd . payment === "nimiq" ) {
266- CRYPTO_API_DISPATCH_BY_PAYMENT . nimiq ( rd , api_data , rdo ) ;
267- return
268- }
269- if ( api_data . name === "dash.org" ) {
270- CRYPTO_API_DISPATCH_BY_PROVIDER [ "dash.org" ] ( rd , api_data , rdo ) ;
271- return
272- }
273- // Remaining payment checks (kaspa, monero).
274- const by_payment = CRYPTO_API_DISPATCH_BY_PAYMENT [ rd . payment ] ;
275- if ( by_payment ) {
276- by_payment ( rd , api_data , rdo ) ;
262+ const handler = CRYPTO_API_DISPATCH_BY_PROVIDER [ api_data . name ]
263+ || CRYPTO_API_DISPATCH_BY_PAYMENT [ rd . payment ] ;
264+ if ( handler ) {
265+ handler ( rd , api_data , rdo ) ;
277266 return
278267 }
279268 finalize_request_state ( rdo ) ;
0 commit comments