-
Notifications
You must be signed in to change notification settings - Fork 256
/
getTokenMetadataOperation.ts
84 lines (68 loc) · 2.74 KB
/
getTokenMetadataOperation.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import { Core, Camelize, Operation, toCamelCase, ResponseAdapter } from '@moralisweb3/common-core';
import { EvmChain, EvmChainish, EvmAddress, EvmAddressish, Erc20Token } from '../../dataTypes';
import { EvmChainResolver } from '../../EvmChainResolver';
import { operations } from '../openapi';
type OperationId = 'getTokenMetadata';
type QueryParams = operations[OperationId]['parameters']['query'];
type RequestParams = QueryParams;
type SuccessResponse = operations[OperationId]['responses']['200']['content']['application/json'];
// Exports
export interface GetTokenMetadataRequest extends Camelize<Omit<RequestParams, 'chain' | 'addresses'>> {
chain?: EvmChainish;
addresses: EvmAddressish[];
}
export type GetTokenMetadataJSONRequest = ReturnType<typeof serializeRequest>;
export type GetTokenMetadataJSONResponse = SuccessResponse;
export type GetTokenMetadataResponse = ReturnType<typeof deserializeResponse>;
export interface GetTokenMetadataResponseAdapter
extends ResponseAdapter<GetTokenMetadataResponse, GetTokenMetadataJSONResponse> {}
/** Get the metadata for a given token contract address (name, symbol, decimals, logo). */
export const getTokenMetadataOperation: Operation<
GetTokenMetadataRequest,
GetTokenMetadataJSONRequest,
GetTokenMetadataResponse,
GetTokenMetadataJSONResponse
> = {
method: 'GET',
name: 'getTokenMetadata',
id: 'getTokenMetadata',
groupName: 'token',
urlPathPattern: '/erc20/metadata',
urlSearchParamNames: ['chain', 'addresses'],
getRequestUrlParams,
serializeRequest,
deserializeRequest,
deserializeResponse,
};
// Methods
function getRequestUrlParams(request: GetTokenMetadataRequest, core: Core) {
return {
chain: EvmChainResolver.resolve(request.chain, core).apiHex,
addresses: request.addresses.map((address) => EvmAddress.create(address).lowercase),
};
}
function deserializeResponse(jsonResponse: GetTokenMetadataJSONResponse, request: GetTokenMetadataRequest, core: Core) {
return (jsonResponse ?? []).map((token) => {
return {
token: Erc20Token.create({
...toCamelCase(token),
contractAddress: token.address,
chain: EvmChainResolver.resolve(request.chain, core),
}),
blockNumber: token.block_number,
validated: token.validated,
};
});
}
function serializeRequest(request: GetTokenMetadataRequest, core: Core) {
return {
chain: EvmChainResolver.resolve(request.chain, core).apiHex,
addresses: request.addresses.map((address) => EvmAddress.create(address).checksum),
};
}
function deserializeRequest(jsonRequest: GetTokenMetadataJSONRequest): GetTokenMetadataRequest {
return {
chain: EvmChain.create(jsonRequest.chain),
addresses: jsonRequest.addresses.map((address) => EvmAddress.create(address)),
};
}