@@ -14,21 +14,24 @@ export class TatumConnector {
1414 constructor ( private readonly id : string ) { }
1515
1616 public async get < RESPONSE , PARAMS extends DefaultParamsType = DefaultParamsType > ( request : GetUrl < PARAMS > ) {
17- return this . request < RESPONSE , PARAMS > ( { ...request , method : 'GET' } )
17+ return this . request < RESPONSE , PARAMS > ( { ...request , method : 'GET' } ) as Promise < RESPONSE >
1818 }
1919
2020 public async rpcCall < RESPONSE > ( url : string , body : JsonRpcCall | JsonRpcCall [ ] ) {
21- return this . request < RESPONSE > ( { body, method : 'POST' } , 0 , url )
21+ return this . request < RESPONSE > ( { body, method : 'POST' } , 0 , url ) as Promise < RESPONSE >
2222 }
2323
2424 public async post < RESPONSE , BODY extends DefaultBodyType = DefaultBodyType > (
2525 request : SdkRequest < DefaultParamsType , BODY > ,
2626 ) {
27- return this . request < RESPONSE , DefaultParamsType , BODY > ( { ...request , method : 'POST' } )
27+ return this . request < RESPONSE , DefaultParamsType , BODY > ( {
28+ ...request ,
29+ method : 'POST' ,
30+ } ) as Promise < RESPONSE >
2831 }
2932
3033 public async delete < RESPONSE > ( request : GetUrl ) {
31- return this . request < RESPONSE > ( { ...request , method : 'DELETE' } )
34+ return this . request < RESPONSE > ( { ...request , method : 'DELETE' } ) as Promise < RESPONSE >
3235 }
3336
3437 public async uploadFile < RESPONSE > ( request : FileUploadRequest ) {
@@ -37,18 +40,24 @@ export class TatumConnector {
3740 return this . request < RESPONSE > (
3841 { ...request , method : 'POST' , body : formData , basePath : Constant . TATUM_API_URL . V3 } ,
3942 0 ,
40- )
43+ ) as Promise < RESPONSE >
44+ }
45+
46+ public async getFile < RESPONSE , PARAMS extends DefaultParamsType = DefaultParamsType > (
47+ request : GetUrl < PARAMS > ,
48+ ) {
49+ return this . request < RESPONSE , PARAMS > ( { ...request , method : 'GET' , isDownload : true } ) as Promise < Blob >
4150 }
4251
4352 private async request <
4453 RESPONSE ,
4554 PARAMS extends DefaultParamsType = DefaultParamsType ,
4655 BODY extends DefaultBodyType = DefaultBodyType ,
4756 > (
48- { path, params, body, method, basePath } : SdkRequest < PARAMS , BODY > ,
57+ { path, params, body, method, basePath, isDownload } : SdkRequest < PARAMS , BODY > ,
4958 retry = 0 ,
5059 externalUrl ?: string ,
51- ) : Promise < RESPONSE > {
60+ ) : Promise < RESPONSE | Blob | undefined > {
5261 const url = externalUrl || this . getUrl ( { path, params, basePath } )
5362 const isUpload = body && body instanceof FormData
5463 const headers = isUpload ? Utils . getBasicHeaders ( this . id ) : Utils . getHeaders ( this . id )
@@ -71,7 +80,7 @@ export class TatumConnector {
7180 try {
7281 const res = await fetch ( url , request )
7382 const end = Date . now ( ) - start
74- const responseBody = await res . clone ( ) . text ( )
83+ const responseBody = isDownload ? `Binary data` : await res . clone ( ) . text ( )
7584
7685 // Structure your log entry here
7786 Utils . log ( {
@@ -93,15 +102,21 @@ export class TatumConnector {
93102 } )
94103
95104 if ( res . ok ) {
96- return responseBody ? await res . json ( ) : undefined
105+ if ( ! responseBody ) {
106+ return undefined
107+ }
108+ if ( isDownload ) {
109+ return await res . blob ( )
110+ }
111+ return await res . json ( )
97112 }
98113
99114 // Retry only in case of 5xx error
100115 if ( res . status >= 500 && res . status < 600 ) {
101116 return await this . retry ( url , request , res , retry )
102117 }
103118
104- return await Promise . reject ( responseBody )
119+ throw responseBody
105120 } catch ( error ) {
106121 const end = Date . now ( ) - start
107122 Utils . log ( {
@@ -151,7 +166,7 @@ export class TatumConnector {
151166 request : RequestInit ,
152167 response : Response ,
153168 retry : number ,
154- ) : Promise < RESPONSE > {
169+ ) : Promise < RESPONSE | Blob | undefined > {
155170 const { retryDelay, retryCount } = Container . of ( this . id ) . get ( CONFIG )
156171 if ( ! retryCount ) {
157172 Utils . log ( {
0 commit comments