{"version":3,"file":"index.umd.cjs","sources":["../src/model/errorResponse.ts","../src/api/geckoTerminalApi.ts"],"sourcesContent":["export interface GeckoTerminalErrorsResponse {\n  errors: Error[];\n}\n\nexport class GeckoTerminalError {\n  status: string;\n  title: string;\n\n  constructor(response: Response) {\n    this.status = response.status.toString();\n    this.title = response.statusText.toString();\n  }\n}\n","import {\n  DexResponse,\n  GeckoTerminalError,\n  NetworkResponse,\n  OhlcvResponse,\n  PoolResponse,\n  SimpleTokenPriceResponse,\n  TokenInfo,\n  TokenInfoResponse,\n  TokenResponse,\n  TokensInfo,\n  TokensInfoResponse,\n  TokensResponse,\n} from '../model';\n\nexport class GeckoTerminalApi {\n  private baseUrl: String = 'https://api.geckoterminal.com/api/v2';\n\n  constructor() {}\n\n  /**\n   * Get the simple token price response.\n   *\n   * @param {string} network - the network id from /networks list (Example: eth)\n   * @param {string} address - comma-separated list of token addresses (up to 30 addresses). Addresses not found in the GeckoTerminal database will be ignored. Example: 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\n   * @return {Promise<SimpleTokenPriceResponse>} the token price response promise\n   */\n  public async getSimple(\n    network: string,\n    address: string,\n  ): Promise<SimpleTokenPriceResponse> {\n    return this.get<SimpleTokenPriceResponse>(\n      `/simple/networks/${network}/token_price/${address}`,\n    );\n  }\n\n  /**\n   * A description of the entire function.\n   *\n   * @param {number} page - page through results\n   * @return {Promise<NetworkResponse>} get list of supported networks\n   */\n  public getNetworks(page: number = 1): Promise<NetworkResponse> {\n    return this.get<NetworkResponse>(`/networks`);\n  }\n\n  /**\n   * getDexes\n   */\n  public getDexes(network: string, integer: number = 1): Promise<DexResponse> {\n    return this.get<DexResponse>(`/networks/${network}/dexes?page=${integer}`);\n  }\n\n  /**\n   * getTrendingPools\n   */\n  public getTrendingPools(\n    include: string | string[] | null = null,\n    page: number = 1,\n  ): Promise<PoolResponse> {\n    const fullUrl = `/networks/trending_pools${this.getQueryString(include)}`;\n    return this.get<PoolResponse>(fullUrl);\n  }\n\n  /**\n   * getTrendingPoolsByNetwork\n   */\n  public getTrendingPoolsOnNetwork(\n    network: string,\n    page: number = 1,\n    include: string | string[] | null = null,\n  ): Promise<PoolResponse> {\n    const fullUrl = `/networks/${network}/trending_pools${this.getQueryString(\n      include,\n    )}`;\n\n    return this.get<PoolResponse>(fullUrl);\n  }\n\n  /**\n   * getSpecificPool\n   */\n  public getSpecificPool(\n    network: string,\n    address: string,\n    include: string | string[] | null = null,\n  ): Promise<PoolResponse> {\n    const fullUrl = `/networks/${network}/pools/${address}${this.getQueryString(\n      include,\n    )}`;\n\n    return this.get<PoolResponse>(fullUrl);\n  }\n\n  /**\n   * getMultiplePoolsOnNetwork\n   */\n  public getMultiplePoolsOnNetwork(\n    network: string,\n    address: string,\n    include: string | string[] | null = null,\n  ): Promise<PoolResponse> {\n    const fullUrl = `/networks/${network}/pools/multi/${address}${this.getQueryString(\n      include,\n    )}`;\n\n    return this.get<PoolResponse>(fullUrl);\n  }\n\n  /**\n   * GetTopPools\n   */\n  public getTopPools(\n    network: string,\n    page: number = 1,\n    include: string | string[] | null = null,\n    sort: PoolSortOptions = PoolSortOptions.h24_tx_count_desc,\n  ): Promise<PoolResponse> {\n    const fullUrl = `/networks/${network}/pools${this.getQueryStringWithPageAndPoolSort(\n      page,\n      sort,\n      include,\n    )}`;\n    return this.get<PoolResponse>(fullUrl);\n  }\n\n  /**\n   * GetTopPoolsOnNetworkDex\n   */\n  public getTopPoolsOnNetworkDex(\n    network: string,\n    dex: string,\n    page: number = 1,\n    include: string | string[] | null = null,\n    sort: PoolSortOptions = PoolSortOptions.h24_tx_count_desc,\n  ): Promise<PoolResponse> {\n    const fullUrl = `/networks/${network}/dexes/${dex}/pools${this.getQueryStringWithPageAndPoolSort(\n      page,\n      sort,\n      include,\n    )}`;\n\n    return this.get<PoolResponse>(fullUrl);\n  }\n\n  /**\n   * getNewPools\n   */\n  public getNewPoolsOnNetwork(\n    network: string,\n    page: number = 1,\n    include: string | string[] | null = null,\n  ): Promise<PoolResponse> {\n    const fullUrl = `/networks/${network}/new_pools${this.getQueryStingWithPage(\n      page,\n      include,\n    )}`;\n\n    return this.get<PoolResponse>(fullUrl);\n  }\n\n  /**\n   * getNewPools\n   */\n  public getNewPools(\n    page: number = 1,\n    include: string | string[] | null = null,\n  ): Promise<PoolResponse> {\n    const fullUrl = `/networks/new_pools${this.getQueryStingWithPage(\n      page,\n      include,\n    )}`;\n\n    return this.get<PoolResponse>(fullUrl);\n  }\n\n  /**\n   * searchForPoolsOnNetwork\n   */\n  public searchForPoolsOnNetwork(\n    query: string,\n    network: string | null = null,\n    page: number = 1,\n    include: string | string[] | null = null,\n  ): Promise<PoolResponse> {\n    const fullUrl = `/search/pools${this.getQuerySearch(\n      query,\n      page,\n      network,\n      include,\n    )}`;\n\n    return this.get<PoolResponse>(fullUrl);\n  }\n\n  // ---------- TOKENS\n\n  // TODO: add support for Tokens and finish it\n\n  /**\n   * getTopPoolsForToken\n   */\n  public getTopPoolsForToken(\n    network: string,\n    token_address: string,\n    page: number = 1,\n    include: string | string[] | null = null,\n    sort: TokenSortOptions = TokenSortOptions.h24_tx_count_desc,\n  ): Promise<PoolResponse> {\n    const fullUrl = `/networks/${network}/tokens/${token_address}/pools${this.getQueryStringWithPageAndTokenSort(\n      page,\n      sort,\n      include,\n    )}`;\n\n    return this.get<PoolResponse>(fullUrl);\n  }\n\n  /**\n   * getSpecificTokenOnNetwork\n   */\n  public getSpecificTokenOnNetwork(\n    network: string,\n    address: string,\n    include: string | string[] | null = null,\n  ): Promise<TokensResponse> {\n    const fullUrl = `/networks/${network}/tokens/${address}${this.getQueryString(\n      include,\n    )}`;\n\n    return this.get<TokensResponse>(fullUrl);\n  }\n\n  /**\n   * getMultipleTokensOnNetwork\n   *\n   * @summary Get multiple tokens on a network\n   *\n   * @param network - network id from /networks list\n   * @param address - comma-separated list of token addresses (up to 30 addresses)\n   * @param include - Attributes for related resources to include, which will be returned under the top-level \"included\" key\n   *\n   * @returns Promise<TokensInfoResponse>\n   */\n  public getMultipleTokensOnNetwork(\n    network: string,\n    address: string,\n    include: string | string[] | null = null,\n  ): Promise<TokensInfoResponse> {\n    const fullUrl = `/networks/${network}/tokens/multi/${address}${this.getQueryString(\n      include,\n    )}`;\n\n    return this.get<TokensInfoResponse>(fullUrl);\n  }\n\n  /**\n   * getSpecificTokenInfoOnNetwork\n   *\n   * @summary Get specific token info on a network\n   *\n   * @param network - network id from /networks list\n   * @param address - token address\n   *\n   * @returns Promise<TokensInfoResponse>\n   */\n  public getSpecificTokenInfo(\n    network: string,\n    address: string,\n  ): Promise<TokenInfoResponse> {\n    const fullUrl = `/networks/${network}/tokens/${address}/info`;\n\n    return this.get<TokenInfoResponse>(fullUrl);\n  }\n\n  public getPoolTokenInfo(\n    network: string,\n    pool_address: string,\n  ): Promise<TokensInfoResponse> {\n    const fullUrl = `/networks/${network}/pools/${pool_address}/info`;\n\n    return this.get<TokensInfoResponse>(fullUrl);\n  }\n\n  public getRecentlyUpdatedTokens(\n    include: string | string[] | null = null,\n  ): Promise<TokensInfoResponse> {\n    const fullUrl = `/tokens/info_recently_updated${this.getQueryString(\n      include,\n    )}`;\n    return this.get<TokensInfoResponse>(fullUrl);\n  }\n  /**\n   * Retrieves the OHLCV data of a pool for a specified network, pool address, and time frame.\n   *\n   * @param {string} network - The network ID from the list of networks.\n   * @param {string} pool_address - The address of the pool to retrieve the OHLCV data for.\n   * @param {TimeFrame} [timeframe=TimeFrame.hour] - The time frame for the OHLCV data. Available values are 'day', 'hour', 'minute'. Defaults to 'hour'.\n   * @param {string} [aggregate='1'] - The time period to aggregate for each OHLCV data point\n   * |  Available values (day): 1\n   * |  Available values (hour): 1, 4, 12\n   * |  Available values (minute): 1, 5, 15\n   * |\n   * @param {string | null} [before_timestamp='0'] - Return OHLCV data before this timestamp (integer seconds since epoch).\n   * @param {string} [limit='100'] - Limit the number of OHLCV results to return. Default is 100, maximum is 1000.\n   * @param {Currency} [currency=Currency.token] - Return OHLCV in USD or quote token. Available values are 'usd' or 'token'. Defaults to 'token'.\n   * @param {string} [token=''] - Return OHLCV for base or quote token. Available values are 'base', 'quote', or a token address. Defaults to 'base'.\n   * @return {void}\n   */\n  public getOhlcvs(\n    network: string,\n    pool_address: string,\n    timeframe: TimeFrame = TimeFrame.hour,\n    aggregate: string = '1',\n    before_timestamp: string | null = null,\n    limit: string = '100',\n    currency: Currency = Currency.token,\n    token: string = '',\n  ) {\n    const fullUrl = `/networks/${network}/pools/${pool_address}/ohlcv/${timeframe}?${this.getQueryStringOHLCVS(\n      aggregate,\n      before_timestamp,\n      limit,\n      currency,\n      token,\n    )}`;\n\n    return this.get<OhlcvResponse>(fullUrl);\n  }\n\n  /**\n   * Generates a query string for searching in the GeckoTerminal API.\n   *\n   * @param {string} query - Search query: can be pool address, token address, or token symbol.\n   * @param {number} [page=1] - Page number for pagination.\n   * @param {string | null} [network=null] - Network id from /networks list.\n   * @param {string | string[] | null} [include=null] - Attributes for related resources to include, which will be returned under the top-level \"included\" key.\n   * @return {string} Matching pools.\n   */\n  private getQuerySearch(\n    query: string,\n    page: number = 1,\n    network: string | null = null,\n    include: string | string[] | null = null,\n  ) {\n    // out like this: https://api.geckoterminal.com/api/v2/search/pools?query=ETH&network=eth&include=base_token&page=1\n    network = network ? `&network=${network}` : '';\n    include = include ? `&include=${include}` : '';\n\n    return `?query=${query}${network}${include}&page=${page}`;\n  }\n\n  private getQueryStringOHLCVS(\n    aggregate: string = '0',\n    before_timestamp: string | null = null,\n    limit: string = '100',\n    currency: Currency = Currency.token,\n    token: string = '',\n  ) {\n    let _before_timestamp = before_timestamp\n      ? `&before_timestamp=${before_timestamp}`\n      : '';\n    let _token = token ? `&token=${token}` : '';\n\n    return `aggregate=${aggregate}${_before_timestamp}&limit=${limit}&currency=${currency}${_token}`;\n  }\n\n  private getQueryStingWithPage(\n    page: number = 1,\n    include: string | string[] | null = null,\n  ) {\n    if (!include) {\n      return `?page=${page}`;\n    }\n    return this.getQueryString(include) + `&page=${page}`;\n  }\n\n  private getQueryStringWithPageAndPoolSort(\n    page: number = 1,\n    sort: PoolSortOptions = PoolSortOptions.h24_tx_count_desc,\n    include: string | string[] | null = null,\n  ) {\n    if (!include) {\n      return `?page=${page}&sort=${sort.toString()}`;\n    }\n    return this.getQueryString(include) + `&page=${page}&sort=${sort}`;\n  }\n  private getQueryStringWithPageAndTokenSort(\n    page: number = 1,\n    sort: TokenSortOptions = TokenSortOptions.h24_tx_count_desc,\n    include: string | string[] | null = null,\n  ) {\n    if (!include) {\n      return `?page=${page}&sort=${sort.toString()}`;\n    }\n    return this.getQueryString(include) + `&page=${page}&sort=${sort}`;\n  }\n  private getQueryString(include: string | string[] | null) {\n    if (!include) {\n      return '';\n    }\n    const params: { [key: string]: string } = {};\n\n    if (typeof include === 'string') {\n      params['include'] = include;\n    } else if (Array.isArray(include)) {\n      params['include'] = include.join(',');\n    } else {\n      params['include'] = '';\n    }\n\n    const queryString = new URLSearchParams(params).toString();\n\n    return queryString ? `?${queryString}` : '';\n  }\n\n  private async get<T>(path: string, init?: RequestInit): Promise<T> {\n    console.log(this.baseUrl + path);\n    const res = await fetch(this.baseUrl + path, init);\n    if (!res.ok) {\n      throw new GeckoTerminalError(res);\n    }\n\n    return res.json() as T;\n  }\n}\n\nexport enum PoolSortOptions {\n  h24_tx_count_desc = 'h24_tx_count_desc',\n  h24_volume_usd_desc = 'h24_volume_usd_desc',\n}\n\nexport enum TokenSortOptions {\n  h24_volume_usd_liquidity_desc = 'h24_volume_usd_liquidity_desc',\n  h24_tx_count_desc = 'h24_tx_count_desc',\n  h24_volume_usd_desc = 'h24_volume_usd_desc',\n}\n\nexport enum TimeFrame {\n  day = 'day',\n  hour = 'hour',\n  minute = 'minute',\n}\n\nexport enum Currency {\n  token = 'token',\n  usd = 'usd',\n}\n"],"names":["GeckoTerminalError","response","GeckoTerminalApi","network","address","page","integer","include","fullUrl","sort","dex","query","token_address","pool_address","timeframe","aggregate","before_timestamp","limit","currency","token","_before_timestamp","_token","params","queryString","path","init","res","PoolSortOptions","TokenSortOptions","TimeFrame","Currency"],"mappings":"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"}