11import { mul } from 'biggystring'
2- import { asArray , asMaybe , asObject , asOptional , asString } from 'cleaners'
2+ import { asArray , asMaybe , asObject , asString } from 'cleaners'
33import express from 'express'
44import nano from 'nano'
55import fetch from 'node-fetch'
66import promisify from 'promisify-node'
77
88import { config } from './config'
99import { REDIS_COINRANK_KEY_PREFIX } from './constants'
10- import { asReturnGetRate , getExchangeRates } from './rates'
10+ import { getExchangeRates , type ReturnGetRate } from './rates'
1111import {
1212 asCoinrankAssetReq ,
1313 asCoinrankReq ,
1414 asExchangeRateResponse ,
15- CoinrankAssetReq ,
16- CoinrankRedis ,
17- CoinrankReq
15+ type CoinrankAssetReq ,
16+ type CoinrankRedis ,
17+ type CoinrankReq
1818} from './types'
19- import { asExtendedReq } from './utils/asExtendedReq'
2019import {
21- DbDoc ,
20+ type DbDoc ,
2221 getAsync ,
2322 hgetallAsync ,
2423 hmgetAsync ,
@@ -87,14 +86,16 @@ const asExchangeRatesReq = asObject({
8786 data : asArray ( asExchangeRateReq )
8887} )
8988
90- const asRatesRequest = asExtendedReq ( {
91- requestedRates : asOptional ( asExchangeRatesReq ) ,
92- requestedRatesResult : asOptional ( asReturnGetRate )
93- } )
89+ interface RatesRequest {
90+ requestedRates ?: {
91+ data : ExchangeRateReq [ ]
92+ }
93+ requestedRatesResult ?: ReturnGetRate
94+ }
9495
9596// Hack to add type definitions for middleware
9697// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
97- type ExpressRequest = ReturnType < typeof asRatesRequest > | void
98+ type ExpressRequest = RatesRequest | void
9899
99100const { couchUri, fiatCurrencyCodes : FIAT_CODES } = config
100101const EXCHANGE_RATES_BATCH_LIMIT = 100
@@ -128,7 +129,10 @@ const v1ExchangeRateIsoAdder: express.RequestHandler = (
128129 next
129130) : void => {
130131 const exReq = req as ExpressRequest
131- if ( exReq ?. requestedRates == null ) return next ( 500 )
132+ if ( exReq ?. requestedRates == null ) {
133+ next ( 500 )
134+ return
135+ }
132136
133137 exReq . requestedRates . data = exReq . requestedRates . data . map ( req => ( {
134138 currency_pair : maybeAddIsoToPair ( req . currency_pair ) ,
@@ -144,7 +148,10 @@ const v1ExchangeRateIsoSubtractor: express.RequestHandler = (
144148 next
145149) : void => {
146150 const exReq = req as ExpressRequest
147- if ( exReq ?. requestedRatesResult == null ) return next ( 500 )
151+ if ( exReq ?. requestedRatesResult == null ) {
152+ next ( 500 )
153+ return
154+ }
148155
149156 exReq . requestedRatesResult . data = exReq . requestedRatesResult . data . map (
150157 rate => ( {
@@ -158,7 +165,10 @@ const v1ExchangeRateIsoSubtractor: express.RequestHandler = (
158165
159166const v1IsoChecker : express . RequestHandler = ( req , res , next ) : void => {
160167 const exReq = req as ExpressRequest
161- if ( exReq ?. requestedRates == null ) return next ( 500 )
168+ if ( exReq ?. requestedRates == null ) {
169+ next ( 500 )
170+ return
171+ }
162172
163173 if ( exReq . requestedRates . data . every ( pair => isIsoPair ( pair . currency_pair ) ) ) {
164174 res . status ( 400 ) . send ( `Please use v2 of this API to query with ISO codes` )
@@ -174,7 +184,10 @@ const v1IsoChecker: express.RequestHandler = (req, res, next): void => {
174184
175185const exchangeRateCleaner : express . RequestHandler = ( req , res , next ) : void => {
176186 const exReq = req as ExpressRequest
177- if ( exReq == null ) return next ( 500 )
187+ if ( exReq == null ) {
188+ next ( 500 )
189+ return
190+ }
178191
179192 const { currency_pair, date } = req . query
180193 try {
@@ -196,10 +209,12 @@ const exchangeRateCleaner: express.RequestHandler = (req, res, next): void => {
196209
197210const exchangeRatesCleaner : express . RequestHandler = ( req , res , next ) : void => {
198211 const exReq = req as ExpressRequest
199- if ( exReq == null ) return next ( 500 )
200-
212+ if ( exReq == null ) {
213+ next ( 500 )
214+ return
215+ }
201216 try {
202- exReq . requestedRates = asExchangeRatesReq ( exReq . body )
217+ exReq . requestedRates = asExchangeRatesReq ( req . body )
203218 } catch ( e ) {
204219 res
205220 . status ( 400 )
@@ -221,13 +236,16 @@ const queryRedis: express.RequestHandler = async (
221236 next
222237) : Promise < void > => {
223238 const exReq = req as ExpressRequest
224- if ( exReq ?. requestedRates == null ) return next ( 500 )
239+ if ( exReq ?. requestedRates == null ) {
240+ next ( 500 )
241+ return
242+ }
225243
226244 // Redis will store all crypto code rates in USD and USD to all fiat codes
227245 // This middleware splits up incoming pairs into two rates, crypto_USD and USD_fiat,
228246 // so each unique timestamp only requires a single query to redis to get all applicable rates.
229247
230- const reqMap : { [ date : string ] : string [ ] } = { }
248+ const reqMap : Record < string , string [ ] > = { }
231249 for ( const req of exReq . requestedRates . data ) {
232250 const [ cryptoCode , fiatCode ] = req . currency_pair . split ( '_' )
233251 if ( reqMap [ req . date ] == null ) reqMap [ req . date ] = [ ]
@@ -287,10 +305,14 @@ const queryExchangeRates: express.RequestHandler = async (
287305 next
288306) : Promise < void > => {
289307 const exReq = req as ExpressRequest
290- if ( exReq ?. requestedRates == null ) return next ( 500 )
308+ if ( exReq ?. requestedRates == null ) {
309+ next ( 500 )
310+ return
311+ }
291312
292313 if ( exReq . requestedRates . data . length === 0 ) {
293- return next ( )
314+ next ( )
315+ return
294316 }
295317
296318 try {
@@ -311,14 +333,20 @@ const queryExchangeRates: express.RequestHandler = async (
311333
312334const sendExchangeRate : express . RequestHandler = ( req , res , next ) : void => {
313335 const exReq = req as ExpressRequest
314- if ( exReq ?. requestedRatesResult == null ) return next ( 500 )
336+ if ( exReq ?. requestedRatesResult == null ) {
337+ next ( 500 )
338+ return
339+ }
315340
316341 res . json ( exReq . requestedRatesResult . data [ 0 ] )
317342}
318343
319344const sendExchangeRates : express . RequestHandler = ( req , res , next ) : void => {
320345 const exReq = req as ExpressRequest
321- if ( exReq ?. requestedRatesResult == null ) return next ( 500 )
346+ if ( exReq ?. requestedRatesResult == null ) {
347+ next ( 500 )
348+ return
349+ }
322350
323351 res . json ( { data : exReq . requestedRatesResult . data } )
324352}
@@ -456,7 +484,10 @@ const sendCoinrankAsset: express.RequestHandler = async (
456484 next
457485) : Promise < void > => {
458486 const exReq = req as ExpressRequest
459- if ( exReq == null ) return next ( 500 )
487+ if ( exReq == null ) {
488+ next ( 500 )
489+ return
490+ }
460491
461492 let query : CoinrankAssetReq
462493 try {
@@ -499,7 +530,10 @@ const sendCoinranks: express.RequestHandler = async (
499530 next
500531) : Promise < void > => {
501532 const exReq = req as ExpressRequest
502- if ( exReq == null ) return next ( 500 )
533+ if ( exReq == null ) {
534+ next ( 500 )
535+ return
536+ }
503537
504538 let query : CoinrankReq
505539 try {
0 commit comments