{"_id":"@1001-digital/normalize-dweb-url","name":"@1001-digital/normalize-dweb-url","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@1001-digital/normalize-dweb-url","version":"0.1.0","description":"Normalize IPFS, IPNS, and Arweave URIs — gateway detection, redundant path removal, raw CID handling.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/1001-digital/normalize-dweb-url.git"},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"main":"./dist/index.js","types":"./dist/index.d.ts","devDependencies":{"@changesets/changelog-github":"^0.6.0","@changesets/cli":"^2.30.0","typescript":"^5.7.0","vite":"^6.0.0","vite-plugin-dts":"^4.0.0","vitest":"^3.0.0"},"scripts":{"build":"vite build","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","changeset":"changeset"},"_id":"@1001-digital/normalize-dweb-url@0.1.0","bugs":{"url":"https://github.com/1001-digital/normalize-dweb-url/issues"},"homepage":"https://github.com/1001-digital/normalize-dweb-url#readme","_integrity":"sha512-gT+81Yf93OAR5bfSipsMY5CwwMk6AxQX0PH3046qkfuj5QPsA3AUyZt7JgDlTKxuTMjmLVkETw1HF+j6aEuXcw==","_resolved":"/tmp/20beec8728c65b01393c9edecd65142f/1001-digital-normalize-dweb-url-0.1.0.tgz","_from":"file:1001-digital-normalize-dweb-url-0.1.0.tgz","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-gT+81Yf93OAR5bfSipsMY5CwwMk6AxQX0PH3046qkfuj5QPsA3AUyZt7JgDlTKxuTMjmLVkETw1HF+j6aEuXcw==","shasum":"5ba97f10d55dc1e9c7d5e428d426522099999223","tarball":"https://registry.npmjs.org/@1001-digital/normalize-dweb-url/-/normalize-dweb-url-0.1.0.tgz","fileCount":6,"unpackedSize":10175,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCqiyOZLcmeUQfuaz5m1cgS9WoSTHn6tne+Cc3SxceE6AIgMivANlQxfMluAtcaexATWhiTAxiHsKbLGHdjWY2+Vy0="}]},"_npmUser":{"name":"jwahdatehagh","email":"jalil@1001.digital"},"directories":{},"maintainers":[{"name":"jwahdatehagh","email":"jalil@1001.digital"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/normalize-dweb-url_0.1.0_1776346658090_0.8727558616679698"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-16T13:37:37.968Z","0.1.0":"2026-04-16T13:37:38.249Z","modified":"2026-04-16T13:37:38.533Z"},"maintainers":[{"name":"jwahdatehagh","email":"jalil@1001.digital"}],"description":"Normalize IPFS, IPNS, and Arweave URIs — gateway detection, redundant path removal, raw CID handling.","homepage":"https://github.com/1001-digital/normalize-dweb-url#readme","repository":{"type":"git","url":"git+https://github.com/1001-digital/normalize-dweb-url.git"},"bugs":{"url":"https://github.com/1001-digital/normalize-dweb-url/issues"},"license":"MIT","readme":"# @1001-digital/normalize-dweb-url\n\nNormalize IPFS, IPNS, and Arweave URIs -- gateway detection, redundant path removal, raw CID handling.\n\n```\nnpm install @1001-digital/normalize-dweb-url\n```\n\n## Usage\n\n```ts\nimport { normalizeUri, isResolvableUri } from '@1001-digital/normalize-dweb-url'\n\nnormalizeUri('https://gateway.pinata.cloud/ipfs/QmXxx')  // 'ipfs://QmXxx'\nnormalizeUri('https://bafyABC.ipfs.nftstorage.link')     // 'ipfs://bafyABC'\nnormalizeUri('https://arweave.net/txId123')               // 'ar://txId123'\nnormalizeUri('QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG')\n// 'ipfs://QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG'\n\nisResolvableUri('ipfs://QmXxx')  // true\nisResolvableUri('ar://txId123')  // true\nisResolvableUri('hello world')   // false\n```\n\n## `normalizeUri(uri: string): string`\n\nConverts gateway URLs and raw CIDs into their canonical protocol form.\n\n| Input | Output |\n| --- | --- |\n| `https://ipfs.io/ipfs/QmXxx` | `ipfs://QmXxx` |\n| `https://bafyABC.ipfs.w3s.link/meta.json` | `ipfs://bafyABC/meta.json` |\n| `https://ipfs.io/ipns/example.eth` | `ipns://example.eth` |\n| `https://arweave.net/txId123` | `ar://txId123` |\n| `ipfs://ipfs/QmXxx` | `ipfs://QmXxx` |\n| `ipfs://https://gateway.pinata.cloud/ipfs/QmXxx` | `ipfs://QmXxx` |\n| `QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG` | `ipfs://QmYwAPJzv5...` |\n| `data:application/json;base64,...` | passed through |\n| `https://example.com/image.png` | passed through |\n\n**Handles:**\n- Path-based IPFS/IPNS gateways (`/ipfs/...`, `/ipns/...`)\n- Subdomain IPFS/IPNS gateways (`*.ipfs.nftstorage.link`, `*.ipns.dweb.link`, etc.)\n- Arweave gateways (`arweave.net`, `ar-io.dev`, `ar-io.net`, `arweave.dev`)\n- Redundant path segments (`ipfs://ipfs/Qm...` -> `ipfs://Qm...`)\n- Embedded gateway URLs (`ipfs://https://gateway.pinata.cloud/ipfs/Qm...`)\n- Raw CIDv0 (`Qm...`) and CIDv1 (`bafy...`) strings\n- Whitespace trimming\n\n## `isResolvableUri(value: unknown): value is string`\n\nType guard that returns `true` when the value is a string that looks like a resolvable URI: `ipfs://`, `ipns://`, `ar://`, `http(s)://`, `data:`, or a raw CID.\n\nRejects non-strings, strings shorter than 5 characters, and non-`data:` URIs longer than 2048 characters.\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-9b5465fc7bf7b2e735c0b1495095b5d2"}