Fetch library for decentralized web protocols (IPFS, IPNS, Arweave, EIP-155 NFT references) with native protocol clients and verified content retrieval.
import { createDwebFetch } from '@1001-digital/dweb-fetch'
const dwebFetch = createDwebFetch()
// IPFS
const ipfsResponse = await dwebFetch('ipfs://bafyABC...')
// IPNS
const ipnsResponse = await dwebFetch('ipns://example.eth')
// Arweave
const arResponse = await dwebFetch('ar://txId123')
// HTTPS passthrough
const httpsResponse = await dwebFetch('https://example.com/data.json')
// EIP-155 NFT reference (requires config, see below)
const nftMetadata = await dwebFetch('eip155:1/erc721:0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D/1234')const dwebFetch = createDwebFetch({
ipfs: {
gateways: ['https://my-gateway.io'],
routers: ['https://my-router.io'],
},
arweave: {
// Custom static gateways (tried first by default)
gateways: ['https://arweave.net', 'https://ar-io.dev'],
// Routing strategy for network discovery fallback: 'random' | 'fastest' | 'balanced' | 'preferred'
routingStrategy: 'fastest',
// Disable network discovery fallback entirely
useNetworkDiscovery: false,
},
eip155: {
// JSON-RPC endpoints per chain ID
rpcUrls: {
1: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY',
137: 'https://polygon-rpc.com',
},
},
})- IPFS/IPNS —
@helia/verified-fetchfor content-verified retrieval - Arweave — Static gateways first, falls back to
@ar.io/wayfinder-corenetwork discovery - HTTP/HTTPS — Native
fetchpassthrough - EIP-155 — Resolves NFT token URIs via JSON-RPC (
tokenURIfor ERC-721,urifor ERC-1155), then fetches the result through the appropriate handler above. Opt-in — only active wheneip155config is provided.
All backends are lazily initialized on first use.
Creates a fetch function that routes URLs to the appropriate protocol handler. Synchronous — backends initialize lazily on first fetch.
Extracts the URL scheme (e.g., 'ipfs', 'ar', 'https').
Parses a URL into scheme, raw URL, and path components.
Parses an EIP-155 URI (eip155:<chainId>/<standard>:<contract>/<tokenId>) into its components.
DwebFetchError— Base error for all fetch failuresDwebUnsupportedProtocolError— Thrown for unknown URL schemesEip155ResolutionError— Thrown when EIP-155 resolution fails (missing RPC config, empty tokenURI, etc.)