@@ -3,19 +3,15 @@ import 'source-map-support/register';
33import { walletIdProxyHandler } from '@src/commons' ;
44import {
55 getWalletTokens ,
6- getTotalSupply ,
7- getTotalTransactions ,
8- getTokenInformation ,
9- getAuthorityUtxo ,
106} from '@src/db' ;
117import {
12- TokenInfo ,
13- } from '@src/types' ;
14- import { getDbConnection } from '@src/utils' ;
8+ closeDbConnection ,
9+ getDbConnection ,
10+ } from '@src/utils' ;
1511import { ApiError } from '@src/api/errors' ;
1612import { closeDbAndGetError , warmupMiddleware , txIdJoiValidator } from '@src/api/utils' ;
13+ import fullnode from '@src/fullnode' ;
1714import Joi from 'joi' ;
18- import { bigIntUtils , constants } from '@hathor/wallet-lib' ;
1915import middy from '@middy/core' ;
2016import cors from '@middy/http-cors' ;
2117import errorHandler from '@src/api/middlewares/errorHandler' ;
@@ -49,8 +45,9 @@ const getTokenDetailsParamsSchema = Joi.object({
4945 * Get token details
5046 *
5147 * This lambda is called by API Gateway on GET /wallet/tokens/:token_id/details
48+ * It proxies the request to the fullnode's thin_wallet/token API
5249 */
53- export const getTokenDetails = middy ( walletIdProxyHandler ( async ( walletId , event ) => {
50+ export const getTokenDetails = middy ( walletIdProxyHandler ( async ( _walletId , event ) => {
5451 const params = event . pathParameters || { } ;
5552
5653 const { value, error } = getTokenDetailsParamsSchema . validate ( params , {
@@ -68,51 +65,44 @@ export const getTokenDetails = middy(walletIdProxyHandler(async (walletId, event
6865 }
6966
7067 const tokenId = value . token_id ;
71- const tokenInfo : TokenInfo = await getTokenInformation ( mysql , tokenId ) ;
7268
73- if ( tokenId === constants . NATIVE_TOKEN_UID ) {
74- const details = [ {
75- message : 'Invalid tokenId' ,
76- } ] ;
77-
78- return closeDbAndGetError ( mysql , ApiError . INVALID_PAYLOAD , { details } ) ;
79- }
80-
81- if ( ! tokenInfo ) {
82- const details = [ {
83- message : 'Token not found' ,
84- } ] ;
85-
86- return closeDbAndGetError ( mysql , ApiError . TOKEN_NOT_FOUND , { details } ) ;
87- }
88-
89- const [
90- totalSupply ,
91- totalTransactions ,
92- meltAuthority ,
93- mintAuthority ,
94- ] = await Promise . all ( [
95- getTotalSupply ( mysql , tokenId ) ,
96- getTotalTransactions ( mysql , tokenId ) ,
97- getAuthorityUtxo ( mysql , tokenId , Number ( constants . TOKEN_MELT_MASK ) ) ,
98- getAuthorityUtxo ( mysql , tokenId , Number ( constants . TOKEN_MINT_MASK ) ) ,
99- ] ) ;
100-
101- return {
102- statusCode : 200 ,
103- body : bigIntUtils . JSONBigInt . stringify ( {
104- success : true ,
105- details : {
106- tokenInfo,
107- totalSupply,
108- totalTransactions,
109- authorities : {
110- mint : mintAuthority !== null ,
111- melt : meltAuthority !== null ,
69+ try {
70+ const data = await fullnode . getTokenDetails ( tokenId ) ;
71+
72+ if ( ! data ?. success ) {
73+ return {
74+ statusCode : 404 ,
75+ body : JSON . stringify ( {
76+ success : false ,
77+ error : ApiError . TOKEN_NOT_FOUND ,
78+ details : [ { message : 'Token not found' } ] ,
79+ } ) ,
80+ } ;
81+ }
82+
83+ return {
84+ statusCode : 200 ,
85+ body : JSON . stringify ( {
86+ success : true ,
87+ details : {
88+ tokenInfo : {
89+ id : tokenId ,
90+ name : data . name ,
91+ symbol : data . symbol ,
92+ version : data . version ,
93+ } ,
94+ totalSupply : data . total ,
95+ totalTransactions : data . transactions_count ,
96+ authorities : {
97+ mint : data . can_mint ,
98+ melt : data . can_melt ,
99+ } ,
112100 } ,
113- } ,
114- } ) ,
115- } ;
101+ } ) ,
102+ } ;
103+ } finally {
104+ await closeDbConnection ( mysql ) ;
105+ }
116106} ) ) . use ( cors ( ) )
117107 . use ( warmupMiddleware ( ) )
118108 . use ( errorHandler ( ) ) ;
0 commit comments