@helia/verified-fetch
Version:
A fetch-like API for obtaining verified & trustless IPFS content on the web
55 lines (44 loc) • 1.53 kB
text/typescript
import { InvalidParametersError } from '@libp2p/interface'
/**
* Turns an IPFS or IPNS path into a HTTP URL. Path gateway syntax is used to
* preserve any case sensitivity
*
* - `/ipfs/cid` -> `https://example.org/ipfs/cid`
* - `/ipns/name` -> `https://example.org/ipns/name`
*/
export function ipfsPathToUrl (path: string): string {
if (!path.startsWith('/ipfs/') && !path.startsWith('/ipns/')) {
throw new InvalidParametersError(`Path ${path} did not start with /ipfs/ or /ipns/`)
}
// trim fragment
const fragmentIndex = path.indexOf('#')
let fragment = ''
if (fragmentIndex > -1) {
fragment = path.substring(fragmentIndex)
path = path.substring(0, fragmentIndex)
}
// trim query
const queryIndex = path.indexOf('?')
let query = ''
if (queryIndex > -1) {
query = path.substring(queryIndex)
path = path.substring(0, queryIndex)
}
const type = path.substring(1, 5)
const rest = path.substring(6)
return `https://example.org/${type}/${rest}${query}${fragment}`
}
/**
* Turns an IPFS or IPNS URL into a HTTP URL. Path gateway syntax is used to
* preserve and case sensitivity
*
* `ipfs://cid` -> `https://example.org/ipfs/cid`
*/
export function ipfsUrlToUrl (url: string): string {
if (!url.startsWith('ipfs://') && !url.startsWith('ipns://')) {
throw new InvalidParametersError(`URL ${url} did not start with ipfs:// or ipns://`)
}
const type = url.substring(0, 4)
const rest = url.substring(7)
return `https://example.org/${type}/${rest}`
}