utils: add ipfs module

This commit is contained in:
Alex Gleason 2023-09-09 19:13:42 -05:00
parent e8053ba072
commit 46b9deffce
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7
1 changed files with 27 additions and 0 deletions

27
src/utils/ipfs.ts Normal file
View File

@ -0,0 +1,27 @@
/** https://docs.ipfs.tech/how-to/address-ipfs-on-web/#path-gateway */
const IPFS_PATH_REGEX = /^\/ipfs\/([^/]+)/;
/** https://docs.ipfs.tech/how-to/address-ipfs-on-web/#subdomain-gateway */
const IPFS_HOST_REGEX = /^([^/]+)\.ipfs\./;
/** Get IPFS CID out of a path. */
function cidFromPath(path: string) {
return path.match(IPFS_PATH_REGEX)?.[1];
}
/** Get IPFS CID out of a host. */
function cidFromHost(host: string) {
return host.match(IPFS_HOST_REGEX)?.[1];
}
/** Get IPFS CID out of a URL. */
function cidFromUrl({ protocol, hostname, pathname }: URL) {
switch (protocol) {
case 'ipfs:':
return hostname;
case 'http:':
case 'https:':
return cidFromPath(pathname) || cidFromHost(hostname);
}
}
export { cidFromUrl };