Fetchers for Knine projects.
yarn add @knine-sdk/fetch
node-fetch package NPM, Github
import { fetch } from '@knine-sdk/fetch';
const response = await fetch('https://example.com');
const result = await response.json();
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 '@knine-sdk/fetch';
const urls = ['https://example.com', 'https://fallback.com'];
const response = await fetchWithFallbacks(urls);
const result = await response.json();
A wrapper over fetchWithFallbacks
, which is useful as a backend part of proxying RPC requests from frontend to API provider.
import { fetchRPC } from '@knine-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 extend RequestInit
interface with the urls
and providers
. urls
have priority over providers
.
import { CHAINS } from '@knine-sdk/constants';
import { RequestInit } from 'node-fetch';
interface FetchRPCOptions extends RequestInit {
providers?: {
infura?: string;
alchemy?: string;
};
urls?: Array<string, (chainId: CHAINS) => string>;
}
Returns infura endpoint for API key and chainId
import { getInfuraRPCUrl } from '@knine-sdk/fetch';
import { CHAINS } from '@knine-sdk/constants';
const url = getInfuraRPCUrl(CHAINS.Mainnet, 'YOUR_API_KEY');
console.log(url); // https://mainnet.infura.io/v3/YOUR_API_KEY
Returns alchemy endpoint for API key and chainId
import { getAlchemyRPCUrl } from '@knine-sdk/fetch';
import { CHAINS } from '@knine-sdk/constants';
const url = getAlchemyRPCUrl(CHAINS.Mainnet, 'YOUR_API_KEY');
console.log(url); // https://eth-mainnet.alchemyapi.io/v2/YOUR_API_KEY