1
- import type AlgoStack from "../../index" ;
2
- import type Cache from "../cache/index" ;
1
+ import type AlgoStack from '../../index' ;
2
+ import type { PromiseResolver } from '../../types' ;
3
+ import type { AddonsKeyMap , AddonsList } from '../addons/types' ;
4
+ import type Cache from '../cache/index' ;
3
5
import type {
4
- QueryParams ,
5
- Payload ,
6
- QueryOptions ,
7
6
FilterFn ,
7
+ Payload ,
8
8
QueryConfigs ,
9
+ QueryOptions ,
10
+ QueryParams ,
9
11
QueryQueue ,
10
12
RateLimiter ,
11
- } from " ./types" ;
12
- import type { AddonsList , AddonsKeyMap } from "../addons/types" ;
13
- import type { PromiseResolver } from "../../types" ;
14
- import type { AxiosHeaders , AxiosInstance } from "axios" ;
15
- import { Buffer } from "buffer" ;
16
- import { pRateLimit } from "p-ratelimit" ;
17
- import { utf8ToB64 } from "../../helpers/encoding.js" ;
18
- import { ApiUrl } from "./enums .js" ;
19
- import { BaseModule } from "../_baseModule .js" ;
20
- import camelcaseKeys from "camelcase-keys" ;
21
- import kebabcaseKeys from "kebabcase-keys" ;
22
- import axios from "axios" ;
23
- import merge from "lodash-es/merge .js" ;
24
- import cloneDeep from "lodash-es/cloneDeep.js" ;
25
- import Addons from " ../addons/addons.js" ;
26
- import objHash from "object-hash" ;
27
- import { CacheTable } from "../cache/index .js" ;
13
+ } from ' ./types' ;
14
+ import type { AxiosHeaders , AxiosInstance } from 'axios' ;
15
+
16
+ import { Buffer } from 'buffer' ;
17
+ import axios from 'axios' ;
18
+ import camelcaseKeys from 'camelcase-keys' ;
19
+ import kebabcaseKeys from 'kebabcase-keys' ;
20
+ import cloneDeep from 'lodash-es/cloneDeep .js' ;
21
+ import merge from 'lodash-es/merge .js' ;
22
+ import objHash from 'object-hash' ;
23
+ import { pRateLimit } from 'p-ratelimit' ;
24
+
25
+ import { BaseModule } from '../_baseModule .js' ;
26
+ import { utf8ToB64 } from '../../helpers/encoding.js' ;
27
+ import Addons from ' ../addons/addons.js' ;
28
+ import { CacheTable } from '../cache/index.js' ;
29
+ import { ApiUrl } from './enums .js' ;
28
30
29
31
/**
30
32
* Query class
@@ -52,7 +54,7 @@ export default class Query extends BaseModule {
52
54
} ,
53
55
} ,
54
56
this . configs ,
55
- configs
57
+ configs ,
56
58
) ;
57
59
this . initRateLimiters ( ) ;
58
60
}
@@ -76,15 +78,15 @@ export default class Query extends BaseModule {
76
78
...( this . configs . rateLimiter || { } ) ,
77
79
} ;
78
80
79
- this . rateLimiters . set ( " default" , pRateLimit ( defaultConfigs ) ) ;
81
+ this . rateLimiters . set ( ' default' , pRateLimit ( defaultConfigs ) ) ;
80
82
if ( ! this . configs . rateLimiters ) return ;
81
83
Object . entries ( this . configs . rateLimiters ) . forEach ( ( [ key , configs ] ) => {
82
84
this . rateLimiters . set (
83
85
key ,
84
86
pRateLimit ( {
85
87
...defaultConfigs ,
86
88
...configs ,
87
- } )
89
+ } ) ,
88
90
) ;
89
91
} ) ;
90
92
}
@@ -97,8 +99,8 @@ export default class Query extends BaseModule {
97
99
const token = this . stack . configs . apiToken ;
98
100
if ( ! token ) return params ?. headers ;
99
101
let tokenHeader : string | undefined = undefined ;
100
- if ( api === ApiUrl . INDEXER ) tokenHeader = " X-Indexer-API-Token" ;
101
- else if ( api === ApiUrl . NODE ) tokenHeader = " X-Algo-API-Token" ;
102
+ if ( api === ApiUrl . INDEXER ) tokenHeader = ' X-Indexer-API-Token' ;
103
+ else if ( api === ApiUrl . NODE ) tokenHeader = ' X-Algo-API-Token' ;
102
104
if ( ! tokenHeader ) return params ;
103
105
return {
104
106
...( params . headers || { } ) ,
@@ -167,7 +169,7 @@ export default class Query extends BaseModule {
167
169
168
170
data = await this . fetchData (
169
171
`${ this . stack . configs [ base ] } ${ url } ` ,
170
- reqParams
172
+ reqParams ,
171
173
) ;
172
174
data = camelcaseKeys ( data , { deep : true } ) ;
173
175
@@ -179,7 +181,7 @@ export default class Query extends BaseModule {
179
181
i ++ ;
180
182
let nextData : Payload = await this . fetchData (
181
183
`${ this . stack . configs [ base ] } ${ url } ` ,
182
- { ...reqParams , next : data . nextToken }
184
+ { ...reqParams , next : data . nextToken } ,
183
185
) ;
184
186
delete data . nextToken ;
185
187
nextData = camelcaseKeys ( nextData , { deep : true } ) ;
@@ -193,7 +195,7 @@ export default class Query extends BaseModule {
193
195
}
194
196
195
197
// cache result
196
- if ( this . cache && cacheTable && ! noCache && ! data . error ) {
198
+ if ( this . cache && cacheTable && ! noCache && ! data ? .error ) {
197
199
await this . cache . save ( cacheTable , data , { params : reqParams } ) ;
198
200
}
199
201
@@ -236,12 +238,12 @@ export default class Query extends BaseModule {
236
238
* ==================================================
237
239
*/
238
240
private mergeUrlAndParams ( url : string , params : Record < string , any > ) {
239
- if ( ! url ) return { url : "/" , params } ;
241
+ if ( ! url ) return { url : '/' , params } ;
240
242
const unusedParams : Record < string , any > = { } ;
241
243
if ( params ) {
242
244
Object . entries ( params ) . forEach ( ( [ key , value ] ) => {
243
- if ( url && url . indexOf ( ":" + key ) > - 1 ) {
244
- url = url . replace ( ":" + key , String ( value ) ) ;
245
+ if ( url && url . indexOf ( ':' + key ) > - 1 ) {
246
+ url = url . replace ( ':' + key , String ( value ) ) ;
245
247
} else {
246
248
unusedParams [ key ] = value ;
247
249
}
@@ -258,7 +260,7 @@ export default class Query extends BaseModule {
258
260
}
259
261
260
262
private encodeParams ( params : QueryParams ) {
261
- if ( typeof params . notePrefix === " string" ) {
263
+ if ( typeof params . notePrefix === ' string' ) {
262
264
params . notePrefix = utf8ToB64 ( params . notePrefix ) ;
263
265
}
264
266
return params ;
@@ -287,24 +289,24 @@ export default class Query extends BaseModule {
287
289
private async fetchData (
288
290
url : string ,
289
291
params : QueryParams = { } ,
290
- client : AxiosInstance = this . configs . client || axios
292
+ client : AxiosInstance = this . configs . client || axios ,
291
293
) {
292
294
try {
293
- if ( url . indexOf ( " :id" ) > - 1 ) {
295
+ if ( url . indexOf ( ' :id' ) > - 1 ) {
294
296
return {
295
297
error : {
296
298
url,
297
- message : " Url is invalid" ,
299
+ message : ' Url is invalid' ,
298
300
} ,
299
301
} ;
300
302
}
301
303
params = cloneDeep ( params ) ;
302
304
const method : string = params . method
303
305
? String ( params . method ) . toUpperCase ( )
304
- : " GET" ;
306
+ : ' GET' ;
305
307
const headers = params . headers as AxiosHeaders ;
306
308
const data = params ?. data || params ;
307
- const rateLimiterKey = params . rateLimiter || " default" ;
309
+ const rateLimiterKey = params . rateLimiter || ' default' ;
308
310
if ( params . method ) delete params . method ;
309
311
if ( params . headers ) delete params . headers ;
310
312
if ( params . url ) delete params . url ;
@@ -318,9 +320,9 @@ export default class Query extends BaseModule {
318
320
url,
319
321
method,
320
322
headers,
321
- params : method === " GET" ? data : undefined ,
322
- data : method !== " GET" ? data : undefined ,
323
- } )
323
+ params : method === ' GET' ? data : undefined ,
324
+ data : method !== ' GET' ? data : undefined ,
325
+ } ) ,
324
326
) ;
325
327
return response . data ;
326
328
} catch ( e : any ) {
@@ -337,7 +339,7 @@ export default class Query extends BaseModule {
337
339
private async indexerHealth ( ) {
338
340
if ( ! this . initiated ) await this . waitForInit ( ) ;
339
341
const response = await this . fetchData (
340
- `${ this . stack . configs . indexerUrl } /health`
342
+ `${ this . stack . configs . indexerUrl } /health` ,
341
343
) ;
342
344
return camelcaseKeys ( response , { deep : true } ) ;
343
345
}
@@ -355,7 +357,7 @@ export default class Query extends BaseModule {
355
357
}
356
358
private async indexerAccountTransactions (
357
359
accountId : string ,
358
- params : QueryParams = { }
360
+ params : QueryParams = { } ,
359
361
) {
360
362
return await this . query ( {
361
363
endpoint : `/v2/accounts/:id/transactions` ,
@@ -368,7 +370,7 @@ export default class Query extends BaseModule {
368
370
}
369
371
private async indexerAccountAssets (
370
372
accountId : string ,
371
- params : QueryParams = { }
373
+ params : QueryParams = { } ,
372
374
) {
373
375
return await this . query ( {
374
376
endpoint : `/v2/accounts/:id/assets` ,
@@ -381,7 +383,7 @@ export default class Query extends BaseModule {
381
383
}
382
384
private async indexerAccountApplications (
383
385
accountId : string ,
384
- params : QueryParams = { }
386
+ params : QueryParams = { } ,
385
387
) {
386
388
return await this . query ( {
387
389
endpoint : `/v2/accounts/:id/apps-local-state` ,
@@ -406,7 +408,7 @@ export default class Query extends BaseModule {
406
408
private async indexerApplicationBox (
407
409
appId : number ,
408
410
boxName : string ,
409
- params : QueryParams = { }
411
+ params : QueryParams = { } ,
410
412
) {
411
413
return await this . query ( {
412
414
endpoint : `/v2/applications/:id/boxes` ,
@@ -420,7 +422,7 @@ export default class Query extends BaseModule {
420
422
}
421
423
private async indexerApplicationBoxes (
422
424
appId : number ,
423
- params : QueryParams = { }
425
+ params : QueryParams = { } ,
424
426
) {
425
427
return await this . query ( {
426
428
endpoint : `/v2/applications/:id/boxes` ,
@@ -444,7 +446,7 @@ export default class Query extends BaseModule {
444
446
}
445
447
private async indexerAssetBalances (
446
448
assetId : number ,
447
- params : QueryParams = { }
449
+ params : QueryParams = { } ,
448
450
) {
449
451
return await this . query ( {
450
452
endpoint : `/v2/assets/:id/balances` ,
@@ -457,7 +459,7 @@ export default class Query extends BaseModule {
457
459
}
458
460
private async indexerAssetTransactions (
459
461
assetId : number ,
460
- params : QueryParams = { }
462
+ params : QueryParams = { } ,
461
463
) {
462
464
return await this . query ( {
463
465
endpoint : `/v2/assets/:id/transactions` ,
@@ -498,21 +500,21 @@ export default class Query extends BaseModule {
498
500
private async nodeHealth ( ) {
499
501
if ( ! this . initiated ) await this . waitForInit ( ) ;
500
502
const response = await this . fetchData (
501
- `${ this . stack . configs . apiUrl } /health`
503
+ `${ this . stack . configs . apiUrl } /health` ,
502
504
) ;
503
505
return camelcaseKeys ( response , { deep : true } ) ;
504
506
}
505
507
private async nodeStatus ( ) {
506
508
if ( ! this . initiated ) await this . waitForInit ( ) ;
507
509
const response = await this . fetchData (
508
- `${ this . stack . configs . apiUrl } /v2/status`
510
+ `${ this . stack . configs . apiUrl } /v2/status` ,
509
511
) ;
510
512
return camelcaseKeys ( response , { deep : true } ) ;
511
513
}
512
514
private async nodeStatusAfter ( block : number ) {
513
515
if ( ! this . initiated ) await this . waitForInit ( ) ;
514
516
const response = await this . fetchData (
515
- `${ this . stack . configs . apiUrl } /v2/status/wait-for-block-after/${ block } `
517
+ `${ this . stack . configs . apiUrl } /v2/status/wait-for-block-after/${ block } ` ,
516
518
) ;
517
519
return camelcaseKeys ( response , { deep : true } ) ;
518
520
}
@@ -531,7 +533,7 @@ export default class Query extends BaseModule {
531
533
private async nodeAccountApplication (
532
534
accountId : string ,
533
535
appId : number ,
534
- params : QueryParams = { }
536
+ params : QueryParams = { } ,
535
537
) {
536
538
return await this . query ( {
537
539
base : ApiUrl . NODE ,
@@ -547,7 +549,7 @@ export default class Query extends BaseModule {
547
549
private async nodeAccountAsset (
548
550
accountId : string ,
549
551
assetId : number ,
550
- params : QueryParams = { }
552
+ params : QueryParams = { } ,
551
553
) {
552
554
return await this . query ( {
553
555
base : ApiUrl . NODE ,
@@ -574,16 +576,16 @@ export default class Query extends BaseModule {
574
576
private async nodeDisassembleTeal ( b64 : string ) {
575
577
if ( ! b64 ?. length ) return undefined ;
576
578
if ( ! this . initiated ) await this . waitForInit ( ) ;
577
- const programBuffer = Buffer . from ( b64 , " base64" ) ;
579
+ const programBuffer = Buffer . from ( b64 , ' base64' ) ;
578
580
const response = ( await this . fetch (
579
581
`${ this . stack . configs [ ApiUrl . NODE ] } /v2/teal/disassemble` ,
580
582
{
581
- method : " POST" ,
583
+ method : ' POST' ,
582
584
cacheTable : CacheTable . NODE_TEAL ,
583
585
refreshCache : true ,
584
- headers : { " Content-Type" : " application/x-binary" } ,
586
+ headers : { ' Content-Type' : ' application/x-binary' } ,
585
587
data : programBuffer ,
586
- }
588
+ } ,
587
589
) ) as Payload ;
588
590
return response ?. result ;
589
591
}
@@ -672,7 +674,7 @@ export default class Query extends BaseModule {
672
674
public fetch (
673
675
apiUrl : string ,
674
676
originalParams : QueryParams = { } ,
675
- client ?: AxiosInstance
677
+ client ?: AxiosInstance ,
676
678
) {
677
679
return new Promise ( async ( resolve , reject ) => {
678
680
if ( ! this . initiated ) await this . waitForInit ( ) ;
@@ -708,7 +710,7 @@ export default class Query extends BaseModule {
708
710
data = await this . fetchData ( url , params , client ) ;
709
711
710
712
// cache result
711
- if ( this . cache && cacheTable && ! noCache && ! data . error ) {
713
+ if ( this . cache && cacheTable && ! noCache && ! data ? .error ) {
712
714
await this . cache . save ( cacheTable , data , { params } ) ;
713
715
}
714
716
0 commit comments