Skip to content
This repository has been archived by the owner on Apr 6, 2023. It is now read-only.

Latest commit

 

History

History
122 lines (86 loc) · 2.92 KB

README.md

File metadata and controls

122 lines (86 loc) · 2.92 KB

Fetchers

Fetchers for Lido Finance projects. Part of Lido JS SDK

Install

yarn add @lido-sdk/fetch

Fetch

node-fetch package NPM, Github

import { fetch } from '@lido-sdk/fetch';

const response = await fetch('https://example.com');
const result = await response.json();

Fetch With Fallbacks

Source

A wrapper over fetch which takes an array of URLs instead of a single URL. If a request throws an exception, it takes the following URL from the array and repeats the request to it.

import { fetchWithFallbacks } from '@lido-sdk/fetch';

const urls = ['https://example.com', 'https://fallback.com'];

const response = await fetchWithFallbacks(urls);
const result = await response.json();

Fetch RPC

Source

A wrapper over fetchWithFallbacks, which is useful as a backend part of proxying RPC requests from frontend to API provider.

import { fetchRPC } from '@lido-sdk/fetch';

const options = {
  urls: [
    'http://your_rpc_server.url',
    (chainId) => `http://your_rpc_server.url/?chainId=${chainId}`,
  ],
  providers: {
    infura: 'INFURA_API_KEY',
    alchemy: 'ALCHEMY_API_KEY',
  },
};

const rpc = async (req, res) => {
  // chainId and body from request
  const chainId = Number(req.query.chainId);
  const body = JSON.stringify(req.body);

  const response = await fetchRPC(chainId, { body, ...options });
  const result = await response.json();

  res.json(result);
};

Options

Options extend RequestInit interface with the urls and providers. urls have priority over providers.

import { CHAINS } from '@lido-sdk/constants';
import { RequestInit } from 'node-fetch';

interface FetchRPCOptions extends RequestInit {
  providers?: {
    infura?: string;
    alchemy?: string;
  };
  urls?: Array<string, (chainId: CHAINS) => string>;
}

Helpers

Source

getInfuraRPCUrl

Returns infura endpoint for API key and chainId

import { getInfuraRPCUrl } from '@lido-sdk/fetch';
import { CHAINS } from '@lido-sdk/constants';

const url = getInfuraRPCUrl(CHAINS.Mainnet, 'YOUR_API_KEY');
console.log(url); // https://mainnet.infura.io/v3/YOUR_API_KEY

getAlchemyRPCUrl

Returns alchemy endpoint for API key and chainId

import { getAlchemyRPCUrl } from '@lido-sdk/fetch';
import { CHAINS } from '@lido-sdk/constants';

const url = getAlchemyRPCUrl(CHAINS.Mainnet, 'YOUR_API_KEY');
console.log(url); // https://eth-mainnet.alchemyapi.io/v2/YOUR_API_KEY