Full Code of ipfs/js-ipfs for AI

master bf1bc8b18d75 cached
1310 files
20.1 MB
1.6M tokens
1414 symbols
1 requests
Download .txt
Showing preview only (6,282K chars total). Download the full file or copy to clipboard to get everything.
Repository: ipfs/js-ipfs
Branch: master
Commit: bf1bc8b18d75
Files: 1310
Total size: 20.1 MB

Directory structure:
gitextract_52p81fdk/

├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── config.yml
│   │   └── open_an_issue.md
│   ├── config.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── examples.yml
│       ├── externals.yml
│       ├── stale.yml
│       └── test.yml
├── .gitignore
├── .release-please-manifest.json
├── .release-please.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── COPYRIGHT
├── Dockerfile.latest
├── Dockerfile.next
├── LICENSE
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── docs/
│   ├── ARCHITECTURE.md
│   ├── BROWSERS.md
│   ├── CLI.md
│   ├── CONFIG.md
│   ├── CORS.md
│   ├── DAEMON.md
│   ├── DELEGATE_ROUTERS.md
│   ├── DEVELOPMENT.md
│   ├── DOCKER.md
│   ├── EARLY_TESTERS.md
│   ├── FAQ.md
│   ├── IPLD.md
│   ├── MIGRATION-TO-ASYNC-AWAIT.md
│   ├── MODULE.md
│   ├── MONITORING.md
│   ├── README.md
│   ├── RELEASES.md
│   ├── RELEASE_ISSUE_TEMPLATE.md
│   ├── core-api/
│   │   ├── BITSWAP.md
│   │   ├── BLOCK.md
│   │   ├── BOOTSTRAP.md
│   │   ├── CONFIG.md
│   │   ├── DAG.md
│   │   ├── DHT.md
│   │   ├── FILES.md
│   │   ├── KEY.md
│   │   ├── MISCELLANEOUS.md
│   │   ├── NAME.md
│   │   ├── OBJECT.md
│   │   ├── PIN.md
│   │   ├── PUBSUB.md
│   │   ├── README.md
│   │   ├── REFS.md
│   │   ├── REPO.md
│   │   ├── STATS.md
│   │   └── SWARM.md
│   ├── img/
│   │   ├── architecture.monopic
│   │   ├── architecture.txt
│   │   ├── core.monopic
│   │   ├── core.txt
│   │   ├── overview.monopic
│   │   └── overview.txt
│   └── upgrading/
│       ├── v0.62-v0.63.md
│       ├── v0.63-v0.64.md
│       └── v0.64-v0.65.md
├── package-list.json
├── package.json
├── packages/
│   ├── interface-ipfs-core/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── img/
│   │   │   └── badge.sketch
│   │   ├── maintainer.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── add-all.js
│   │   │   ├── add.js
│   │   │   ├── bitswap/
│   │   │   │   ├── index.js
│   │   │   │   ├── stat.js
│   │   │   │   ├── transfer.js
│   │   │   │   ├── unwant.js
│   │   │   │   ├── utils.js
│   │   │   │   ├── wantlist-for-peer.js
│   │   │   │   └── wantlist.js
│   │   │   ├── block/
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── put.js
│   │   │   │   ├── rm.js
│   │   │   │   └── stat.js
│   │   │   ├── bootstrap/
│   │   │   │   ├── add.js
│   │   │   │   ├── clear.js
│   │   │   │   ├── index.js
│   │   │   │   ├── list.js
│   │   │   │   ├── reset.js
│   │   │   │   └── rm.js
│   │   │   ├── cat.js
│   │   │   ├── config/
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── profiles/
│   │   │   │   │   ├── apply.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── list.js
│   │   │   │   ├── replace.js
│   │   │   │   └── set.js
│   │   │   ├── dag/
│   │   │   │   ├── export.js
│   │   │   │   ├── get.js
│   │   │   │   ├── import.js
│   │   │   │   ├── index.js
│   │   │   │   ├── put.js
│   │   │   │   ├── resolve.js
│   │   │   │   └── sharness-t0053-dag.js
│   │   │   ├── dht/
│   │   │   │   ├── disabled.js
│   │   │   │   ├── find-peer.js
│   │   │   │   ├── find-provs.js
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── provide.js
│   │   │   │   ├── put.js
│   │   │   │   ├── query.js
│   │   │   │   └── utils.js
│   │   │   ├── files/
│   │   │   │   ├── chmod.js
│   │   │   │   ├── cp.js
│   │   │   │   ├── flush.js
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── mkdir.js
│   │   │   │   ├── mv.js
│   │   │   │   ├── read.js
│   │   │   │   ├── rm.js
│   │   │   │   ├── stat.js
│   │   │   │   ├── touch.js
│   │   │   │   └── write.js
│   │   │   ├── get.js
│   │   │   ├── index.js
│   │   │   ├── key/
│   │   │   │   ├── gen.js
│   │   │   │   ├── import.js
│   │   │   │   ├── index.js
│   │   │   │   ├── list.js
│   │   │   │   ├── rename.js
│   │   │   │   └── rm.js
│   │   │   ├── ls.js
│   │   │   ├── miscellaneous/
│   │   │   │   ├── dns.js
│   │   │   │   ├── id.js
│   │   │   │   ├── index.js
│   │   │   │   ├── resolve.js
│   │   │   │   ├── stop.js
│   │   │   │   └── version.js
│   │   │   ├── name/
│   │   │   │   ├── index.js
│   │   │   │   ├── publish.js
│   │   │   │   ├── resolve.js
│   │   │   │   └── utils.js
│   │   │   ├── name-pubsub/
│   │   │   │   ├── cancel.js
│   │   │   │   ├── index.js
│   │   │   │   ├── pubsub.js
│   │   │   │   ├── state.js
│   │   │   │   └── subs.js
│   │   │   ├── object/
│   │   │   │   ├── data.js
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── links.js
│   │   │   │   ├── new.js
│   │   │   │   ├── patch/
│   │   │   │   │   ├── add-link.js
│   │   │   │   │   ├── append-data.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── rm-link.js
│   │   │   │   │   └── set-data.js
│   │   │   │   ├── put.js
│   │   │   │   └── stat.js
│   │   │   ├── pin/
│   │   │   │   ├── add-all.js
│   │   │   │   ├── add.js
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── remote/
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── rm-all.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   └── service.js
│   │   │   │   ├── rm-all.js
│   │   │   │   ├── rm.js
│   │   │   │   └── utils.js
│   │   │   ├── ping/
│   │   │   │   ├── index.js
│   │   │   │   ├── ping.js
│   │   │   │   └── utils.js
│   │   │   ├── pubsub/
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── peers.js
│   │   │   │   ├── publish.js
│   │   │   │   ├── subscribe.js
│   │   │   │   ├── unsubscribe.js
│   │   │   │   └── utils.js
│   │   │   ├── refs-local.js
│   │   │   ├── refs.js
│   │   │   ├── repo/
│   │   │   │   ├── gc.js
│   │   │   │   ├── index.js
│   │   │   │   ├── stat.js
│   │   │   │   └── version.js
│   │   │   ├── stats/
│   │   │   │   ├── bitswap.js
│   │   │   │   ├── bw.js
│   │   │   │   ├── index.js
│   │   │   │   ├── repo.js
│   │   │   │   └── utils.js
│   │   │   ├── swarm/
│   │   │   │   ├── addrs.js
│   │   │   │   ├── connect.js
│   │   │   │   ├── disconnect.js
│   │   │   │   ├── index.js
│   │   │   │   ├── local-addrs.js
│   │   │   │   └── peers.js
│   │   │   └── utils/
│   │   │       ├── blockstore-adapter.js
│   │   │       ├── create-sharded-directory.js
│   │   │       ├── create-two-shards.js
│   │   │       ├── dump-shard.js
│   │   │       ├── index.js
│   │   │       ├── ipfs-options-websockets-filter-all.js
│   │   │       ├── is-shard-at-path.js
│   │   │       ├── mocha.js
│   │   │       ├── suite.js
│   │   │       ├── test-timeout.js
│   │   │       ├── traverse-leaf-nodes.js
│   │   │       └── wait-for.js
│   │   ├── test/
│   │   │   ├── fixtures/
│   │   │   │   ├── .gitattributes
│   │   │   │   ├── car/
│   │   │   │   │   ├── combined_naked_roots_genesis_and_128.car
│   │   │   │   │   ├── lotus_devnet_genesis.car
│   │   │   │   │   ├── lotus_devnet_genesis_shuffled_nulroot.car
│   │   │   │   │   ├── lotus_testnet_export_128.car
│   │   │   │   │   └── lotus_testnet_export_256_multiroot.car
│   │   │   │   ├── hidden-files-folder/
│   │   │   │   │   ├── .hiddenTest.txt
│   │   │   │   │   ├── alice.txt
│   │   │   │   │   ├── files/
│   │   │   │   │   │   ├── hello.txt
│   │   │   │   │   │   └── ipfs.txt
│   │   │   │   │   ├── hello-link
│   │   │   │   │   ├── holmes.txt
│   │   │   │   │   ├── ipfs-add.js
│   │   │   │   │   ├── jungle.txt
│   │   │   │   │   └── pp.txt
│   │   │   │   ├── refs-test/
│   │   │   │   │   ├── animals/
│   │   │   │   │   │   ├── land/
│   │   │   │   │   │   │   ├── african.txt
│   │   │   │   │   │   │   ├── americas.txt
│   │   │   │   │   │   │   └── australian.txt
│   │   │   │   │   │   └── sea/
│   │   │   │   │   │       ├── atlantic.txt
│   │   │   │   │   │       └── indian.txt
│   │   │   │   │   ├── atlantic-animals
│   │   │   │   │   ├── fruits/
│   │   │   │   │   │   └── tropical.txt
│   │   │   │   │   └── mushroom.txt
│   │   │   │   ├── ssl/
│   │   │   │   │   ├── cert.pem
│   │   │   │   │   └── privkey.pem
│   │   │   │   ├── test-folder/
│   │   │   │   │   ├── alice.txt
│   │   │   │   │   ├── files/
│   │   │   │   │   │   ├── hello.txt
│   │   │   │   │   │   └── ipfs.txt
│   │   │   │   │   ├── holmes.txt
│   │   │   │   │   ├── ipfs-add.js
│   │   │   │   │   ├── jungle.txt
│   │   │   │   │   └── pp.txt
│   │   │   │   └── weird name folder [v0]/
│   │   │   │       ├── add
│   │   │   │       ├── cat
│   │   │   │       ├── files/
│   │   │   │       │   ├── hello.txt
│   │   │   │       │   └── ipfs.txt
│   │   │   │       ├── hello-link
│   │   │   │       ├── ipfs-add
│   │   │   │       ├── ls
│   │   │   │       └── version
│   │   │   └── interface.spec.js
│   │   └── tsconfig.json
│   ├── ipfs/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── init-and-daemon.sh
│   │   ├── maintainer.json
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── update-version.js
│   │   ├── src/
│   │   │   ├── cli.js
│   │   │   ├── index.js
│   │   │   ├── package.js
│   │   │   ├── path.browser.js
│   │   │   └── path.js
│   │   ├── test/
│   │   │   ├── interface-client.js
│   │   │   ├── interface-core.js
│   │   │   ├── interface-http-go.js
│   │   │   ├── interface-http-js.js
│   │   │   └── utils/
│   │   │       ├── factory.js
│   │   │       ├── mock-pinning-service.js
│   │   │       └── mock-preload-node.js
│   │   └── tsconfig.json
│   ├── ipfs-cli/
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── command-alias.js
│   │   │   ├── commands/
│   │   │   │   ├── add.js
│   │   │   │   ├── bitswap/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   ├── unwant.js
│   │   │   │   │   └── wantlist.js
│   │   │   │   ├── bitswap.js
│   │   │   │   ├── block/
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   └── stat.js
│   │   │   │   ├── block.js
│   │   │   │   ├── bootstrap/
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── list.js
│   │   │   │   │   └── rm.js
│   │   │   │   ├── bootstrap.js
│   │   │   │   ├── cat.js
│   │   │   │   ├── cid/
│   │   │   │   │   ├── base32.js
│   │   │   │   │   ├── bases.js
│   │   │   │   │   ├── codecs.js
│   │   │   │   │   ├── format.js
│   │   │   │   │   ├── hashes.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── cid.js
│   │   │   │   ├── config/
│   │   │   │   │   ├── edit.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── profile/
│   │   │   │   │   │   ├── apply.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── ls.js
│   │   │   │   │   ├── profile.js
│   │   │   │   │   ├── replace.js
│   │   │   │   │   └── show.js
│   │   │   │   ├── config.js
│   │   │   │   ├── daemon.js
│   │   │   │   ├── dag/
│   │   │   │   │   ├── export.js
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── import.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   └── resolve.js
│   │   │   │   ├── dag.js
│   │   │   │   ├── dht/
│   │   │   │   │   ├── find-peer.js
│   │   │   │   │   ├── find-providers.js
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── provide.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   └── query.js
│   │   │   │   ├── dht.js
│   │   │   │   ├── dns.js
│   │   │   │   ├── files/
│   │   │   │   │   ├── chmod.js
│   │   │   │   │   ├── cp.js
│   │   │   │   │   ├── flush.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── mkdir.js
│   │   │   │   │   ├── mv.js
│   │   │   │   │   ├── read.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   ├── touch.js
│   │   │   │   │   └── write.js
│   │   │   │   ├── files.js
│   │   │   │   ├── get.js
│   │   │   │   ├── id.js
│   │   │   │   ├── index.js
│   │   │   │   ├── init.js
│   │   │   │   ├── key/
│   │   │   │   │   ├── export.js
│   │   │   │   │   ├── gen.js
│   │   │   │   │   ├── import.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── list.js
│   │   │   │   │   ├── rename.js
│   │   │   │   │   └── rm.js
│   │   │   │   ├── key.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── name/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── publish.js
│   │   │   │   │   ├── pubsub/
│   │   │   │   │   │   ├── cancel.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   ├── state.js
│   │   │   │   │   │   └── subs.js
│   │   │   │   │   ├── pubsub.js
│   │   │   │   │   └── resolve.js
│   │   │   │   ├── name.js
│   │   │   │   ├── object/
│   │   │   │   │   ├── data.js
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── links.js
│   │   │   │   │   ├── new.js
│   │   │   │   │   ├── patch/
│   │   │   │   │   │   ├── add-link.js
│   │   │   │   │   │   ├── append-data.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   ├── rm-link.js
│   │   │   │   │   │   └── set-data.js
│   │   │   │   │   ├── patch.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   └── stat.js
│   │   │   │   ├── object.js
│   │   │   │   ├── pin/
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   └── rm.js
│   │   │   │   ├── pin.js
│   │   │   │   ├── ping.js
│   │   │   │   ├── pubsub/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── peers.js
│   │   │   │   │   ├── pub.js
│   │   │   │   │   └── sub.js
│   │   │   │   ├── pubsub.js
│   │   │   │   ├── refs-local.js
│   │   │   │   ├── refs.js
│   │   │   │   ├── repo/
│   │   │   │   │   ├── gc.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   └── version.js
│   │   │   │   ├── repo.js
│   │   │   │   ├── resolve.js
│   │   │   │   ├── shutdown.js
│   │   │   │   ├── stats/
│   │   │   │   │   ├── bitswap.js
│   │   │   │   │   ├── bw.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── repo.js
│   │   │   │   ├── stats.js
│   │   │   │   ├── swarm/
│   │   │   │   │   ├── addrs/
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── local.js
│   │   │   │   │   ├── addrs.js
│   │   │   │   │   ├── connect.js
│   │   │   │   │   ├── disconnect.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── peers.js
│   │   │   │   ├── swarm.js
│   │   │   │   └── version.js
│   │   │   ├── index.js
│   │   │   ├── parser.js
│   │   │   ├── types.ts
│   │   │   └── utils.js
│   │   ├── test/
│   │   │   ├── add.spec.js
│   │   │   ├── bitswap.spec.js
│   │   │   ├── block.spec.js
│   │   │   ├── bootstrap.spec.js
│   │   │   ├── cat.spec.js
│   │   │   ├── cid.spec.js
│   │   │   ├── config.spec.js
│   │   │   ├── daemon.spec.js
│   │   │   ├── dag.spec.js
│   │   │   ├── dht.spec.js
│   │   │   ├── dns.spec.js
│   │   │   ├── files/
│   │   │   │   ├── chmod.js
│   │   │   │   ├── cp.js
│   │   │   │   ├── flush.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── mkdir.js
│   │   │   │   ├── mv.js
│   │   │   │   ├── read.js
│   │   │   │   ├── rm.js
│   │   │   │   ├── stat.js
│   │   │   │   ├── touch.js
│   │   │   │   └── write.js
│   │   │   ├── general.spec.js
│   │   │   ├── get.spec.js
│   │   │   ├── id.spec.js
│   │   │   ├── init.spec.js
│   │   │   ├── key.spec.js
│   │   │   ├── ls.spec.js
│   │   │   ├── name-pubsub.spec.js
│   │   │   ├── name.spec.js
│   │   │   ├── object.spec.js
│   │   │   ├── pin.spec.js
│   │   │   ├── ping.spec.js
│   │   │   ├── progress-bar.spec.js
│   │   │   ├── pubsub.spec.js
│   │   │   ├── refs-local.spec.js
│   │   │   ├── refs.spec.js
│   │   │   ├── repo.spec.js
│   │   │   ├── resolve.spec.js
│   │   │   ├── swarm.spec.js
│   │   │   ├── utils/
│   │   │   │   ├── clean.js
│   │   │   │   ├── cli.js
│   │   │   │   ├── ipfs-exec.js
│   │   │   │   ├── match-iterable.js
│   │   │   │   ├── match-peer-id.js
│   │   │   │   └── platforms.js
│   │   │   └── version.spec.js
│   │   └── tsconfig.json
│   ├── ipfs-client/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   └── index.js
│   │   └── tsconfig.json
│   ├── ipfs-core/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── update-version.js
│   │   ├── src/
│   │   │   ├── block-storage.js
│   │   │   ├── components/
│   │   │   │   ├── add-all/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── add.js
│   │   │   │   ├── bitswap/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   ├── unwant.js
│   │   │   │   │   ├── wantlist-for-peer.js
│   │   │   │   │   └── wantlist.js
│   │   │   │   ├── block/
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── bootstrap/
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── clear.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── list.js
│   │   │   │   │   ├── reset.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── cat.js
│   │   │   │   ├── config/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── profiles.js
│   │   │   │   ├── dag/
│   │   │   │   │   ├── export.js
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── import.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   └── resolve.js
│   │   │   │   ├── dht.js
│   │   │   │   ├── dns.js
│   │   │   │   ├── files/
│   │   │   │   │   ├── chmod.js
│   │   │   │   │   ├── cp.js
│   │   │   │   │   ├── flush.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── mkdir.js
│   │   │   │   │   ├── mv.js
│   │   │   │   │   ├── read.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   ├── touch.js
│   │   │   │   │   ├── utils/
│   │   │   │   │   │   ├── add-link.js
│   │   │   │   │   │   ├── create-lock.js
│   │   │   │   │   │   ├── create-node.js
│   │   │   │   │   │   ├── dir-sharded.js
│   │   │   │   │   │   ├── hamt-constants.js
│   │   │   │   │   │   ├── hamt-utils.js
│   │   │   │   │   │   ├── persist.js
│   │   │   │   │   │   ├── remove-link.js
│   │   │   │   │   │   ├── to-async-iterator.js
│   │   │   │   │   │   ├── to-mfs-path.js
│   │   │   │   │   │   ├── to-path-components.js
│   │   │   │   │   │   ├── to-trail.js
│   │   │   │   │   │   ├── update-mfs-root.js
│   │   │   │   │   │   ├── update-tree.js
│   │   │   │   │   │   └── with-mfs-root.js
│   │   │   │   │   └── write.js
│   │   │   │   ├── get.js
│   │   │   │   ├── id.js
│   │   │   │   ├── index.js
│   │   │   │   ├── ipns.js
│   │   │   │   ├── is-online.js
│   │   │   │   ├── key/
│   │   │   │   │   ├── export.js
│   │   │   │   │   ├── gen.js
│   │   │   │   │   ├── import.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── info.js
│   │   │   │   │   ├── list.js
│   │   │   │   │   ├── rename.js
│   │   │   │   │   └── rm.js
│   │   │   │   ├── libp2p.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── name/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── publish.js
│   │   │   │   │   ├── pubsub/
│   │   │   │   │   │   ├── cancel.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   ├── state.js
│   │   │   │   │   │   ├── subs.js
│   │   │   │   │   │   └── utils.js
│   │   │   │   │   ├── resolve.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── network.js
│   │   │   │   ├── object/
│   │   │   │   │   ├── data.js
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── links.js
│   │   │   │   │   ├── new.js
│   │   │   │   │   ├── patch/
│   │   │   │   │   │   ├── add-link.js
│   │   │   │   │   │   ├── append-data.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   ├── rm-link.js
│   │   │   │   │   │   └── set-data.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   └── stat.js
│   │   │   │   ├── pin/
│   │   │   │   │   ├── add-all.js
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── rm-all.js
│   │   │   │   │   └── rm.js
│   │   │   │   ├── ping.js
│   │   │   │   ├── pubsub.js
│   │   │   │   ├── refs/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── local.js
│   │   │   │   ├── repo/
│   │   │   │   │   ├── gc.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   └── version.js
│   │   │   │   ├── resolve.js
│   │   │   │   ├── root.js
│   │   │   │   ├── start.js
│   │   │   │   ├── stats/
│   │   │   │   │   ├── bw.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── stop.js
│   │   │   │   ├── storage.js
│   │   │   │   ├── swarm/
│   │   │   │   │   ├── addrs.js
│   │   │   │   │   ├── connect.js
│   │   │   │   │   ├── disconnect.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── local-addrs.js
│   │   │   │   │   └── peers.js
│   │   │   │   └── version.js
│   │   │   ├── errors.js
│   │   │   ├── index.js
│   │   │   ├── ipns/
│   │   │   │   ├── index.js
│   │   │   │   ├── publisher.js
│   │   │   │   ├── republisher.js
│   │   │   │   ├── resolver.js
│   │   │   │   └── routing/
│   │   │   │       ├── config.js
│   │   │   │       ├── dht-datastore.js
│   │   │   │       ├── offline-datastore.js
│   │   │   │       └── pubsub-datastore.js
│   │   │   ├── mfs-preload.js
│   │   │   ├── preload.js
│   │   │   ├── types.ts
│   │   │   ├── utils/
│   │   │   │   ├── service.js
│   │   │   │   └── tlru.js
│   │   │   ├── utils.js
│   │   │   └── version.js
│   │   ├── test/
│   │   │   ├── add-all.spec.js
│   │   │   ├── block-storage.spec.js
│   │   │   ├── bootstrappers.js
│   │   │   ├── config.spec.js
│   │   │   ├── create-node.spec.js
│   │   │   ├── init.spec.js
│   │   │   ├── ipld.spec.js
│   │   │   ├── key-exchange.spec.js
│   │   │   ├── libp2p.spec.js
│   │   │   ├── mfs-preload.spec.js
│   │   │   ├── name.spec.js
│   │   │   ├── preload.spec.js
│   │   │   ├── pubsub.spec.js
│   │   │   ├── utils/
│   │   │   │   ├── clean.js
│   │   │   │   ├── codecs.js
│   │   │   │   ├── create-backend.js
│   │   │   │   ├── create-node.js
│   │   │   │   ├── create-repo.js
│   │   │   │   ├── mock-preload-node-utils.js
│   │   │   │   ├── mock-preload-node.js
│   │   │   │   └── wait-for.js
│   │   │   └── utils.spec.js
│   │   └── tsconfig.json
│   ├── ipfs-core-config/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── config.browser.js
│   │   │   ├── config.js
│   │   │   ├── dns.browser.js
│   │   │   ├── dns.js
│   │   │   ├── index.js
│   │   │   ├── init-assets.browser.js
│   │   │   ├── init-assets.js
│   │   │   ├── init-files/
│   │   │   │   └── init-docs/
│   │   │   │       ├── about.js
│   │   │   │       ├── contact.js
│   │   │   │       ├── docs/
│   │   │   │       │   └── index.js
│   │   │   │       ├── help.js
│   │   │   │       ├── index.js
│   │   │   │       ├── quick-start.js
│   │   │   │       ├── readme.js
│   │   │   │       ├── security-notes.js
│   │   │   │       └── tour/
│   │   │   │           └── 0.0-intro.js
│   │   │   ├── libp2p-pubsub-routers.browser.js
│   │   │   ├── libp2p-pubsub-routers.js
│   │   │   ├── libp2p.browser.js
│   │   │   ├── libp2p.js
│   │   │   ├── preload.browser.js
│   │   │   ├── preload.js
│   │   │   ├── repo.browser.js
│   │   │   ├── repo.js
│   │   │   └── utils/
│   │   │       ├── lru-datastore.js
│   │   │       └── tlru.js
│   │   └── tsconfig.json
│   ├── ipfs-core-types/
│   │   ├── CHANGELOG.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── bitswap/
│   │   │   │   └── index.ts
│   │   │   ├── block/
│   │   │   │   └── index.ts
│   │   │   ├── bootstrap/
│   │   │   │   └── index.ts
│   │   │   ├── config/
│   │   │   │   ├── index.ts
│   │   │   │   └── profiles/
│   │   │   │       └── index.ts
│   │   │   ├── dag/
│   │   │   │   └── index.ts
│   │   │   ├── dht/
│   │   │   │   └── index.ts
│   │   │   ├── diag/
│   │   │   │   └── index.ts
│   │   │   ├── files/
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   ├── key/
│   │   │   │   └── index.ts
│   │   │   ├── log/
│   │   │   │   └── index.ts
│   │   │   ├── name/
│   │   │   │   ├── index.ts
│   │   │   │   └── pubsub/
│   │   │   │       └── index.ts
│   │   │   ├── object/
│   │   │   │   ├── index.ts
│   │   │   │   └── patch/
│   │   │   │       └── index.ts
│   │   │   ├── pin/
│   │   │   │   ├── index.ts
│   │   │   │   └── remote/
│   │   │   │       ├── index.ts
│   │   │   │       └── service/
│   │   │   │           └── index.ts
│   │   │   ├── pubsub/
│   │   │   │   └── index.ts
│   │   │   ├── refs/
│   │   │   │   └── index.ts
│   │   │   ├── repo/
│   │   │   │   └── index.ts
│   │   │   ├── root.ts
│   │   │   ├── stats/
│   │   │   │   └── index.ts
│   │   │   ├── swarm/
│   │   │   │   └── index.ts
│   │   │   └── utils.ts
│   │   └── tsconfig.json
│   ├── ipfs-core-utils/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── agent.browser.js
│   │   │   ├── agent.js
│   │   │   ├── errors.js
│   │   │   ├── files/
│   │   │   │   ├── format-mode.js
│   │   │   │   ├── format-mtime.js
│   │   │   │   ├── normalise-candidate-multiple.js
│   │   │   │   ├── normalise-candidate-single.js
│   │   │   │   ├── normalise-content.browser.js
│   │   │   │   ├── normalise-content.js
│   │   │   │   ├── normalise-input-multiple.browser.js
│   │   │   │   ├── normalise-input-multiple.js
│   │   │   │   ├── normalise-input-single.browser.js
│   │   │   │   ├── normalise-input-single.js
│   │   │   │   └── utils.js
│   │   │   ├── index.js
│   │   │   ├── mode-to-string.js
│   │   │   ├── multibases.js
│   │   │   ├── multicodecs.js
│   │   │   ├── multihashes.js
│   │   │   ├── multipart-request.browser.js
│   │   │   ├── multipart-request.js
│   │   │   ├── multipart-request.node.js
│   │   │   ├── pins/
│   │   │   │   └── normalise-input.js
│   │   │   ├── to-cid-and-path.js
│   │   │   ├── to-url-string.js
│   │   │   ├── types.ts
│   │   │   └── with-timeout-option.js
│   │   ├── test/
│   │   │   ├── files/
│   │   │   │   ├── format-mode.spec.js
│   │   │   │   ├── format-mtime.spec.js
│   │   │   │   ├── normalise-input-multiple.spec.js
│   │   │   │   └── normalise-input-single.spec.js
│   │   │   ├── fixtures/
│   │   │   │   └── file.txt
│   │   │   ├── pins/
│   │   │   │   └── normalise-input.spec.js
│   │   │   └── tests.spec.js
│   │   └── tsconfig.json
│   ├── ipfs-daemon/
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   └── index.js
│   │   ├── test/
│   │   │   └── index.spec.js
│   │   └── tsconfig.json
│   ├── ipfs-grpc-client/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── core-api/
│   │   │   │   ├── add-all.js
│   │   │   │   ├── files/
│   │   │   │   │   ├── ls.js
│   │   │   │   │   └── write.js
│   │   │   │   ├── id.js
│   │   │   │   └── pubsub/
│   │   │   │       ├── subscribe.js
│   │   │   │       ├── subscriptions.js
│   │   │   │       └── unsubscribe.js
│   │   │   ├── grpc/
│   │   │   │   ├── transport.browser.js
│   │   │   │   ├── transport.js
│   │   │   │   └── transport.node.js
│   │   │   ├── index.js
│   │   │   ├── types.ts
│   │   │   └── utils/
│   │   │       ├── bidi-to-duplex.js
│   │   │       ├── client-stream-to-promise.js
│   │   │       ├── load-services.js
│   │   │       ├── server-stream-to-iterator.js
│   │   │       ├── to-headers.js
│   │   │       └── unary-to-promise.js
│   │   ├── test/
│   │   │   ├── agent.js
│   │   │   ├── node.js
│   │   │   └── utils.spec.js
│   │   └── tsconfig.json
│   ├── ipfs-grpc-protocol/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── update-index.js
│   │   ├── src/
│   │   │   ├── common.proto
│   │   │   ├── index.js
│   │   │   ├── mfs.proto
│   │   │   ├── pubsub.proto
│   │   │   └── root.proto
│   │   └── tsconfig.json
│   ├── ipfs-grpc-server/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── endpoints/
│   │   │   │   ├── add.js
│   │   │   │   ├── id.js
│   │   │   │   ├── mfs/
│   │   │   │   │   ├── ls.js
│   │   │   │   │   └── write.js
│   │   │   │   └── pubsub/
│   │   │   │       ├── subscribe.js
│   │   │   │       ├── subscriptions.js
│   │   │   │       └── unsubscribe.js
│   │   │   ├── index.js
│   │   │   ├── types.ts
│   │   │   └── utils/
│   │   │       ├── encode-mtime.js
│   │   │       ├── load-services.js
│   │   │       ├── web-socket-message-channel.js
│   │   │       └── web-socket-server.js
│   │   ├── test/
│   │   │   ├── add.spec.js
│   │   │   ├── id.spec.js
│   │   │   ├── mfs/
│   │   │   │   ├── ls.spec.js
│   │   │   │   └── write.spec.js
│   │   │   └── utils/
│   │   │       ├── channel.js
│   │   │       └── server.js
│   │   └── tsconfig.json
│   ├── ipfs-http-client/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── maintainer.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── add-all.js
│   │   │   ├── add.js
│   │   │   ├── bitswap/
│   │   │   │   ├── index.js
│   │   │   │   ├── stat.js
│   │   │   │   ├── unwant.js
│   │   │   │   ├── wantlist-for-peer.js
│   │   │   │   └── wantlist.js
│   │   │   ├── block/
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── put.js
│   │   │   │   ├── rm.js
│   │   │   │   └── stat.js
│   │   │   ├── bootstrap/
│   │   │   │   ├── add.js
│   │   │   │   ├── clear.js
│   │   │   │   ├── index.js
│   │   │   │   ├── list.js
│   │   │   │   ├── reset.js
│   │   │   │   └── rm.js
│   │   │   ├── cat.js
│   │   │   ├── commands.js
│   │   │   ├── config/
│   │   │   │   ├── get-all.js
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── profiles/
│   │   │   │   │   ├── apply.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── list.js
│   │   │   │   ├── replace.js
│   │   │   │   └── set.js
│   │   │   ├── dag/
│   │   │   │   ├── export.js
│   │   │   │   ├── get.js
│   │   │   │   ├── import.js
│   │   │   │   ├── index.js
│   │   │   │   ├── put.js
│   │   │   │   └── resolve.js
│   │   │   ├── dht/
│   │   │   │   ├── find-peer.js
│   │   │   │   ├── find-provs.js
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── map-event.js
│   │   │   │   ├── provide.js
│   │   │   │   ├── put.js
│   │   │   │   ├── query.js
│   │   │   │   └── response-types.js
│   │   │   ├── diag/
│   │   │   │   ├── cmds.js
│   │   │   │   ├── index.js
│   │   │   │   ├── net.js
│   │   │   │   └── sys.js
│   │   │   ├── dns.js
│   │   │   ├── files/
│   │   │   │   ├── chmod.js
│   │   │   │   ├── cp.js
│   │   │   │   ├── flush.js
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── mkdir.js
│   │   │   │   ├── mv.js
│   │   │   │   ├── read.js
│   │   │   │   ├── rm.js
│   │   │   │   ├── stat.js
│   │   │   │   ├── touch.js
│   │   │   │   └── write.js
│   │   │   ├── get-endpoint-config.js
│   │   │   ├── get.js
│   │   │   ├── id.js
│   │   │   ├── index.js
│   │   │   ├── is-online.js
│   │   │   ├── key/
│   │   │   │   ├── export.js
│   │   │   │   ├── gen.js
│   │   │   │   ├── import.js
│   │   │   │   ├── index.js
│   │   │   │   ├── info.js
│   │   │   │   ├── list.js
│   │   │   │   ├── rename.js
│   │   │   │   └── rm.js
│   │   │   ├── lib/
│   │   │   │   ├── abort-signal.js
│   │   │   │   ├── configure.js
│   │   │   │   ├── core.js
│   │   │   │   ├── http-rpc-wire-format.js
│   │   │   │   ├── mode-to-string.js
│   │   │   │   ├── object-to-camel-with-metadata.js
│   │   │   │   ├── object-to-camel.js
│   │   │   │   ├── parse-mtime.js
│   │   │   │   ├── resolve.js
│   │   │   │   └── to-url-search-params.js
│   │   │   ├── log/
│   │   │   │   ├── index.js
│   │   │   │   ├── level.js
│   │   │   │   ├── ls.js
│   │   │   │   └── tail.js
│   │   │   ├── ls.js
│   │   │   ├── mount.js
│   │   │   ├── name/
│   │   │   │   ├── index.js
│   │   │   │   ├── publish.js
│   │   │   │   ├── pubsub/
│   │   │   │   │   ├── cancel.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── state.js
│   │   │   │   │   └── subs.js
│   │   │   │   └── resolve.js
│   │   │   ├── object/
│   │   │   │   ├── data.js
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── links.js
│   │   │   │   ├── new.js
│   │   │   │   ├── patch/
│   │   │   │   │   ├── add-link.js
│   │   │   │   │   ├── append-data.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── rm-link.js
│   │   │   │   │   └── set-data.js
│   │   │   │   ├── put.js
│   │   │   │   └── stat.js
│   │   │   ├── pin/
│   │   │   │   ├── add-all.js
│   │   │   │   ├── add.js
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── remote/
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── rm-all.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   ├── service/
│   │   │   │   │   │   ├── add.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   ├── ls.js
│   │   │   │   │   │   ├── rm.js
│   │   │   │   │   │   └── utils.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── rm-all.js
│   │   │   │   └── rm.js
│   │   │   ├── ping.js
│   │   │   ├── pubsub/
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── peers.js
│   │   │   │   ├── publish.js
│   │   │   │   ├── subscribe.js
│   │   │   │   ├── subscription-tracker.js
│   │   │   │   └── unsubscribe.js
│   │   │   ├── refs/
│   │   │   │   ├── index.js
│   │   │   │   └── local.js
│   │   │   ├── repo/
│   │   │   │   ├── gc.js
│   │   │   │   ├── index.js
│   │   │   │   ├── stat.js
│   │   │   │   └── version.js
│   │   │   ├── resolve.js
│   │   │   ├── start.js
│   │   │   ├── stats/
│   │   │   │   ├── bw.js
│   │   │   │   └── index.js
│   │   │   ├── stop.js
│   │   │   ├── swarm/
│   │   │   │   ├── addrs.js
│   │   │   │   ├── connect.js
│   │   │   │   ├── disconnect.js
│   │   │   │   ├── index.js
│   │   │   │   ├── local-addrs.js
│   │   │   │   └── peers.js
│   │   │   ├── types.ts
│   │   │   └── version.js
│   │   ├── test/
│   │   │   ├── commands.spec.js
│   │   │   ├── constructor.spec.js
│   │   │   ├── dag.spec.js
│   │   │   ├── diag.spec.js
│   │   │   ├── endpoint-config.spec.js
│   │   │   ├── exports.spec.js
│   │   │   ├── files.spec.js
│   │   │   ├── fixtures/
│   │   │   │   ├── .gitattributes
│   │   │   │   ├── 15mb.random
│   │   │   │   ├── r-config.json
│   │   │   │   ├── ssl/
│   │   │   │   │   ├── cert.pem
│   │   │   │   │   └── privkey.pem
│   │   │   │   ├── test-folder/
│   │   │   │   │   ├── .hiddenTest.txt
│   │   │   │   │   ├── add
│   │   │   │   │   ├── cat
│   │   │   │   │   ├── files/
│   │   │   │   │   │   ├── hello.txt
│   │   │   │   │   │   └── ipfs.txt
│   │   │   │   │   ├── ipfs-add
│   │   │   │   │   ├── ls
│   │   │   │   │   └── version
│   │   │   │   ├── testconfig.json
│   │   │   │   └── testfile.txt
│   │   │   ├── key.spec.js
│   │   │   ├── lib.error-handler.spec.js
│   │   │   ├── log.spec.js
│   │   │   ├── node/
│   │   │   │   ├── agent.js
│   │   │   │   ├── custom-headers.js
│   │   │   │   ├── request-api.js
│   │   │   │   └── swarm.js
│   │   │   ├── node.js
│   │   │   ├── ping.spec.js
│   │   │   ├── pubsub.spec.js
│   │   │   ├── repo.spec.js
│   │   │   ├── stats.spec.js
│   │   │   └── utils/
│   │   │       ├── factory.js
│   │   │       └── throws-async.js
│   │   └── tsconfig.json
│   ├── ipfs-http-gateway/
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.js
│   │   │   ├── resources/
│   │   │   │   ├── gateway.js
│   │   │   │   └── index.js
│   │   │   ├── routes/
│   │   │   │   ├── gateway.js
│   │   │   │   └── index.js
│   │   │   ├── types.ts
│   │   │   └── utils/
│   │   │       └── path.js
│   │   ├── test/
│   │   │   ├── fixtures/
│   │   │   │   ├── index.html
│   │   │   │   └── nested-folder/
│   │   │   │       ├── hello.txt
│   │   │   │       ├── ipfs.txt
│   │   │   │       └── nested.html
│   │   │   ├── routes.spec.js
│   │   │   └── utils/
│   │   │       └── http.js
│   │   └── tsconfig.json
│   ├── ipfs-http-response/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── dir-view/
│   │   │   │   ├── index.js
│   │   │   │   └── style.js
│   │   │   ├── index.js
│   │   │   ├── resolver.js
│   │   │   └── utils/
│   │   │       ├── content-type.js
│   │   │       └── path.js
│   │   ├── test/
│   │   │   ├── fixtures/
│   │   │   │   ├── .gitattributes
│   │   │   │   ├── test-folder/
│   │   │   │   │   ├── files/
│   │   │   │   │   │   └── hello.txt
│   │   │   │   │   ├── holmes.txt
│   │   │   │   │   └── pp.txt
│   │   │   │   ├── test-mime-types/
│   │   │   │   │   ├── index.html
│   │   │   │   │   └── pp.txt
│   │   │   │   ├── test-site/
│   │   │   │   │   ├── holmes.txt
│   │   │   │   │   ├── index.html
│   │   │   │   │   └── pp.txt
│   │   │   │   └── testfile.txt
│   │   │   ├── index.spec.js
│   │   │   ├── resolver.spec.js
│   │   │   └── utils/
│   │   │       └── web-response-env.js
│   │   └── tsconfig.json
│   ├── ipfs-http-server/
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── update-version.js
│   │   ├── src/
│   │   │   ├── api/
│   │   │   │   ├── resources/
│   │   │   │   │   ├── bitswap.js
│   │   │   │   │   ├── block.js
│   │   │   │   │   ├── bootstrap.js
│   │   │   │   │   ├── config.js
│   │   │   │   │   ├── dag.js
│   │   │   │   │   ├── dht.js
│   │   │   │   │   ├── dns.js
│   │   │   │   │   ├── files/
│   │   │   │   │   │   ├── chmod.js
│   │   │   │   │   │   ├── cp.js
│   │   │   │   │   │   ├── flush.js
│   │   │   │   │   │   ├── ls.js
│   │   │   │   │   │   ├── mkdir.js
│   │   │   │   │   │   ├── mv.js
│   │   │   │   │   │   ├── read.js
│   │   │   │   │   │   ├── rm.js
│   │   │   │   │   │   ├── stat.js
│   │   │   │   │   │   ├── touch.js
│   │   │   │   │   │   ├── utils/
│   │   │   │   │   │   │   └── parse-mtime.js
│   │   │   │   │   │   └── write.js
│   │   │   │   │   ├── files-regular.js
│   │   │   │   │   ├── id.js
│   │   │   │   │   ├── key.js
│   │   │   │   │   ├── name.js
│   │   │   │   │   ├── object.js
│   │   │   │   │   ├── pin.js
│   │   │   │   │   ├── ping.js
│   │   │   │   │   ├── pubsub.js
│   │   │   │   │   ├── repo.js
│   │   │   │   │   ├── resolve.js
│   │   │   │   │   ├── shutdown.js
│   │   │   │   │   ├── stats.js
│   │   │   │   │   ├── swarm.js
│   │   │   │   │   └── version.js
│   │   │   │   └── routes/
│   │   │   │       ├── bitswap.js
│   │   │   │       ├── block.js
│   │   │   │       ├── bootstrap.js
│   │   │   │       ├── config.js
│   │   │   │       ├── dag.js
│   │   │   │       ├── debug.js
│   │   │   │       ├── dht.js
│   │   │   │       ├── dns.js
│   │   │   │       ├── files-regular.js
│   │   │   │       ├── files.js
│   │   │   │       ├── id.js
│   │   │   │       ├── index.js
│   │   │   │       ├── key.js
│   │   │   │       ├── name.js
│   │   │   │       ├── object.js
│   │   │   │       ├── pin.js
│   │   │   │       ├── ping.js
│   │   │   │       ├── pubsub.js
│   │   │   │       ├── repo.js
│   │   │   │       ├── resolve.js
│   │   │   │       ├── shutdown.js
│   │   │   │       ├── stats.js
│   │   │   │       ├── swarm.js
│   │   │   │       ├── version.js
│   │   │   │       └── webui.js
│   │   │   ├── error-handler.js
│   │   │   ├── index.js
│   │   │   ├── types.ts
│   │   │   ├── utils/
│   │   │   │   ├── joi.js
│   │   │   │   ├── multipart-request-parser.js
│   │   │   │   └── stream-response.js
│   │   │   └── version.js
│   │   ├── test/
│   │   │   ├── cors.js
│   │   │   ├── fixtures/
│   │   │   │   └── test-data/
│   │   │   │       ├── badconfig
│   │   │   │       ├── badnode.json
│   │   │   │       └── node.json
│   │   │   ├── inject/
│   │   │   │   ├── bitswap.js
│   │   │   │   ├── block.js
│   │   │   │   ├── bootstrap.js
│   │   │   │   ├── browser-headers.js
│   │   │   │   ├── config.js
│   │   │   │   ├── dag.js
│   │   │   │   ├── dht.js
│   │   │   │   ├── dns.js
│   │   │   │   ├── files.js
│   │   │   │   ├── id.js
│   │   │   │   ├── key.js
│   │   │   │   ├── mfs/
│   │   │   │   │   ├── chmod.js
│   │   │   │   │   ├── cp.js
│   │   │   │   │   ├── flush.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── mkdir.js
│   │   │   │   │   ├── mv.js
│   │   │   │   │   ├── read.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   ├── touch.js
│   │   │   │   │   └── write.js
│   │   │   │   ├── mfs.js
│   │   │   │   ├── name.js
│   │   │   │   ├── object.js
│   │   │   │   ├── pin.js
│   │   │   │   ├── ping.js
│   │   │   │   ├── pubsub.js
│   │   │   │   ├── repo.js
│   │   │   │   ├── resolve.js
│   │   │   │   ├── shutdown.js
│   │   │   │   ├── stats.js
│   │   │   │   ├── swarm.js
│   │   │   │   └── version.js
│   │   │   ├── node.js
│   │   │   ├── routes.js
│   │   │   └── utils/
│   │   │       ├── all-ndjson.js
│   │   │       ├── http.js
│   │   │       ├── match-iterable.js
│   │   │       └── test-http-method.js
│   │   └── tsconfig.json
│   ├── ipfs-message-port-client/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── block.js
│   │   │   ├── client/
│   │   │   │   ├── error.js
│   │   │   │   ├── query.js
│   │   │   │   ├── service.js
│   │   │   │   └── transport.js
│   │   │   ├── client.js
│   │   │   ├── core.js
│   │   │   ├── dag.js
│   │   │   ├── files.js
│   │   │   ├── index.js
│   │   │   └── interface.ts
│   │   ├── test/
│   │   │   ├── interface-message-port-client.js
│   │   │   └── util/
│   │   │       ├── client.js
│   │   │       └── worker.js
│   │   └── tsconfig.json
│   ├── ipfs-message-port-protocol/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── block.js
│   │   │   ├── cid.js
│   │   │   ├── core.js
│   │   │   ├── dag.js
│   │   │   ├── data.ts
│   │   │   ├── error.js
│   │   │   ├── files.ts
│   │   │   ├── index.js
│   │   │   ├── root.ts
│   │   │   └── rpc.ts
│   │   ├── test/
│   │   │   ├── block.browser.js
│   │   │   ├── browser.js
│   │   │   ├── cid.browser.js
│   │   │   ├── cid.spec.js
│   │   │   ├── core.browser.js
│   │   │   ├── dag.browser.js
│   │   │   ├── dag.spec.js
│   │   │   ├── node.js
│   │   │   └── util.js
│   │   └── tsconfig.json
│   └── ipfs-message-port-server/
│       ├── .aegir.js
│       ├── CHANGELOG.md
│       ├── CODE_OF_CONDUCT.md
│       ├── CONTRIBUTING.md
│       ├── COPYRIGHT
│       ├── LICENSE
│       ├── LICENSE-APACHE
│       ├── LICENSE-MIT
│       ├── README.md
│       ├── package.json
│       ├── src/
│       │   ├── block.js
│       │   ├── core.js
│       │   ├── dag.js
│       │   ├── files.js
│       │   ├── index.js
│       │   ├── server.js
│       │   └── service.js
│       ├── test/
│       │   ├── basic.spec.js
│       │   ├── node.js
│       │   └── transfer.spec.js
│       └── tsconfig.json
└── scripts/
    └── node-globals.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
*



================================================
FILE: .editorconfig
================================================
[*]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf


================================================
FILE: .gitattributes
================================================
* text=auto
**/test/fixtures/** text eol=lf
**/test/gateway/** text eol=lf
**/src/init-files/** text eol=lf

*.data binary
*.png binary
*.jpg binary


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
 - name: Getting Help on IPFS
   url: https://ipfs.io/help
   about: All information about how and where to get help on IPFS
 - name: IPFS Official Forum
   url: https://discuss.ipfs.io
   about: For general questions, support requests and discussions


================================================
FILE: .github/ISSUE_TEMPLATE/open_an_issue.md
================================================
---
name: Open an issue
about: For reporting bugs or errors in the JavaScript IPFS implementation
title: ''
labels: need/triage
assignees: ''
---

<!--
Thank you for reporting an issue.

This issue tracker is for bugs found within the JavaScript implementation of IPFS.

If you are asking a question about how to use IPFS, please ask on https://discuss.ipfs.io

Otherwise please fill in as much of the template below as possible.
-->

- **Version**:
<!--
Output of `jsipfs version --all` if using the CLI or `await ipfs.version()` if using the instance
-->

- **Platform**:
<!--
Output of `uname -a` (UNIX), or version and 32 or 64-bit (Windows). If using in a Browser, please share the browser version as well
-->

- **Subsystem**:
<!--
If known, please specify affected core module name (e.g Bitswap, libp2p, etc)
-->

#### Severity:
<!--
One of following:
  Critical - System crash, application panic.
  High - The main functionality of the application does not work, API breakage, repo format breakage, etc.
  Medium - A non-essential functionality does not work, performance issues, etc.
  Low - An optional functionality does not work.
  Very Low - Translation or documentation mistake. Something that won't give anyone a bad day.
-->

#### Description:
<!--
- What you did
- What happened
- What you expected to happen
-->

#### Steps to reproduce the error:
<!--
If possible, please provide code that demonstrates the problem, keeping it as simple and free of external dependencies as you are able
-->



================================================
FILE: .github/config.yml
================================================
# Configuration for welcome - https://github.com/behaviorbot/welcome

# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome
# Comment to be posted to on first time issues
newIssueWelcomeComment: >
  Thank you for submitting your first issue to this repository! A maintainer
  will be here shortly to triage and review.

  In the meantime, please double-check that you have provided all the
  necessary information to make this process easy! Any information that can
  help save additional round trips is useful! We currently aim to give
  initial feedback within **two business days**. If this does not happen, feel
  free to leave a comment.

  Please keep an eye on how this issue will be labeled, as labels give an
  overview of priorities, assignments and additional actions requested by the
  maintainers:

    - "Priority" labels will show how urgent this is for the team.
    - "Status" labels will show if this is ready to be worked on, blocked, or in progress.
    - "Need" labels will indicate if additional input or analysis is required.

  Finally, remember to use https://discuss.ipfs.io if you just need general
  support.

# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome
# Comment to be posted to on PRs from first time contributors in your repository
newPRWelcomeComment: >
  Thank you for submitting this PR!

  A maintainer will be here shortly to review it.

  We are super grateful, but we are also overloaded! Help us by making sure
  that:

    * The context for this PR is clear, with relevant discussion, decisions
      and stakeholders linked/mentioned.

    * Your contribution itself is clear (code comments, self-review for the
      rest) and in its best form. Follow the [code contribution
      guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md#code-contribution-guidelines)
      if they apply.

  Getting other community members to do a review would be great help too on
  complex PRs (you can ask in the chats/forums). If you are unsure about
  something, just leave us a comment.

  Next steps:

    * A maintainer will triage and assign priority to this PR, commenting on
      any missing things and potentially assigning a reviewer for high
      priority items.

    * The PR gets reviews, discussed and approvals as needed.

    * The PR is merged by maintainers when it has been approved and comments addressed.

  We currently aim to provide initial feedback/triaging within **two business
  days**. Please keep an eye on any labelling actions, as these will indicate
  priorities and status of your contribution.

  We are very grateful for your contribution!


# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge
# Comment to be posted to on pull requests merged by a first time user
# Currently disabled
#firstPRMergeComment: ""


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: npm
  directory: "/"
  schedule:
    interval: daily
    time: "10:00"
  open-pull-requests-limit: 0
  commit-message:
    prefix: "deps"
    prefix-development: "deps(dev)"


================================================
FILE: .github/workflows/examples.yml
================================================
name: Examples
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - '**'

jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master

  # test-examples:
  #   name: Test example ${{ matrix.example.name }}
  #   needs: build
  #   runs-on: ubuntu-latest
  #   continue-on-error: true
  #   strategy:
  #     matrix:
  #       example:
  #         - name: ipfs browser add readable stream
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-add-readable-stream.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs browser angular
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-angular.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core,ipfs-core-types@$PWD/packages/ipfs-core-types
  #         - name: ipfs browser browserify
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-browserify.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs browser react
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-create-react-app.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs browser exchange files
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-exchange-files.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core,ipfs@$PWD/packages/ipfs,ipfs-core-types@$PWD/packages/ipfs-core-types,ipfs-http-client@$PWD/packages/ipfs-http-client
  #         - name: ipfs browser ipns publish
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-ipns-publish.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core,ipfs-http-client@$PWD/packages/ipfs-http-client
  #         - name: ipfs browser mfs
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-mfs.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         # fails with No native build was found for platform=darwin arch=x64 runtime=node abi=93 uv=1 libc=glibc node=16.13.0 webpack=true
  #         #- name: ipfs browser nextjs
  #         #  repo: https://github.com/ipfs-examples/js-ipfs-browser-nextjs.git
  #         #  deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs browser parceljs
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-parceljs.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs browser readable stream
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-readablestream.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs browser service worker
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-service-worker.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core,ipfs-message-port-client@$PWD/packages/ipfs-message-port-client,ipfs-message-port-protocol@$PWD/packages/ipfs-message-port-protocol,ipfs-message-port-server@$PWD/packages/ipfs-message-port-server
  #         - name: ipfs browser sharing across tabs
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-sharing-node-across-tabs.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core,ipfs-message-port-client@$PWD/packages/ipfs-message-port-client,ipfs-message-port-server@$PWD/packages/ipfs-message-port-server
  #         - name: ipfs browser video streaming
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-video-streaming.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs browser vue
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-vue.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs browser webpack
  #           repo: https://github.com/ipfs-examples/js-ipfs-browser-webpack.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs circuit relaying
  #           repo: https://github.com/ipfs-examples/js-ipfs-circuit-relaying.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core,ipfs-http-client@$PWD/packages/ipfs-http-client
  #         - name: ipfs custom ipfs repo
  #           repo: https://github.com/ipfs-examples/js-ipfs-custom-ipfs-repo.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs custom ipld formats
  #           repo: https://github.com/ipfs-examples/js-ipfs-custom-ipld-formats.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core,ipfs-daemon@$PWD/packages/ipfs-daemon,ipfs-http-client@$PWD/packages/ipfs-http-client
  #         - name: ipfs custom libp2p
  #           repo: https://github.com/ipfs-examples/js-ipfs-custom-libp2p.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs-http-client browser pubsub
  #           repo: https://github.com/ipfs-examples/js-ipfs-http-client-browser-pubsub.git
  #           deps: ipfs-http-client@$PWD/packages/ipfs-http-client,ipfs@$PWD/packages/ipfs
  #         - name: ipfs-http-client bundle webpack
  #           repo: https://github.com/ipfs-examples/js-ipfs-http-client-bundle-webpack.git
  #           deps: ipfs-http-client@$PWD/packages/ipfs-http-client,ipfs@$PWD/packages/ipfs
  #         - name: ipfs-http-client name api
  #           repo: https://github.com/ipfs-examples/js-ipfs-http-client-name-api.git
  #           deps: ipfs-http-client@$PWD/packages/ipfs-http-client
  #         - name: ipfs-http-client upload file
  #           repo: https://github.com/ipfs-examples/js-ipfs-http-client-upload-file.git
  #           deps: ipfs@$PWD/packages/ipfs,ipfs-http-client@$PWD/packages/ipfs-http-client
  #         - name: ipfs 101
  #           repo: https://github.com/ipfs-examples/js-ipfs-101.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs-client add files
  #           repo: https://github.com/ipfs-examples/js-ipfs-ipfs-client-add-files.git
  #           deps: ipfs@$PWD/packages/ipfs,ipfs-client@$PWD/packages/ipfs-client
  #         - name: ipfs electron js
  #           repo: https://github.com/ipfs-examples/js-ipfs-run-in-electron.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: ipfs running multiple nodes
  #           repo: https://github.com/ipfs-examples/js-ipfs-running-multiple-nodes.git
  #           deps: ipfs@$PWD/packages/ipfs
  #         - name: ipfs traverse ipld graphs
  #           repo: https://github.com/ipfs-examples/js-ipfs-traverse-ipld-graphs.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: types with typescript
  #           repo: https://github.com/ipfs-examples/js-ipfs-types-use-ipfs-from-ts.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #         - name: types with typed js
  #           repo: https://github.com/ipfs-examples/js-ipfs-types-use-ipfs-from-typed-js.git
  #           deps: ipfs-core@$PWD/packages/ipfs-core
  #   steps:
  #     - uses: actions/checkout@v2
  #     - uses: actions/setup-node@v2
  #       with:
  #         node-version: lts/*
  #     - uses: ipfs/aegir/actions/cache-node-modules@master
  #     - uses: GabrielBB/xvfb-action@v1
  #       name: Run npm run test:external -- -- -- ${{ matrix.example.repo }} --deps ${{ matrix.example.deps }}
  #       with:
  #         run: npm run test:external -- -- -- ${{ matrix.example.repo }} --deps ${{ matrix.example.deps }}


================================================
FILE: .github/workflows/externals.yml
================================================
name: Externals
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - '**'

jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master

  test-externals:
    name: Test external ${{ matrix.external.name }}
    needs: build
    runs-on: ubuntu-latest
    strategy:
      matrix:
        external:
          - name: ipfs webui
            repo: https://github.com/ipfs-shipyard/ipfs-webui.git
            deps: ipfs@$PWD/packages/ipfs
          - name: ipfs companion
            repo: https://github.com/ipfs-shipyard/ipfs-companion.git
            deps: ipfs@$PWD/packages/ipfs
          - name: orbit-db-io
            repo: https://github.com/orbitdb/orbit-db-io.git
            deps: ipfs@$PWD/packages/ipfs
          - name: ipfs-log
            repo: https://github.com/orbitdb/ipfs-log.git
            deps: ipfs@$PWD/packages/ipfs,orbit-db-io@next
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - uses: GabrielBB/xvfb-action@v1
        name: Run npm run test:external -- -- -- ${{ matrix.external.repo }} --deps ${{ matrix.external.deps }} --branch ${{ matrix.external.branch }}
        continue-on-error: true
        with:
          run: npm run test:external -- -- -- ${{ matrix.external.repo }} --deps ${{ matrix.external.deps }} --branch ${{ matrix.external.branch }}


================================================
FILE: .github/workflows/stale.yml
================================================
name: Close and mark stale issue

on:
  schedule:
  - cron: '0 0 * * *'

jobs:
  stale:

    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write

    steps:
    - uses: actions/stale@v3
      with:
        repo-token: ${{ secrets.GITHUB_TOKEN }}
        stale-issue-message: 'Oops, seems like we needed more information for this issue, please comment with more details or this issue will be closed in 7 days.'
        close-issue-message: 'This issue was closed because it is missing author input.'
        stale-issue-label: 'kind/stale'
        any-of-labels: 'need/author-input'
        exempt-issue-labels: 'need/triage,need/community-input,need/maintainer-input,need/maintainers-input,need/analysis,status/blocked,status/in-progress,status/ready,status/deferred,status/inactive'
        days-before-issue-stale: 6
        days-before-issue-close: 7
        enable-statistics: true


================================================
FILE: .github/workflows/test.yml
================================================
name: Test
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - '**'

jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master

  check:
    name: Check
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: |
          npm run lint
          npm run dep-check -- -- -- -p
          npm run dep-check -- -- -- -- --unused

  test-node:
    name: Unit tests node ${{ matrix.node }} ${{ matrix.os }}
    needs: build
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        node: [lts/*]
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run test:node
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          flags: node

  test-chrome:
    name: Unit tests chrome
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run test:chrome
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          flags: chrome

  test-chrome-webworker:
    name: Unit tests chrome-webworker
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run test:chrome-webworker
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          flags: chrome-webworker

  test-firefox:
    name: Unit tests firefox
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run test:firefox
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          flags: firefox

  test-firefox-webworker:
    name: Unit tests firefox-webworker
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npx playwright install --with-deps
      - run: npm run test:firefox-webworker
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          flags: firefox-webworker

  test-electron-main:
    name: Unit tests electron-main
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - uses: GabrielBB/xvfb-action@v1
        with:
          run: npm run test:electron-main
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          flags: electron-main

  test-interop:
    name: Interop tests ${{ matrix.project }} ${{ matrix.type }}
    needs: build
    runs-on: ubuntu-latest
    strategy:
      matrix:
        type:
          - node
          - browser
          #- electron-main
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run test:interop -- -- -- -t ${{ matrix.type }}
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          flags: interop-${{ matrix.type }}

  test-interface:
    name: Interface tests ${{ matrix.suite }} ${{ matrix.type }}
    needs: build
    runs-on: ubuntu-latest
    strategy:
      matrix:
        type:
          - node
          - browser
          #- electron-main
        suite:
          - test:interface:core
          - test:interface:client
          - test:interface:http-go
          - test:interface:http-js
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npm run ${{ matrix.suite }} -- -- -t ${{ matrix.type }}
      - uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # v2.1.0
        with:
          flags: interface-${{ matrix.type }}

  test-interface-message-port-client:
    name: Interface tests test:interface:message-port-client browser
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - run: npx playwright install --with-deps
      - run: npm run test:interface:message-port-client

  release:
    runs-on: ubuntu-latest
    needs: [
      test-node,
      test-chrome,
      test-chrome-webworker,
      test-firefox,
      test-firefox-webworker,
      test-electron-main,
      test-interop,
      test-interface,
      test-interface-message-port-client
    ]
    if: github.event_name == 'push' && github.ref == 'refs/heads/master'
    steps:
      - uses: GoogleCloudPlatform/release-please-action@v2
        id: release
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          command: manifest
          release-type: node
          manifest-file: .release-please-manifest.json
          config-file: .release-please.json
          changelog-types: |
            [
              { "type": "feat", "section": "Features", "hidden": false },
              { "type": "fix", "section": "Bug Fixes", "hidden": false },
              { "type": "chore", "section": "Trivial Changes", "hidden": false },
              { "type": "docs", "section": "Documentation", "hidden": false },
              { "type": "deps", "section": "Dependencies", "hidden": false }
            ]
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v2
        with:
          node-version: lts/*
          registry-url: 'https://registry.npmjs.org'
      - uses: ipfs/aegir/actions/cache-node-modules@master
      - uses: ipfs/aegir/actions/docker-login@master
        with:
          docker-token: ${{ secrets.DOCKER_TOKEN }}
          docker-username: ${{ secrets.DOCKER_USERNAME }}
      - if: ${{ steps.release.outputs.releases_created }}
        name: Run release version
        run: |
          git update-index --assume-unchanged packages/ipfs-core/src/version.js packages/ipfs-http-server/src/version.js packages/ipfs/src/package.js
          npm run --if-present release
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
      - if: ${{ !steps.release.outputs.releases_created }}
        name: Run release rc
        run: |
            git update-index --assume-unchanged packages/ipfs-core/src/version.js packages/ipfs-http-server/src/version.js packages/ipfs/src/package.js
            npm run --if-present release:rc
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}


================================================
FILE: .gitignore
================================================
# Logs
logs
*.log
npm-debug.log*
package-lock.json
yarn.lock
tsconfig-types.aegir.json

# Coverage directory used by tools like istanbul
coverage
.coverage
.nyc_output
tests_output
cache
.cache
.parcel-cache

# Dependency directory
node_modules

# Build artefacts
dist
build
bundle.js
tsconfig-types.aegir.json
tsconfig-check.aegir.json
.tsbuildinfo

# Deployment files
.npmrc

# Editor files
.vscode

# Operating system files
.DS_Store
types

================================================
FILE: .release-please-manifest.json
================================================
{"packages/interface-ipfs-core":"0.158.1","packages/ipfs":"0.66.1","packages/ipfs-cli":"0.16.1","packages/ipfs-client":"0.10.1","packages/ipfs-core":"0.18.1","packages/ipfs-core-config":"0.7.1","packages/ipfs-core-types":"0.14.1","packages/ipfs-core-utils":"0.18.1","packages/ipfs-daemon":"0.16.1","packages/ipfs-grpc-client":"0.13.1","packages/ipfs-grpc-protocol":"0.8.1","packages/ipfs-grpc-server":"0.12.1","packages/ipfs-http-client":"60.0.1","packages/ipfs-http-gateway":"0.13.1","packages/ipfs-http-response":"6.0.1","packages/ipfs-http-server":"0.15.1","packages/ipfs-message-port-client":"0.15.1","packages/ipfs-message-port-protocol":"0.15.1","packages/ipfs-message-port-server":"0.15.1"}

================================================
FILE: .release-please.json
================================================
{
  "plugins": ["node-workspace"],
  "bump-minor-pre-major": true,
  "group-pull-request-title-pattern": "chore: release ${component}",
  "packages": {
    "packages/interface-ipfs-core": {},
    "packages/ipfs": {},
    "packages/ipfs-cli": {},
    "packages/ipfs-client": {},
    "packages/ipfs-core": {},
    "packages/ipfs-core-config": {},
    "packages/ipfs-core-types": {},
    "packages/ipfs-core-utils": {},
    "packages/ipfs-daemon": {},
    "packages/ipfs-grpc-client": {},
    "packages/ipfs-grpc-protocol": {},
    "packages/ipfs-grpc-server": {},
    "packages/ipfs-http-client": {},
    "packages/ipfs-http-gateway": {},
    "packages/ipfs-http-response": {},
    "packages/ipfs-http-server": {},
    "packages/ipfs-message-port-client": {},
    "packages/ipfs-message-port-protocol": {},
    "packages/ipfs-message-port-server": {}
  }
}


================================================
FILE: CHANGELOG.md
================================================
# Change Log

Please see the individual package changelogs for what's new:

* [`/packages/interface-ipfs-core/CHANGELOG.md`](./packages/interface-ipfs-core/CHANGELOG.md)
* [`/packages/ipfs/CHANGELOG.md`](./packages/ipfs/CHANGELOG.md)
* [`/packages/ipfs-core-utils/CHANGELOG.md`](./packages/ipfs-core-utils/CHANGELOG.md)
* [`/packages/ipfs-http-client/CHANGELOG.md`](./packages/ipfs-http-client/CHANGELOG.md)
* [`/packages/ipfs-http-server/CHANGELOG.md`](./packages/ipfs-http-server/CHANGELOG.md)
* [`/packages/ipfs-message-port-client/CHANGELOG.md`](./packages/ipfs-message-port-client/CHANGELOG.md)
* [`/packages/ipfs-message-port-protocol/CHANGELOG.md`](./packages/ipfs-message-port-protocol/CHANGELOG.md)
* [`/packages/ipfs-message-port-server/CHANGELOG.md`](./packages/ipfs-message-port-server/CHANGELOG.md)


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Code of Conduct

The `js-ipfs` project follows the [`IPFS Community Code of Conduct`](https://github.com/ipfs/community/blob/master/code-of-conduct.md)


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing guidelines

IPFS as a project, including js-ipfs and all of its modules, follows the [standard IPFS Community contributing guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md).

We also adhere to the [IPFS JavaScript Community contributing guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) which provide additional information of how to collaborate and contribute in the JavaScript implementation of IPFS.

We appreciate your time and attention for going over these. Please open an issue on [ipfs/community](https://github.com/ipfs/community) if you have any question.

Thank you.


================================================
FILE: COPYRIGHT
================================================
This project is transitioning from an MIT-only license to a dual MIT/Apache-2.0 license.
Unless otherwise noted, all code contributed prior to 2019-11-21 and not contributed by
a user listed in [this signoff issue](https://github.com/ipfs/js-ipfs/issues/2624) is
licensed under MIT-only. All new contributions (and past contributions since 2019-11-21)
are licensed under a dual MIT/Apache-2.0 license.


================================================
FILE: Dockerfile.latest
================================================
FROM node:16-alpine

ENV IPFS_VERSION=latest
ENV IPFS_MONITORING=1
ENV IPFS_PATH=/root/.jsipfs
ENV BUILD_DEPS='libnspr4 libnspr4-dev libnss3'

RUN apk add --no-cache git python3 build-base

# Hopefully remove when https://github.com/node-webrtc/node-webrtc/pull/694 is merged
RUN npm install -g ipfs@"$IPFS_VERSION"

# Make the image a bit smaller
RUN npm cache clear --force
RUN apk del build-base python3 git

# Configure jsipfs
RUN jsipfs init

RUN jsipfs version

# Allow connections from any host
RUN sed -i.bak "s/127.0.0.1/0.0.0.0/g" $IPFS_PATH/config

EXPOSE 4002
EXPOSE 4003
EXPOSE 5002
EXPOSE 9090

CMD jsipfs daemon


================================================
FILE: Dockerfile.next
================================================
FROM node:16-alpine

ENV IPFS_VERSION=next
ENV IPFS_MONITORING=1
ENV IPFS_PATH=/root/.jsipfs
ENV BUILD_DEPS='libnspr4 libnspr4-dev libnss3'

RUN apk add --no-cache git python3 build-base

# Hopefully remove when https://github.com/node-webrtc/node-webrtc/pull/694 is merged
RUN npm install -g ipfs@"$IPFS_VERSION"

# Make the image a bit smaller
RUN npm cache clear --force
RUN apk del build-base python3 git

# Configure jsipfs
RUN jsipfs init

RUN jsipfs version

# Allow connections from any host
RUN sed -i.bak "s/127.0.0.1/0.0.0.0/g" $IPFS_PATH/config

EXPOSE 4002
EXPOSE 4003
EXPOSE 5002
EXPOSE 9090

CMD jsipfs daemon


================================================
FILE: LICENSE
================================================
This project is dual licensed under MIT and Apache-2.0.

MIT: https://www.opensource.org/licenses/mit
Apache-2.0: https://www.apache.org/licenses/license-2.0


================================================
FILE: LICENSE-APACHE
================================================
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


================================================
FILE: LICENSE-MIT
================================================
The MIT License (MIT)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: README.md
================================================
> # ⛔️ DEPRECATED: [js-IPFS](https://github.com/ipfs/js-ipfs) has been superseded by [Helia](https://github.com/ipfs/helia)
>
> 📚 [Learn more about this deprecation](https://github.com/ipfs/js-ipfs/issues/4336) or [how to migrate](https://github.com/ipfs/helia/wiki/Migrating-from-js-IPFS)
>
> ⚠️ If you continue using this repo, please note that security fixes will not be provided

<p align="center">
  <a href="https://js.ipfs.io" title="JS IPFS">
    <img src="https://ipfs.io/ipfs/Qme6KJdKcp85TYbLxuLV7oQzMiLremD7HMoXLZEmgo6Rnh/js-ipfs-sticker.png" alt="IPFS in JavaScript logo" width="244" />
  </a>
</p>

<h3 align="center">The JavaScript implementation of the IPFS protocol</h3>

<p align="center">
  <a href="https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core"><img src="https://img.shields.io/badge/interface--ipfs--core-API%20Docs-blue.svg"></a>
  <a href="https://github.com/ipfs/js-ipfs/actions/workflows/test.yml?query=branch%3Amaster"><img src="https://img.shields.io/github/actions/workflow/status/ipfs/js-ipfs/test.yml?branch=master" /></a>
  <a href="https://codecov.io/gh/ipfs/js-ipfs"><img src="https://badgen.net/codecov/c/github/ipfs/js-ipfs" /></a>
  <br>
</p>

## Getting started

* Read the [docs](https://github.com/ipfs/js-ipfs/tree/master/docs)
* Ensure CORS is [correctly configured](https://github.com/ipfs/js-ipfs/blob/master/docs/CORS.md) for use with the HTTP client
* Look into the [examples](https://github.com/ipfs-examples/js-ipfs-examples/tree/master) to learn how to spawn an IPFS node in Node.js and in the Browser
* Consult the [Core API docs](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api) to see what you can do with an IPFS node
* Head over to https://proto.school to take the [IPFS course](https://proto.school/course/ipfs) that covers core IPFS concepts and JS APIs
* Check out https://docs.ipfs.io for [glossary](https://docs.ipfs.io/concepts/glossary), tips, how-tos and more
* Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io
* Find out about chat channels, the IPFS newsletter, the IPFS blog, and more in the [IPFS community space](https://docs.ipfs.io/community/).

## Table of Contents <!-- omit in toc -->

- [Getting started](#getting-started)
  - [Install as a CLI user](#install-as-a-cli-user)
  - [Install as an application developer](#install-as-an-application-developer)
- [Documentation](#documentation)
- [Structure](#structure)
- [Packages](#packages)
- [Want to hack on IPFS?](#want-to-hack-on-ipfs)
- [License](#license)

## Getting Started <!-- omit in toc -->

### Install as a CLI user

Installing `ipfs` globally will give you the `jsipfs` command which you can use to start a daemon running:

```console
$ npm install -g ipfs
$ jsipfs daemon
Initializing IPFS daemon...
js-ipfs version: x.x.x
System version: x64/darwin
Node.js version: x.x.x
Swarm listening on /ip4/127.0
.... more output
```

You can then add a file:

```console
$ jsipfs add ./hello-world.txt
added QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt
```

### Install as an application developer

If you do not need to run a command line daemon, use the `ipfs-core` package - it has all the features of `ipfs` but in a lighter package:

```console
$ npm install ipfs-core
```

Then start a node in your app:

```javascript
import * as IPFS from 'ipfs-core'

const ipfs = await IPFS.create()
const { cid } = await ipfs.add('Hello world')
console.info(cid)
// QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf
```

## Documentation

* [Concepts](https://docs.ipfs.io/concepts/)
* [Config](./docs/CONFIG.md)
* [Core API](./docs/core-api)
* [Examples](https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples)
* [Development](./docs/DEVELOPMENT.md)

## Structure

This project is broken into several modules, their purposes are:

* [`/packages/interface-ipfs-core`](./packages/interface-ipfs-core) Tests to ensure adherence of an implementation to the spec
* [`/packages/ipfs`](./packages/ipfs) An aggregator module that bundles the core implementation, the CLI, HTTP API server and daemon
* [`/packages/ipfs-cli`](./packages/ipfs-cli) A CLI to the core implementation
* [`/packages/ipfs-core`](./packages/ipfs-core) The core implementation
* [`/packages/ipfs-core-types`](./packages/ipfs-core-types) Typescript definitions for the core API
* [`/packages/ipfs-core-utils`](./packages/ipfs-core-utils) Helpers and utilities common to core and the HTTP RPC API client
* [`/packages/ipfs-daemon`](./packages/ipfs-daemon) Run js-IPFS as a background daemon
* [`/packages/ipfs-grpc-client`](./packages/ipfs-grpc-client) A gRPC client for js-IPFS
* [`/packages/ipfs-grpc-protocol`](./packages/ipfs-grpc-protocol) Shared module between the gRPC client and server
* [`/packages/ipfs-grpc-server`](./packages/ipfs-grpc-server) A gRPC-over-websockets server for js-IPFS
* [`/packages/ipfs-http-client`](./packages/ipfs-http-client) A client for the RPC-over-HTTP API presented by both js-ipfs and go-ipfs
* [`/packages/ipfs-http-server`](./packages/ipfs-http-server) JS implementation of the [Kubo RPC HTTP API](https://docs.ipfs.io/reference/kubo/rpc/)
* [`/packages/ipfs-http-gateway`](./packages/ipfs-http-gateway) JS implementation of the [IPFS HTTP Gateway](https://docs.ipfs.io/concepts/ipfs-gateway/)
* [`/packages/ipfs-http-response`](./packages/ipfs-http-response) Creates a HTTP response for a given IPFS Path
* [`/packages/ipfs-message-port-client`](./packages/ipfs-message-port-client) A client for the RPC-over-message-port API presented by js-ipfs running in a shared worker
* [`/packages/ipfs-message-port-protocol`](./packages/ipfs-message-port-protocol) Code shared by the message port client & server
* [`/packages/ipfs-message-port-server`](./packages/ipfs-message-port-server) The server that receives requests from ipfs-message-port-client

## Packages

List of the main packages that make up the IPFS ecosystem.

| Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |
| ---------|---------|---------|---------|---------|--------- |
| **Files** |
| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs/master)](https://travis-ci.com/ipfs/js-ipfs-unixfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) | [Alex Potsides](mailto:alex.potsides@protocol.ai) |
| **Repo** |
| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo/master)](https://travis-ci.com/ipfs/js-ipfs-repo) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo) | [Alex Potsides](mailto:alex@achingbrain.net) |
| [`ipfs-repo-migrations`](//github.com/ipfs/js-ipfs-repo-migrations) | [![npm](https://img.shields.io/npm/v/ipfs-repo-migrations.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo-migrations/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-repo-migrations.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo-migrations) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-repo-migrations/master)](https://travis-ci.com/ipfs/js-ipfs-repo-migrations) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-repo-migrations) | N/A |
| **Exchange** |
| [`ipfs-bitswap`](//github.com/ipfs/js-ipfs-bitswap) | [![npm](https://img.shields.io/npm/v/ipfs-bitswap.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-bitswap/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-bitswap.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-bitswap) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-bitswap/master)](https://travis-ci.com/ipfs/js-ipfs-bitswap) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-bitswap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-bitswap) | [Dirk McCormick](mailto:dirk@protocol.ai) |
| **IPNS** |
| [`ipns`](//github.com/ipfs/js-ipns) | [![npm](https://img.shields.io/npm/v/ipns.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipns/releases) | [![Deps](https://david-dm.org/ipfs/js-ipns.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipns) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipns/master)](https://travis-ci.com/ipfs/js-ipns) | [![codecov](https://codecov.io/gh/ipfs/js-ipns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipns) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |
| **Generics/Utils** |
| [`ipfs-utils`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-utils.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Hugo Dias](mailto:hugomrdias@gmail.com) |
| [`ipfs-http-client`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs-http-client.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs/master)](https://travis-ci.com/ipfs/js-ipfs) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs) | [Alex Potsides](mailto:alex@achingbrain.net) |
| [`ipfs-http-response`](//github.com/ipfs/js-ipfs-http-response) | [![npm](https://img.shields.io/npm/v/ipfs-http-response.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-http-response/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfs-http-response.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-http-response) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-http-response/master)](https://travis-ci.com/ipfs/js-ipfs-http-response) | [![codecov](https://codecov.io/gh/ipfs/js-ipfs-http-response/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfs-http-response) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |
| [`ipfsd-ctl`](//github.com/ipfs/js-ipfsd-ctl) | [![npm](https://img.shields.io/npm/v/ipfsd-ctl.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfsd-ctl/releases) | [![Deps](https://david-dm.org/ipfs/js-ipfsd-ctl.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfsd-ctl) | [![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfsd-ctl/master)](https://travis-ci.com/ipfs/js-ipfsd-ctl) | [![codecov](https://codecov.io/gh/ipfs/js-ipfsd-ctl/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/js-ipfsd-ctl) | [Hugo Dias](mailto:mail@hugodias.me) |
| [`is-ipfs`](//github.com/ipfs/is-ipfs) | [![npm](https://img.shields.io/npm/v/is-ipfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/is-ipfs/releases) | [![Deps](https://david-dm.org/ipfs/is-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/is-ipfs) | [![Travis CI](https://flat.badgen.net/travis/ipfs/is-ipfs/master)](https://travis-ci.com/ipfs/is-ipfs) | [![codecov](https://codecov.io/gh/ipfs/is-ipfs/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/is-ipfs) | [Marcin Rataj](mailto:lidel@lidel.org) |
| [`aegir`](//github.com/ipfs/aegir) | [![npm](https://img.shields.io/npm/v/aegir.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/aegir/releases) | [![Deps](https://david-dm.org/ipfs/aegir.svg?style=flat-square)](https://david-dm.org/ipfs/aegir) | [![Travis CI](https://flat.badgen.net/travis/ipfs/aegir/master)](https://travis-ci.com/ipfs/aegir) | [![codecov](https://codecov.io/gh/ipfs/aegir/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipfs/aegir) | [Hugo Dias](mailto:hugomrdias@gmail.com) |
| **libp2p** |
| [`libp2p`](//github.com/libp2p/js-libp2p) | [![npm](https://img.shields.io/npm/v/libp2p.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p/master)](https://travis-ci.com/libp2p/js-libp2p) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p) | [Jacob Heun](mailto:jacobheun@gmail.com) |
| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Deps](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-peer-id/master)](https://travis-ci.com/libp2p/js-peer-id) | [![codecov](https://codecov.io/gh/libp2p/js-peer-id/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id) | [Vasco Santos](mailto:santos.vasco10@gmail.com) |
| [`libp2p-crypto`](//github.com/libp2p/js-libp2p-crypto) | [![npm](https://img.shields.io/npm/v/libp2p-crypto.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-crypto/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-crypto.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-crypto) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-crypto/master)](https://travis-ci.com/libp2p/js-libp2p-crypto) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-crypto/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-crypto) | [Jacob Heun](mailto:jacobheun@gmail.com) |
| [`libp2p-floodsub`](//github.com/libp2p/js-libp2p-floodsub) | [![npm](https://img.shields.io/npm/v/libp2p-floodsub.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-floodsub/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-floodsub.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-floodsub) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-floodsub/master)](https://travis-ci.com/libp2p/js-libp2p-floodsub) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-floodsub/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-floodsub) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |
| [`libp2p-gossipsub`](//github.com/ChainSafe/gossipsub-js) | [![npm](https://img.shields.io/npm/v/libp2p-gossipsub.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/gossipsub-js/releases) | [![Deps](https://david-dm.org/ChainSafe/gossipsub-js.svg?style=flat-square)](https://david-dm.org/ChainSafe/gossipsub-js) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/gossipsub-js/master)](https://travis-ci.com/ChainSafe/gossipsub-js) | [![codecov](https://codecov.io/gh/ChainSafe/gossipsub-js/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/gossipsub-js) | [Cayman Nava](mailto:caymannava@gmail.com) |
| [`libp2p-kad-dht`](//github.com/libp2p/js-libp2p-kad-dht) | [![npm](https://img.shields.io/npm/v/libp2p-kad-dht.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-kad-dht/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-kad-dht.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-kad-dht) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-kad-dht/master)](https://travis-ci.com/libp2p/js-libp2p-kad-dht) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-kad-dht/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-kad-dht) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |
| [`libp2p-mdns`](//github.com/libp2p/js-libp2p-mdns) | [![npm](https://img.shields.io/npm/v/libp2p-mdns.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mdns/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mdns.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mdns) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mdns/master)](https://travis-ci.com/libp2p/js-libp2p-mdns) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mdns/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mdns) | [Jacob Heun](mailto:jacobheun@gmail.com) |
| [`libp2p-bootstrap`](//github.com/libp2p/js-libp2p-bootstrap) | [![npm](https://img.shields.io/npm/v/libp2p-bootstrap.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-bootstrap/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-bootstrap.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-bootstrap) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-bootstrap/master)](https://travis-ci.com/libp2p/js-libp2p-bootstrap) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-bootstrap/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-bootstrap) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |
| [`@chainsafe/libp2p-noise`](//github.com/ChainSafe/js-libp2p-noise) | [![npm](https://img.shields.io/npm/v/libp2p-noise.svg?maxAge=86400&style=flat-square)](//github.com/ChainSafe/js-libp2p-noise/releases) | [![Deps](https://david-dm.org/ChainSafe/js-libp2p-noise.svg?style=flat-square)](https://david-dm.org/ChainSafe/js-libp2p-noise) | [![Travis CI](https://flat.badgen.net/travis/ChainSafe/js-libp2p-noise/master)](https://travis-ci.com/ChainSafe/js-libp2p-noise) | [![codecov](https://codecov.io/gh/ChainSafe/js-libp2p-noise/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ChainSafe/js-libp2p-noise) | N/A |
| [`libp2p-tcp`](//github.com/libp2p/js-libp2p-tcp) | [![npm](https://img.shields.io/npm/v/libp2p-tcp.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-tcp/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-tcp.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-tcp) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-tcp/master)](https://travis-ci.com/libp2p/js-libp2p-tcp) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-tcp/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-tcp) | [Jacob Heun](mailto:jacobheun@gmail.com) |
| [`libp2p-webrtc-star`](//github.com/libp2p/js-libp2p-webrtc-star) | [![npm](https://img.shields.io/npm/v/libp2p-webrtc-star.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-webrtc-star/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-webrtc-star.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-webrtc-star) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-webrtc-star/master)](https://travis-ci.com/libp2p/js-libp2p-webrtc-star) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-webrtc-star) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |
| [`libp2p-websockets`](//github.com/libp2p/js-libp2p-websockets) | [![npm](https://img.shields.io/npm/v/libp2p-websockets.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-websockets/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-websockets.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-websockets) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-websockets/master)](https://travis-ci.com/libp2p/js-libp2p-websockets) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-websockets/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-websockets) | [Jacob Heun](mailto:jacobheun@gmail.com) |
| [`libp2p-mplex`](//github.com/libp2p/js-libp2p-mplex) | [![npm](https://img.shields.io/npm/v/libp2p-mplex.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-mplex/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-mplex.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-mplex) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-mplex/master)](https://travis-ci.com/libp2p/js-libp2p-mplex) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-mplex/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-mplex) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |
| [`libp2p-delegated-content-routing`](//github.com/libp2p/js-libp2p-delegated-content-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-content-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-content-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-content-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-content-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-content-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-content-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |
| [`libp2p-delegated-peer-routing`](//github.com/libp2p/js-libp2p-delegated-peer-routing) | [![npm](https://img.shields.io/npm/v/libp2p-delegated-peer-routing.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-libp2p-delegated-peer-routing/releases) | [![Deps](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-delegated-peer-routing) | [![Travis CI](https://flat.badgen.net/travis/libp2p/js-libp2p-delegated-peer-routing/master)](https://travis-ci.com/libp2p/js-libp2p-delegated-peer-routing) | [![codecov](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-delegated-peer-routing) | [Jacob Heun](mailto:jacobheun@gmail.com) |
| **IPLD** |
| [`@ipld/dag-pb`](//github.com/ipld/js-dag-pb) | [![npm](https://img.shields.io/npm/v/@ipld/dag-pb.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-dag-pb/releases) | [![Deps](https://david-dm.org/ipld/js-dag-pb.svg?style=flat-square)](https://david-dm.org/ipld/js-dag-pb) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-dag-pb/master)](https://travis-ci.com/ipld/js-dag-pb) | [![codecov](https://codecov.io/gh/ipld/js-dag-pb/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-dag-pb) | N/A |
| [`@ipld/dag-cbor`](//github.com/ipld/js-dag-cbor) | [![npm](https://img.shields.io/npm/v/@ipld/dag-cbor.svg?maxAge=86400&style=flat-square)](//github.com/ipld/js-dag-cbor/releases) | [![Deps](https://david-dm.org/ipld/js-dag-cbor.svg?style=flat-square)](https://david-dm.org/ipld/js-dag-cbor) | [![Travis CI](https://flat.badgen.net/travis/ipld/js-dag-cbor/master)](https://travis-ci.com/ipld/js-dag-cbor) | [![codecov](https://codecov.io/gh/ipld/js-dag-cbor/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/ipld/js-dag-cbor) | N/A |
| **Multiformats** |
| [`multiformats`](//github.com/multiformats/js-multiformats) | [![npm](https://img.shields.io/npm/v/multiformats.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiformats/releases) | [![Deps](https://david-dm.org/multiformats/js-multiformats.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiformats) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiformats/master)](https://travis-ci.com/multiformats/js-multiformats) | [![codecov](https://codecov.io/gh/multiformats/js-multiformats/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiformats) | N/A |
| [`mafmt`](//github.com/multiformats/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-mafmt/releases) | [![Deps](https://david-dm.org/multiformats/js-mafmt.svg?style=flat-square)](https://david-dm.org/multiformats/js-mafmt) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-mafmt/master)](https://travis-ci.com/multiformats/js-mafmt) | [![codecov](https://codecov.io/gh/multiformats/js-mafmt/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-mafmt) | [Vasco Santos](mailto:vasco.santos@moxy.studio) |
| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Deps](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![Travis CI](https://flat.badgen.net/travis/multiformats/js-multiaddr/master)](https://travis-ci.com/multiformats/js-multiaddr) | [![codecov](https://codecov.io/gh/multiformats/js-multiaddr/branch/master/graph/badge.svg?style=flat-square)](https://codecov.io/gh/multiformats/js-multiaddr) | [Jacob Heun](mailto:jacobheun@gmail.com) |

> This table is generated using the module [`package-table`](https://www.npmjs.com/package/package-table) with `package-table --data=package-list.json`.

## Want to hack on IPFS?

[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)

The IPFS implementation in JavaScript needs your help! There are a few things you can do right now to help out:

Read the [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md) and [JavaScript Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md).

- **Check out existing issues** The [issue list](https://github.com/ipfs/js-ipfs/issues) has many that are marked as ['help wanted'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22) or ['difficulty:easy'](https://github.com/ipfs/js-ipfs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Adifficulty%3Aeasy) which make great starting points for development, many of which can be tackled with no prior IPFS knowledge
- **Look at the [IPFS Roadmap](https://github.com/ipfs/roadmap)** This are the high priority items being worked on right now
- **Perform code reviews** More eyes will help
  a. speed the project along
  b. ensure quality, and
  c. reduce possible future bugs.
- **Add tests**. There can never be enough tests.

## License

[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fipfs%2Fjs-ipfs?ref=badge_large)


================================================
FILE: docs/ARCHITECTURE.md
================================================
# IPFS Architecture <!-- omit in toc -->

## Table of Contents <!-- omit in toc -->

- [Code Architecture and folder Structure](#code-architecture-and-folder-structure)
  - [Source code](#source-code)

![](./img/architecture.png)

[Annotated version](https://user-images.githubusercontent.com/1211152/47606420-b6265780-da13-11e8-923b-b365a8534e0e.png)

What does this image explain?

- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser.
- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation.
- The DAG API (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc).
- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS.
- libp2p, the network stack of IPFS, uses libp2p to dial and listen for connections, to use the DHT, for discovery mechanisms, and more.

## Code Architecture and folder Structure

![](./img/overview.png)

### Source code

```Bash
> tree src -L 2
src                 # Main source code folder
├── cli             # Implementation of the IPFS CLI
│   └── ...
├── http            # The HTTP-API implementation of IPFS as defined by HTTP API spec
├── core            # IPFS implementation, the core (what gets loaded in browser)
│   ├── components  # Each of IPFS subcomponent
│   └── ...
└── ...
```


================================================
FILE: docs/BROWSERS.md
================================================
# Using JS IPFS in the Browser <!-- omit in toc -->

## Table of Contents <!-- omit in toc -->

- [Limitations of the Browser Context](#limitations-of-the-browser-context)
- [Addressing Limitations](#addressing-limitations)
- [Best Practices](#best-practices)
- [Code Examples](#code-examples)

JS IPFS is the implementation of IPFS protocol in JavaScript. It can run on any
evergreen browser, inside a service or web worker, browser extensions, Electron, and in Node.js.

**This document provides key information about running JS IPFS in the browser.
Save time and get familiar with common caveats and limitations of the browser context.**

## Limitations of the Browser Context

- Transport options are currently limited to [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) and [WebRTC](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API).

  This means JS IPFS running in the browser is limited to Web APIs available on a web page.
  There is no access to raw TCP sockets nor low-level UDP, only WebSockets, and WebRTC.

- Key [Web APIs](https://developer.mozilla.org/en-US/docs/Web/API) require or are restricted by [Secure Context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts) policies.

  This means JS IPFS needs to run within Secure Context (HTTPS or localhost).
  JS IPFS running on HTTPS website requires Secure WebSockets (TLS) and won't work with unencrypted ones.
  [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) not being available at all.

- JS IPFS comes with limited support for the [DHT](https://docs.ipfs.tech/concepts/dht/) in client mode which delegates content discovery requests to other DHT nodes.

  However, it's worth noting that even though you'll get results from DHT queries, most nodes in the network are not dialable from browsers because they only support TCP and/or QUIC transports.

  For now, the content discovery and connectivity to other peers are achieved with a mix of DHT client requests, rendezvous and relay servers, delegated peer/content routing, and preload servers.


## Addressing Limitations

We provide a few additional components useful for running JS IPFS in the browser:


- [libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) - incorporates both a transport and a discovery service that is facilitated by the custom rendezvous server available in the repo
  - Instructions on enabling `webrtc-star` in js-ipfs config can be found [here](https://github.com/ipfs/js-ipfs/blob/master/docs/FAQ.md#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser).
  - Make sure to [run your own rendezvous server](https://github.com/libp2p/js-libp2p-webrtc-star#rendezvous-server-aka-signalling-server).
- [libp2p-webrtc-direct](https://github.com/libp2p/js-libp2p-webrtc-direct) - a WebRTC transport that doesn't require the set up a signaling server.
  - Caveat: you can only establish Browser to Node.js and Node.js to Node.js connections.

**Note:** those are semi-centralized solutions. We are working towards replacing `*-star` with ambient relays and [libp2p-rendezvous](https://github.com/libp2p/js-libp2p-rendezvous). Details and progress can be found [here](https://github.com/libp2p/js-libp2p/issues/385).

You can find detailed information about running js-ipfs [here](https://github.com/ipfs/js-ipfs#table-of-contents).

## Best Practices

- Configure nodes for using self-hosted `*-star` signalling and transport service. When in doubt, use WebSockets ones.
- Run your own instance of `*-star` signalling service.
  The default ones are under high load and should be used only for tests and development.
- Make sure content added to js-ipfs running in the browser is persisted/cached somewhere on a regular long-running IPFS daemon, e.g. [kubo](https://github.com/ipfs/kubo/)
  - Manually `pin` or preload CIDs of interest with `refs -r` beforehand.
  - Preload content on the fly using [preload](https://github.com/ipfs/js-ipfs/blob/master/docs/MODULE.md#optionspreload) feature and/or
    configure [delegated routing](https://github.com/ipfs/js-ipfs/blob/master/docs/DELEGATE_ROUTERS.md).
    - Avoid public instances in production environments. Make sure preload and delegate nodes used in config are self-hosted and under your control (expose a subset of [kubo](https://github.com/ipfs/kubo/) (formerly go-ipfs) APIs via reverse proxy such as Nginx).
- If your main goal is to provide content and files to the IPFS network from a browser and you would like to avoid running infrastructure, consider using a pinning service like [Web3.storage](https://web3.storage/).

## Code Examples

Prebuilt bundles are available, using JS IPFS in the browser is as simple as:

```js
<script src="https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', async () => {
  const node = await Ipfs.create()
  const results = await node.add('=^.^= meow meow')
  const cid = results[0].hash
  console.log('CID created via ipfs.add:', cid)
  const data = await node.cat(cid)
  console.log('Data read back via ipfs.cat:', new TextDecoder().decode(data))
})
</script>
```

More advanced examples and tutorials can be found in the [examples](https://github.com/ipfs-examples)


================================================
FILE: docs/CLI.md
================================================
# IPFS CLI <!-- omit in toc -->

## Table of contents <!-- omit in toc -->

- [Overview](#overview)
- [Configuration](#configuration)

## Overview

In order to use js-ipfs as a CLI, you must install it with the `global` flag. Run the following (even if you have ipfs installed locally):

```bash
npm install ipfs --global
```

The CLI is available by using the command `jsipfs` in your terminal. This is aliased, instead of using `ipfs`, to make sure it does not conflict with the [Go implementation](https://github.com/ipfs/go-ipfs).

Once installed, please follow the [Getting Started Guide](https://docs.ipfs.io/introduction/usage/) to learn how to initialize your node and run the daemon.

```sh
# Install js-ipfs globally
> jsipfs --help
Commands:
  bitswap               A set of commands to manipulate the bitswap agent.
  block                 Manipulate raw IPFS blocks.
  bootstrap             Show or edit the list of bootstrap peers.
  commands              List all available commands
  config <key> [value]  Get and set IPFS config values
  daemon                Start a long-running daemon process
# ...
```

## Configuration

`js-ipfs` uses some different default config values, so that they don't clash directly with a go-ipfs node running in the same machine. These are:

- default repo location: `~/.jsipfs` (can be changed with env variable `IPFS_PATH`)
- default swarm port: `4002`
- default API port: `5002`


================================================
FILE: docs/CONFIG.md
================================================
# The js-ipfs config file <!-- omit in toc -->

The js-ipfs config file is a JSON document located in the root directory of the js-ipfs repository.

## Table of Contents <!-- omit in toc -->

- [Profiles](#profiles)
- [`Addresses`](#addresses)
  - [`API`](#api)
  - [`RPC`](#rpc)
  - [`Delegates`](#delegates)
  - [`Gateway`](#gateway)
  - [`Swarm`](#swarm)
  - [`Announce`](#announce)
- [`Bootstrap`](#bootstrap)
- [`Datastore`](#datastore)
  - [`Spec`](#spec)
- [`Discovery`](#discovery)
  - [`MDNS`](#mdns)
  - [`webRTCStar`](#webrtcstar)
- [`Identity`](#identity)
  - [`PeerID`](#peerid)
  - [`PrivKey`](#privkey)
- [`Keychain`](#keychain)
- [`Pubsub`](#pubsub)
  - [`Router`](#router)
  - [`Enabled`](#enabled)
- [`Swarm`](#swarm-1)
  - [`ConnMgr`](#connmgr)
  - [`DisableNatPortMap`](#disablenatportmap)
  - [Example](#example)
- [`API`](#api-1)
  - [`HTTPHeaders`](#httpheaders)
    - [`Access-Control-Allow-Origin`](#access-control-allow-origin)
      - [Example](#example-1)
    - [`Access-Control-Allow-Credentials`](#access-control-allow-credentials)
      - [Example](#example-2)

## Profiles

Configuration profiles allow to tweak configuration quickly. Profiles can be
applied with `--profile` flag to `ipfs init` or with the `ipfs config profile
apply` command. When a profile is applied a backup of the configuration file
will be created in `$IPFS_PATH`.

Available profiles:

- `server`

  Recommended for nodes with public IPv4 address (servers, VPSes, etc.),
  disables host and content discovery in local networks.

- `local-discovery`

  Sets default values to fields affected by `server` profile, enables
  discovery in local networks.

- `test`

  Reduces external interference, useful for running ipfs in test environments.
  Note that with these settings node won't be able to talk to the rest of the
  network without manual bootstrap.

- `default-networking`

  Restores default network settings. Inverse profile of the `test` profile.

- `lowpower`

  Reduces daemon overhead on the system. May affect node functionality,
  performance of content discovery and data fetching may be degraded.

- `default-power`

  Inverse of "lowpower" profile.

## `Addresses`

Contains information about various listener addresses to be used by this node.

### `API`

The IPFS daemon exposes an HTTP API that allows to control the node and run the same commands as you can do from the command line. It is defined on the [HTTP API Spec](https://docs.ipfs.io/reference/api/http).

[Multiaddr](https://github.com/multiformats/multiaddr/) or array of [Multiaddr](https://github.com/multiformats/multiaddr/) describing the address(es) to serve the HTTP API on.

Default: `/ip4/127.0.0.1/tcp/5002`

### `RPC`

js-IPFS has a gRPC-over-websockets server that allows it to do things that you cannot do over HTTP like bi-directional streaming.  It implements the same API as the [HTTP API Spec](https://docs.ipfs.io/reference/api/http) and can be accessed using the [ipfs-client](https://www.npmjs.com/package/ipfs-client) module.

Configure the address it listens on using this config key.

Default: `/ip4/127.0.0.1/tcp/5003`

### `Delegates`

Delegate peers are used to find peers and retrieve content from the network on your behalf.

Array of [Multiaddr](https://github.com/multiformats/multiaddr/) describing which addresses to use as delegate nodes.

Default: `[]`

### `Gateway`

A gateway is exposed by the IPFS daemon, which allows an easy way to access content from IPFS, using an IPFS path.

[Multiaddr](https://github.com/multiformats/multiaddr/) or array of [Multiaddr](https://github.com/multiformats/multiaddr/) describing the address(es) to serve the gateway on.

Default: `/ip4/127.0.0.1/tcp/9090`

### `Swarm`

Array of [Multiaddr](https://github.com/multiformats/multiaddr/) describing which addresses to listen on for p2p swarm connections.

Default:
```json
[
  "/ip4/0.0.0.0/tcp/4002",
  "/ip4/127.0.0.1/tcp/4003/ws"
]
```

### `Announce`

Array of [Multiaddr](https://github.com/multiformats/multiaddr/) describing which addresses to [announce](https://github.com/libp2p/js-libp2p/tree/master/src/address-manager#announce-addresses) over the network.

Default:
```json
[]
```

## `Bootstrap`

Bootstrap is an array of [Multiaddr](https://github.com/multiformats/multiaddr/) of trusted nodes to connect to in order to
initiate a connection to the network.

## `Datastore`

Contains information related to the construction and operation of the on-disk storage system.

### `Spec`

Spec defines the structure of the IPFS datastore. It is a composable structure, where each datastore is represented by a JSON object. Datastores can wrap other datastores to provide extra functionality (e.g. metrics, logging, or caching).

This can be changed manually, however, if you make any changes that require a different on-disk structure, you will need to run the [ipfs-ds-convert tool](https://github.com/ipfs/ipfs-ds-convert) to migrate data into the new structures.

Default:
```json
{
  "mounts": [
    {
      "child": {
        "path": "blocks",
        "shardFunc": "/repo/flatfs/shard/v1/next-to-last/2",
        "sync": true,
        "type": "flatfs"
      },
      "mountpoint": "/blocks",
      "prefix": "flatfs.datastore",
      "type": "measure"
    },
    {
      "child": {
        "compression": "none",
        "path": "datastore",
        "type": "levelds"
      },
      "mountpoint": "/",
      "prefix": "leveldb.datastore",
      "type": "measure"
    }
  ],
  "type": "mount"
}
```

## `Discovery`

Contains options for configuring IPFS node discovery mechanisms.

### `MDNS`

Multicast DNS is a discovery protocol that is able to find other peers on the local network.

Options for Multicast DNS peer discovery:

- `Enabled`

    A boolean value for whether or not MDNS should be active.

    Default: `true`

-  `Interval`

	  A number of seconds to wait between discovery checks.

    Default: `10`

### `webRTCStar`

WebRTCStar is a discovery mechanism provided by a signalling-star that allows peer-to-peer communications in the browser.

Options for webRTCstar peer discovery:

- `Enabled`

    A boolean value for whether or not webRTCStar should be active.

    Default: `true`

## `Identity`

### `PeerID`

The unique PKI identity label for this configs peer. Set on init and never read, its merely here for convenience. IPFS will always generate the peerID from its keypair at runtime.

### `PrivKey`

The base64 encoded protobuf describing (and containing) the nodes private key.

## `Keychain`

We can customize the key management and cryptographically protected messages by changing the Keychain options. Those options are used for generating the derived encryption key (`DEK`). The `DEK` object, along with the passPhrase, is the input to a PBKDF2 function.

Default:
```json
{
  "dek": {
    "keyLength": 512/8,
    "iterationCount": 1000,
    "salt": "at least 16 characters long",
    "hash": "sha2-512"
  }
}
```

You can check the [parameter choice for pbkdf2](https://cryptosense.com/parameter-choice-for-pbkdf2/) for more information.

## `Pubsub`

Options for configuring the pubsub subsystem. It is important pointing out that this is not supported in the browser. If you want to configure a different pubsub router in the browser you must configure `libp2p.modules.pubsub` options instead.

### `Router`

A string value for specifying which pubsub routing protocol to use. You can either use `gossipsub` in order to use the [ChainSafe/gossipsub-js](https://github.com/ChainSafe/gossipsub-js) implementation, or `floodsub` to use the [libp2p/js-libp2p-floodsub](https://github.com/libp2p/js-libp2p-floodsub) implementation. You can read more about these implementations on the [libp2p/specs/pubsub](https://github.com/libp2p/specs/tree/master/pubsub) document.

Default: `gossipsub`

### `Enabled`

A boolean value for wether or not pubsub router should be active.

Default: `true`

## `Swarm`

Options for configuring the swarm.

### `ConnMgr`

The connection manager determines which and how many connections to keep and can be configured to keep.

- `LowWater`

    The minimum number of connections to maintain.

    Default: `200` (both browser and node.js)

- `HighWater`

    The number of connections that, when exceeded, will trigger a connection GC operation.

    Default: `500` (both browser and node.js)

The "basic" connection manager tries to keep between `LowWater` and `HighWater` connections. It works by:

1. Keeping all connections until `HighWater` connections is reached.
2. Once `HighWater` is reached, it closes connections until `LowWater` is reached.

### `DisableNatPortMap`

By default when running under nodejs, libp2p will try to use [UPnP](https://en.wikipedia.org/wiki/Universal_Plug_and_Play) to open a random high port on your router for any TCP connections you have configured.

Set `DisableNatPortMap` to `true` to disable this behaviour.

### Example

```json
{
  "Swarm": {
    "ConnMgr": {
      "LowWater": 100,
      "HighWater": 200,
    }
  },
  "DisableNatPortMap": false
}
```

## `API`

Settings applied to the HTTP RPC API server

### `HTTPHeaders`

HTTP header settings used by the HTTP RPC API server

#### `Access-Control-Allow-Origin`

The RPC API endpoints running on your local node are protected by the [Cross-Origin Resource Sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) mechanism.

When a request is made that sends an `Origin` header, that Origin must be present in the allowed origins configured for the node, otherwise the browser will disallow that request to proceed, unless `mode: 'no-cors'` is set on the request, in which case the response will be opaque.

To allow requests from web browsers, configure the `API.HTTPHeaders.Access-Control-Allow-Origin` setting.  This is an array of URL strings with safelisted Origins.

##### Example

If you are running a webapp locally that you access via the URL `http://127.0.0.1:3000`, you must add it to the list of allowed origins in order to make API requests from that webapp in the browser:

```json
{
  "API": {
    "HTTPHeaders": {
      "Access-Control-Allow-Origin": [
        "http://127.0.0.1:3000"
      ]
    }
  }
}
```

Note that the origin must match exactly so `'http://127.0.0.1:3000'` is treated differently to `'http://127.0.0.1:3000/'`

#### `Access-Control-Allow-Credentials`

The [Access-Control-Allow-Credentials](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials) header allows client-side JavaScript running in the browser to send and receive credentials with requests - cookies, auth headers or TLS certificates.

For most applications this will not be necessary but if you require this to be set, see the example below for how to configure it.

##### Example

```json
{
  "API": {
    "HTTPHeaders": {
      "Access-Control-Allow-Credentials": true
    }
  }
}
```


================================================
FILE: docs/CORS.md
================================================
# CORS <!-- omit in toc -->

## Table of Contents <!-- omit in toc -->

- [Overview](#overview)
- [Configure CORS headers](#configure-cors-headers)

## Overview

Cross-origin Resource Sharing is a browser security mechanism that prevents unauthorized scripts from accessing resources from different domains.

By default the HTTP RPC API of js-IPFS will cause any request sent from a CORS-respecting browser to fail.

## Configure CORS headers

You can configure your node to allow requests from other domains to proceed by setting the appropriate headers in the node config:

```console
$ jsipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin  '["http://example.com"]'
$ jsipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST", "GET"]'
```

Restart the daemon for the settings to take effect.


================================================
FILE: docs/DAEMON.md
================================================

# Running IPFS as a daemon <!-- omit in toc -->

> How to run a long-lived IPFS process

## Table of contents <!-- omit in toc -->

- [CLI](#cli)
- [Programmatic](#programmatic)

## CLI

To start a daemon on the CLI, use the `daemon` command:

```console
jsipfs daemon
```

The IPFS Daemon exposes the API defined in the [HTTP API spec](https://docs.ipfs.io/reference/api/http/). You can use any of the IPFS HTTP-API client libraries with it, such as: [ipfs-http-client](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-http-client).

## Programmatic

If you want a programmatic way to spawn a IPFS Daemon using JavaScript, check out the [ipfsd-ctl](https://github.com/ipfs/js-ipfsd-ctl) module.

```javascript
import { createFactory } from 'ipfsd-ctl'
const factory = createFactory({
  type: 'proc' // or 'js' to run in a separate process
})

const node = await factory.create()

// print the node ide
console.info(await node.id())
```


================================================
FILE: docs/DELEGATE_ROUTERS.md
================================================
# Configuring Delegate Routers <!-- omit in toc -->

- [What is it?](#what-is-it)
- [How do I do it?](#how-do-i-do-it)

## What is it?

Delegate routers perform tasks on behalf of nodes that may be missing functionality, so for example they may search the DHT for peers or content providers on behalf of IPFS implementations that do not have a DHT.

The delegate node is started and the client of the delegate calls API methods using the IPFS HTTP API client.

## How do I do it?

If you need to support Delegated Content and/or Peer Routing, you can enable it by specifying the multiaddrs of your delegate nodes in the config via `options.config.Addresses.Delegates`. If you need to run a delegate router we encourage you to run your own, with go-ipfs. You can see instructions for doing so in the [delegated routing example](https://github.com/libp2p/js-libp2p/tree/master/examples/delegated-routing).

If you are not able to run your own delegate router nodes, we currently have two nodes that support delegated routing. **Important**: As many people may be leveraging these nodes, performance may be affected, which is why we recommend running your own nodes in production.

Available delegate multiaddrs are:

- `/dns4/node0.delegate.ipfs.io/tcp/443/https`
- `/dns4/node1.delegate.ipfs.io/tcp/443/https`
- `/dns4/node2.delegate.ipfs.io/tcp/443/https`
- `/dns4/node3.delegate.ipfs.io/tcp/443/https`

**Note**: If more than 1 delegate multiaddr is specified, the actual delegate will be randomly selected on startup.

**Note**: If you wish to use delegated routing and are creating your node _programmatically_ in Node.js or the browser you must `npm install libp2p-delegated-content-routing` and/or `npm install libp2p-delegated-peer-routing` and provide configured instances of them in [`options.libp2p`](./MODULE.md#optionslibp2p). See the module repos for further instructions:

- https://github.com/libp2p/js-libp2p-delegated-content-routing
- https://github.com/libp2p/js-libp2p-delegated-peer-routing


================================================
FILE: docs/DEVELOPMENT.md
================================================
# Development <!-- omit in toc -->

> Getting started with development on IPFS

- [Install npm@7](#install-npm7)
- [Clone and install dependencies](#clone-and-install-dependencies)
- [Run tests](#run-tests)
- [Lint](#lint)
- [Build types and minified browser bundles](#build-types-and-minified-browser-bundles)
- [Publishing new versions](#publishing-new-versions)
- [Using prerelease versions](#using-prerelease-versions)
- [Testing strategy](#testing-strategy)
  - [CLI](#cli)
  - [HTTP API](#http-api)
  - [Core](#core)
  - [Non-Core](#non-core)

## Install npm@7

This project uses a [workspace](https://docs.npmjs.com/cli/v7/using-npm/workspaces) structure so requires npm@7 or above.  If you are running node 15 or later you already have it, if not run:

```sh
$ npm install -g npm@latest
```

## Clone and install dependencies

```sh
> git clone https://github.com/ipfs/js-ipfs.git
> cd js-ipfs
> npm install
```

This will install the dependencies of the various packages, deduping and hoisting dependencies into the root folder.

If later you add new dependencies to submodules or just wish to remove all the `node_modules`/`dist` folders and start again, run `npm run reset && npm install` from the root.

See the scripts section of the root [`package.json`](../package.json) for more commands.

## Run tests

```sh
# run all the unit tests
> npm test

# run individual tests (findprovs)
> npm run test -- --grep findprovs

# run just IPFS tests in Node.js
> npm run test -- -- -- -t node

# run just IPFS tests in a headless browser
> npm run test -- -- -- -t browser

# run the interface tests against ipfs-core
> npm run test:interface:core

# run the interface tests over HTTP against js-ipfs
> npm run test:interface:http-js

# run the interface tests over HTTP against go-ipfs from a browser
> npm run test:interface:http-go -- -- -- -t browser

# run the interop tests against js-ipfs and go-ipfs on the Electron main process
> npm run test:interop -- -- -- -t electron-main
```

More granular test suites can be run from each submodule.

Please see the `package.json` in each submodule for available commands.

## Lint

Please run the linter before submitting a PR, the build will not pass if it fails:

```sh
> npm run lint
```

## Build types and minified browser bundles

```sh
> npm run build
```

## Publishing new versions

1. Ensure you have a `GH_TOKEN` env var containing a GitHub [Personal Access Token](https://github.com/settings/tokens) with `public_repo` permissions
2. You'll also need a valid [Docker Hub](https://hub.docker.com) login with sufficient permissions to publish new Docker images to the [ipfs/js-ipfs](https://hub.docker.com/repository/docker/ipfs/js-ipfs) repository
3. From the root of this repo run `npm run release` and follow the on screen prompts.  It will use [conventional commits](https://www.conventionalcommits.org) to work out the new package version

## Using prerelease versions

Any changed packages from each successful build of master are published to npm as canary builds under the npm tag `next`.

## Testing strategy

This project has a number of components that have their own tests, then some components that share interface tests.

When adding new features you may need to add tests to one or more of the test suites described below.

### CLI

Tests live in [/packages/ipfs/test/cli](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/test/cli).

All interactions with IPFS core are stubbed so we just ensure that the correct arguments are passed in

### HTTP API

Tests live in [/packages/ipfs/test/http-api](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/test/http-api) and are similar to the CLI tests in that we stub out core interactions and inject requests with [shot](https://www.npmjs.com/package/@hapi/shot).

### Core

Anything non-implementation specific should be considered part of the 'Core API'.  For example node setup code is not Core, but anything that does useful work, e.g. network/repo/etc interactions would be Core.

All Core APIs should be documented in [/docs/core-api](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api).

All Core APIs should have comprehensive tests in [/packages/interface-ipfs-core](https://github.com/ipfs/js-ipfs/tree/master/packages/interface-ipfs-core).

`interface-ipfs-core` should ensure API compatibility across implementations. Tests are run:

1. Against [/packages/ipfs/src/core](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/core) directly
1. Against [/packages/ipfs/src/http](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/src/http) over HTTP via `ipfs-http-client`
1. Against `go-ipfs` over HTTP via `ipfs-http-client`

### Non-Core

Any non-core API functionality should have tests in the `tests` directory of the module in question, for example: [/packages/ipfs-http-api/tests](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-http-client/test) and [/packages/ipfs/tests](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs/test) for `ipfs-http-client` and `ipfs` respectively.


================================================
FILE: docs/DOCKER.md
================================================

# Running js-ipfs with Docker

We have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-ipfs/

All branches in the Github repository maps to a tag in Docker Hub, except `master` Git branch which is mapped to `latest` Docker tag.

You can run js-ipfs like this:

```
$ docker run -it -p 4002:4002 -p 4003:4003 -p 5002:5002 -p 9090:9090 ipfs/js-ipfs:latest

initializing ipfs node at /root/.jsipfs
generating 2048-bit RSA keypair...done
peer identity: Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS
to get started, enter:

         jsipfs files cat /ipfs/QmfGBRT6BbWJd7yUc2uYdaUZJBbnEFvTqehPFoSMQ6wgdr/readme

Initializing daemon...
Using wrtc for webrtc support
Swarm listening on /ip4/127.0.0.1/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS
Swarm listening on /ip4/172.17.0.2/tcp/4003/ws/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS
Swarm listening on /ip4/127.0.0.1/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS
Swarm listening on /ip4/172.17.0.2/tcp/4002/ipfs/Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS
API is listening on: /ip4/0.0.0.0/tcp/5002
Gateway (readonly) is listening on: /ip4/0.0.0.0/tcp/9090
Daemon is ready

$ curl --silent localhost:5002/api/v0/id | jq .ID
"Qmbd5jx8YF1QLhvwfLbCTWXGyZLyEJHrPbtbpRESvYs4FS"
```


================================================
FILE: docs/EARLY_TESTERS.md
================================================
# Early Testers Programme <!-- omit in toc -->

- [What is it?](#what-is-it)
- [What are the expectations?](#what-are-the-expectations)
- [Who has signed up?](#who-has-signed-up)
- [How to sign up?](#how-to-sign-up)

## What is it?

The early testers programme allows groups using js-ipfs in production to self-volunteer to help test js-ipfs release candidates to ensure that no regressions that might affect production systems make it into the final release. While we invite the _entire_ community to help test releases, members of the early testers program are expected to participate directly and actively in every release.

## What are the expectations?

Members of the early tester program are expected to work closely with us to:

* Provide high quality, actionable feedback.
* Work directly with us to debug regressions in the release.
* Help ensure a rock-solid, timely release.

We will ask early testers to participate at two points in the process:

* When js-ipfs enters the second release stage, early testers will be asked to test js-ipfs on non-production infrastructure. This may involve things like:
  - Running integration tests against the release candidate.
  - Running simulations/benchmarks on the release candidate.
  - Manually testing the release candidate to check for regressions.
* When js-ipfs enters the third release stage (soft release), early testers will be asked to partially deploy the release candidate to production infrastructure. Release candidates at this stage are expected to be identical to the final release. However, this stage allows the js-ipfs team to fix any last-minute regressions without cutting an entirely new release.

## Who has signed up?

- [npm-on-ipfs](https://github.com/ipfs-shipyard/npm-on-ipfs) - install your dependencies via the distributed web!
- [orbit-db](https://github.com/orbitdb/orbit-db) - Peer-to-Peer Databases for the Decentralized Web
- [ipfs-log](https://github.com/orbitdb/ipfs-log) - Append-only log CRDT on IPFS
- [Sidetree DID Protocol](https://github.com/decentralized-identity/sidetree) - Decentralized Identifier Layer-2 network protocol
- [Constellation](https://julienmalard.github.io/constellation/) - Distributed scientific databases for citizen science and more

## How to sign up?

Simply submit a PR to this document by adding your project name and contact.


================================================
FILE: docs/FAQ.md
================================================
# FAQ <!-- omit in toc -->

## Table of Contents <!-- omit in toc -->

- [Why isn't there DHT support in js-IPFS?](#why-isnt-there-dht-support-in-js-ipfs)
  - [Node.js](#nodejs)
  - [Browser](#browser)
- [How to enable WebRTC support for js-ipfs in the Browser](#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser)
- [Is there WebRTC support for js-ipfs with Node.js?](#is-there-webrtc-support-for-js-ipfs-with-nodejs)
- [How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?](#how-can-i-configure-an-ipfs-node-to-use-a-custom-signaling-endpoint-for-my-webrtc-transport)
- [I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?](#i-see-some-slowness-when-hopping-between-tabs-chrome-with-ipfs-nodes-is-there-a-reason-why)
- [Can I use IPFS in my Electron App?](#can-i-use-ipfs-in-my-electron-app)
- [What are all these `refs?Qmfoo` HTTP errors I keep seeing in the console?](#what-are-all-these-refsqmfoo-http-errors-i-keep-seeing-in-the-console)
- [Have more questions?](#have-more-questions)

## Why isn't there DHT support in js-IPFS?

There is DHT support for js-IPFS in the form of [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) but it is not finished yet, and may not be the right solution to the problem.

### Node.js

To enable DHT support, before starting your daemon run:

```console
$ jsipfs config Routing.Type dht
```

The possible values for `Routing.Type` are:

 -  `'none'` the default, this means the DHT is turned off any you must manually dial other nodes
 -  `'dht'` start the node in DHT client mode, if it is discovered to be publicly dialable it will automatically switch to server mode
 -  `'dhtclient'` A DHT client is able to make DHT queries but will not respond to any
 -  `'dhtserver'` A DHT server can make and respond to DHT queries.  Please only choose this option if your node is dialable from the open Internet.

At the time of writing, only DHT client mode is supported and will be selected if `Routing.Type` is not `'none'`.

### Browser

In the browser there are many constraints that mean the environment does not typically make for good DHT participants - the number of connections required is high, people do not tend to stay on a page for long enough to make or answer DHT queries, and even if they did, most nodes on the network talk TCP - the browser can neither open TCP ports on remote hosts nor accept TCP connections.

A better approach may be to set up [Delegate Routing](./DELEGATE_ROUTERS.md) to use remote go-IPFS to make queries on the browsers' behalf as these do not have the same constraints.

Of course, there's no reason why js on the server should not be a fully fledged DHT participant, please help out on the [libp2p/js-libp2p-kad-dht](https://github.com/libp2p/js-libp2p-kad-dht) repo to make this a reality!

## How to enable WebRTC support for js-ipfs in the Browser

To add a WebRTC transport to your js-ipfs node, you must add a WebRTC multiaddr. To do that, simple override the config.Addresses.Swarm array which contains all the multiaddrs which the IPFS node will use. See below:

```JavaScript
const node = await IPFS.create({
  config: {
    Addresses: {
      Swarm: [
        '/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star',
        '/dns4/wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star'
      ]
    }
  }
})

// your instance with WebRTC is ready
```

**Important:** This transport usage is kind of unstable and several users have experienced crashes. Track development of a solution at https://github.com/ipfs/js-ipfs/issues/1088.

## Is there WebRTC support for js-ipfs with Node.js?

Yes, however, bear in mind that there isn't a 100% stable solution to use WebRTC in Node.js, use it at your own risk. The most tested options are:

- [wrtc](https://npmjs.org/wrtc) - Follow the install instructions.
- [electron-webrtc](https://npmjs.org/electron-webrtc)

To add WebRTC support in a IPFS node instance, do:

```JavaScript
import wrtc from 'wrtc' // or 'electron-webrtc'
import WebRTCStar from '@libp2p/webrtc-star'

const node = await IPFS.create({
  repo: 'your-repo-path',
  config: {
    Addresses: {
      Swarm: [
        "/ip4/0.0.0.0/tcp/4002",
        "/ip4/127.0.0.1/tcp/4003/ws",
        "/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star",
        "/dns4/wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star"
      ]
    }
  },
  libp2p: {
    modules: {
      transport: [WebRTCStar]
    },
    config: {
      peerDiscovery: {
        webRTCStar: { // <- note the lower-case w - see https://github.com/libp2p/js-libp2p/issues/576
          enabled: true
        }
      },
      transport: {
        WebRTCStar: { // <- note the upper-case w- see https://github.com/libp2p/js-libp2p/issues/576
          wrtc
        }
      }
    }
  }
})

// your instance with WebRTC is ready
```

To add WebRTC support to the IPFS daemon, you only need to install one of the WebRTC modules globally:

```bash
npm install wrtc --global
# or
npm install electron-webrtc --global
```

Then, update your IPFS Daemon config to include the multiaddr for this new transport on the `Addresses.Swarm` array. Add: `"/dns4/wrtc-star.discovery.libp2p.io/wss/p2p-webrtc-star"`

## How can I configure an IPFS node to use a custom `signaling endpoint` for my WebRTC transport?

You'll need to execute a compatible `signaling server` ([libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) works) and include the correct configuration param for your IPFS node:

- provide the [`multiaddr`](https://github.com/multiformats/multiaddr) for the `signaling server`

```JavaScript
const node = await IPFS.create({
  repo: 'your-repo-path',
  config: {
    Addresses: {
      Swarm: [
        '/ip4/127.0.0.1/tcp/9090/ws/p2p-webrtc-star'
      ]
    }
  }
})
```

The code above assumes you are running a local `signaling server` on port `9090`. Provide the correct values accordingly.

## I see some slowness when hopping between tabs Chrome with IPFS nodes, is there a reason why?

Yes, unfortunately, due to [Chrome aggressive resource throttling policy](https://github.com/ipfs/js-ipfs/issues/611), it cuts freezes the execution of any background tab, turning an IPFS node that was running on that webpage into a vegetable state.

A way to mitigate this in Chrome, is to run your IPFS node inside a Service Worker, so that the IPFS instance runs in a background process. You can learn how to install an IPFS node as a service worker in here the repo [ipfs-service-worker](https://github.com/ipfs/ipfs-service-worker)

## Can I use IPFS in my Electron App?

Yes you can and in many ways. Read https://github.com/ipfs/notes/issues/256 for the multiple options.

We now support Electron v5.0.0 without the need to rebuilt native modules.
Still if you run into problems with native modules follow these instructions [here](https://electronjs.org/docs/tutorial/using-native-node-modules).

## What are all these `refs?Qmfoo` HTTP errors I keep seeing in the console?

In order for content added to your node to be accessible to other nodes on the network, they need to be able to [dial](https://github.com/ipfs/js-ipfs/blob/master/docs/core-api/SWARM.md#ipfsswarmconnectaddr-options) your node. This means there needs to be some way of connecting to you from the open Internet.

From node.js and Electron this might be done by opening a TCP port on your router and forwarding traffic to your node, while also configuring an [Announce](https://github.com/ipfs/js-ipfs/blob/master/docs/CONFIG.md#announce) address that is a combination of the forwarded port and your public IP address.

Browsers [can't open TCP sockets](https://github.com/ipfs/js-ipfs/blob/master/docs/BROWSERS.md#limitations-of-the-browser-context) so the only way right now is for your node to be connected to a WebRTC-Star signalling server - nodes interested in your content would connect to the same WebRTC-Star server and use that to negotiate a peer-to-peer connection.

This has several drawbacks - WebRTC is expensive so having lots of peers does not scale well, the maximum packet size is small so it's comparatively inefficient, browsers will frequently cull connections if you switch away from the tab and at the time of writing go-IPFS [has no WebRTC-Star transport](https://libp2p.io/implementations/#transports) so great swathes of the network will not be able to dial your node.

To make your content available, several 'preload' nodes are running. These nodes expose their [refs endpoint](https://docs.ipfs.io/reference/http/api/#api-v0-refs) over HTTP and all js-IPFS nodes connect to them as peers on startup.

When you add content to your node, a request is sent to a preload node with the CID of the content you've just added. This causes the preload node to use [Bitswap](https://docs.ipfs.io/concepts/bitswap/) to pull the content from your node, caching it for an hour or so which then means other nodes can then access the content without having to dial your otherwise undialable node.

These nodes sometimes go down, which is why you see errors in the console. They are non-fatal and can be ignored.

If you run your own node you can [disable preloading](https://github.com/ipfs/js-ipfs/blob/master/docs/MODULE.md#optionspreload) which will make the errors go away, at the cost of your content becoming less available or not available at all.

## Have more questions?

Ask for help in our forum at https://discuss.ipfs.io or in IRC (#ipfs on Freenode).


================================================
FILE: docs/IPLD.md
================================================
# IPLD Codecs <!-- omit in toc -->

## Table of Contents <!-- omit in toc -->

- [Overview](#overview)
- [Bundled BlockCodecs](#bundled-blockcodecs)
- [Bundled Multihashes](#bundled-multihashes)
- [Bundled Multibases](#bundled-multibases)
- [Adding additional BlockCodecs, Multihashes and Multibases](#adding-additional-blockcodecs-multihashes-and-multibases)
- [Next steps](#next-steps)

## Overview

The IPFS repo contains a blockstore that holds the data that makes up the files on the IPFS network. These blocks can be thought of as a [CID][] and associated byte array.

The [CID][] contains a `code` property that lets us know how to interpret the byte array associated with it.

In order to perform that interpretation, a [BlockCodec][] must be loaded that corresponds to the `code` property of the [CID][].

Similarly implementations of [Multihash][]es or [Multibase][]s must be available to be used.

## Bundled BlockCodecs

js-IPFS ships with four bundled codecs, the ones that are required to create and interpret [UnixFS][] structures.

These are:

1. [@ipld/dag-pb](https://github.com/ipld/js-dag-pb) - used for file and directory structures
2. [raw](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/raw.js) - used for file data where imported with `--raw-leaves=true`
3. [@ipld/dag-cbor](https://github.com/ipld/js-dag-cbor) - used for storage of JavaScript Objects with [CID] links to other blocks
4. [json](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/json.js) - used for storage of plain JavaScript Objects

## Bundled Multihashes

js-IPFS ships with all multihashes [exported by js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes), including `sha2-256` and others.

Additional hashers can be configured using the `hashers` config property.

## Bundled Multibases

js-IPFS ships with all multibases [exported by js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/bases), including `base58btc`, `base32` and others.

Additional bases can be configured using the `bases` config property.

## Adding additional BlockCodecs, Multihashes and Multibases

If your application requires support for extra codecs, you can configure them as follows:

1. Configure the [IPLD layer](https://github.com/ipfs/js-ipfs/blob/master/packages/ipfs/docs/MODULE.md#optionsipld) of your IPFS daemon to support the codec. This step is necessary so the node knows how to prepare data received over HTTP to be passed to IPLD for serialization:

    ```javascript
    import { create } from 'ipfs'
    import customBlockCodec from 'custom-blockcodec'
    import customMultibase from 'custom-multibase'
    import customMultihasher from 'custom-multihasher'

    const node = await create({
      ipld: {
        // either specify BlockCodecs as part of the `codecs` list
        codecs: [
          customBlockCodec
        ],

        // and/or supply a function to load them dynamically
        loadCodec: async (codecNameOrCode) => {
          return import(codecNameOrCode)
        },

        // either specify Multibase codecs as part of the `bases` list
        bases: [
          customMultibase
        ],

        // and/or supply a function to load them dynamically
        loadBase: async (baseNameOrCode) => {
          return import(baseNameOrCode)
        },

        // either specify Multihash hashers as part of the `hashers` list
        hashers: [
          customMultihasher
        ],

        // and/or supply a function to load them dynamically
        loadHasher: async (hashNameOrCode) => {
          return import(hashNameOrCode)
        }
      }
    })
   ```

2. Configure your IPFS HTTP API Client to support the codec. This is necessary so that the client can send the data to the IPFS node over HTTP:

    ```javascript
    import { create } from 'ipfs-http-client'
    import customBlockCodec from 'custom-blockcodec'
    import customMultibase from 'custom-multibase'
    import customMultihasher from 'custom-multihasher'

    const client = create({
      url: 'http://127.0.0.1:5002',
      ipld: {
        // either specify BlockCodecs as part of the `codecs` list
        codecs: [
          customBlockCodec
        ],

        // and/or supply a function to load them dynamically
        loadCodec: async (codecNameOrCode) => {
          return import(codecNameOrCode)
        },

        // either specify Multibase codecs as part of the `bases` list
        bases: [
          customMultibase
        ],

        // and/or supply a function to load them dynamically
        loadBase: async (baseNameOrCode) => {
          return import(baseNameOrCode)
        },

        // either specify Multihash hashers as part of the `hashers` list
        hashers: [
          customMultihasher
        ],

        // and/or supply a function to load them dynamically
        loadHasher: async (hashNameOrCode) => {
          return import(hashNameOrCode)
        }
      }
    })
    ```

## Next steps

* See [examples/custom-ipld-formats](https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/custom-ipld-formats) for runnable code that demonstrates the above with in-process IPFS nodes, IPFS run as a daemon and also the http client
* Also [examples/traverse-ipld-graphs](https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/traverse-ipld-graphs) which uses the [ipld-format-to-blockcodec](https://www.npmjs.com/package/ipld-format-to-blockcodec) module to use older [IPLD format][]s that have not been ported over to the new [BlockCodec][] interface, as well as additional [Multihash Hashers](https://www.npmjs.com/package/multiformats#multihash-hashers).

[cid]: https://docs.ipfs.io/concepts/content-addressing/
[blockcodec]: https://www.npmjs.com/package/multiformats#multicodec-encoders--decoders--codecs
[unixfs]: https://github.com/ipfs/specs/blob/master/UNIXFS.md
[ipld format]: https://github.com/ipld/interface-ipld-format
[multihash]: https://github.com/multiformats/multihash
[multibase]: https://github.com/multiformats/multibase

================================================
FILE: docs/MIGRATION-TO-ASYNC-AWAIT.md
================================================
# Migrating to the new JS IPFS Core API in 0.48.0 <!-- omit in toc -->

A migration guide for refactoring your application code to use the new JS IPFS core API.

Impact key:

* 🍏 easy - simple refactoring in application code
* 🍋 medium - involved refactoring in application code
* 🍊 hard - complicated refactoring in application code

## Table of Contents <!-- omit in toc -->

- [Migrating from callbacks](#migrating-from-callbacks)
- [Migrating from `PeerId`](#migrating-from-peerid)
- [Migrating from `PeerInfo`](#migrating-from-peerinfo)
- [Migrating to Async Iterables](#migrating-to-async-iterables)
  - [From Node.js Streams](#from-nodejs-streams)
    - [Node.js Readable Streams](#nodejs-readable-streams)
    - [Piping Node.js Streams](#piping-nodejs-streams)
    - [Node.js Transform Streams](#nodejs-transform-streams)
  - [From Pull Streams](#from-pull-streams)
    - [Source Pull Streams](#source-pull-streams)
    - [Pull Stream Pipelines](#pull-stream-pipelines)
    - [Transform Pull Streams](#transform-pull-streams)
  - [From buffering APIs](#from-buffering-apis)
- [Migrating from `addFromFs`](#migrating-from-addfromfs)
- [Migrating from `addFromURL`](#migrating-from-addfromurl)
- [Migrating from `addFromStream`](#migrating-from-addfromstream)

## Migrating from callbacks

Callbacks are no longer supported in the API. If your application primarily uses callbacks you have two main options for migration:

**Impact 🍊**

Switch to using the promise API with async/await. Instead of program continuation in a callback, continuation occurs after the async call and functions from where the call is made are changed to be async functions.

e.g.

```js
function main () {
  ipfs.id((err, res) => {
    console.log(res)
  })
}
main()
```

Becomes:

```js
async function main () {
  const res = await ipfs.id()
  console.log(res)
}
main()
```

**Impact 🍏**

Alternatively you could "callbackify" the API. In this case you use a module to convert the promise API to a callback API either permanently or in an interim period.

e.g.

```js
function main () {
  ipfs.id((err, res) => {
    console.log(res)
  })
}
main()
```

Becomes:

```js
const callbackify = require('callbackify')
const ipfsId = callbackify(ipfs.id)

async function main () {
  ipfsId((err, res) => {
    console.log(res)
  })
}
main()
```

## Migrating from `PeerId`

Libp2p `PeerId` instances are no longer returned from the API. If your application is using the crypto capabilities of [`PeerId`](https://github.com/libp2p/js-peer-id) instances then you'll want to convert the peer ID `string` returned by the new API back into libp2p `PeerId` instances.

**Impact 🍏**

Peer ID strings are also CIDs so converting them is simple:

```js
const peerId = PeerId.createFromB58String(peerIdStr)
```

You can get hold of the `PeerId` class using npm or in a script tag:

```js
import { PeerId } from '@libp2p/interface-peer-id'
const peerId = PeerId.createFromB58String(peerIdStr)
```

```html
<script src="https://unpkg.com/peer-id/dist/index.min.js"></script>
<script>
  const peerId = window.PeerId.createFromB58String(peerIdStr)
</script>
```

## Migrating from `PeerInfo`

Libp2p `PeerInfo` instances are no longer returned from the API. Instead, plain objects of the form `{ id: string, addrs: Multiaddr[] }` are returned. To convert these back into a `PeerInfo` instance:

**Impact 🍏**

Instantiate a new `PeerInfo` and add addresses to it:

```js
const peerInfo = new PeerInfo(PeerId.createFromB58String(info.id))
info.addrs.forEach(addr => peerInfo.multiaddrs.add(addr))
```

You can get hold of the `PeerInfo` class using npm or in a script tag:

```js
const PeerInfo = require('peer-info')
import { PeerId } from '@libp2p/interface-peer-id'
const peerInfo = new PeerInfo(PeerId.createFromB58String(info.id))
info.addrs.forEach(addr => peerInfo.multiaddrs.add(addr))
```

```html
<script src="https://unpkg.com/peer-info/dist/index.min.js"></script>
<script src="https://unpkg.com/peer-id/dist/index.min.js"></script>
<script>
  const peerInfo = new window.PeerInfo(window.PeerId.createFromB58String(info.id))
  info.addrs.forEach(addr => peerInfo.multiaddrs.add(addr))
</script>
```

## Migrating to Async Iterables

Async Iterables are a language native way of streaming data. The IPFS core API has previously supported two different stream implementations - Pull Streams and Node.js Streams. Similarly to those two different implementations, streaming iterables come in different forms for different purposes:

1. **source** - something that can be consumed. Analogous to a "source" pull stream or a "readable" Node.js stream
2. **sink** - something that consumes (or drains) a source. Analogous to a "sink" pull stream or a "writable" Node.js stream
3. **transform** - both a sink and a source where the values it consumes and the values that can be consumed from it are connected in some way. Analogous to a transform in both Pull and Node.js streams
4. **duplex** - similar to a transform but the values it consumes are not necessarily connected to the values that can be consumed from it

More information and examples here: https://gist.github.com/alanshaw/591dc7dd54e4f99338a347ef568d6ee9

List of useful modules for working with async iterables: https://github.com/alanshaw/it-awesome

Note that iterables might gain many helper functions soon: https://github.com/tc39/proposal-iterator-helpers

### From Node.js Streams

#### Node.js Readable Streams

Modern Node.js readable streams are async iterable so there's no changes to any APIs that you'd normally pass a stream to. The `*ReadableStream` APIs have been removed. To migrate from `*ReadableStream` methods, there are a couple of options:

**Impact 🍊**

Use a [for/await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of) loop to consume an async iterable.

e.g.

```js
const readable = ipfs.catReadableStream('QmHash')
const decoder = new TextDecoder()

readable.on('data', chunk => {
  console.log(decoder.decode(chunk))
})

readable.on('end', () => {
  console.log('done')
})
```

Becomes:

```js
const source = ipfs.cat('QmHash')
const decoder = new TextDecoder()

for await (const chunk of source) {
  console.log(decoder.decode(chunk))
}

console.log('done')
```

**Impact 🍏**

Convert the async iterable to a readable stream.

e.g.

```js
const readable = ipfs.catReadableStream('QmHash')
const decoder = new TextDecoder()

readable.on('data', chunk => {
  console.log(decoder.decode(chunk))
})

readable.on('end', () => {
  console.log('done')
})
```

Becomes:

```js
import toStream from 'it-to-stream'
const readable = toStream.readable(ipfs.cat('QmHash'))
const decoder = new TextDecoder()

readable.on('data', chunk => {
  console.log(decoder.decode(chunk))
})

readable.on('end', () => {
  console.log('done')
})
```

#### Piping Node.js Streams

Sometimes applications will "pipe" Node.js streams together, using the `.pipe` method or the `pipeline` utility. There are 2 possible migration options:

**Impact 🍊**

Use `it-pipe` and a [for/await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of) loop to concat data from an async iterable.

e.g.

```js
const { pipeline, Writable } = require('stream')
const decoder = new TextDecoder()

let data = new Uint8Array(0)
const concat = new Writable({
  write (chunk, enc, cb) {
    data = uint8ArrayConcat([data, chunk])
    cb()
  }
})

pipeline(
  ipfs.catReadableStream('QmHash'),
  concat,
  err => {
    console.log(decoder.decode(chunk))
  }
)
```

Becomes:

```js
const pipe = require('it-pipe')
const decoder = new TextDecoder()

let data = new Uint8Array(0)
const concat = async source => {
  for await (const chunk of source) {
    data = uint8ArrayConcat([data, chunk])
  }
}

const data = await pipe(
  ipfs.cat('QmHash'),
  concat
)

console.log(decoder.decode(data))
```

...which, by the way, could more succinctly be written as:

```js
import toBuffer from 'it-to-buffer'
const decoder = new TextDecoder()
const data = await toBuffer(ipfs.cat('QmHash'))
console.log(decoder.decode(data))
```

**Impact 🍏**

Convert the async iterable to a readable stream.

e.g.

```js
const { pipeline, Writable } = require('stream')
const decoder = new TextDecoder()

let data = new Uint8Array(0)
const concat = new Writable({
  write (chunk, enc, cb) {
    data = uint8ArrayConcat([data, chunk])
    cb()
  }
})

pipeline(
  ipfs.catReadableStream('QmHash'),
  concat,
  err => {
    console.log(decoder.decode(data))
  }
)
```

Becomes:

```js
import toStream from 'it-to-stream'
const { pipeline, Writable } = require('stream')
const decoder = new TextDecoder()

let data = new Uint8Array(0)
const concat = new Writable({
  write (chunk, enc, cb) {
    data = uint8ArrayConcat([data, chunk])
    cb()
  }
})

pipeline(
  toStream.readable(ipfs.cat('QmHash')),
  concat,
  err => {
    console.log(decoder.decode(data))
  }
)
```

#### Node.js Transform Streams

Commonly in Node.js you have a readable stream of a file from the filesystem that you want to add to IPFS. There are 2 possible migration options:

**Impact 🍊**

Use `it-pipe` and a [for/await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of) loop to collect all items from an async iterable.

e.g.

```js
import fs from 'fs'
const { pipeline } = require('stream')

const items = []
const all = new Writable({
  objectMode: true,
  write (chunk, enc, cb) {
    items.push(chunk)
    cb()
  }
})

pipeline(
  fs.createReadStream('/path/to/file'),
  ipfs.addReadableStream(),
  all,
  err => {
    console.log(items)
  }
)
```

Becomes:

```js
import fs from 'fs'
const pipe = require('it-pipe')

const items = []
const all = async source => {
  for await (const chunk of source) {
    items.push(chunk)
  }
}

await pipe(
  fs.createReadStream('/path/to/file'), // Because Node.js streams are iterable
  ipfs.add,
  all
)

console.log(items)
```

...which, by the way, could more succinctly be written as:

```js
import fs from 'fs'
const pipe = require('it-pipe')
import all from 'it-all'

const items = await pipe(
  fs.createReadStream('/path/to/file'),
  ipfs.add,
  all
)

console.log(items)
```

**Impact 🍏**

Convert the async iterable to a readable stream.

e.g.

```js
import fs from 'fs'
const { pipeline } = require('stream')

const items = []
const all = new Writable({
  objectMode: true,
  write (chunk, enc, cb) {
    items.push(chunk)
    cb()
  }
})

pipeline(
  fs.createReadStream('/path/to/file'),
  ipfs.addReadableStream(),
  all,
  err => {
    console.log(items)
  }
)
```

Becomes:

```js
import toStream from 'it-to-stream'
import fs from 'fs'
const { pipeline } = require('stream')

const items = []
const all = new Writable({
  objectMode: true,
  write (chunk, enc, cb) {
    items.push(chunk)
    cb()
  }
})

pipeline(
  fs.createReadStream('/path/to/file'),
  toStream.transform(ipfs.add),
  all,
  err => {
    console.log(items)
  }
)
```

### From Pull Streams

#### Source Pull Streams

Pull Streams can no longer be passed to IPFS API methods and the `*PullStream` APIs have been removed. To pass a pull stream directly to an IPFS API method, first convert it to an async iterable using [`pull-stream-to-async-iterator`](https://www.npmjs.com/package/pull-stream-to-async-iterator). To migrate from `*PullStream` methods, there are a couple of options:

**Impact 🍊**

Use a [for/await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of) loop to consume an async iterable.

e.g.

```js
const decoder = new TextDecoder()

pull(
  ipfs.catPullStream('QmHash'),
  pull.through(chunk => {
    console.log(decoder.decode(data))
  }),
  pull.onEnd(err => {
    console.log('done')
  })
)
```

Becomes:

```js
const decoder = new TextDecoder()

for await (const chunk of ipfs.cat('QmHash')) {
  console.log(decoder.decode(data))
}

console.log('done')
```

**Impact 🍏**

Convert the async iterable to a pull stream.

e.g.

```js
const decoder = new TextDecoder()

pull(
  ipfs.catPullStream('QmHash'),
  pull.through(chunk => {
    console.log(decoder.decode(data))
  }),
  pull.onEnd(err => {
    console.log('done')
  })
)
```

Becomes:

```js
const toPull = require('async-iterator-to-pull-stream')
const decoder = new TextDecoder()

pull(
  toPull.source(ipfs.cat('QmHash')),
  pull.through(chunk => {
    console.log(decoder.decode(data))
  }),
  pull.onEnd(err => {
    console.log('done')
  })
)
```

#### Pull Stream Pipelines

Frequently, applications will use `pull()` to create a pipeline of pull streams.

**Impact 🍊**

Use `it-pipe` and `it-concat` concat data from an async iterable.

e.g.

```js
const decoder = new TextDecoder()

pull(
  ipfs.catPullStream('QmHash'),
  pull.collect((err, chunks) => {
    console.log(decoder.decode(uint8ArrayConcat(chunks)))
  })
)
```

Becomes:

```js
const pipe = require('it-pipe')
import concat from 'it-concat'
const decoder = new TextDecoder()

const data = await pipe(
  ipfs.cat('QmHash'),
  concat
)

console.log(decoder.decode(data))
```

#### Transform Pull Streams

You might have a pull stream source of a file from the filesystem that you want to add to IPFS. There are 2 possible migration options:

**Impact 🍊**

Use `it-pipe` and `it-all` to collect all items from an async iterable.

e.g.

```js
import fs from 'fs'
const toPull = require('stream-to-pull-stream')

pull(
  toPull.source(fs.createReadStream('/path/to/file')),
  ipfs.addPullStream(),
  pull.collect((err, items) => {
    console.log(items)
  })
)
```

Becomes:

```js
import fs from 'fs'

const file = await ipfs.add(fs.createReadStream('/path/to/file'))

console.log(file)
```

**Impact 🍏**

Convert the async iterable to a pull stream.

e.g.

```js
import fs from 'fs'
const toPull = require('stream-to-pull-stream')

pull(
  toPull.source(fs.createReadStream('/path/to/file')),
  ipfs.addPullStream(),
  pull.collect((err, items) => {
    console.log(items)
  })
)
```

Becomes:

```js
import fs from 'fs'
const streamToPull = require('stream-to-pull-stream')
const itToPull = require('async-iterator-to-pull-stream')

pull(
  streamToPull.source(fs.createReadStream('/path/to/file')),
  itToPull.transform(ipfs.add),
  pull.collect((err, items) => {
    console.log(items)
  })
)
```

### From buffering APIs

The old APIs like `ipfs.add`, `ipfs.cat`, `ipfs.ls` and others were "buffering APIs" i.e. they collect all the results into memory before returning them. The new JS core interface APIs are streaming by default in order to reduce memory usage, reduce time to first byte and to provide better feedback. The following are examples of switching from the old `ipfs.add`, `ipfs.cat` and `ipfs.ls` to the new APIs:

**Impact 🍏**

Adding files.

e.g.

```js
const results = await ipfs.addAll([
  { path: 'root/1.txt', content: 'one' },
  { path: 'root/2.txt', content: 'two' }
])

// Note that ALL files have already been added to IPFS
results.forEach(file => {
  console.log(file.path)
})
```

Becomes:

```js
const addSource = ipfs.addAll([
  { path: 'root/1.txt', content: 'one' },
  { path: 'root/2.txt', content: 'two' }
])

for await (const file of addSource) {
  console.log(file.path) // Note these are logged out as they are added
}
```

Alternatively you can buffer up the results using the `it-all` utility:

```js
import all from 'it-all'

const results = await all(ipfs.addAll([
  { path: 'root/1.txt', content: 'one' },
  { path: 'root/2.txt', content: 'two' }
]))

results.forEach(file => {
  console.log(file.path)
})
```

Often you just want the last item (the root directory entry) when adding multiple files to IPFS:

```js
const results = await ipfs.addAll([
  { path: 'root/1.txt', content: 'one' },
  { path: 'root/2.txt', content: 'two' }
])

const lastResult = results[results.length - 1]

console.log(lastResult)
```

Becomes:

```js
const addSource = ipfs.addAll([
  { path: 'root/1.txt', content: 'one' },
  { path: 'root/2.txt', content: 'two' }
])

let lastResult
for await (const file of addSource) {
  lastResult = file
}

console.log(lastResult)
```

Alternatively you can use the `it-last` utility:

```js
const lastResult = await last(ipfs.addAll([
  { path: 'root/1.txt', content: 'one' },
  { path: 'root/2.txt', content: 'two' }
]))

console.log(lastResult)
```

**Impact 🍏**

Reading files.

e.g.

```js
import fs from 'fs'

const data = await ipfs.cat('/ipfs/QmHash')

// Note that here we have read the entire file
// i.e. `data` holds ALL the contents of the file in memory
await fs.writeFile('/tmp/file.iso', data)

console.log('done')
```

Becomes:

```js
const pipe = require('it-pipe')
import toIterable from 'stream-to-it'
import fs from 'fs'

// Note that as chunks arrive they are written to the file and memory can be freed and re-used
await pipe(
  ipfs.cat('/ipfs/QmHash'),
  toIterable.sink(fs.createWriteStream('/tmp/file.iso'))
)

console.log('done')
```

Alternatively you can buffer up the chunks using the `it-concat` utility (not recommended!):

```js
import fs from 'fs'
import concat from 'it-concat'

const data = await concat(ipfs.cat('/ipfs/QmHash'))

await fs.writeFile('/tmp/file.iso', data.slice())

console.log('done')
```

**Impact 🍏**

Listing directory contents.

e.g.

```js
const files = await ipfs.ls('/ipfs/QmHash')

// Note that ALL files in the directory have been read into memory
files.forEach(file => {
  console.log(file.name)
})
```

Becomes:

```js
const filesSource = ipfs.ls('/ipfs/QmHash')

for await (const file of filesSource) {
  console.log(file.name) // Note these are logged out as they are retrieved from the network/disk
}
```

Alternatively you can buffer up the directory listing using the `it-all` utility:

```js
import all from 'it-all'

const results = await all(ipfs.ls('/ipfs/QmHash'))

results.forEach(file => {
  console.log(file.name)
})
```

## Migrating from `addFromFs`

The `addFromFs` API method has been removed and replaced with a helper function `globSource` that is exported from `js-ipfs`/`js-ipfs-http-client`. See the [API docs for `globSource` for more info](https://github.com/ipfs/js-ipfs-http-client/blob/f30031163b9ac4ce2cff34ad4854f24b23cbff0b/README.md#glob-source).

**Impact 🍏**

e.g.

```js
const IpfsHttpClient = require('ipfs-http-client')
const ipfs = IpfsHttpClient()

const files = await ipfs.addFromFs('./docs', { recursive: true })

files.forEach(file => {
  console.log(file)
})
```

Becomes:

```js
const IpfsHttpClient = require('ipfs-http-client')
const { globSource } = IpfsHttpClient
const ipfs = IpfsHttpClient()

for await (const file of ipfs.addAll(globSource('./docs', { recursive: true }))) {
  console.log(file)
}
```

## Migrating from `addFromURL`

The `addFromURL` API method has been removed and replaced with a helper function `urlSource` that is exported from `js-ipfs`/`js-ipfs-http-client`. See the [API docs for `urlSource` for more info](https://github.com/ipfs/js-ipfs-http-client/blob/f30031163b9ac4ce2cff34ad4854f24b23cbff0b/README.md#url-source).

**Impact 🍏**

e.g.

```js
const IpfsHttpClient = require('ipfs-http-client')
const ipfs = IpfsHttpClient()

const files = await ipfs.addFromURL('https://ipfs.io/images/ipfs-logo.svg')

files.forEach(file => {
  console.log(file)
})
```

Becomes:

```js
const IpfsHttpClient = require('ipfs-http-client')
const { urlSource } = IpfsHttpClient
const ipfs = IpfsHttpClient()

const file = await ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))

console.log(file)
```

## Migrating from `addFromStream`

The `addFromStream` API method has been removed. This was an alias for `add`.

**Impact 🍏**

e.g.

```js
const IpfsHttpClient = require('ipfs-http-client')
const ipfs = IpfsHttpClient()

const files = await ipfs.addFromStream(fs.createReadStream('/path/to/file.txt'))

files.forEach(file => {
  console.log(file)
})
```

Becomes:

```js
import fs from 'fs'
const ipfs = IpfsHttpClient()

const file = await ipfs.add(fs.createReadStream('/path/to/file.txt'))

console.log(file)
```


================================================
FILE: docs/MODULE.md
================================================
# IPFS Module <!-- omit in toc -->

Use the IPFS module as a dependency of your project to spawn in process instances of IPFS in node.js, the browser, electron, etc.

## Table of contents <!-- omit in toc -->

- [Getting started](#getting-started)
- [IPFS.create([options])](#ipfscreateoptions)
  - [`options.repo`](#optionsrepo)
  - [`options.repoAutoMigrate`](#optionsrepoautomigrate)
  - [`options.init`](#optionsinit)
  - [`options.start`](#optionsstart)
  - [`options.pass`](#optionspass)
  - [`options.silent`](#optionssilent)
  - [`options.relay`](#optionsrelay)
  - [`options.offline`](#optionsoffline)
  - [`options.preload`](#optionspreload)
  - [`options.EXPERIMENTAL`](#optionsexperimental)
  - [`options.config`](#optionsconfig)
  - [`options.ipld`](#optionsipld)
  - [`options.libp2p`](#optionslibp2p)
  - [Instance methods](#instance-methods)
    - [`node.start()`](#nodestart)
- [Static types and utils](#static-types-and-utils)
      - [Glob source](#glob-source)
        - [`globSource(path, pattern, [options])`](#globsourcepath-pattern-options)
        - [Example](#example)
      - [URL source](#url-source)
        - [`urlSource(url)`](#urlsourceurl)
        - [Example](#example-1)
      - [Path](#path)
        - [`path()`](#path-1)
        - [Example](#example-2)

## Getting started

Create a running node with:

```javascript
// Create the IPFS node instance
const node = await IPFS.create()
// Your node is now ready to use \o/

await node.stop()
// node is now 'offline'
```

The node returned from `IPFS.create()` supports the [IPFS Core API](https://github.com/ipfs/js-ipfs/tree/master/docs/core-api), along with some additional methods documented below.

## IPFS.create([options])

```js
const node = await IPFS.create([options])
```

Creates and returns a ready to use instance of an IPFS node.

Use the `options` argument to specify advanced configuration. It is an object with any of these properties:

### `options.repo`

| Type | Default |
|------|---------|
| string or [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance | `'~/.jsipfs'` in Node.js, `'ipfs'` in browsers |

The file path at which to store the IPFS node’s data. Alternatively, you can set up a customized storage system by providing an [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo) instance.

Example:

```js
// Store data outside your user directory
const node = await IPFS.create({ repo: '/var/ipfs/data' })
```

### `options.repoAutoMigrate`

| Type      | Default |
| --------- | ------- |
| `boolean` | `true`  |

`js-ipfs` comes bundled with a tool that automatically migrates your IPFS repository when a new version is available.

**For apps that build on top of `js-ipfs` and run in the browser environment, be aware that disabling automatic
migrations leaves the user with no way to run the migrations because there is no CLI in the browser. In such
a case, you should provide a way to trigger migrations manually.**

### `options.init`

| Type              | Default |
| ----------------- | ------- |
| boolean or object | `true`  |

Perform repo initialization steps when creating the IPFS node.

Note that *initializing* a repo is different from creating an instance of [`ipfs.Repo`](https://github.com/ipfs/js-ipfs-repo). The IPFS constructor sets many special properties when initializing a repo, so you should usually not try and call `repoInstance.init()` yourself.

Instead of a boolean, you may provide an object with custom initialization options. All properties are optional:

- `emptyRepo` (boolean) Whether to remove built-in assets, like the instructional tour and empty mutable file system, from the repo. (Default: `false`)
- `algorithm` (string) The type of key to use. Supports `rsa`, `ed25519`, `secp256k1`. (Default: `rsa`)
- `bits` (number) Number of bits to use in the generated key pair (rsa only). (Default: `2048`)
- `privateKey` (string/PeerId) A pre-generated private key to use. Can be either a base64 string or a [PeerId](https://github.com/libp2p/js-peer-id) instance. **NOTE: This overrides `bits`.**
    ```js
    // Generating a Peer ID:
    import { PeerId } from '@libp2p/interface-peer-id'
    // Generates a new Peer ID, complete with public/private keypair
    // See https://github.com/libp2p/js-peer-id
    const peerId = await PeerId.create({ bits: 2048 })
    ```
- `pass` (string) A passphrase to encrypt keys. You should generally use the [top-level `pass` option](#optionspass) instead of the `init.pass` option (this one will take its value from the top-level option if not set).
- `profiles` (Array) Apply profile settings to config.
- `allowNew` (boolean, default: `true`) Set to `false` to disallow initialization if the repo does not already exist.

### `options.start`

| Type      | Default |
| --------- | ------- |
| `boolean` | `true`  |

If `false`, do not automatically start the IPFS node. Instead, you’ll need to manually call [`node.start()`](#nodestart) yourself.

### `options.pass`

| Type   | Default |
| ------ | ------- |
| string | `null`  |

A passphrase to encrypt/decrypt your keys.

### `options.silent`

| Type    | Default |
| ------- | ------- |
| Boolean | `false` |

Prevents all logging output from the IPFS node.

### `options.relay`

| Type | Default |
|------|---------|
| object | `{ enabled: true, hop: { enabled: false, active: false } }` |

Configure circuit relay (see the [circuit relay tutorial](https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/circuit-relaying) to learn more).

- `enabled` (boolean): Enable circuit relay dialer and listener. (Default: `true`)
- `hop` (object)
  - `enabled` (boolean): Make this node a relay (other nodes can connect *through* it). (Default: `false`)
  - `active` (boolean): Make this an *active* relay node. Active relay nodes will attempt to dial a destination peer even if that peer is not yet connected to the relay. (Default: `false`)

### `options.offline`

| Type    | Default |
| ------- | ------- |
| Boolean | `false` |

Run ipfs node offline. The node does not connect to the rest of the network but provides a local API.

### `options.preload`

| Type   | Default                               |
| ------ | ------------------------------------- |
| object | `{ enabled: true, addresses: [...] }` |

Configure remote preload nodes. The remote will preload content added on this node, and also attempt to preload objects requested by this node.

- `enabled` (boolean): Enable content preloading (Default: `true`)
- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Bootstrap`](#optionsconfig).

### `options.EXPERIMENTAL`

| Type   | Default                                  |
| ------ | ---------------------------------------- |
| object | `{ ipnsPubsub: false, sharding: false }` |

Enable and configure experimental features.

- `ipnsPubsub` (boolean): Enable pub-sub on IPNS. (Default: `false`)
- `sharding` (boolean): Enable directory sharding. Directories that have many child objects will be represented by multiple DAG nodes instead of just one. It can improve lookup performance when a directory has several thousand files or more. (Default: `false`)

### `options.config`

| Type | Default |
|------|---------|
| object | [`config.js`](https://github.com/ipfs/js-ipfs/blob/master/packages/ipfs-core-config/src/config.js) in Node.js, [`config-browser.js`](https://github.com/ipfs/js-ipfs/blob/master/packages/ipfs-core-config/src/config.browser.js) in browsers |

Modify the default IPFS node config. This object will be *merged* with the default config; it will not replace it. The default config is documented in [the js-ipfs config file docs](./CONFIG.md).

### `options.ipld`

| Type | Default |
|------|---------|
| object | [`ipld.js`](https://github.com/ipfs/js-ipfs/blob/master/packages/ipfs-core-config/src/ipld.js) |

Modify the default IPLD config. This object will be *merged* with the default config; it will not replace it. Check IPLD [docs](https://github.com/ipld/js-ipld#ipld-constructor) for more information on the available options.

> Browser config does **NOT** include by default all the IPLD formats. Only `ipld-dag-pb`, `ipld-dag-cbor` and `ipld-raw` are included.

To add support for other formats we provide two options, one sync and another async.

Examples for the sync option:

<details><summary>ESM Environments</summary>

```js
import ipldGit from 'ipld-git'
import ipldBitcoin from 'ipld-bitcoin'
import { convert } from 'ipld-format-to-blockcodec'

const node = await IPFS.create({
  ipld: {
    codecs: [
      convert(ipldGit),
      convert(ipldBitcoin)
    ]
  }
})
```

</details>
<details><summary>Commonjs Environments</summary>

```js
const IPFS = require('ipfs')
const ipldGit = require('ipld-git')
const ipldBitcoin = require('ipld-bitcoin')
const { convert } = require('ipld-format-to-blockcodec')

const node = await IPFS.create({
  ipld: {
    codecs: [
      convert(ipldGit),
      convert(ipldBitcoin)
    ]
  }
})
```

</details>
<details><summary>Using script tags</summary>

```html
<script src="https://unpkg.com/ipfs/dist/index.min.js"></script>
<script src="https://unpkg.com/ipld-git/dist/index.min.js"></script>
<script src="https://unpkg.com/ipld-bitcoin/dist/index.min.js"></script>
<script src="https://unpkg.com/ipld-format-to-blockcodec/dist/index.min.js"></script>
<script>
  async function main() {
    const node = await self.IPFS.create({
      ipld: {
        codecs: [
          convert(self.ipldGit),
          convert(self.ipldBitcoin)
        ]
      },
    });
  }
  main();
</script>
```

</details>

Examples for the async option:

<details><summary>ESM Environments</summary>

```js
const node = await IPFS.create({
  ipld: {
    async loadCodec (codec) {
      if (codec === multicodec.GIT_RAW) {
        return convert(await import('ipld-git')) // This is a dynamic import
      } else {
        throw new Error('unable to load format ' + multicodec.print[codec])
      }
    }
  }
})
```

> For more information about dynamic imports please check [webpack docs](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or search your bundler documention.

Using dynamic imports will tell your bundler to create a separate file (normally called *chunk*) that will **only** be requested by the browser if it's really needed. This strategy will reduce your bundle size and load times without removing any functionality.

With Webpack IPLD formats can even be grouped together using magic comments `import(/* webpackChunkName: "ipld-formats" */ 'ipld-git')` to produce a single file with all of them.

</details>

<details><summary>Commonjs Environments</summary>

```js
const node = await IPFS.create({
  ipld: {
    async loadFormat (codec) {
      if (codec === multicodec.GIT_RAW) {
        return require('ipld-git')
      } else {
        throw new Error('unable to load format ' + multicodec.print[codec])
      }
    }
  }
})
```

</details>

<details><summary>Using Script tags</summary>

```js
<script src="https://unpkg.com/ipfs/dist/index.min.js"></script>
<script>
const load = (name, url) => new Promise((resolve, reject) => {
  const script = document.createElement('script')
  script.src = url
  script.onload = () => resolve(self[name])
  script.onerror = () => reject(new Error('Failed to load ' + url))
  document.body.appendChild(script)
})

const node = await self.IPFS.create({
  ipld: {
    async loadFormat (codec) {
      switch (codec) {
        case multicodec.GIT_RAW:
          return load('IpldGit', 'https://unpkg.com/ipld-git/dist/index.min.js')
        case multicodec.BITCOIN_BLOCK:
          return load('IpldBitcoin', 'https://unpkg.com/ipld-bitcoin/dist/index.min.js')
        default:
          throw new Error('Unable to load format ' + multicodec.print[codec])
      }
    }
  }
})
</script>
```

</details>

### `options.libp2p`

| Type | Default |
|------|---------|
| object   | [`libp2p-nodejs.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core-config/src/libp2p-nodejs.js) in Node.js, [`libp2p-browser.js`](https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-core-config/src)/libp2p-browser.js) in browsers |
| function | [`libp2p bundle`](https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/custom-libp2p)                                         |

The libp2p option allows you to build your libp2p node by configuration, or via a bundle function. If you are looking to just modify the below options, using the object format is the quickest way to get the default features of libp2p. If you need to create a more customized libp2p node, such as with custom transports or peer/content routers that need some of the ipfs data on startup, a custom bundle is a great way to achieve this.

You can see the bundle in action in the [custom libp2p example](https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/custom-libp2p).

Please see [libp2p/docs/CONFIGURATION.md](https://github.com/libp2p/js-libp2p/blob/master/doc/CONFIGURATION.md) for the list of options libp2p supports.

### Instance methods

#### `node.start()`

Start listening for connections with other IPFS nodes on the network. In most cases, you do not need to call this method — `IPFS.create()` will automatically do it for you.

This method is asynchronous and returns a promise.

```js
const node = await IPFS.create({ start: false })
console.log('Node is ready to use but not started!')

try {
  await node.start()
  console.log('Node started!')
} catch (/** @type {any} */ error) {
  console.error('Node failed to start!', error)
}
```

## Static types and utils

Aside from the default export, `ipfs` exports various types and utilities that are included in the bundle:

- [`crypto`](https://www.npmjs.com/package/libp2p-crypto)
- [`isIPFS`](https://www.npmjs.com/package/is-ipfs)
- [`Buffer`](https://www.npmjs.com/package/buffer)
- [`PeerId`](https://docs.libp2p.io/concepts/peer-id/)
- [`PeerInfo`](https://www.npmjs.com/package/peer-info)
- [`multiaddr`](https://www.npmjs.com/package/multiaddr)
- [`multibase`](https://www.npmjs.com/package/multibase)
- [`multihash`](https://www.npmjs.com/package/multihashes)
- [`multihashing`](https://www.npmjs.com/package/multihashing-async)
- [`multicodec`](https://www.npmjs.com/package/multicodec)
- [`CID`](https://docs.ipfs.io/concepts/content-addressing)

These can be accessed like this, for example:

```js
const { CID } = require('ipfs')
// ...or from an es-module:
import { CID } from 'ipfs'
```

##### Glob source

A utility to allow files on the file system to be easily added to IPFS.

###### `globSource(path, pattern, [options])`

- `path`: A path to a single file or directory to glob from
- `pattern`: A pattern to match files under `path`
- `options`: Optional options
- `options.hidden`: Hidden/dot files (files or folders starting with a `.`, for example, `.git/`) are not included by default. To add them, use the option `{ hidden: true }`.

Returns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.

###### Example

```js
import { create, globSource } from 'ipfs'

const ipfs = await create()

for await (const file of ipfs.addAll(globSource('./docs', '**/*'))) {
  console.log(file)
}
/*
{
  path: 'docs/assets/anchor.js',
  cid: CID('QmVHxRocoWgUChLEvfEyDuuD6qJ4PhdDL2dTLcpUy3dSC2'),
  size: 15347
}
{
  path: 'docs/assets/bass-addons.css',
  cid: CID('QmPiLWKd6yseMWDTgHegb8T7wVS7zWGYgyvfj7dGNt2viQ'),
  size: 232
}
...
*/
```

##### URL source

A utility to allow content from the internet to be easily added to IPFS.

###### `urlSource(url)`

- `url`: A string URL or [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) instance to send HTTP GET request to

Returns an async iterable that yields `{ path, content }` objects suitable for passing to `ipfs.add`.

###### Example

```js
import { create, urlSource } from 'ipfs'

const ipfs = await create()

const file = await ipfs.add(urlSource('https://ipfs.io/images/ipfs-logo.svg'))
console.log(file)

/*
{
  path: 'ipfs-logo.svg',
  cid: CID('QmTqZhR6f7jzdhLgPArDPnsbZpvvgxzCZycXK7ywkLxSyU'),
  size: 3243
}
*/
```

##### Path

A function that returns the path to the js-ipfs CLI.

This is analogous to the `.path()` function exported by the [go-ipfs](https://www.npmjs.com/package/go-ipfs) module.

###### `path()`

Returns the path to the js-ipfs CLI

###### Example

```js
import { path } from 'ipfs'

console.info(path()) // /foo/bar/node_modules/ipfs/src/cli.js
```


================================================
FILE: docs/MONITORING.md
================================================
# Monitoring

The HTTP API exposed with js-ipfs can also be used for exposing metrics about the running js-ipfs node and other Node.js metrics.

To enable it, you need to set the environment variable `IPFS_MONITORING` (any value).  E.g.

```console
$ IPFS_MONITORING=true jsipfs daemon
```

Once the environment variable is set and the js-ipfs daemon is running, you can get the metrics (in prometheus format) by making a GET request to the following endpoint:

```
http://localhost:5002/debug/metrics/prometheus
```


================================================
FILE: docs/README.md
================================================
# IPFS Docs <!-- omit in toc -->

- [API Docs](#api-docs)
- [How tos and other documentation](#how-tos-and-other-documentation)
- [Development documentation](#development-documentation)

## API Docs

`ipfs` can run as part of your program (an in-process node) or as a standalone daemon process that can be communicated with via an HTTP RPC API using the [`ipfs-http-client`](../packages/ipfs-http-client) module.

Whether accessed directly or over HTTP, both methods support the full [Core API](#core-api).  In addition other methods are available to construct instances of each module, etc.

* [Core API docs](./core-api/README.md)
* [IPFS API](../packages/ipfs/README.md)
* [IPFS-HTTP-CLIENT API](../packages/ipfs-http-client/README.md)

## How tos and other documentation

* [Architecture overview](./ARCHITECTURE.md)
* [How to run js-IPFS in the browser](./BROWSERS.md)
* [Running js-IPFS on the CLI](./CLI.md)
* [js-IPFS configuration options](./CONFIG.md)
* [How to configure CORS for use with the http client](./CORS.md)
* [Running js-IPFS as a daemon](./DAEMON.md)
* [Configuring Delegate Routers](./DELEGATE_ROUTERS.md)
* [Running js-IPFS under Docker](./DOCKER.md)
* [FAQ](./FAQ.md)
* [How to configure additional IPLD codecs](./IPLD.md)
* [Running js-IPFS in your application](./MODULE.md)
* [How to get metrics out of js-IPFS](./MONITORING.md)

## Development documentation

* [Getting started](./DEVELOPMENT.md)
* [Release issue template](./RELEASE_ISSUE_TEMPLATE.md)
* [Early testers](./EARLY_TESTERS.md)
* [Releases](./RELEASES.md)


================================================
FILE: docs/RELEASES.md
================================================
# Releases <!-- omit in toc -->

## Table of Contents <!-- omit in toc -->

- [Release Philosophy](#release-philosophy)
- [Release Flow](#release-flow)
  - [Stage 0 - Automated Testing](#stage-0---automated-testing)
  - [Stage 1 - Internal Testing](#stage-1---internal-testing)
  - [Stage 2 - Community Dev Testing](#stage-2---community-dev-testing)
  - [Stage 3 - Community Prod Testing](#stage-3---community-prod-testing)
  - [Stage 4 - Release](#stage-4---release)
- [Release Cycle](#release-cycle)
  - [Patch Releases](#patch-releases)
- [Performing a Release](#performing-a-release)
- [Release Version Numbers](#release-version-numbers)
  - [Release Candidates](#release-candidates)

## Release Philosophy

js-ipfs aims to have release every six weeks, two releases per quarter. During these 6 week releases, we go through 4 different stages that gives us the opportunity to test the new version against our test environments (unit, interop, integration), QA in our current production environment, IPFS apps (e.g. Desktop and WebUI) and with our community and _early testers_<sup>[1]</sup> that have IPFS running in production.

We might expand the six week release schedule in case of:

- No new updates to be added
- In case of a large community event that takes the core team availability away (e.g. IPFS Conf, Dev Meetings, IPFS Camp, etc.)

## Release Flow

js-ipfs releases come in 5 stages designed to gradually roll out changes and reduce the impact of any regressions that may have been introduced. If we need to merge non-trivial<sup>[2]</sup> changes during the process, we start over at stage 0.

![js-ipfs release flow cartoon](https://ipfs.io/ipfs/QmU5pwcGh38DqzLy3rK8GAHuWm2kK87oGqDAtqZYWhxjab)

### Stage 0 - Automated Testing

At this stage, we expect _all_ automated tests (unit, functional, integration, interop, testlab, performance, etc.) to pass.

### Stage 1 - Internal Testing

At this stage, we'll:

1. Start a partial-rollout to our own infrastructure.
2. Test against applications in the [ipfs](https://github.com/ipfs/) and [ipfs-shipyard](https://github.com/ipfs-shipyard/) organisations and a selection of other hand picked projects.

**Goals:**

1. Make sure we haven't introduced any obvious regressions.
2. Test the release in an environment we can monitor and easily roll back (i.e. our own infra).

### Stage 2 - Community Dev Testing

At this stage, we'll announce the impending release to the community and ask for pre-release testers.

**Goal:**

Test the release in as many non-production environments as possible. This is relatively low-risk but gives us a _breadth_ of testing internal testing can't.

### Stage 3 - Community Prod Testing

At this stage, we consider the release to be "production ready" and will ask the community and our early testers to (partially) deploy the release to their production infrastructure.

**Goals:**

1. Test the release in some production environments with heavy workloads.
2. Partially roll-out an upgrade to see how it affects the network.
3. Retain the ability to ship last-minute fixes before the final release.

### Stage 4 - Release

At this stage, the release is "battle hardened" and ready for wide deployment. A new version is published to npm, announcements are made and a blog post is published to [blog.ipfs.io](https://blog.ipfs.io).

## Release Cycle

A full release process should take about 3 weeks, a week per stage 1-3. We will start a new process every 6 weeks, regardless of when the previous release landed unless it's still ongoing.

### Patch Releases

If we encounter a serious bug in the stable latest release, we will create a patch release based on this release. For now, bug fixes will _not_ be backported to previous releases.

Patch releases will usually follow a compressed release cycle and should take 2-3 days. In a patch release:

1. Automated and internal testing (stage 0 and 1) will be compressed into a few hours - ideally less than a day.
2. Stage 2 will be skipped.
3. Community production testing will be shortened to 1-2 days of opt-in testing in production (early testers can choose to pass).

Some patch releases, especially ones fixing one or more complex bugs, may undergo the full release process.

## Performing a Release

The release is managed by the "Lead Maintainer" for js-ipfs. It starts with the opening of an issue containing the content available on the [RELEASE_ISSUE_TEMPLATE](./RELEASE_ISSUE_TEMPLATE.md) not more than **48 hours** after the previous release.

This issue is pinned and labeled ["release"](https://github.com/ipfs/js-ipfs/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Arelease). When the cycle is due to begin the 5 stages will be followed until the release is done.

## Release Version Numbers

js-ipfs is currently pre-1.0. In semver terms this means [anything may change at any time](https://semver.org/#spec-item-4).

However, pre-1.0 js-ipfs reserves MINOR version increments for BREAKING CHANGES _and_ feature additions and PATCH version increments for bug fixes.

Post `1.x.x` (future), MAJOR version number increments will contain BREAKING CHANGES, MINOR version increments will be reserved for backwards compatible new features and PATCH version increments for bug fixes.

We do not yet retroactively apply fixes to older releases (no Long Term Support releases for now), which means that we always recommend users to update to the latest, whenever possible.

### Release Candidates

Every commit to master results in the publishing of a Release Candidate. These are made available for users who want to try out the "bleeding edge" and can be installed using version numbers with the form `x.y.z-rc.n` where `x`, `y`, and `z` are the usual MAJOR, MINOR and PATCH version numbers and `n` (starting at 0) which is the number of commits to master since the last full release.

Alternatively the latest RC is tagged `next` on npm and can be installed using `npm install ipfs@next`.

---

- <sup>**[1]**</sup> - _early testers_ is an IPFS programme in which members of the community can self-volunteer to help test `js-ipfs` Release Candidates. You find more info about it at [EARLY_TESTERS.md](./EARLY_TESTERS.md)
- <sup>**[2]**</sup> - A non-trivial change is any change that could potentially introduce an issue that could not categorically be caught by automated testing. This is up to the discretion of the Lead Maintainer but the assumption is that every change is non-trivial unless proven otherwise.


================================================
FILE: docs/RELEASE_ISSUE_TEMPLATE.md
================================================
# Release Template

> short tl;dr; of the release

# 🗺 What's left for release

<List of items with PRs and/or Issues to be considered for this release>

# 🚢 Estimated shipping date

<Date this release will ship on if everything goes to plan (week beginning...)>

# 🔦 Highlights

<Top highlights for this release>

# 🏗 API Changes

<Any API changes breaking or otherwise that people should know of>

# ✅ Release Checklist

- [ ] **Stage 0 - Automated Testing**
  - [ ] Feature freeze. If any "non-trivial" changes (see the footnotes of [docs/releases.md](https://github.com/ipfs/js-ipfs/tree/master/docs/releases.md) for a definition) get added to the release, uncheck all the checkboxes and return to this stage.
  - [ ] Automated Testing (already tested in CI) - Ensure that all tests are passing, this includes:
    - [ ] unit/functional/integration/e2e
    - [ ] interop
    - [ ] ~~sharness~~ (Does not run `js-ipfs`)
    - [ ] all the examples run without problems
    - [ ] IPFS application testing
      - [ ] ~~[webui](https://github.com/ipfs-shipyard/ipfs-webui)~~ (Does not depend on `js-ipfs` or `js-ipfs-http-client`)
      - [ ] ~~[ipfs-desktop](https://github.com/ipfs-shipyard/ipfs-desktop)~~ (Does not depend on `js-ipfs` or `js-ipfs-http-client`)
      - [ ] [ipfs-companion](https://github.com/ipfs-shipyard/ipfs-companion)
      - [ ] [npm-on-ipfs](https://github.com/ipfs-shipyard/npm-on-ipfs)
      - [ ] [peer-base](https://github.com/peer-base/peer-base)
      - [ ] [service-worker-gateway](https://github.com/ipfs-shipyard/service-worker-gateway)
    - [ ] Third party application testing
      - [ ] [ipfs-log](https://github.com/orbitdb/ipfs-log)
      - [ ] [orbit-db](https://github.com/orbitdb/orbit-db)
      - [ ] [sidetree](https://github.com/decentralized-identity/sidetree)
- [ ] **Stage 1 - Internal Testing**
  - [ ] Documentation
    - [ ] Ensure that [README.md](https://github.com/ipfs/js-ipfs/tree/master/README.md) is up to date
      - [ ] Install section
      - [ ] API calls
      - [ ] Packages Listing
  - [ ] Publish a release candidate to npm
    ```sh
    # All successful builds of master update the `build/last-successful` branch
    # which contains an `npm-shrinkwrap.json`.
    # This command checks that branch out, installs it's dependencies using `npm ci`,
    # creates a release branch (e.g. release/v0.34.x), updates the minor prerelease
    # version (e.g. 0.33.1 -> 0.34.0-rc.0) and publishes it to npm.
    npx aegir publish-rc

    # Later we may wish to update the rc. First cherry-pick/otherwise merge the
    # new commits into the release branch on github (e.g. not locally) and wait
    # for CI to pass. Then update the lockfiles used by CI (n.b. one day this
    # will be done by our ci tools) with this command:
    npx aegir update-release-branch-lockfiles release/v0.34.x

    # Then update the rc published on npm. This command pulls the specified
    # release branch, installs it's dependencies `npm ci`, increments the
    # prerelease version (e.g. 0.34.0-rc.0 -> 0.34.0-rc.1) and publishes it
    # to npm.
    npx aegir update-rc release/v0.34.x
    ```
  - Network Testing:
    - test lab things - TBD
  - Infrastructure Testing:
    - TBD
- [ ] **Stage 2 - Community Dev Testing**
  - [ ] Reach out to the IPFS _early testers_ listed in [docs/EARLY_TESTERS.md](https://github.com/ipfs/js-ipfs/tree/master/docs/EARLY_TESTERS.md) for testing this release (check when no more problems have been reported). If you'd like to be added to this list, please file a PR.
  - [ ] Reach out on IRC for additional early testers.
- [ ] **Stage 3 - Community Prod Testing**
  - [ ] Update [js.ipfs.io](https://js.ipfs.io) examples to use the latest js-ipfs
  - [ ] Invite the IPFS [_early testers_](https://github.com/ipfs/js-ipfs/tree/master/docs/EARLY_TESTERS.md) to deploy the release to part of their production infrastructure.
  - [ ] Invite the wider community (link to the release issue):
    - [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements)
    - [ ] Twitter
    - [ ] IRC
- [ ] **Stage 4 - Release**
  - [ ] Take a snapshot of everyone that has contributed to this release (including its direct dependencies in IPFS, libp2p, IPLD and multiformats) using [the js-ipfs-contributors module](https://www.npmjs.com/package/js-ipfs-contributors).
  - [ ] Publish to npm:
    ```sh
    git checkout release/v0.34.x

    # Re-install dependencies using lockfile (will automatically remove your
    # node_modules folder) (Ensures the versions used for the browser build are the
    # same that have been verified by CI)
    npm ci

    # lint, build, test, tag, publish
    npm run release-minor

    # reintegrate release branch into master
    git rm npm-shrinkwrap.json yarn.lock
    git commit -m 'chore: removed lock files'
    git checkout master
    git merge release/v0.34.x
    git push
    ```
  - [ ] Publish a blog post to [github.com/ipfs/blog](https://github.com/ipfs/blog) (at minimum, a c&p of this release issue with all the highlights, API changes and thank yous)
  - [ ] Broadcasting (link to blog post)
    - [ ] Twitter
    - [ ] IRC
    - [ ] [Reddit](https://reddit.com/r/ipfs)
    - [ ] [discuss.ipfs.io](https://discuss.ipfs.io/c/announcements)
    - [ ] Announce it on the [IPFS Users Mailing List](https://groups.google.com/forum/#!forum/ipfs-users)
  - [ ] Copy release notes to the [GitHub Release description](https://github.com/ipfs/js-ipfs/releases)

# ❤️ Huge thank you to everyone that made this release possible

<Generated contributor list>

# 🙌🏽 Want to contribute?

Would you like to contribute to the IPFS project and don't know how? Well, there are a few places you can get started:

- Check the issues with the `help wanted` label in the [js-ipfs repo](https://github.com/ipfs/js-ipfs/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)
- Join an IPFS All Hands, introduce yourself and let us know where you would like to contribute - https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands
- Hack with IPFS and show us what you made! The All Hands call is also the perfect venue for demos, join in and show us what you built
- Join the discussion at https://discuss.ipfs.io/ and help users finding their answers.
- Join the [🚀 IPFS Core Implementations Weekly Sync 🛰](https://github.com/ipfs/team-mgmt/issues/992) and be part of the action!

# ⁉️ Do you have questions?

The best place to ask your questions about IPFS, how it works and what you can do with it is at [discuss.ipfs.io](https://discuss.ipfs.io). We are also available at the `#ipfs` channel on Freenode.


================================================
FILE: docs/core-api/BITSWAP.md
================================================
# Bitswap API <!-- omit in toc -->

- [`ipfs.bitswap.wantlist([options])`](#ipfsbitswapwantlistoptions)
  - [Parameters](#parameters)
  - [Options](#options)
  - [Returns](#returns)
  - [Example](#example)
- [`ipfs.bitswap.wantlistForPeer(peerId, [options])`](#ipfsbitswapwantlistforpeerpeerid-options)
  - [Parameters](#parameters-1)
  - [Options](#options-1)
  - [Returns](#returns-1)
  - [Example](#example-1)
- [`ipfs.bitswap.unwant(cids, [options])`](#ipfsbitswapunwantcids-options)
  - [Parameters](#parameters-2)
  - [Options](#options-2)
  - [Returns](#returns-2)
  - [Example](#example-2)
- [`ipfs.bitswap.stat([options])`](#ipfsbitswapstatoptions)
  - [Parameters](#parameters-3)
  - [Options](#options-3)
  - [Returns](#returns-3)
  - [Example](#example-3)

## `ipfs.bitswap.wantlist([options])`

> Returns the wantlist for your node

### Parameters

None

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` | Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<CID[]>` | An array of [CID][]s currently in the wantlist |

### Example

```JavaScript
const list = await ipfs.bitswap.wantlist()
console.log(list)
// [ CID('QmHash') ]
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.bitswap.wantlistForPeer(peerId, [options])`

> Returns the wantlist for a connected peer

### Parameters

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| peerId | [PeerId][] | A peer ID to return the wantlist for |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` | Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<CID[]>` | An array of [CID][]s currently in the wantlist |

### Example

```JavaScript
const list = await ipfs.bitswap.wantlistForPeer(peerId)
console.log(list)
// [ CID('QmHash') ]
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.bitswap.unwant(cids, [options])`

> Removes one or more CIDs from the wantlist

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| cids | A [CID][] or Array of [CID][]s | The CIDs to remove from the wantlist |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` | Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<void>` | A promise that resolves once the request is complete |

### Example

```JavaScript
let list = await ipfs.bitswap.wantlist()
console.log(list)
// [ CID('QmHash') ]

await ipfs.bitswap.unwant(cid)

list = await ipfs.bitswap.wantlist()
console.log(list)
// []
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.bitswap.stat([options])`

> Show diagnostic information on the bitswap agent.

Note: `bitswap.stat` and `stats.bitswap` can be used interchangeably.

### Parameters

None

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<Object>` | An object that contains information about the bitswap agent |

The returned object contains the following keys:

- `provideBufLen` is an integer.
- `wantlist` (array of [CID][cid]s)
- `peers` (array of [PeerId][peerId]s)
- `blocksReceived` is a [BigInt][1]
- `dataReceived` is a [BigInt][1]
- `blocksSent` is a [BigInt][1]
- `dataSent` is a [BigInt][1]
- `dupBlksReceived` is a [BigInt][1]
- `dupDataReceived` is a [BigInt][1]

### Example

```JavaScript
const stats = await ipfs.bitswap.stat()
console.log(stats)
// {
//   provideBufLen: 0,
//   wantlist: [ CID('QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM') ],
//   peers:
//    [ 'QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM',
//      'QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu',
//      'QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd' ],
//   blocksReceived: 0,
//   dataReceived: 0,
//   blocksSent: 0,
//   dataSent: 0,
//   dupBlksReceived: 0,
//   dupDataReceived: 0
// }
```

A great source of [examples][] can be found in the tests for this API.

[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt
[examples]: https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/src/bitswap
[cid]: https://docs.ipfs.io/concepts/content-addressing
[peerid]: https://docs.libp2p.io/concepts/peer-id/
[AbortSignal]: https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal


================================================
FILE: docs/core-api/BLOCK.md
================================================
# Block API <!-- omit in toc -->

- [`ipfs.block.get(cid, [options])`](#ipfsblockgetcid-options)
  - [Parameters](#parameters)
  - [Options](#options)
  - [Returns](#returns)
  - [Example](#example)
- [`ipfs.block.put(block, [options])`](#ipfsblockputblock-options)
  - [Parameters](#parameters-1)
  - [Options](#options-1)
  - [Returns](#returns-1)
  - [Example](#example-1)
- [`ipfs.block.rm(cid, [options])`](#ipfsblockrmcid-options)
  - [Parameters](#parameters-2)
  - [Options](#options-2)
  - [Returns](#returns-2)
  - [Example](#example-2)
- [`ipfs.block.stat(cid, [options])`](#ipfsblockstatcid-options)
  - [Parameters](#parameters-3)
  - [Options](#options-3)
  - [Returns](#returns-3)
  - [Example](#example-3)

## `ipfs.block.get(cid, [options])`

> Get a raw IPFS block.

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| cid | [CID][], `String` or `Uint8Array` | A CID that corresponds to the desired block |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |
| preload | `boolean` | `false` |  Whether to preload all blocks created during this operation |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<Uint8Array>` | A Uint8Array containing the data of the block |

### Example

```JavaScript
const block = await ipfs.block.get(cid)
console.log(block)
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.block.put(block, [options])`

> Stores input as an IPFS block.

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| block | `Uint8Array` | The block of data to store |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| format | `String` | `'dag-pb'` | The codec to use to create the CID |
| mhtype | `String` | `sha2-256` | The hashing algorithm to use to create the CID |
| mhlen | `Number` | `undefined` | The hash length (only relevant for `go-ipfs`) |
| version | `Number` | `0` |  The version to use to create the CID |
| pin | `boolean` | `false` |  If true, pin added blocks recursively |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` | Can be used to cancel any long running requests started as a result of this call |
| preload | `boolean` | `false` |  Whether to preload all blocks created during this operation |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<CID>` | A [CID][CID] type object containing the hash of the block |

### Example

```JavaScript
// Defaults
const buf = new TextEncoder().encode('a serialized object')
const decoder = new TextDecoder()

const block = await ipfs.block.put(buf)

console.log(decoder.decode(block.data))
// Logs:
// a serialized object
console.log(block.cid.toString())
// Logs:
// the CID of the object
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.block.rm(cid, [options])`

> Remove one or more IPFS block(s).

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| cid | A [CID][] or Array of [CID][]s | Blocks corresponding to the passed CID(s) will be removed |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| force | `boolean` | `false` | Ignores nonexistent blocks |
| quiet | `boolean` | `false` | Write minimal output |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` | Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `AsyncIterable<Object>` | An async iterable that yields objects containing hash and (potentially) error strings |

Each object yielded is of the form:

```js
{
  cid: CID,
  error?: Error
}
```

Note: If an error is present for a given object, the block with that cid was not removed and the `error` will contain the reason why, for example if the block was pinned.

### Example

```JavaScript
for await (const result of ipfs.block.rm(cid)) {
  if (result.error) {
    console.error(`Failed to remove block ${result.cid} due to ${result.error.message}`)
  } else {
    console.log(`Removed block ${result.cid}`)
  }
}
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.block.stat(cid, [options])`

> Print information of a raw IPFS block.

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| cid | A [CID][] or Array of [CID][]s | The stats of the passed CID will be returned |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` | Can be used to cancel any long running requests started as a result of this call |
| preload | `boolean` | `false` |  Whether to preload all blocks created during this operation |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<Object>` | An object containing the block's info |

the returned object has the following keys:

```JavaScript
{
  cid: CID
  size: number
}
```

### Example

```JavaScript
const multihashStr = 'QmQULBtTjNcMwMr4VMNknnVv3RpytrLSdgpvMcTnfNhrBJ'
const cid = CID.parse(multihashStr)

const stats = await ipfs.block.stat(cid)
console.log(stats.cid.toString())
// Logs: QmQULBtTjNcMwMr4VMNknnVv3RpytrLSdgpvMcTnfNhrBJ
console.log(stat.size)
// Logs: 3739
```

A great source of [examples][] can be found in the tests for this API.

[block]: https://github.com/ipfs/js-ipfs-block
[multihash]: https://github.com/multiformats/multihash
[examples]: https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/src/block
[AbortSignal]: https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
[cid]: https://docs.ipfs.io/concepts/content-addressing


================================================
FILE: docs/core-api/BOOTSTRAP.md
================================================
# Bootstrap API <!-- omit in toc -->

> Manipulates the bootstrap list, which contains the addresses of the bootstrap nodes. These are the trusted peers from which to learn about other peers in the network.

Warning: your node requires bootstrappers to join the network and find other peers.

If you edit this list, you may find you have reduced or no connectivity.  If this is the case, please reset your node's bootstrapper list with `ipfs.bootstrap.reset()`.

- [`ipfs.bootstrap.add(addr, [options])`](#ipfsbootstrapaddaddr-options)
  - [Parameters](#parameters)
  - [Options](#options)
  - [Returns](#returns)
  - [Example](#example)
- [`ipfs.bootstrap.reset([options])`](#ipfsbootstrapresetoptions)
  - [Parameters](#parameters-1)
  - [Options](#options-1)
  - [Returns](#returns-1)
  - [Example](#example-1)
- [`ipfs.bootstrap.list([options])`](#ipfsbootstraplistoptions)
  - [Parameters](#parameters-2)
  - [Options](#options-2)
  - [Returns](#returns-2)
  - [Example](#example-2)
- [`ipfs.bootstrap.rm(addr, [options])`](#ipfsbootstraprmaddr-options)
  - [Parameters](#parameters-3)
  - [Options](#options-3)
  - [Returns](#returns-3)
  - [Example](#example-3)
- [`ipfs.bootstrap.clear([options])`](#ipfsbootstrapclearoptions)
  - [Parameters](#parameters-4)
  - [Options](#options-4)
  - [Returns](#returns-4)
  - [Example](#example-4)

## `ipfs.bootstrap.add(addr, [options])`

> Add a peer address to the bootstrap list

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| addr | [MultiAddr][] | The address of a network peer |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<{ Peers: Array<MultiAddr> }>` | An object that contains an array with all the added addresses |

example of the returned object:

```JavaScript
{
  Peers: [address1, address2, ...]
}
```

### Example

```JavaScript
const validIp4 = '/ip4/104....9z'

const res = await ipfs.bootstrap.add(validIp4)
console.log(res.Peers)
// Logs:
// ['/ip4/104....9z']
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.bootstrap.reset([options])`

> Reset the bootstrap list to contain only the default bootstrap nodes

### Parameters

None.

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<{ Peers: Array<MultiAddr> }>` | An object that contains an array with all the added addresses |

example of the returned object:

```JavaScript
{
  Peers: [address1, address2, ...]
}
```

### Example

```JavaScript
const res = await ipfs.bootstrap.reset()
console.log(res.Peers)
// Logs:
// ['/ip4/104....9z']
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.bootstrap.list([options])`

> List all peer addresses in the bootstrap list

### Parameters

None

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<{ Peers: Array<MultiAddr> }>` | An object that contains an array with all the bootstrap addresses |

example of the returned object:

```JavaScript
{
  Peers: [address1, address2, ...]
}
```

### Example

```JavaScript
const res = await ipfs.bootstrap.list()
console.log(res.Peers)
// Logs:
// [address1, address2, ...]
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.bootstrap.rm(addr, [options])`

> Remove a peer address from the bootstrap list

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| addr | [MultiAddr][] | The address of a network peer |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<{ Peers: Array<MultiAddr> }>` | An object that contains an array with all the removed addresses |

```JavaScript
{
  Peers: [address1, address2, ...]
}
```

### Example

```JavaScript
const res = await ipfs.bootstrap.rm('address1')
console.log(res.Peers)
// Logs:
// [address1, ...]
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.bootstrap.clear([options])`

> Remove all peer addresses from the bootstrap list

### Parameters

None.

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<{ Peers: Array<MultiAddr> }>` | An object that contains an array with all the removed addresses |

```JavaScript
{
  Peers: [address1, address2, ...]
}
```

### Example

```JavaScript
const res = await ipfs.bootstrap.clear()
console.log(res.Peers)
// Logs:
// [address1, address2, ...]
```

A great source of [examples][] can be found in the tests for this API.

[examples]: https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/src/bootstrap
[MultiAddr]: https://github.com/multiformats/js-multiaddr
[AbortSignal]: https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal


================================================
FILE: docs/core-api/CONFIG.md
================================================
# Config API <!-- omit in toc -->

- [`ipfs.config.get(key, [options])`](#ipfsconfiggetkey-options)
  - [Parameters](#parameters)
  - [Options](#options)
  - [Returns](#returns)
  - [Example](#example)
- [`ipfs.config.getAll([options])`](#ipfsconfiggetkey-options)
  - [Options](#options)
  - [Returns](#returns)
  - [Example](#example)
- [`ipfs.config.set(key, value, [options])`](#ipfsconfigsetkey-value-options)
  - [Parameters](#parameters-1)
  - [Options](#options-1)
  - [Returns](#returns-1)
  - [Example](#example-1)
- [`ipfs.config.replace(config, [options])`](#ipfsconfigreplaceconfig-options)
  - [Parameters](#parameters-2)
  - [Options](#options-2)
  - [Returns](#returns-2)
  - [Example](#example-2)
- [`ipfs.config.profiles.list([options])`](#ipfsconfigprofileslistoptions)
  - [Parameters](#parameters-3)
  - [Options](#options-3)
  - [Returns](#returns-3)
  - [Example](#example-3)
- [`ipfs.config.profiles.apply(name, [options])`](#ipfsconfigprofilesapplyname-options)
  - [Parameters](#parameters-4)
  - [Options](#options-4)
  - [Returns](#returns-4)
  - [Example](#example-4)

## `ipfs.config.get(key, [options])`

> Returns the currently being used config. If the daemon is off, it returns the stored config.

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| key | `String` | The key of the value that should be fetched from the config file.  |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<Object>` | An object containing the configuration of the IPFS node |

### Example

```JavaScript
const config = await ipfs.config.get()
console.log(config)
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.config.getAll([options])`

> Returns the full config been used. If the daemon is off, it returns the stored config.

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<Object>` | An object containing the configuration of the IPFS node |

### Example

```JavaScript
const config = await ipfs.config.getAll()
console.log(config)
```

A great source of [examples][] can be found in the tests for this API.


## `ipfs.config.set(key, value, [options])`

> Adds or replaces a config value.

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| key | `String` | The key of the value that should be added or replaced  |
| value | any | The value to be set  |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<void>` | If action is successfully completed. Otherwise an error will be thrown |

Note that this operation will **not** spark the restart of any service, i.e: if a config.replace changes the multiaddrs of the Swarm, Swarm will have to be restarted manually for the changes to take difference.

### Example

```JavaScript
await ipfs.config.set('Discovery.MDNS.Enabled', false)
// MDNS Discovery was set to false
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.config.replace(config, [options])`

> Adds or replaces a config file

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| config | Object | An object that contains the new config |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<void>` | If action is successfully completed. Otherwise an error will be thrown |

Note that this operation will **not** spark the restart of any service, i.e: if a config.replace changes the multiaddrs of the Swarm, Swarm will have to be restarted manually for the changes to take difference.

### Example

```JavaScript
const newConfig = {
  Bootstrap: []
}

await ipfs.config.replace(newConfig)
// config has been replaced
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.config.profiles.list([options])`

> List available config profiles

### Parameters

None

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<Array>` | An array with all the available config profiles |

### Example

```JavaScript
const profiles = await ipfs.config.profiles.list()
profiles.forEach(profile => {
  console.info(profile.name, profile.description)
})
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.config.profiles.apply(name, [options])`

> Apply a config profile

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| name | `String` | The name of the profile to apply |

Call `config.profiles.list()` for a list of valid profile names.

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| dryRun | `boolean` | false | If true does not apply the profile |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<Object>` | An object containing both the `original` and `updated` config |

### Example

```JavaScript
const diff = await ipfs.config.profiles.apply('lowpower')
console.info(diff.original)
console.info(diff.updated)
```

Note that you will need to restart your node for config changes to take effect.

A great source of [examples][] can be found in the tests for this API.

[examples]: https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/src/config
[AbortSignal]: https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal


================================================
FILE: docs/core-api/DAG.md
================================================
# DAG API <!-- omit in toc -->

> The dag API comes to replace the `object API`, it supports the creation and manipulation of dag-pb object, as well as other IPLD formats (i.e dag-cbor, ethereum-block, git, etc)

- [`ipfs.dag.export(cid, [options])`](#ipfsdagexportcid-options)
  - [Parameters](#parameters)
  - [Options](#options)
  - [Returns](#returns)
  - [Example](#example)
- [`ipfs.dag.put(dagNode, [options])`](#ipfsdagputdagnode-options)
  - [Parameters](#parameters-1)
  - [Options](#options-1)
  - [Returns](#returns-1)
  - [Example](#example-1)
- [`ipfs.dag.get(cid, [options])`](#ipfsdaggetcid-options)
  - [Parameters](#parameters-2)
  - [Options](#options-2)
  - [Returns](#returns-2)
  - [Example](#example-2)
- [`ipfs.dag.import(source, [options])`](#ipfsdagimportsource-options)
  - [Parameters](#parameters-3)
  - [Options](#options-3)
  - [Returns](#returns-3)
  - [Example](#example-3)
- [`ipfs.dag.resolve(ipfsPath, [options])`](#ipfsdagresolveipfspath-options)
  - [Parameters](#parameters-4)
  - [Options](#options-4)
  - [Returns](#returns-4)
  - [Example](#example-4)

_Explore the DAG API through interactive coding challenges in our ProtoSchool tutorials:_
- _[P2P data links with content addressing](https://proto.school/#/basics/) (beginner)_
- _[Blogging on the Decentralized Web](https://proto.school/#/blog/) (intermediate)_

## `ipfs.dag.export(cid, [options])`

> Returns a stream of Uint8Arrays that make up a [CAR file][]

Exports a CAR for the entire DAG available from the given root CID. The CAR will have a single
root and IPFS will attempt to fetch and bundle all blocks that are linked within the connected
DAG.

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| cid  | [CID][] | The root CID of the DAG we wish to export |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `AsyncIterable<Uint8Array>` | A stream containing the car file bytes |

### Example

```JavaScript
import { Readable } from 'stream'

const out = await ipfs.dag.export(cid)

Readable.from(out).pipe(fs.createWriteStream('example.car'))
```

A great source of [examples][] can be found in the tests for this API.
## `ipfs.dag.put(dagNode, [options])`

> Store an IPLD format node

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| dagNode | `Object` | A DAG node that follows one of the supported IPLD formats |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| storeCodec | `String` | `'dag-cbor'` | The codec that the stored object will be encoded with |
| inputCodec | `String` | `undefined` | If an already encoded object is provided (as a `Uint8Array`), the codec that the object is encoded with, otherwise it is assumed the `dagNode` argument is an object to be encoded |
| hashAlg | `String` | `'sha2-256'` | The hash algorithm to be used over the serialized DAG node |
| cid | [CID][] | `'dag-cbor'` | The IPLD format multicodec |
| pin | `boolean` | `false` | Pin this node when adding to the blockstore |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` | Can be used to cancel any long running requests started as a result of this call |

**Note**: You should pass `cid` or the `format` & `hashAlg` pair but _not both_.

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<CID>` | A [CID][] instance. The CID generated through the process or the one that was passed |

### Example

```JavaScript
const obj = { simple: 'object' }
const cid = await ipfs.dag.put(obj, { storeCodec: 'dag-cbor', hashAlg: 'sha2-512' })

console.log(cid.toString())
// zBwWX9ecx5F4X54WAjmFLErnBT6ByfNxStr5ovowTL7AhaUR98RWvXPS1V3HqV1qs3r5Ec5ocv7eCdbqYQREXNUfYNuKG
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.dag.get(cid, [options])`

> Retrieve an IPLD format node

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| cid | [CID][] | A CID that resolves to a node to get |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| path | `String` | An optional path within the DAG to resolve |
| localResolve | `boolean` | `false` | If set to true, it will avoid resolving through different objects |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<Object>` | An object representing an IPLD format node |

The returned object contains:

- `value` - the value or node that was fetched during the get operation.
- `remainderPath` - The remainder of the Path that the node was unable to resolve or what was left in a localResolve scenario.

### Example

```JavaScript
// example obj
const obj = {
  a: 1,
  b: [1, 2, 3],
  c: {
    ca: [5, 6, 7],
    cb: 'foo'
  }
}

const cid = await ipfs.dag.put(obj, { storeCodec: 'dag-cbor', hashAlg: 'sha2-256' })
console.log(cid.toString())
// zdpuAmtur968yprkhG9N5Zxn6MFVoqAWBbhUAkNLJs2UtkTq5

async function getAndLog(cid, path) {
  const result = await ipfs.dag.get(cid, { path })
  console.log(result.value)
}

await getAndLog(cid, '/a')
// Logs:
// 1

await getAndLog(cid, '/b')
// Logs:
// [1, 2, 3]

await getAndLog(cid, '/c')
// Logs:
// {
//   ca: [5, 6, 7],
//   cb: 'foo'
// }

await getAndLog(cid, '/c/ca/1')
// Logs:
// 6
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.dag.import(source, [options])`

> Adds one or more [CAR file][]s full of blocks to the repo for this node

Import all blocks from one or more CARs and optionally recursively pin the roots identified
within the CARs.

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| sources | `AsyncIterable<Uint8Array>` | One or more [CAR file][] streams |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| pinRoots | `boolean` | `true` | Whether to recursively pin each root to the blockstore |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `AsyncIterable<{ root: { cid: CID, pinErrorMsg?: string } }>` | A stream containing all roots from the car file(s) that are pinned |

### Example

```JavaScript
import fs from 'fs'

for await (const result of ipfs.dag.import(fs.createReadStream('./path/to/archive.car'))) {
  console.info(result)
  // Qmfoo
}
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.dag.resolve(ipfsPath, [options])`

> Returns the CID and remaining path of the node at the end of the passed IPFS path

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| ipfsPath | `String` or [CID][] | An IPFS path, e.g. `/ipfs/bafy/dir/file.txt` or a [CID][] instance |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| path | `String` | `undefined` | If `ipfsPath` is a [CID][], you may pass a path here |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<{ cid: CID, remainderPath: String }>` | The last CID encountered during the traversal and the path to the end of the IPFS path inside the node referenced by the CID |

### Example

```JavaScript
// example obj
const obj = {
  a: 1,
  b: [1, 2, 3],
  c: {
    ca: [5, 6, 7],
    cb: 'foo'
  }
}

const cid = await ipfs.dag.put(obj, { storeCodec: 'dag-cbor', hashAlg: 'sha2-256' })
console.log(cid.toString())
// bafyreicyer3d34cutdzlsbe2nqu5ye62mesuhwkcnl2ypdwpccrsecfmjq

const result = await ipfs.dag.resolve(`${cid}/c/cb`)
console.log(result)
// Logs:
// {
//   cid: CID(bafyreicyer3d34cutdzlsbe2nqu5ye62mesuhwkcnl2ypdwpccrsecfmjq),
//   remainderPath: 'c/cb'
// }
```

A great source of [examples][] can be found in the tests for this API.

[examples]: https://github.com/ipfs/js-ipfs/blob/master/packages/interface-ipfs-core/src/dag
[cid]: https://docs.ipfs.io/concepts/content-addressing
[AbortSignal]: https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
[CAR file]: https://ipld.io/specs/transport/car/


================================================
FILE: docs/core-api/DHT.md
================================================
# DHT API <!-- omit in toc -->

- [`ipfs.dht.findPeer(peerId, [options])`](#ipfsdhtfindpeerpeerid-options)
  - [Parameters](#parameters)
  - [Options](#options)
  - [Returns](#returns)
  - [Example](#example)
- [`ipfs.dht.findProvs(cid, [options])`](#ipfsdhtfindprovscid-options)
  - [Parameters](#parameters-1)
  - [Options](#options-1)
  - [Returns](#returns-1)
  - [Example](#example-1)
- [`ipfs.dht.get(key, [options])`](#ipfsdhtgetkey-options)
  - [Parameters](#parameters-2)
  - [Options](#options-2)
  - [Returns](#returns-2)
  - [Example](#example-2)
- [`ipfs.dht.provide(cid, [options])`](#ipfsdhtprovidecid-options)
  - [Parameters](#parameters-3)
  - [Options](#options-3)
  - [Returns](#returns-3)
  - [Example](#example-3)
- [`ipfs.dht.put(key, value, [options])`](#ipfsdhtputkey-value-options)
  - [Parameters](#parameters-4)
  - [Options](#options-4)
  - [Returns](#returns-4)
  - [Example](#example-4)
- [`ipfs.dht.query(peerId, [options])`](#ipfsdhtquerypeerid-options)
  - [Parameters](#parameters-5)
  - [Options](#options-5)
  - [Returns](#returns-5)
  - [Example](#example-5)

## `ipfs.dht.findPeer(peerId, [options])`

> Find the multiaddresses associated with a Peer ID

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| peerId | [PeerID][] | The Peer ID of the node to find |

### Options

An optional object which may have the following keys:

| Name | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| timeout | `Number` | `undefined` | A timeout in ms |
| signal | [AbortSignal][] | `undefined` |  Can be used to cancel any long running requests started as a result of this call |

### Returns

| Type | Description |
| -------- | -------- |
| `Promise<{ id: String, addrs: Multiaddr[] }>` | A promise that resolves to an object with `id` and `addrs`. `id` is a String - the peer's ID and `addrs` is an array of [Multiaddr](https://github.com/multiformats/js-multiaddr/) - addresses for the peer. |

### Example

```JavaScript
const info = await ipfs.dht.findPeer('QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt')

console.log(info.id.toString())
/*
QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt
*/

info.addrs.forEach(addr => console.log(addr.toString()))
/*
/ip4/147.75.94.115/udp/4001/quic
/ip6/2604:1380:3000:1f00::1/udp/4001/quic
/dnsaddr/bootstrap.libp2p.io
/ip6/2604:1380:3000:1f00::1/tcp/4001
/ip4/147.75.94.115/tcp/4001
*/
```

A great source of [examples][] can be found in the tests for this API.

## `ipfs.dht.findProvs(cid, [options])`

> Find peers that can provide a specific value, given a CID.

### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| cid | [CID][] | The CID of the content to find |

### Options

An optional object which may have the f
Download .txt
gitextract_52p81fdk/

├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── config.yml
│   │   └── open_an_issue.md
│   ├── config.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── examples.yml
│       ├── externals.yml
│       ├── stale.yml
│       └── test.yml
├── .gitignore
├── .release-please-manifest.json
├── .release-please.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── COPYRIGHT
├── Dockerfile.latest
├── Dockerfile.next
├── LICENSE
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── docs/
│   ├── ARCHITECTURE.md
│   ├── BROWSERS.md
│   ├── CLI.md
│   ├── CONFIG.md
│   ├── CORS.md
│   ├── DAEMON.md
│   ├── DELEGATE_ROUTERS.md
│   ├── DEVELOPMENT.md
│   ├── DOCKER.md
│   ├── EARLY_TESTERS.md
│   ├── FAQ.md
│   ├── IPLD.md
│   ├── MIGRATION-TO-ASYNC-AWAIT.md
│   ├── MODULE.md
│   ├── MONITORING.md
│   ├── README.md
│   ├── RELEASES.md
│   ├── RELEASE_ISSUE_TEMPLATE.md
│   ├── core-api/
│   │   ├── BITSWAP.md
│   │   ├── BLOCK.md
│   │   ├── BOOTSTRAP.md
│   │   ├── CONFIG.md
│   │   ├── DAG.md
│   │   ├── DHT.md
│   │   ├── FILES.md
│   │   ├── KEY.md
│   │   ├── MISCELLANEOUS.md
│   │   ├── NAME.md
│   │   ├── OBJECT.md
│   │   ├── PIN.md
│   │   ├── PUBSUB.md
│   │   ├── README.md
│   │   ├── REFS.md
│   │   ├── REPO.md
│   │   ├── STATS.md
│   │   └── SWARM.md
│   ├── img/
│   │   ├── architecture.monopic
│   │   ├── architecture.txt
│   │   ├── core.monopic
│   │   ├── core.txt
│   │   ├── overview.monopic
│   │   └── overview.txt
│   └── upgrading/
│       ├── v0.62-v0.63.md
│       ├── v0.63-v0.64.md
│       └── v0.64-v0.65.md
├── package-list.json
├── package.json
├── packages/
│   ├── interface-ipfs-core/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── img/
│   │   │   └── badge.sketch
│   │   ├── maintainer.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── add-all.js
│   │   │   ├── add.js
│   │   │   ├── bitswap/
│   │   │   │   ├── index.js
│   │   │   │   ├── stat.js
│   │   │   │   ├── transfer.js
│   │   │   │   ├── unwant.js
│   │   │   │   ├── utils.js
│   │   │   │   ├── wantlist-for-peer.js
│   │   │   │   └── wantlist.js
│   │   │   ├── block/
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── put.js
│   │   │   │   ├── rm.js
│   │   │   │   └── stat.js
│   │   │   ├── bootstrap/
│   │   │   │   ├── add.js
│   │   │   │   ├── clear.js
│   │   │   │   ├── index.js
│   │   │   │   ├── list.js
│   │   │   │   ├── reset.js
│   │   │   │   └── rm.js
│   │   │   ├── cat.js
│   │   │   ├── config/
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── profiles/
│   │   │   │   │   ├── apply.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── list.js
│   │   │   │   ├── replace.js
│   │   │   │   └── set.js
│   │   │   ├── dag/
│   │   │   │   ├── export.js
│   │   │   │   ├── get.js
│   │   │   │   ├── import.js
│   │   │   │   ├── index.js
│   │   │   │   ├── put.js
│   │   │   │   ├── resolve.js
│   │   │   │   └── sharness-t0053-dag.js
│   │   │   ├── dht/
│   │   │   │   ├── disabled.js
│   │   │   │   ├── find-peer.js
│   │   │   │   ├── find-provs.js
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── provide.js
│   │   │   │   ├── put.js
│   │   │   │   ├── query.js
│   │   │   │   └── utils.js
│   │   │   ├── files/
│   │   │   │   ├── chmod.js
│   │   │   │   ├── cp.js
│   │   │   │   ├── flush.js
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── mkdir.js
│   │   │   │   ├── mv.js
│   │   │   │   ├── read.js
│   │   │   │   ├── rm.js
│   │   │   │   ├── stat.js
│   │   │   │   ├── touch.js
│   │   │   │   └── write.js
│   │   │   ├── get.js
│   │   │   ├── index.js
│   │   │   ├── key/
│   │   │   │   ├── gen.js
│   │   │   │   ├── import.js
│   │   │   │   ├── index.js
│   │   │   │   ├── list.js
│   │   │   │   ├── rename.js
│   │   │   │   └── rm.js
│   │   │   ├── ls.js
│   │   │   ├── miscellaneous/
│   │   │   │   ├── dns.js
│   │   │   │   ├── id.js
│   │   │   │   ├── index.js
│   │   │   │   ├── resolve.js
│   │   │   │   ├── stop.js
│   │   │   │   └── version.js
│   │   │   ├── name/
│   │   │   │   ├── index.js
│   │   │   │   ├── publish.js
│   │   │   │   ├── resolve.js
│   │   │   │   └── utils.js
│   │   │   ├── name-pubsub/
│   │   │   │   ├── cancel.js
│   │   │   │   ├── index.js
│   │   │   │   ├── pubsub.js
│   │   │   │   ├── state.js
│   │   │   │   └── subs.js
│   │   │   ├── object/
│   │   │   │   ├── data.js
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── links.js
│   │   │   │   ├── new.js
│   │   │   │   ├── patch/
│   │   │   │   │   ├── add-link.js
│   │   │   │   │   ├── append-data.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── rm-link.js
│   │   │   │   │   └── set-data.js
│   │   │   │   ├── put.js
│   │   │   │   └── stat.js
│   │   │   ├── pin/
│   │   │   │   ├── add-all.js
│   │   │   │   ├── add.js
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── remote/
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── rm-all.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   └── service.js
│   │   │   │   ├── rm-all.js
│   │   │   │   ├── rm.js
│   │   │   │   └── utils.js
│   │   │   ├── ping/
│   │   │   │   ├── index.js
│   │   │   │   ├── ping.js
│   │   │   │   └── utils.js
│   │   │   ├── pubsub/
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── peers.js
│   │   │   │   ├── publish.js
│   │   │   │   ├── subscribe.js
│   │   │   │   ├── unsubscribe.js
│   │   │   │   └── utils.js
│   │   │   ├── refs-local.js
│   │   │   ├── refs.js
│   │   │   ├── repo/
│   │   │   │   ├── gc.js
│   │   │   │   ├── index.js
│   │   │   │   ├── stat.js
│   │   │   │   └── version.js
│   │   │   ├── stats/
│   │   │   │   ├── bitswap.js
│   │   │   │   ├── bw.js
│   │   │   │   ├── index.js
│   │   │   │   ├── repo.js
│   │   │   │   └── utils.js
│   │   │   ├── swarm/
│   │   │   │   ├── addrs.js
│   │   │   │   ├── connect.js
│   │   │   │   ├── disconnect.js
│   │   │   │   ├── index.js
│   │   │   │   ├── local-addrs.js
│   │   │   │   └── peers.js
│   │   │   └── utils/
│   │   │       ├── blockstore-adapter.js
│   │   │       ├── create-sharded-directory.js
│   │   │       ├── create-two-shards.js
│   │   │       ├── dump-shard.js
│   │   │       ├── index.js
│   │   │       ├── ipfs-options-websockets-filter-all.js
│   │   │       ├── is-shard-at-path.js
│   │   │       ├── mocha.js
│   │   │       ├── suite.js
│   │   │       ├── test-timeout.js
│   │   │       ├── traverse-leaf-nodes.js
│   │   │       └── wait-for.js
│   │   ├── test/
│   │   │   ├── fixtures/
│   │   │   │   ├── .gitattributes
│   │   │   │   ├── car/
│   │   │   │   │   ├── combined_naked_roots_genesis_and_128.car
│   │   │   │   │   ├── lotus_devnet_genesis.car
│   │   │   │   │   ├── lotus_devnet_genesis_shuffled_nulroot.car
│   │   │   │   │   ├── lotus_testnet_export_128.car
│   │   │   │   │   └── lotus_testnet_export_256_multiroot.car
│   │   │   │   ├── hidden-files-folder/
│   │   │   │   │   ├── .hiddenTest.txt
│   │   │   │   │   ├── alice.txt
│   │   │   │   │   ├── files/
│   │   │   │   │   │   ├── hello.txt
│   │   │   │   │   │   └── ipfs.txt
│   │   │   │   │   ├── hello-link
│   │   │   │   │   ├── holmes.txt
│   │   │   │   │   ├── ipfs-add.js
│   │   │   │   │   ├── jungle.txt
│   │   │   │   │   └── pp.txt
│   │   │   │   ├── refs-test/
│   │   │   │   │   ├── animals/
│   │   │   │   │   │   ├── land/
│   │   │   │   │   │   │   ├── african.txt
│   │   │   │   │   │   │   ├── americas.txt
│   │   │   │   │   │   │   └── australian.txt
│   │   │   │   │   │   └── sea/
│   │   │   │   │   │       ├── atlantic.txt
│   │   │   │   │   │       └── indian.txt
│   │   │   │   │   ├── atlantic-animals
│   │   │   │   │   ├── fruits/
│   │   │   │   │   │   └── tropical.txt
│   │   │   │   │   └── mushroom.txt
│   │   │   │   ├── ssl/
│   │   │   │   │   ├── cert.pem
│   │   │   │   │   └── privkey.pem
│   │   │   │   ├── test-folder/
│   │   │   │   │   ├── alice.txt
│   │   │   │   │   ├── files/
│   │   │   │   │   │   ├── hello.txt
│   │   │   │   │   │   └── ipfs.txt
│   │   │   │   │   ├── holmes.txt
│   │   │   │   │   ├── ipfs-add.js
│   │   │   │   │   ├── jungle.txt
│   │   │   │   │   └── pp.txt
│   │   │   │   └── weird name folder [v0]/
│   │   │   │       ├── add
│   │   │   │       ├── cat
│   │   │   │       ├── files/
│   │   │   │       │   ├── hello.txt
│   │   │   │       │   └── ipfs.txt
│   │   │   │       ├── hello-link
│   │   │   │       ├── ipfs-add
│   │   │   │       ├── ls
│   │   │   │       └── version
│   │   │   └── interface.spec.js
│   │   └── tsconfig.json
│   ├── ipfs/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── init-and-daemon.sh
│   │   ├── maintainer.json
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── update-version.js
│   │   ├── src/
│   │   │   ├── cli.js
│   │   │   ├── index.js
│   │   │   ├── package.js
│   │   │   ├── path.browser.js
│   │   │   └── path.js
│   │   ├── test/
│   │   │   ├── interface-client.js
│   │   │   ├── interface-core.js
│   │   │   ├── interface-http-go.js
│   │   │   ├── interface-http-js.js
│   │   │   └── utils/
│   │   │       ├── factory.js
│   │   │       ├── mock-pinning-service.js
│   │   │       └── mock-preload-node.js
│   │   └── tsconfig.json
│   ├── ipfs-cli/
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── command-alias.js
│   │   │   ├── commands/
│   │   │   │   ├── add.js
│   │   │   │   ├── bitswap/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   ├── unwant.js
│   │   │   │   │   └── wantlist.js
│   │   │   │   ├── bitswap.js
│   │   │   │   ├── block/
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   └── stat.js
│   │   │   │   ├── block.js
│   │   │   │   ├── bootstrap/
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── list.js
│   │   │   │   │   └── rm.js
│   │   │   │   ├── bootstrap.js
│   │   │   │   ├── cat.js
│   │   │   │   ├── cid/
│   │   │   │   │   ├── base32.js
│   │   │   │   │   ├── bases.js
│   │   │   │   │   ├── codecs.js
│   │   │   │   │   ├── format.js
│   │   │   │   │   ├── hashes.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── cid.js
│   │   │   │   ├── config/
│   │   │   │   │   ├── edit.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── profile/
│   │   │   │   │   │   ├── apply.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── ls.js
│   │   │   │   │   ├── profile.js
│   │   │   │   │   ├── replace.js
│   │   │   │   │   └── show.js
│   │   │   │   ├── config.js
│   │   │   │   ├── daemon.js
│   │   │   │   ├── dag/
│   │   │   │   │   ├── export.js
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── import.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   └── resolve.js
│   │   │   │   ├── dag.js
│   │   │   │   ├── dht/
│   │   │   │   │   ├── find-peer.js
│   │   │   │   │   ├── find-providers.js
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── provide.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   └── query.js
│   │   │   │   ├── dht.js
│   │   │   │   ├── dns.js
│   │   │   │   ├── files/
│   │   │   │   │   ├── chmod.js
│   │   │   │   │   ├── cp.js
│   │   │   │   │   ├── flush.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── mkdir.js
│   │   │   │   │   ├── mv.js
│   │   │   │   │   ├── read.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   ├── touch.js
│   │   │   │   │   └── write.js
│   │   │   │   ├── files.js
│   │   │   │   ├── get.js
│   │   │   │   ├── id.js
│   │   │   │   ├── index.js
│   │   │   │   ├── init.js
│   │   │   │   ├── key/
│   │   │   │   │   ├── export.js
│   │   │   │   │   ├── gen.js
│   │   │   │   │   ├── import.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── list.js
│   │   │   │   │   ├── rename.js
│   │   │   │   │   └── rm.js
│   │   │   │   ├── key.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── name/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── publish.js
│   │   │   │   │   ├── pubsub/
│   │   │   │   │   │   ├── cancel.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   ├── state.js
│   │   │   │   │   │   └── subs.js
│   │   │   │   │   ├── pubsub.js
│   │   │   │   │   └── resolve.js
│   │   │   │   ├── name.js
│   │   │   │   ├── object/
│   │   │   │   │   ├── data.js
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── links.js
│   │   │   │   │   ├── new.js
│   │   │   │   │   ├── patch/
│   │   │   │   │   │   ├── add-link.js
│   │   │   │   │   │   ├── append-data.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   ├── rm-link.js
│   │   │   │   │   │   └── set-data.js
│   │   │   │   │   ├── patch.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   └── stat.js
│   │   │   │   ├── object.js
│   │   │   │   ├── pin/
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   └── rm.js
│   │   │   │   ├── pin.js
│   │   │   │   ├── ping.js
│   │   │   │   ├── pubsub/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── peers.js
│   │   │   │   │   ├── pub.js
│   │   │   │   │   └── sub.js
│   │   │   │   ├── pubsub.js
│   │   │   │   ├── refs-local.js
│   │   │   │   ├── refs.js
│   │   │   │   ├── repo/
│   │   │   │   │   ├── gc.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   └── version.js
│   │   │   │   ├── repo.js
│   │   │   │   ├── resolve.js
│   │   │   │   ├── shutdown.js
│   │   │   │   ├── stats/
│   │   │   │   │   ├── bitswap.js
│   │   │   │   │   ├── bw.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── repo.js
│   │   │   │   ├── stats.js
│   │   │   │   ├── swarm/
│   │   │   │   │   ├── addrs/
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── local.js
│   │   │   │   │   ├── addrs.js
│   │   │   │   │   ├── connect.js
│   │   │   │   │   ├── disconnect.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── peers.js
│   │   │   │   ├── swarm.js
│   │   │   │   └── version.js
│   │   │   ├── index.js
│   │   │   ├── parser.js
│   │   │   ├── types.ts
│   │   │   └── utils.js
│   │   ├── test/
│   │   │   ├── add.spec.js
│   │   │   ├── bitswap.spec.js
│   │   │   ├── block.spec.js
│   │   │   ├── bootstrap.spec.js
│   │   │   ├── cat.spec.js
│   │   │   ├── cid.spec.js
│   │   │   ├── config.spec.js
│   │   │   ├── daemon.spec.js
│   │   │   ├── dag.spec.js
│   │   │   ├── dht.spec.js
│   │   │   ├── dns.spec.js
│   │   │   ├── files/
│   │   │   │   ├── chmod.js
│   │   │   │   ├── cp.js
│   │   │   │   ├── flush.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── mkdir.js
│   │   │   │   ├── mv.js
│   │   │   │   ├── read.js
│   │   │   │   ├── rm.js
│   │   │   │   ├── stat.js
│   │   │   │   ├── touch.js
│   │   │   │   └── write.js
│   │   │   ├── general.spec.js
│   │   │   ├── get.spec.js
│   │   │   ├── id.spec.js
│   │   │   ├── init.spec.js
│   │   │   ├── key.spec.js
│   │   │   ├── ls.spec.js
│   │   │   ├── name-pubsub.spec.js
│   │   │   ├── name.spec.js
│   │   │   ├── object.spec.js
│   │   │   ├── pin.spec.js
│   │   │   ├── ping.spec.js
│   │   │   ├── progress-bar.spec.js
│   │   │   ├── pubsub.spec.js
│   │   │   ├── refs-local.spec.js
│   │   │   ├── refs.spec.js
│   │   │   ├── repo.spec.js
│   │   │   ├── resolve.spec.js
│   │   │   ├── swarm.spec.js
│   │   │   ├── utils/
│   │   │   │   ├── clean.js
│   │   │   │   ├── cli.js
│   │   │   │   ├── ipfs-exec.js
│   │   │   │   ├── match-iterable.js
│   │   │   │   ├── match-peer-id.js
│   │   │   │   └── platforms.js
│   │   │   └── version.spec.js
│   │   └── tsconfig.json
│   ├── ipfs-client/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   └── index.js
│   │   └── tsconfig.json
│   ├── ipfs-core/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── update-version.js
│   │   ├── src/
│   │   │   ├── block-storage.js
│   │   │   ├── components/
│   │   │   │   ├── add-all/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── add.js
│   │   │   │   ├── bitswap/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   ├── unwant.js
│   │   │   │   │   ├── wantlist-for-peer.js
│   │   │   │   │   └── wantlist.js
│   │   │   │   ├── block/
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── bootstrap/
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── clear.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── list.js
│   │   │   │   │   ├── reset.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── cat.js
│   │   │   │   ├── config/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── profiles.js
│   │   │   │   ├── dag/
│   │   │   │   │   ├── export.js
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── import.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   └── resolve.js
│   │   │   │   ├── dht.js
│   │   │   │   ├── dns.js
│   │   │   │   ├── files/
│   │   │   │   │   ├── chmod.js
│   │   │   │   │   ├── cp.js
│   │   │   │   │   ├── flush.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── mkdir.js
│   │   │   │   │   ├── mv.js
│   │   │   │   │   ├── read.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   ├── touch.js
│   │   │   │   │   ├── utils/
│   │   │   │   │   │   ├── add-link.js
│   │   │   │   │   │   ├── create-lock.js
│   │   │   │   │   │   ├── create-node.js
│   │   │   │   │   │   ├── dir-sharded.js
│   │   │   │   │   │   ├── hamt-constants.js
│   │   │   │   │   │   ├── hamt-utils.js
│   │   │   │   │   │   ├── persist.js
│   │   │   │   │   │   ├── remove-link.js
│   │   │   │   │   │   ├── to-async-iterator.js
│   │   │   │   │   │   ├── to-mfs-path.js
│   │   │   │   │   │   ├── to-path-components.js
│   │   │   │   │   │   ├── to-trail.js
│   │   │   │   │   │   ├── update-mfs-root.js
│   │   │   │   │   │   ├── update-tree.js
│   │   │   │   │   │   └── with-mfs-root.js
│   │   │   │   │   └── write.js
│   │   │   │   ├── get.js
│   │   │   │   ├── id.js
│   │   │   │   ├── index.js
│   │   │   │   ├── ipns.js
│   │   │   │   ├── is-online.js
│   │   │   │   ├── key/
│   │   │   │   │   ├── export.js
│   │   │   │   │   ├── gen.js
│   │   │   │   │   ├── import.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── info.js
│   │   │   │   │   ├── list.js
│   │   │   │   │   ├── rename.js
│   │   │   │   │   └── rm.js
│   │   │   │   ├── libp2p.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── name/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── publish.js
│   │   │   │   │   ├── pubsub/
│   │   │   │   │   │   ├── cancel.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   ├── state.js
│   │   │   │   │   │   ├── subs.js
│   │   │   │   │   │   └── utils.js
│   │   │   │   │   ├── resolve.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── network.js
│   │   │   │   ├── object/
│   │   │   │   │   ├── data.js
│   │   │   │   │   ├── get.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── links.js
│   │   │   │   │   ├── new.js
│   │   │   │   │   ├── patch/
│   │   │   │   │   │   ├── add-link.js
│   │   │   │   │   │   ├── append-data.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   ├── rm-link.js
│   │   │   │   │   │   └── set-data.js
│   │   │   │   │   ├── put.js
│   │   │   │   │   └── stat.js
│   │   │   │   ├── pin/
│   │   │   │   │   ├── add-all.js
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── rm-all.js
│   │   │   │   │   └── rm.js
│   │   │   │   ├── ping.js
│   │   │   │   ├── pubsub.js
│   │   │   │   ├── refs/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── local.js
│   │   │   │   ├── repo/
│   │   │   │   │   ├── gc.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   └── version.js
│   │   │   │   ├── resolve.js
│   │   │   │   ├── root.js
│   │   │   │   ├── start.js
│   │   │   │   ├── stats/
│   │   │   │   │   ├── bw.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── stop.js
│   │   │   │   ├── storage.js
│   │   │   │   ├── swarm/
│   │   │   │   │   ├── addrs.js
│   │   │   │   │   ├── connect.js
│   │   │   │   │   ├── disconnect.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── local-addrs.js
│   │   │   │   │   └── peers.js
│   │   │   │   └── version.js
│   │   │   ├── errors.js
│   │   │   ├── index.js
│   │   │   ├── ipns/
│   │   │   │   ├── index.js
│   │   │   │   ├── publisher.js
│   │   │   │   ├── republisher.js
│   │   │   │   ├── resolver.js
│   │   │   │   └── routing/
│   │   │   │       ├── config.js
│   │   │   │       ├── dht-datastore.js
│   │   │   │       ├── offline-datastore.js
│   │   │   │       └── pubsub-datastore.js
│   │   │   ├── mfs-preload.js
│   │   │   ├── preload.js
│   │   │   ├── types.ts
│   │   │   ├── utils/
│   │   │   │   ├── service.js
│   │   │   │   └── tlru.js
│   │   │   ├── utils.js
│   │   │   └── version.js
│   │   ├── test/
│   │   │   ├── add-all.spec.js
│   │   │   ├── block-storage.spec.js
│   │   │   ├── bootstrappers.js
│   │   │   ├── config.spec.js
│   │   │   ├── create-node.spec.js
│   │   │   ├── init.spec.js
│   │   │   ├── ipld.spec.js
│   │   │   ├── key-exchange.spec.js
│   │   │   ├── libp2p.spec.js
│   │   │   ├── mfs-preload.spec.js
│   │   │   ├── name.spec.js
│   │   │   ├── preload.spec.js
│   │   │   ├── pubsub.spec.js
│   │   │   ├── utils/
│   │   │   │   ├── clean.js
│   │   │   │   ├── codecs.js
│   │   │   │   ├── create-backend.js
│   │   │   │   ├── create-node.js
│   │   │   │   ├── create-repo.js
│   │   │   │   ├── mock-preload-node-utils.js
│   │   │   │   ├── mock-preload-node.js
│   │   │   │   └── wait-for.js
│   │   │   └── utils.spec.js
│   │   └── tsconfig.json
│   ├── ipfs-core-config/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── config.browser.js
│   │   │   ├── config.js
│   │   │   ├── dns.browser.js
│   │   │   ├── dns.js
│   │   │   ├── index.js
│   │   │   ├── init-assets.browser.js
│   │   │   ├── init-assets.js
│   │   │   ├── init-files/
│   │   │   │   └── init-docs/
│   │   │   │       ├── about.js
│   │   │   │       ├── contact.js
│   │   │   │       ├── docs/
│   │   │   │       │   └── index.js
│   │   │   │       ├── help.js
│   │   │   │       ├── index.js
│   │   │   │       ├── quick-start.js
│   │   │   │       ├── readme.js
│   │   │   │       ├── security-notes.js
│   │   │   │       └── tour/
│   │   │   │           └── 0.0-intro.js
│   │   │   ├── libp2p-pubsub-routers.browser.js
│   │   │   ├── libp2p-pubsub-routers.js
│   │   │   ├── libp2p.browser.js
│   │   │   ├── libp2p.js
│   │   │   ├── preload.browser.js
│   │   │   ├── preload.js
│   │   │   ├── repo.browser.js
│   │   │   ├── repo.js
│   │   │   └── utils/
│   │   │       ├── lru-datastore.js
│   │   │       └── tlru.js
│   │   └── tsconfig.json
│   ├── ipfs-core-types/
│   │   ├── CHANGELOG.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── bitswap/
│   │   │   │   └── index.ts
│   │   │   ├── block/
│   │   │   │   └── index.ts
│   │   │   ├── bootstrap/
│   │   │   │   └── index.ts
│   │   │   ├── config/
│   │   │   │   ├── index.ts
│   │   │   │   └── profiles/
│   │   │   │       └── index.ts
│   │   │   ├── dag/
│   │   │   │   └── index.ts
│   │   │   ├── dht/
│   │   │   │   └── index.ts
│   │   │   ├── diag/
│   │   │   │   └── index.ts
│   │   │   ├── files/
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   ├── key/
│   │   │   │   └── index.ts
│   │   │   ├── log/
│   │   │   │   └── index.ts
│   │   │   ├── name/
│   │   │   │   ├── index.ts
│   │   │   │   └── pubsub/
│   │   │   │       └── index.ts
│   │   │   ├── object/
│   │   │   │   ├── index.ts
│   │   │   │   └── patch/
│   │   │   │       └── index.ts
│   │   │   ├── pin/
│   │   │   │   ├── index.ts
│   │   │   │   └── remote/
│   │   │   │       ├── index.ts
│   │   │   │       └── service/
│   │   │   │           └── index.ts
│   │   │   ├── pubsub/
│   │   │   │   └── index.ts
│   │   │   ├── refs/
│   │   │   │   └── index.ts
│   │   │   ├── repo/
│   │   │   │   └── index.ts
│   │   │   ├── root.ts
│   │   │   ├── stats/
│   │   │   │   └── index.ts
│   │   │   ├── swarm/
│   │   │   │   └── index.ts
│   │   │   └── utils.ts
│   │   └── tsconfig.json
│   ├── ipfs-core-utils/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── agent.browser.js
│   │   │   ├── agent.js
│   │   │   ├── errors.js
│   │   │   ├── files/
│   │   │   │   ├── format-mode.js
│   │   │   │   ├── format-mtime.js
│   │   │   │   ├── normalise-candidate-multiple.js
│   │   │   │   ├── normalise-candidate-single.js
│   │   │   │   ├── normalise-content.browser.js
│   │   │   │   ├── normalise-content.js
│   │   │   │   ├── normalise-input-multiple.browser.js
│   │   │   │   ├── normalise-input-multiple.js
│   │   │   │   ├── normalise-input-single.browser.js
│   │   │   │   ├── normalise-input-single.js
│   │   │   │   └── utils.js
│   │   │   ├── index.js
│   │   │   ├── mode-to-string.js
│   │   │   ├── multibases.js
│   │   │   ├── multicodecs.js
│   │   │   ├── multihashes.js
│   │   │   ├── multipart-request.browser.js
│   │   │   ├── multipart-request.js
│   │   │   ├── multipart-request.node.js
│   │   │   ├── pins/
│   │   │   │   └── normalise-input.js
│   │   │   ├── to-cid-and-path.js
│   │   │   ├── to-url-string.js
│   │   │   ├── types.ts
│   │   │   └── with-timeout-option.js
│   │   ├── test/
│   │   │   ├── files/
│   │   │   │   ├── format-mode.spec.js
│   │   │   │   ├── format-mtime.spec.js
│   │   │   │   ├── normalise-input-multiple.spec.js
│   │   │   │   └── normalise-input-single.spec.js
│   │   │   ├── fixtures/
│   │   │   │   └── file.txt
│   │   │   ├── pins/
│   │   │   │   └── normalise-input.spec.js
│   │   │   └── tests.spec.js
│   │   └── tsconfig.json
│   ├── ipfs-daemon/
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   └── index.js
│   │   ├── test/
│   │   │   └── index.spec.js
│   │   └── tsconfig.json
│   ├── ipfs-grpc-client/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── core-api/
│   │   │   │   ├── add-all.js
│   │   │   │   ├── files/
│   │   │   │   │   ├── ls.js
│   │   │   │   │   └── write.js
│   │   │   │   ├── id.js
│   │   │   │   └── pubsub/
│   │   │   │       ├── subscribe.js
│   │   │   │       ├── subscriptions.js
│   │   │   │       └── unsubscribe.js
│   │   │   ├── grpc/
│   │   │   │   ├── transport.browser.js
│   │   │   │   ├── transport.js
│   │   │   │   └── transport.node.js
│   │   │   ├── index.js
│   │   │   ├── types.ts
│   │   │   └── utils/
│   │   │       ├── bidi-to-duplex.js
│   │   │       ├── client-stream-to-promise.js
│   │   │       ├── load-services.js
│   │   │       ├── server-stream-to-iterator.js
│   │   │       ├── to-headers.js
│   │   │       └── unary-to-promise.js
│   │   ├── test/
│   │   │   ├── agent.js
│   │   │   ├── node.js
│   │   │   └── utils.spec.js
│   │   └── tsconfig.json
│   ├── ipfs-grpc-protocol/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── update-index.js
│   │   ├── src/
│   │   │   ├── common.proto
│   │   │   ├── index.js
│   │   │   ├── mfs.proto
│   │   │   ├── pubsub.proto
│   │   │   └── root.proto
│   │   └── tsconfig.json
│   ├── ipfs-grpc-server/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── endpoints/
│   │   │   │   ├── add.js
│   │   │   │   ├── id.js
│   │   │   │   ├── mfs/
│   │   │   │   │   ├── ls.js
│   │   │   │   │   └── write.js
│   │   │   │   └── pubsub/
│   │   │   │       ├── subscribe.js
│   │   │   │       ├── subscriptions.js
│   │   │   │       └── unsubscribe.js
│   │   │   ├── index.js
│   │   │   ├── types.ts
│   │   │   └── utils/
│   │   │       ├── encode-mtime.js
│   │   │       ├── load-services.js
│   │   │       ├── web-socket-message-channel.js
│   │   │       └── web-socket-server.js
│   │   ├── test/
│   │   │   ├── add.spec.js
│   │   │   ├── id.spec.js
│   │   │   ├── mfs/
│   │   │   │   ├── ls.spec.js
│   │   │   │   └── write.spec.js
│   │   │   └── utils/
│   │   │       ├── channel.js
│   │   │       └── server.js
│   │   └── tsconfig.json
│   ├── ipfs-http-client/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── maintainer.json
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── add-all.js
│   │   │   ├── add.js
│   │   │   ├── bitswap/
│   │   │   │   ├── index.js
│   │   │   │   ├── stat.js
│   │   │   │   ├── unwant.js
│   │   │   │   ├── wantlist-for-peer.js
│   │   │   │   └── wantlist.js
│   │   │   ├── block/
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── put.js
│   │   │   │   ├── rm.js
│   │   │   │   └── stat.js
│   │   │   ├── bootstrap/
│   │   │   │   ├── add.js
│   │   │   │   ├── clear.js
│   │   │   │   ├── index.js
│   │   │   │   ├── list.js
│   │   │   │   ├── reset.js
│   │   │   │   └── rm.js
│   │   │   ├── cat.js
│   │   │   ├── commands.js
│   │   │   ├── config/
│   │   │   │   ├── get-all.js
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── profiles/
│   │   │   │   │   ├── apply.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── list.js
│   │   │   │   ├── replace.js
│   │   │   │   └── set.js
│   │   │   ├── dag/
│   │   │   │   ├── export.js
│   │   │   │   ├── get.js
│   │   │   │   ├── import.js
│   │   │   │   ├── index.js
│   │   │   │   ├── put.js
│   │   │   │   └── resolve.js
│   │   │   ├── dht/
│   │   │   │   ├── find-peer.js
│   │   │   │   ├── find-provs.js
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── map-event.js
│   │   │   │   ├── provide.js
│   │   │   │   ├── put.js
│   │   │   │   ├── query.js
│   │   │   │   └── response-types.js
│   │   │   ├── diag/
│   │   │   │   ├── cmds.js
│   │   │   │   ├── index.js
│   │   │   │   ├── net.js
│   │   │   │   └── sys.js
│   │   │   ├── dns.js
│   │   │   ├── files/
│   │   │   │   ├── chmod.js
│   │   │   │   ├── cp.js
│   │   │   │   ├── flush.js
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── mkdir.js
│   │   │   │   ├── mv.js
│   │   │   │   ├── read.js
│   │   │   │   ├── rm.js
│   │   │   │   ├── stat.js
│   │   │   │   ├── touch.js
│   │   │   │   └── write.js
│   │   │   ├── get-endpoint-config.js
│   │   │   ├── get.js
│   │   │   ├── id.js
│   │   │   ├── index.js
│   │   │   ├── is-online.js
│   │   │   ├── key/
│   │   │   │   ├── export.js
│   │   │   │   ├── gen.js
│   │   │   │   ├── import.js
│   │   │   │   ├── index.js
│   │   │   │   ├── info.js
│   │   │   │   ├── list.js
│   │   │   │   ├── rename.js
│   │   │   │   └── rm.js
│   │   │   ├── lib/
│   │   │   │   ├── abort-signal.js
│   │   │   │   ├── configure.js
│   │   │   │   ├── core.js
│   │   │   │   ├── http-rpc-wire-format.js
│   │   │   │   ├── mode-to-string.js
│   │   │   │   ├── object-to-camel-with-metadata.js
│   │   │   │   ├── object-to-camel.js
│   │   │   │   ├── parse-mtime.js
│   │   │   │   ├── resolve.js
│   │   │   │   └── to-url-search-params.js
│   │   │   ├── log/
│   │   │   │   ├── index.js
│   │   │   │   ├── level.js
│   │   │   │   ├── ls.js
│   │   │   │   └── tail.js
│   │   │   ├── ls.js
│   │   │   ├── mount.js
│   │   │   ├── name/
│   │   │   │   ├── index.js
│   │   │   │   ├── publish.js
│   │   │   │   ├── pubsub/
│   │   │   │   │   ├── cancel.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── state.js
│   │   │   │   │   └── subs.js
│   │   │   │   └── resolve.js
│   │   │   ├── object/
│   │   │   │   ├── data.js
│   │   │   │   ├── get.js
│   │   │   │   ├── index.js
│   │   │   │   ├── links.js
│   │   │   │   ├── new.js
│   │   │   │   ├── patch/
│   │   │   │   │   ├── add-link.js
│   │   │   │   │   ├── append-data.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── rm-link.js
│   │   │   │   │   └── set-data.js
│   │   │   │   ├── put.js
│   │   │   │   └── stat.js
│   │   │   ├── pin/
│   │   │   │   ├── add-all.js
│   │   │   │   ├── add.js
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── remote/
│   │   │   │   │   ├── add.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── rm-all.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   ├── service/
│   │   │   │   │   │   ├── add.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   ├── ls.js
│   │   │   │   │   │   ├── rm.js
│   │   │   │   │   │   └── utils.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── rm-all.js
│   │   │   │   └── rm.js
│   │   │   ├── ping.js
│   │   │   ├── pubsub/
│   │   │   │   ├── index.js
│   │   │   │   ├── ls.js
│   │   │   │   ├── peers.js
│   │   │   │   ├── publish.js
│   │   │   │   ├── subscribe.js
│   │   │   │   ├── subscription-tracker.js
│   │   │   │   └── unsubscribe.js
│   │   │   ├── refs/
│   │   │   │   ├── index.js
│   │   │   │   └── local.js
│   │   │   ├── repo/
│   │   │   │   ├── gc.js
│   │   │   │   ├── index.js
│   │   │   │   ├── stat.js
│   │   │   │   └── version.js
│   │   │   ├── resolve.js
│   │   │   ├── start.js
│   │   │   ├── stats/
│   │   │   │   ├── bw.js
│   │   │   │   └── index.js
│   │   │   ├── stop.js
│   │   │   ├── swarm/
│   │   │   │   ├── addrs.js
│   │   │   │   ├── connect.js
│   │   │   │   ├── disconnect.js
│   │   │   │   ├── index.js
│   │   │   │   ├── local-addrs.js
│   │   │   │   └── peers.js
│   │   │   ├── types.ts
│   │   │   └── version.js
│   │   ├── test/
│   │   │   ├── commands.spec.js
│   │   │   ├── constructor.spec.js
│   │   │   ├── dag.spec.js
│   │   │   ├── diag.spec.js
│   │   │   ├── endpoint-config.spec.js
│   │   │   ├── exports.spec.js
│   │   │   ├── files.spec.js
│   │   │   ├── fixtures/
│   │   │   │   ├── .gitattributes
│   │   │   │   ├── 15mb.random
│   │   │   │   ├── r-config.json
│   │   │   │   ├── ssl/
│   │   │   │   │   ├── cert.pem
│   │   │   │   │   └── privkey.pem
│   │   │   │   ├── test-folder/
│   │   │   │   │   ├── .hiddenTest.txt
│   │   │   │   │   ├── add
│   │   │   │   │   ├── cat
│   │   │   │   │   ├── files/
│   │   │   │   │   │   ├── hello.txt
│   │   │   │   │   │   └── ipfs.txt
│   │   │   │   │   ├── ipfs-add
│   │   │   │   │   ├── ls
│   │   │   │   │   └── version
│   │   │   │   ├── testconfig.json
│   │   │   │   └── testfile.txt
│   │   │   ├── key.spec.js
│   │   │   ├── lib.error-handler.spec.js
│   │   │   ├── log.spec.js
│   │   │   ├── node/
│   │   │   │   ├── agent.js
│   │   │   │   ├── custom-headers.js
│   │   │   │   ├── request-api.js
│   │   │   │   └── swarm.js
│   │   │   ├── node.js
│   │   │   ├── ping.spec.js
│   │   │   ├── pubsub.spec.js
│   │   │   ├── repo.spec.js
│   │   │   ├── stats.spec.js
│   │   │   └── utils/
│   │   │       ├── factory.js
│   │   │       └── throws-async.js
│   │   └── tsconfig.json
│   ├── ipfs-http-gateway/
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.js
│   │   │   ├── resources/
│   │   │   │   ├── gateway.js
│   │   │   │   └── index.js
│   │   │   ├── routes/
│   │   │   │   ├── gateway.js
│   │   │   │   └── index.js
│   │   │   ├── types.ts
│   │   │   └── utils/
│   │   │       └── path.js
│   │   ├── test/
│   │   │   ├── fixtures/
│   │   │   │   ├── index.html
│   │   │   │   └── nested-folder/
│   │   │   │       ├── hello.txt
│   │   │   │       ├── ipfs.txt
│   │   │   │       └── nested.html
│   │   │   ├── routes.spec.js
│   │   │   └── utils/
│   │   │       └── http.js
│   │   └── tsconfig.json
│   ├── ipfs-http-response/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── dir-view/
│   │   │   │   ├── index.js
│   │   │   │   └── style.js
│   │   │   ├── index.js
│   │   │   ├── resolver.js
│   │   │   └── utils/
│   │   │       ├── content-type.js
│   │   │       └── path.js
│   │   ├── test/
│   │   │   ├── fixtures/
│   │   │   │   ├── .gitattributes
│   │   │   │   ├── test-folder/
│   │   │   │   │   ├── files/
│   │   │   │   │   │   └── hello.txt
│   │   │   │   │   ├── holmes.txt
│   │   │   │   │   └── pp.txt
│   │   │   │   ├── test-mime-types/
│   │   │   │   │   ├── index.html
│   │   │   │   │   └── pp.txt
│   │   │   │   ├── test-site/
│   │   │   │   │   ├── holmes.txt
│   │   │   │   │   ├── index.html
│   │   │   │   │   └── pp.txt
│   │   │   │   └── testfile.txt
│   │   │   ├── index.spec.js
│   │   │   ├── resolver.spec.js
│   │   │   └── utils/
│   │   │       └── web-response-env.js
│   │   └── tsconfig.json
│   ├── ipfs-http-server/
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── update-version.js
│   │   ├── src/
│   │   │   ├── api/
│   │   │   │   ├── resources/
│   │   │   │   │   ├── bitswap.js
│   │   │   │   │   ├── block.js
│   │   │   │   │   ├── bootstrap.js
│   │   │   │   │   ├── config.js
│   │   │   │   │   ├── dag.js
│   │   │   │   │   ├── dht.js
│   │   │   │   │   ├── dns.js
│   │   │   │   │   ├── files/
│   │   │   │   │   │   ├── chmod.js
│   │   │   │   │   │   ├── cp.js
│   │   │   │   │   │   ├── flush.js
│   │   │   │   │   │   ├── ls.js
│   │   │   │   │   │   ├── mkdir.js
│   │   │   │   │   │   ├── mv.js
│   │   │   │   │   │   ├── read.js
│   │   │   │   │   │   ├── rm.js
│   │   │   │   │   │   ├── stat.js
│   │   │   │   │   │   ├── touch.js
│   │   │   │   │   │   ├── utils/
│   │   │   │   │   │   │   └── parse-mtime.js
│   │   │   │   │   │   └── write.js
│   │   │   │   │   ├── files-regular.js
│   │   │   │   │   ├── id.js
│   │   │   │   │   ├── key.js
│   │   │   │   │   ├── name.js
│   │   │   │   │   ├── object.js
│   │   │   │   │   ├── pin.js
│   │   │   │   │   ├── ping.js
│   │   │   │   │   ├── pubsub.js
│   │   │   │   │   ├── repo.js
│   │   │   │   │   ├── resolve.js
│   │   │   │   │   ├── shutdown.js
│   │   │   │   │   ├── stats.js
│   │   │   │   │   ├── swarm.js
│   │   │   │   │   └── version.js
│   │   │   │   └── routes/
│   │   │   │       ├── bitswap.js
│   │   │   │       ├── block.js
│   │   │   │       ├── bootstrap.js
│   │   │   │       ├── config.js
│   │   │   │       ├── dag.js
│   │   │   │       ├── debug.js
│   │   │   │       ├── dht.js
│   │   │   │       ├── dns.js
│   │   │   │       ├── files-regular.js
│   │   │   │       ├── files.js
│   │   │   │       ├── id.js
│   │   │   │       ├── index.js
│   │   │   │       ├── key.js
│   │   │   │       ├── name.js
│   │   │   │       ├── object.js
│   │   │   │       ├── pin.js
│   │   │   │       ├── ping.js
│   │   │   │       ├── pubsub.js
│   │   │   │       ├── repo.js
│   │   │   │       ├── resolve.js
│   │   │   │       ├── shutdown.js
│   │   │   │       ├── stats.js
│   │   │   │       ├── swarm.js
│   │   │   │       ├── version.js
│   │   │   │       └── webui.js
│   │   │   ├── error-handler.js
│   │   │   ├── index.js
│   │   │   ├── types.ts
│   │   │   ├── utils/
│   │   │   │   ├── joi.js
│   │   │   │   ├── multipart-request-parser.js
│   │   │   │   └── stream-response.js
│   │   │   └── version.js
│   │   ├── test/
│   │   │   ├── cors.js
│   │   │   ├── fixtures/
│   │   │   │   └── test-data/
│   │   │   │       ├── badconfig
│   │   │   │       ├── badnode.json
│   │   │   │       └── node.json
│   │   │   ├── inject/
│   │   │   │   ├── bitswap.js
│   │   │   │   ├── block.js
│   │   │   │   ├── bootstrap.js
│   │   │   │   ├── browser-headers.js
│   │   │   │   ├── config.js
│   │   │   │   ├── dag.js
│   │   │   │   ├── dht.js
│   │   │   │   ├── dns.js
│   │   │   │   ├── files.js
│   │   │   │   ├── id.js
│   │   │   │   ├── key.js
│   │   │   │   ├── mfs/
│   │   │   │   │   ├── chmod.js
│   │   │   │   │   ├── cp.js
│   │   │   │   │   ├── flush.js
│   │   │   │   │   ├── ls.js
│   │   │   │   │   ├── mkdir.js
│   │   │   │   │   ├── mv.js
│   │   │   │   │   ├── read.js
│   │   │   │   │   ├── rm.js
│   │   │   │   │   ├── stat.js
│   │   │   │   │   ├── touch.js
│   │   │   │   │   └── write.js
│   │   │   │   ├── mfs.js
│   │   │   │   ├── name.js
│   │   │   │   ├── object.js
│   │   │   │   ├── pin.js
│   │   │   │   ├── ping.js
│   │   │   │   ├── pubsub.js
│   │   │   │   ├── repo.js
│   │   │   │   ├── resolve.js
│   │   │   │   ├── shutdown.js
│   │   │   │   ├── stats.js
│   │   │   │   ├── swarm.js
│   │   │   │   └── version.js
│   │   │   ├── node.js
│   │   │   ├── routes.js
│   │   │   └── utils/
│   │   │       ├── all-ndjson.js
│   │   │       ├── http.js
│   │   │       ├── match-iterable.js
│   │   │       └── test-http-method.js
│   │   └── tsconfig.json
│   ├── ipfs-message-port-client/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── block.js
│   │   │   ├── client/
│   │   │   │   ├── error.js
│   │   │   │   ├── query.js
│   │   │   │   ├── service.js
│   │   │   │   └── transport.js
│   │   │   ├── client.js
│   │   │   ├── core.js
│   │   │   ├── dag.js
│   │   │   ├── files.js
│   │   │   ├── index.js
│   │   │   └── interface.ts
│   │   ├── test/
│   │   │   ├── interface-message-port-client.js
│   │   │   └── util/
│   │   │       ├── client.js
│   │   │       └── worker.js
│   │   └── tsconfig.json
│   ├── ipfs-message-port-protocol/
│   │   ├── .aegir.js
│   │   ├── CHANGELOG.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── COPYRIGHT
│   │   ├── LICENSE
│   │   ├── LICENSE-APACHE
│   │   ├── LICENSE-MIT
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── block.js
│   │   │   ├── cid.js
│   │   │   ├── core.js
│   │   │   ├── dag.js
│   │   │   ├── data.ts
│   │   │   ├── error.js
│   │   │   ├── files.ts
│   │   │   ├── index.js
│   │   │   ├── root.ts
│   │   │   └── rpc.ts
│   │   ├── test/
│   │   │   ├── block.browser.js
│   │   │   ├── browser.js
│   │   │   ├── cid.browser.js
│   │   │   ├── cid.spec.js
│   │   │   ├── core.browser.js
│   │   │   ├── dag.browser.js
│   │   │   ├── dag.spec.js
│   │   │   ├── node.js
│   │   │   └── util.js
│   │   └── tsconfig.json
│   └── ipfs-message-port-server/
│       ├── .aegir.js
│       ├── CHANGELOG.md
│       ├── CODE_OF_CONDUCT.md
│       ├── CONTRIBUTING.md
│       ├── COPYRIGHT
│       ├── LICENSE
│       ├── LICENSE-APACHE
│       ├── LICENSE-MIT
│       ├── README.md
│       ├── package.json
│       ├── src/
│       │   ├── block.js
│       │   ├── core.js
│       │   ├── dag.js
│       │   ├── files.js
│       │   ├── index.js
│       │   ├── server.js
│       │   └── service.js
│       ├── test/
│       │   ├── basic.spec.js
│       │   ├── node.js
│       │   └── transfer.spec.js
│       └── tsconfig.json
└── scripts/
    └── node-globals.js
Download .txt
SYMBOL INDEX (1414 symbols across 689 files)

FILE: packages/interface-ipfs-core/src/add-all.js
  function testAddAll (line 29) | function testAddAll (factory, options) {

FILE: packages/interface-ipfs-core/src/add.js
  function testAdd (line 28) | function testAdd (factory, options) {

FILE: packages/interface-ipfs-core/src/bitswap/stat.js
  function testStat (line 15) | function testStat (factory, options) {

FILE: packages/interface-ipfs-core/src/bitswap/transfer.js
  function testTransfer (line 21) | function testTransfer (factory, options) {

FILE: packages/interface-ipfs-core/src/bitswap/unwant.js
  function testUnwant (line 14) | function testUnwant (factory, options) {

FILE: packages/interface-ipfs-core/src/bitswap/utils.js
  function waitForWantlistKey (line 12) | async function waitForWantlistKey (ipfs, key, opts = {}) {
  function waitForWantlistKeyToBeRemoved (line 42) | async function waitForWantlistKeyToBeRemoved (ipfs, key, opts = {}) {

FILE: packages/interface-ipfs-core/src/bitswap/wantlist-for-peer.js
  function testWantlistForPeer (line 16) | function testWantlistForPeer (factory, options) {

FILE: packages/interface-ipfs-core/src/bitswap/wantlist.js
  function testWantlist (line 19) | function testWantlist (factory, options) {

FILE: packages/interface-ipfs-core/src/block/get.js
  function testGet (line 18) | function testGet (factory, options) {

FILE: packages/interface-ipfs-core/src/block/put.js
  function testPut (line 20) | function testPut (factory, options) {

FILE: packages/interface-ipfs-core/src/block/rm.js
  function testRm (line 22) | function testRm (factory, options) {

FILE: packages/interface-ipfs-core/src/block/stat.js
  function testStat (line 17) | function testStat (factory, options) {

FILE: packages/interface-ipfs-core/src/bootstrap/add.js
  function testAdd (line 18) | function testAdd (factory, options) {

FILE: packages/interface-ipfs-core/src/bootstrap/clear.js
  function testClear (line 15) | function testClear (factory, options) {

FILE: packages/interface-ipfs-core/src/bootstrap/list.js
  function testList (line 15) | function testList (factory, options) {

FILE: packages/interface-ipfs-core/src/bootstrap/reset.js
  function testReset (line 15) | function testReset (factory, options) {

FILE: packages/interface-ipfs-core/src/bootstrap/rm.js
  function testRm (line 15) | function testRm (factory, options) {

FILE: packages/interface-ipfs-core/src/cat.js
  function testCat (line 24) | function testCat (factory, options) {

FILE: packages/interface-ipfs-core/src/config/get.js
  function testGet (line 14) | function testGet (factory, options) {

FILE: packages/interface-ipfs-core/src/config/profiles/apply.js
  function testApply (line 14) | function testApply (factory, options) {

FILE: packages/interface-ipfs-core/src/config/profiles/list.js
  function testList (line 14) | function testList (factory, options) {

FILE: packages/interface-ipfs-core/src/config/replace.js
  function testReplace (line 14) | function testReplace (factory, options) {

FILE: packages/interface-ipfs-core/src/config/set.js
  function testSet (line 15) | function testSet (factory, options) {

FILE: packages/interface-ipfs-core/src/dag/export.js
  function testExport (line 21) | function testExport (factory, options) {

FILE: packages/interface-ipfs-core/src/dag/get.js
  function testGet (line 29) | function testGet (factory, options) {

FILE: packages/interface-ipfs-core/src/dag/import.js
  function createBlocks (line 18) | async function createBlocks (num) {
  function createCar (line 36) | async function createCar (blocks) {
  function testImport (line 60) | function testImport (factory, options) {

FILE: packages/interface-ipfs-core/src/dag/put.js
  function testPut (line 18) | function testPut (factory, options) {

FILE: packages/interface-ipfs-core/src/dag/resolve.js
  function testResolve (line 17) | function testResolve (factory, options) {

FILE: packages/interface-ipfs-core/src/dag/sharness-t0053-dag.js
  function testDagSharnessT0053 (line 17) | function testDagSharnessT0053 (factory, options) {

FILE: packages/interface-ipfs-core/src/dht/disabled.js
  function testDisabled (line 16) | function testDisabled (factory, options) {

FILE: packages/interface-ipfs-core/src/dht/find-peer.js
  function testFindPeer (line 19) | function testFindPeer (factory, options) {

FILE: packages/interface-ipfs-core/src/dht/find-provs.js
  function testFindProvs (line 18) | function testFindProvs (factory, options) {

FILE: packages/interface-ipfs-core/src/dht/get.js
  function testGet (line 19) | function testGet (factory, options) {

FILE: packages/interface-ipfs-core/src/dht/provide.js
  function testProvide (line 18) | function testProvide (factory, options) {

FILE: packages/interface-ipfs-core/src/dht/put.js
  function testPut (line 16) | function testPut (factory, options) {

FILE: packages/interface-ipfs-core/src/dht/query.js
  function testQuery (line 17) | function testQuery (factory, options) {

FILE: packages/interface-ipfs-core/src/dht/utils.js
  function fakeCid (line 11) | async function fakeCid (data) {
  function ensureReachable (line 21) | async function ensureReachable (nodeA, nodeB) {

FILE: packages/interface-ipfs-core/src/files/chmod.js
  function testChmod (line 17) | function testChmod (factory, options) {

FILE: packages/interface-ipfs-core/src/files/cp.js
  function testCp (line 24) | function testCp (factory, options) {

FILE: packages/interface-ipfs-core/src/files/flush.js
  function testFlush (line 15) | function testFlush (factory, options) {

FILE: packages/interface-ipfs-core/src/files/ls.js
  function testLs (line 20) | function testLs (factory, options) {

FILE: packages/interface-ipfs-core/src/files/mkdir.js
  function testMkdir (line 19) | function testMkdir (factory, options) {

FILE: packages/interface-ipfs-core/src/files/mv.js
  function testMv (line 20) | function testMv (factory, options) {

FILE: packages/interface-ipfs-core/src/files/read.js
  function testRead (line 20) | function testRead (factory, options) {

FILE: packages/interface-ipfs-core/src/files/rm.js
  function testRm (line 19) | function testRm (factory, options) {

FILE: packages/interface-ipfs-core/src/files/stat.js
  function testStat (line 24) | function testStat (factory, options) {

FILE: packages/interface-ipfs-core/src/files/touch.js
  function testTouch (line 19) | function testTouch (factory, options) {

FILE: packages/interface-ipfs-core/src/files/write.js
  function testWrite (line 27) | function testWrite (factory, options) {

FILE: packages/interface-ipfs-core/src/get.js
  function testGet (line 54) | function testGet (factory, options) {

FILE: packages/interface-ipfs-core/src/key/gen.js
  function testGen (line 16) | function testGen (factory, options) {

FILE: packages/interface-ipfs-core/src/key/import.js
  function testImport (line 16) | function testImport (factory, options) {

FILE: packages/interface-ipfs-core/src/key/list.js
  function testList (line 15) | function testList (factory, options) {

FILE: packages/interface-ipfs-core/src/key/rename.js
  function testRename (line 15) | function testRename (factory, options) {

FILE: packages/interface-ipfs-core/src/key/rm.js
  function testRm (line 15) | function testRm (factory, options) {

FILE: packages/interface-ipfs-core/src/ls.js
  function testLs (line 23) | function testLs (factory, options) {

FILE: packages/interface-ipfs-core/src/miscellaneous/dns.js
  function testDns (line 14) | function testDns (factory, options) {

FILE: packages/interface-ipfs-core/src/miscellaneous/id.js
  function testId (line 17) | function testId (factory, options) {

FILE: packages/interface-ipfs-core/src/miscellaneous/resolve.js
  function testResolve (line 21) | function testResolve (factory, options) {

FILE: packages/interface-ipfs-core/src/miscellaneous/stop.js
  function testStop (line 14) | function testStop (factory, options) {

FILE: packages/interface-ipfs-core/src/miscellaneous/version.js
  function testVersion (line 14) | function testVersion (factory, options) {

FILE: packages/interface-ipfs-core/src/name-pubsub/cancel.js
  function testCancel (line 16) | function testCancel (factory, options) {

FILE: packages/interface-ipfs-core/src/name-pubsub/pubsub.js
  function testPubsub (line 36) | function testPubsub (factory, options) {

FILE: packages/interface-ipfs-core/src/name-pubsub/state.js
  function testState (line 14) | function testState (factory, options) {

FILE: packages/interface-ipfs-core/src/name-pubsub/subs.js
  function testSubs (line 15) | function testSubs (factory, options) {

FILE: packages/interface-ipfs-core/src/name/publish.js
  function testPublish (line 20) | function testPublish (factory, options) {

FILE: packages/interface-ipfs-core/src/name/resolve.js
  function testResolve (line 20) | function testResolve (factory, options) {

FILE: packages/interface-ipfs-core/src/object/data.js
  function testData (line 16) | function testData (factory, options) {

FILE: packages/interface-ipfs-core/src/object/get.js
  function testGet (line 21) | function testGet (factory, options) {

FILE: packages/interface-ipfs-core/src/object/links.js
  function testLinks (line 19) | function testLinks (factory, options) {

FILE: packages/interface-ipfs-core/src/object/new.js
  function testNew (line 14) | function testNew (factory, options) {

FILE: packages/interface-ipfs-core/src/object/patch/add-link.js
  function testAddLink (line 18) | function testAddLink (factory, options) {

FILE: packages/interface-ipfs-core/src/object/patch/append-data.js
  function testAppendData (line 15) | function testAppendData (factory, options) {

FILE: packages/interface-ipfs-core/src/object/patch/rm-link.js
  function testRmLink (line 18) | function testRmLink (factory, options) {

FILE: packages/interface-ipfs-core/src/object/patch/set-data.js
  function testSetData (line 15) | function testSetData (factory, options) {

FILE: packages/interface-ipfs-core/src/object/put.js
  function testPut (line 21) | function testPut (factory, options) {

FILE: packages/interface-ipfs-core/src/object/stat.js
  function testStat (line 19) | function testStat (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/add-all.js
  function testAddAll (line 17) | function testAddAll (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/add.js
  function testAdd (line 18) | function testAdd (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/ls.js
  function testLs (line 16) | function testLs (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/remote/add.js
  function testAdd (line 15) | function testAdd (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/remote/ls.js
  function testLs (line 17) | function testLs (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/remote/rm-all.js
  function testRmAll (line 17) | function testRmAll (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/remote/rm.js
  function testRm (line 17) | function testRm (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/remote/service.js
  function testService (line 15) | function testService (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/rm-all.js
  function testRmAll (line 17) | function testRmAll (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/rm.js
  function testRm (line 16) | function testRm (factory, options) {

FILE: packages/interface-ipfs-core/src/pin/utils.js
  function isPinnedWithType (line 122) | async function isPinnedWithType (ipfs, cid, type) {

FILE: packages/interface-ipfs-core/src/ping/ping.js
  function testPing (line 17) | function testPing (factory, options) {

FILE: packages/interface-ipfs-core/src/ping/utils.js
  function expectIsPingResponse (line 6) | function expectIsPingResponse (obj) {
  function isPong (line 20) | function isPong (pingResponse) {

FILE: packages/interface-ipfs-core/src/pubsub/ls.js
  function testLs (line 16) | function testLs (factory, options) {

FILE: packages/interface-ipfs-core/src/pubsub/peers.js
  function testPeers (line 17) | function testPeers (factory, options) {

FILE: packages/interface-ipfs-core/src/pubsub/publish.js
  function waitForRemoteToBeSubscribed (line 20) | async function waitForRemoteToBeSubscribed (topic, ipfs, remote) {
  function testPublish (line 36) | function testPublish (factory, options) {

FILE: packages/interface-ipfs-core/src/pubsub/subscribe.js
  function testSubscribe (line 29) | function testSubscribe (factory, options) {

FILE: packages/interface-ipfs-core/src/pubsub/unsubscribe.js
  function testUnsubscribe (line 17) | function testUnsubscribe (factory, options) {

FILE: packages/interface-ipfs-core/src/pubsub/utils.js
  function waitForPeers (line 15) | async function waitForPeers (ipfs, topic, peersToWait, waitForMs) {
  function getTopic (line 34) | function getTopic () {

FILE: packages/interface-ipfs-core/src/refs-local.js
  function testRefsLocal (line 21) | function testRefsLocal (factory, options) {

FILE: packages/interface-ipfs-core/src/refs.js
  function testRefs (line 21) | function testRefs (factory, options) {
  function getMockObjects (line 106) | function getMockObjects () {
  function getRefsTests (line 130) | function getRefsTests () {
  function loadPbContent (line 338) | function loadPbContent (ipfs, node) {
  function loadDagContent (line 370) | function loadDagContent (ipfs, node) {
  function loadContent (line 401) | async function loadContent (ipfs, store, node) {

FILE: packages/interface-ipfs-core/src/repo/gc.js
  function getBaseEncodedMultihashes (line 14) | async function getBaseEncodedMultihashes (ipfs) {
  function shouldHaveRef (line 24) | async function shouldHaveRef (ipfs, cid) {
  function shouldNotHaveRef (line 32) | async function shouldNotHaveRef (ipfs, cid) {
  function testGc (line 44) | function testGc (factory, options) {

FILE: packages/interface-ipfs-core/src/repo/stat.js
  function testStat (line 14) | function testStat (factory, options) {

FILE: packages/interface-ipfs-core/src/repo/version.js
  function testVersion (line 14) | function testVersion (factory, options) {

FILE: packages/interface-ipfs-core/src/stats/bitswap.js
  function testBitswap (line 14) | function testBitswap (factory, options) {

FILE: packages/interface-ipfs-core/src/stats/bw.js
  function testBw (line 17) | function testBw (factory, options) {

FILE: packages/interface-ipfs-core/src/stats/repo.js
  function testRepo (line 14) | function testRepo (factory, options) {

FILE: packages/interface-ipfs-core/src/stats/utils.js
  function expectIsBitswap (line 14) | function expectIsBitswap (err, stats) {
  function expectIsBandwidth (line 42) | function expectIsBandwidth (err, stats) {
  function expectIsRepo (line 59) | function expectIsRepo (err, res) {

FILE: packages/interface-ipfs-core/src/swarm/addrs.js
  function testAddrs (line 16) | function testAddrs (factory, options) {

FILE: packages/interface-ipfs-core/src/swarm/connect.js
  function testConnect (line 15) | function testConnect (factory, options) {

FILE: packages/interface-ipfs-core/src/swarm/disconnect.js
  function testDisconnect (line 15) | function testDisconnect (factory, options) {

FILE: packages/interface-ipfs-core/src/swarm/local-addrs.js
  function testLocalAddrs (line 15) | function testLocalAddrs (factory, options) {

FILE: packages/interface-ipfs-core/src/swarm/peers.js
  function peersAreUnique (line 16) | function peersAreUnique (peers) {
  function testPeers (line 30) | function testPeers (factory, options) {

FILE: packages/interface-ipfs-core/src/utils/blockstore-adapter.js
  class IPFSBlockstore (line 24) | class IPFSBlockstore extends BaseBlockstore {
    method constructor (line 28) | constructor (ipfs) {
    method put (line 38) | async put (cid, buf) {
  function createBlockstore (line 54) | function createBlockstore (ipfs) {

FILE: packages/interface-ipfs-core/src/utils/create-sharded-directory.js
  function createShardedDirectory (line 9) | async function createShardedDirectory (ipfs, files = 1001) {

FILE: packages/interface-ipfs-core/src/utils/create-two-shards.js
  function createTwoShards (line 9) | async function createTwoShards (ipfs, fileCount) {

FILE: packages/interface-ipfs-core/src/utils/dump-shard.js
  function dumpShard (line 7) | async function dumpShard (path, ipfs) {
  function dumpSubShard (line 24) | async function dumpSubShard (cid, ipfs, prefix = '') {

FILE: packages/interface-ipfs-core/src/utils/index.js
  constant ONE_MEG (line 5) | const ONE_MEG = Math.pow(2, 20)

FILE: packages/interface-ipfs-core/src/utils/ipfs-options-websockets-filter-all.js
  function ipfsOptionsWebsocketsFilterAll (line 4) | function ipfsOptionsWebsocketsFilterAll () {

FILE: packages/interface-ipfs-core/src/utils/is-shard-at-path.js
  function isShardAtPath (line 7) | async function isShardAtPath (path, ipfs) {

FILE: packages/interface-ipfs-core/src/utils/mocha.js
  function getDescribe (line 24) | function getDescribe (config) {
  function getIt (line 98) | function getIt (config) {

FILE: packages/interface-ipfs-core/src/utils/suite.js
  function createSuite (line 18) | function createSuite (tests, parent) {

FILE: packages/interface-ipfs-core/src/utils/test-timeout.js
  function testTimeout (line 7) | function testTimeout (fn) {

FILE: packages/interface-ipfs-core/src/utils/wait-for.js
  function waitFor (line 13) | async function waitFor (test, options) {

FILE: packages/ipfs-cli/src/command-alias.js
  function arrayMatch (line 34) | function arrayMatch (arr, sub) {

FILE: packages/ipfs-cli/src/commands/add.js
  function getTotalBytes (line 21) | async function getTotalBytes (paths) {
  method handler (line 256) | async handler ({

FILE: packages/ipfs-cli/src/commands/bitswap.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/bitswap/stat.js
  method handler (line 34) | async handler ({ ctx: { ipfs, print }, cidBase, human, timeout }) {

FILE: packages/ipfs-cli/src/commands/bitswap/unwant.js
  method handler (line 36) | async handler ({ ctx, key, cidBase, timeout }) {

FILE: packages/ipfs-cli/src/commands/bitswap/wantlist.js
  method handler (line 36) | async handler ({ ctx, peer, cidBase, timeout }) {

FILE: packages/ipfs-cli/src/commands/block.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/block/get.js
  method handler (line 29) | async handler ({ ctx, key, timeout }) {

FILE: packages/ipfs-cli/src/commands/block/put.js
  method handler (line 59) | async handler ({ ctx: { ipfs, print, getStdin }, block, timeout, format,...

FILE: packages/ipfs-cli/src/commands/block/rm.js
  method handler (line 42) | async handler ({ ctx, hash, force, quiet, timeout }) {

FILE: packages/ipfs-cli/src/commands/block/stat.js
  method handler (line 34) | async handler ({ ctx, key, cidBase, timeout }) {

FILE: packages/ipfs-cli/src/commands/bootstrap.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/bootstrap/add.js
  method handler (line 34) | async handler ({ ctx: { ipfs, print }, peer, default: defaultPeers, time...

FILE: packages/ipfs-cli/src/commands/bootstrap/list.js
  method handler (line 22) | async handler ({ ctx: { ipfs, print }, timeout }) {

FILE: packages/ipfs-cli/src/commands/bootstrap/rm.js
  method handler (line 34) | async handler ({ ctx: { ipfs, print }, all, peer, timeout }) {

FILE: packages/ipfs-cli/src/commands/cat.js
  method handler (line 41) | async handler ({ ctx: { ipfs, print }, ipfsPath, offset, length, preload...

FILE: packages/ipfs-cli/src/commands/cid.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/cid/base32.js
  method handler (line 18) | async handler ({ ctx: { print, getStdin }, cids }) {

FILE: packages/ipfs-cli/src/commands/cid/bases.js
  method handler (line 28) | handler ({ ctx: { ipfs, print }, prefix, numeric }) {

FILE: packages/ipfs-cli/src/commands/cid/codecs.js
  method handler (line 22) | handler ({ ctx: { ipfs, print }, numeric }) {

FILE: packages/ipfs-cli/src/commands/cid/format.js
  method handler (line 58) | async handler ({ ctx: { ipfs, print, getStdin }, cids, format, cidVersio...
  function replacer (line 121) | function replacer (cid, base, ipfs) {
  function findBase (line 175) | function findBase (str, ipfs) {
  function findCodec (line 195) | function findCodec (cid, ipfs) {
  function findHasher (line 209) | function findHasher (cid, ipfs) {
  function prefix (line 223) | function prefix (cid, ipfs) {

FILE: packages/ipfs-cli/src/commands/cid/hashes.js
  method handler (line 22) | handler ({ ctx: { ipfs, print }, numeric }) {

FILE: packages/ipfs-cli/src/commands/config.js
  method handler (line 44) | async handler ({ ctx: { ipfs, print }, value, bool, json, key, timeout }) {

FILE: packages/ipfs-cli/src/commands/config/edit.js
  method handler (line 15) | async handler ({ ctx: { repoPath } }) {

FILE: packages/ipfs-cli/src/commands/config/profile.js
  method builder (line 13) | builder (yargs) {
  method handler (line 18) | handler () {

FILE: packages/ipfs-cli/src/commands/config/profile/apply.js
  method handler (line 30) | async handler ({ ctx, profile, dryRun, timeout }) {

FILE: packages/ipfs-cli/src/commands/config/profile/ls.js
  method handler (line 22) | async handler ({ ctx: { ipfs, print }, timeout }) {

FILE: packages/ipfs-cli/src/commands/config/replace.js
  method handler (line 25) | handler ({ ctx: { ipfs, isDaemon }, file, timeout }) {

FILE: packages/ipfs-cli/src/commands/config/show.js
  method handler (line 22) | async handler ({ ctx: { ipfs, print }, timeout }) {

FILE: packages/ipfs-cli/src/commands/daemon.js
  method builder (line 31) | builder (yargs) {
  method handler (line 66) | async handler ({ ctx: { print, repoPath }, initConfig, silent, migrate, ...

FILE: packages/ipfs-cli/src/commands/dag.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/dag/export.js
  method handler (line 24) | async handler ({ ctx: { ipfs, print }, rootcid, timeout }) {

FILE: packages/ipfs-cli/src/commands/dag/get.js
  method handler (line 57) | async handler ({ ctx: { ipfs, print }, cidpath, dataEnc, outputCodec, lo...

FILE: packages/ipfs-cli/src/commands/dag/import.js
  method handler (line 36) | async handler ({ ctx: { ipfs, print, getStdin }, path, pinRoots, timeout...

FILE: packages/ipfs-cli/src/commands/dag/put.js
  method handler (line 95) | async handler ({ ctx: { ipfs, print, getStdin }, data, inputCodec, store...

FILE: packages/ipfs-cli/src/commands/dag/resolve.js
  method handler (line 26) | async handler ({ ctx: { ipfs, print }, ref, timeout }) {

FILE: packages/ipfs-cli/src/commands/dht.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/dht/find-peer.js
  method handler (line 28) | async handler ({ ctx: { ipfs, print }, peerId, timeout }) {

FILE: packages/ipfs-cli/src/commands/dht/find-providers.js
  method handler (line 35) | async handler ({ ctx: { ipfs, print }, key, numProviders, timeout }) {

FILE: packages/ipfs-cli/src/commands/dht/get.js
  method handler (line 29) | async handler ({ ctx: { ipfs, print }, key, timeout }) {

FILE: packages/ipfs-cli/src/commands/dht/provide.js
  method handler (line 35) | async handler ({ ctx: { ipfs }, key, recursive, timeout }) {

FILE: packages/ipfs-cli/src/commands/dht/put.js
  method handler (line 25) | async handler ({ ctx: { ipfs }, key, value, timeout }) {

FILE: packages/ipfs-cli/src/commands/dht/query.js
  method handler (line 33) | async handler ({ ctx: { ipfs, print }, peerId, timeout, count }) {

FILE: packages/ipfs-cli/src/commands/dns.js
  method handler (line 33) | async handler ({ ctx: { ipfs, print }, domain, recursive, timeout }) {

FILE: packages/ipfs-cli/src/commands/files.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler ({ ctx: { print } }) {

FILE: packages/ipfs-cli/src/commands/files/chmod.js
  method handler (line 64) | async handler ({

FILE: packages/ipfs-cli/src/commands/files/cp.js
  method handler (line 56) | async handler ({

FILE: packages/ipfs-cli/src/commands/files/flush.js
  method handler (line 28) | async handler ({

FILE: packages/ipfs-cli/src/commands/files/ls.js
  method handler (line 42) | async handler ({

FILE: packages/ipfs-cli/src/commands/files/mkdir.js
  method handler (line 84) | async handler ({

FILE: packages/ipfs-cli/src/commands/files/mv.js
  method handler (line 63) | async handler ({

FILE: packages/ipfs-cli/src/commands/files/read.js
  method handler (line 35) | async handler ({

FILE: packages/ipfs-cli/src/commands/files/rm.js
  method handler (line 34) | async handler ({

FILE: packages/ipfs-cli/src/commands/files/stat.js
  method handler (line 70) | async handler ({

FILE: packages/ipfs-cli/src/commands/files/touch.js
  method handler (line 70) | async handler ({

FILE: packages/ipfs-cli/src/commands/files/write.js
  method handler (line 131) | async handler ({

FILE: packages/ipfs-cli/src/commands/get.js
  method handler (line 63) | async handler ({ ctx: { ipfs, print }, ipfsPath, output, force, timeout,...

FILE: packages/ipfs-cli/src/commands/id.js
  method handler (line 35) | async handler ({ ctx: { ipfs, print }, format, timeout, peerId }) {

FILE: packages/ipfs-cli/src/commands/init.js
  method handler (line 70) | async handler ({ ctx: { print, repoPath }, defaultConfig, algorithm, bit...

FILE: packages/ipfs-cli/src/commands/key.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/key/export.js
  method handler (line 38) | async handler ({ ctx, name, passout, output, timeout }) {

FILE: packages/ipfs-cli/src/commands/key/gen.js
  method handler (line 40) | async handler ({ ctx: { ipfs, print }, name, type, size, timeout }) {

FILE: packages/ipfs-cli/src/commands/key/import.js
  method handler (line 38) | async handler ({ ctx: { ipfs, print }, name, input, passin, timeout }) {

FILE: packages/ipfs-cli/src/commands/key/list.js
  method handler (line 25) | async handler ({ ctx: { ipfs, print }, timeout }) {

FILE: packages/ipfs-cli/src/commands/key/rename.js
  method handler (line 27) | async handler ({ ctx: { ipfs, print }, name, newName, timeout }) {

FILE: packages/ipfs-cli/src/commands/key/rm.js
  method handler (line 26) | async handler ({ ctx: { ipfs, print }, name, timeout }) {

FILE: packages/ipfs-cli/src/commands/ls.js
  method handler (line 39) | async handler ({ ctx: { ipfs, print }, key, headers, cidBase, timeout }) {

FILE: packages/ipfs-cli/src/commands/name.js
  method builder (line 15) | builder (yargs) {
  method handler (line 23) | handler () {

FILE: packages/ipfs-cli/src/commands/name/publish.js
  method handler (line 56) | async handler ({ ctx: { ipfs, print }, ipfsPath, resolve, lifetime, key,...

FILE: packages/ipfs-cli/src/commands/name/pubsub.js
  method builder (line 17) | builder (yargs) {
  method handler (line 25) | handler () {

FILE: packages/ipfs-cli/src/commands/name/pubsub/cancel.js
  method handler (line 23) | async handler ({ ctx: { ipfs, print }, name, timeout }) {

FILE: packages/ipfs-cli/src/commands/name/pubsub/state.js
  method handler (line 22) | async handler ({ ctx: { ipfs, print }, timeout }) {

FILE: packages/ipfs-cli/src/commands/name/pubsub/subs.js
  method handler (line 25) | async handler ({ ctx: { ipfs, print }, timeout }) {

FILE: packages/ipfs-cli/src/commands/name/resolve.js
  method handler (line 44) | async handler ({ ctx: { ipfs, print }, nocache, recursive, name, stream,...

FILE: packages/ipfs-cli/src/commands/object.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/object/data.js
  method handler (line 28) | async handler ({ ctx: { ipfs, print }, key, timeout }) {

FILE: packages/ipfs-cli/src/commands/object/get.js
  method handler (line 44) | async handler ({ ctx: { ipfs, print }, key, dataEncoding, cidBase, timeo...

FILE: packages/ipfs-cli/src/commands/object/links.js
  method handler (line 37) | async handler ({ ctx: { ipfs, print }, key, cidBase, timeout }) {

FILE: packages/ipfs-cli/src/commands/object/new.js
  method handler (line 29) | async handler ({ ctx: { ipfs, print }, template, cidBase, timeout }) {

FILE: packages/ipfs-cli/src/commands/object/patch.js
  method builder (line 13) | builder (yargs) {
  method handler (line 21) | handler () {

FILE: packages/ipfs-cli/src/commands/object/patch/add-link.js
  method handler (line 41) | async handler ({ ctx: { ipfs, print }, root, name, ref, cidBase, timeout...

FILE: packages/ipfs-cli/src/commands/object/patch/append-data.js
  method handler (line 37) | async handler ({ ctx: { ipfs, print, getStdin }, root, data, cidBase, ti...

FILE: packages/ipfs-cli/src/commands/object/patch/rm-link.js
  method handler (line 35) | async handler ({ ctx: { ipfs, print }, root, link, cidBase, timeout }) {

FILE: packages/ipfs-cli/src/commands/object/patch/set-data.js
  method handler (line 37) | async handler ({ ctx: { ipfs, print, getStdin }, root, data, cidBase, ti...

FILE: packages/ipfs-cli/src/commands/object/put.js
  method handler (line 39) | async handler ({ ctx: { ipfs, print, getStdin }, data, inputEnc, cidBase...

FILE: packages/ipfs-cli/src/commands/object/stat.js
  method handler (line 28) | async handler ({ ctx: { ipfs, print }, key, timeout }) {

FILE: packages/ipfs-cli/src/commands/pin.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/pin/add.js
  method handler (line 63) | async handler ({ ctx, ipfsPath, recursive, cidBase, timeout, metadata, m...

FILE: packages/ipfs-cli/src/commands/pin/ls.js
  method handler (line 48) | async handler ({ ctx: { ipfs, print }, ipfsPath, type, quiet, cidBase, t...

FILE: packages/ipfs-cli/src/commands/pin/rm.js
  method handler (line 36) | async handler ({ ctx, ipfsPath, timeout, recursive, cidBase }) {

FILE: packages/ipfs-cli/src/commands/ping.js
  method handler (line 35) | async handler ({ ctx: { ipfs, print }, count, peerId, timeout }) {

FILE: packages/ipfs-cli/src/commands/pubsub.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/pubsub/ls.js
  method handler (line 25) | async handler ({ ctx: { ipfs, print }, timeout }) {

FILE: packages/ipfs-cli/src/commands/pubsub/peers.js
  method handler (line 23) | async handler ({ ctx: { ipfs, print }, topic, timeout }) {

FILE: packages/ipfs-cli/src/commands/pubsub/pub.js
  method handler (line 29) | async handler ({ ctx: { ipfs }, topic, data, timeout }) {

FILE: packages/ipfs-cli/src/commands/pubsub/sub.js
  method handler (line 27) | async handler ({ ctx: { ipfs, print }, topic, timeout }) {

FILE: packages/ipfs-cli/src/commands/refs-local.js
  method handler (line 30) | async handler ({ ctx: { ipfs, print }, timeout, multihash }) {

FILE: packages/ipfs-cli/src/commands/refs.js
  method handler (line 56) | async handler ({ ctx: { ipfs, print }, key, keys, recursive, format, edg...

FILE: packages/ipfs-cli/src/commands/repo.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/repo/gc.js
  method handler (line 35) | async handler ({ ctx: { ipfs, print }, quiet, streamErrors, timeout }) {

FILE: packages/ipfs-cli/src/commands/repo/stat.js
  method handler (line 35) | async handler ({ ctx: { ipfs, print }, human, sizeOnly, timeout }) {

FILE: packages/ipfs-cli/src/commands/repo/version.js
  method handler (line 22) | async handler ({ ctx: { ipfs, print }, timeout }) {

FILE: packages/ipfs-cli/src/commands/resolve.js
  method handler (line 38) | async handler ({ ctx: { print, ipfs }, name, recursive, cidBase, timeout...

FILE: packages/ipfs-cli/src/commands/shutdown.js
  method handler (line 22) | handler ({ ctx: { ipfs }, timeout }) {

FILE: packages/ipfs-cli/src/commands/stats.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/stats/bw.js
  method handler (line 44) | async handler ({ ctx: { ipfs, print }, peer, proto, poll, interval, time...

FILE: packages/ipfs-cli/src/commands/swarm.js
  method builder (line 9) | builder (yargs) {
  method handler (line 17) | handler () {

FILE: packages/ipfs-cli/src/commands/swarm/addrs.js
  method builder (line 16) | builder (yargs) {
  method handler (line 30) | async handler ({ ctx: { ipfs, print }, timeout }) {

FILE: packages/ipfs-cli/src/commands/swarm/addrs/local.js
  method handler (line 22) | async handler ({ ctx: { print, ipfs, isDaemon }, timeout }) {

FILE: packages/ipfs-cli/src/commands/swarm/connect.js
  method handler (line 30) | async handler ({ ctx: { ipfs, isDaemon, print }, address, timeout }) {

FILE: packages/ipfs-cli/src/commands/swarm/disconnect.js
  method handler (line 30) | async handler ({ ctx: { ipfs, isDaemon, print }, address, timeout }) {

FILE: packages/ipfs-cli/src/commands/swarm/peers.js
  method handler (line 24) | async handler ({ ctx: { print, ipfs, isDaemon }, timeout }) {

FILE: packages/ipfs-cli/src/commands/version.js
  method handler (line 48) | async handler ({ ctx: { print, ipfs }, all, commit, repo, number, timeou...

FILE: packages/ipfs-cli/src/index.js
  function cli (line 8) | async function cli (command, ctxMiddleware) {

FILE: packages/ipfs-cli/src/types.ts
  type ServerInfo (line 5) | interface ServerInfo {
  type Context (line 10) | interface Context {
  type Print (line 18) | interface Print {

FILE: packages/ipfs-cli/src/utils.js
  function getIpfs (line 119) | async function getIpfs (argv) {
  constant DEL (line 295) | const DEL = 127

FILE: packages/ipfs-cli/test/add.spec.js
  constant HASH_ALGS (line 17) | const HASH_ALGS = [

FILE: packages/ipfs-cli/test/daemon.spec.js
  function testSignal (line 85) | async function testSignal (ipfs, killSignal) {
  method onReady (line 245) | async onReady () {
  method onReady (line 257) | async onReady () {

FILE: packages/ipfs-cli/test/general.spec.js
  function setRepoVersion (line 44) | async function setRepoVersion (version) {
  function getRepoVersion (line 48) | async function getRepoVersion () {

FILE: packages/ipfs-cli/test/utils/clean.js
  function clean (line 9) | async function clean (dir) {

FILE: packages/ipfs-cli/test/utils/cli.js
  function cli (line 33) | async function cli (command, ctx = {}) {
  function fail (line 54) | async function fail (command, ctx = {}) {

FILE: packages/ipfs-cli/test/utils/ipfs-exec.js
  function ipfsExec (line 20) | function ipfsExec (repoPath, opts) {

FILE: packages/ipfs-cli/test/utils/match-iterable.js
  function matchIterable (line 4) | function matchIterable () {

FILE: packages/ipfs-cli/test/utils/match-peer-id.js
  function matchPeerId (line 7) | function matchPeerId (peerId) {

FILE: packages/ipfs-client/src/index.js
  function create (line 15) | function create (opts = {}) {

FILE: packages/ipfs-core-config/src/dns.browser.js
  function resolveDnslink (line 33) | async function resolveDnslink (fqdn, opts) { // eslint-disable-line requ...

FILE: packages/ipfs-core-config/src/dns.js
  constant MAX_RECURSIVE_DEPTH (line 6) | const MAX_RECURSIVE_DEPTH = 32
  function resolveDnslink (line 13) | function resolveDnslink (domain, opts) {
  function recursiveResolveDnslink (line 31) | async function recursiveResolveDnslink (domain, depth) {
  function resolve (line 72) | async function resolve (domain) {

FILE: packages/ipfs-core-config/src/init-assets.browser.js
  function initAssets (line 2) | function initAssets () {}

FILE: packages/ipfs-core-config/src/init-assets.js
  function initAssets (line 11) | async function initAssets ({ addAll, print }) {

FILE: packages/ipfs-core-config/src/libp2p.browser.js
  function libp2pConfig (line 3) | function libp2pConfig () {

FILE: packages/ipfs-core-config/src/libp2p.js
  function libp2pConfig (line 6) | function libp2pConfig () {

FILE: packages/ipfs-core-config/src/preload.browser.js
  function preload (line 20) | function preload (url, options = {}) {

FILE: packages/ipfs-core-config/src/preload.js
  function preload (line 11) | async function preload (url, options = {}) {

FILE: packages/ipfs-core-config/src/repo.browser.js
  function createRepo (line 19) | function createRepo (print, codecs, options) {

FILE: packages/ipfs-core-config/src/repo.js
  function createRepo (line 27) | function createRepo (print, codecs, options = {}) {

FILE: packages/ipfs-core-config/src/utils/lru-datastore.js
  class LRUDatastore (line 20) | class LRUDatastore extends BaseDatastore {
    method constructor (line 27) | constructor (maxSize, datastore) {
    method open (line 36) | open () {
    method close (line 43) | close () {
    method put (line 52) | put (key, val, options) {
    method get (line 62) | async get (key, options) {
    method has (line 74) | async has (key, options) {
    method delete (line 86) | delete (key, options) {
    method putMany (line 96) | async * putMany (source, options) {
    method getMany (line 106) | async * getMany (source, options) {
    method deleteMany (line 120) | async * deleteMany (source, options) {
    method batch (line 129) | batch () {
    method query (line 137) | async * query (q, options) {
    method queryKeys (line 145) | async * queryKeys (q, options) {

FILE: packages/ipfs-core-config/src/utils/tlru.js
  class TLRU (line 12) | class TLRU {
    method constructor (line 18) | constructor (maxSize) {
    method get (line 29) | get (key) {
    method set (line 49) | set (key, value, ttl) {
    method has (line 59) | has (key) {
    method remove (line 72) | remove (key) {
    method clear (line 81) | clear () {

FILE: packages/ipfs-core-types/src/bitswap/index.ts
  type API (line 5) | interface API<OptionExtension = {}> {
  type Stats (line 61) | interface Stats {

FILE: packages/ipfs-core-types/src/block/index.ts
  type API (line 4) | interface API<OptionExtension = {}> {
  type PutOptions (line 71) | interface PutOptions extends AbortOptions, PreloadOptions {
  type RmOptions (line 93) | interface RmOptions extends AbortOptions {
  type RmResult (line 105) | interface RmResult {
  type StatResult (line 117) | interface StatResult {

FILE: packages/ipfs-core-types/src/bootstrap/index.ts
  type API (line 4) | interface API<OptionExtension = {}> {

FILE: packages/ipfs-core-types/src/config/index.ts
  type API (line 4) | interface API<OptionExtension = {}> {
  type Config (line 32) | interface Config {
  type AddressConfig (line 49) | interface AddressConfig {
  type APIConfig (line 59) | interface APIConfig {
  type DiscoveryConfig (line 63) | interface DiscoveryConfig {
  type MDNSDiscovery (line 68) | interface MDNSDiscovery {
  type WebRTCStarDiscovery (line 73) | interface WebRTCStarDiscovery {
  type DatastoreConfig (line 77) | interface DatastoreConfig {
  type DatastoreType (line 81) | interface DatastoreType {
  type DatastoreMountPoint (line 89) | interface DatastoreMountPoint {
  type DatastoreSpec (line 96) | interface DatastoreSpec {
  type IdentityConfig (line 101) | interface IdentityConfig {
  type KeychainConfig (line 115) | interface KeychainConfig {
  type DEK (line 119) | interface DEK {
  type PubsubConfig (line 126) | interface PubsubConfig {
  type SwarmConfig (line 131) | interface SwarmConfig {
  type ConnMgrConfig (line 136) | interface ConnMgrConfig {
  type RoutingConfig (line 141) | interface RoutingConfig {

FILE: packages/ipfs-core-types/src/config/profiles/index.ts
  type API (line 4) | interface API<OptionExtension = {}> {
  type Profile (line 17) | interface Profile {
  type ProfilesApplyOptions (line 22) | interface ProfilesApplyOptions extends AbortOptions {
  type ProfilesApplyResult (line 25) | interface ProfilesApplyResult {

FILE: packages/ipfs-core-types/src/dag/index.ts
  type API (line 4) | interface API<OptionExtension = {}> {
  type GetOptions (line 109) | interface GetOptions extends AbortOptions, PreloadOptions {
  type GetResult (line 121) | interface GetResult {
  type PutOptions (line 133) | interface PutOptions extends AbortOptions, PreloadOptions {
  type RmOptions (line 165) | interface RmOptions extends AbortOptions {
  type TreeOptions (line 172) | interface TreeOptions extends AbortOptions, PreloadOptions {
  type ResolveOptions (line 184) | interface ResolveOptions extends AbortOptions, PreloadOptions {
  type ResolveResult (line 191) | interface ResolveResult {
  type ExportOptions (line 203) | interface ExportOptions extends AbortOptions, PreloadOptions {
  type ImportOptions (line 206) | interface ImportOptions extends AbortOptions, PreloadOptions {
  type ImportResult (line 213) | interface ImportResult {
  type ImportRootStatus (line 220) | interface ImportRootStatus {

FILE: packages/ipfs-core-types/src/dht/index.ts
  type API (line 6) | interface API<OptionExtension = {}> {
  type DHTProvideOptions (line 65) | interface DHTProvideOptions extends AbortOptions {
  type EventTypes (line 69) | enum EventTypes {
  type MessageType (line 83) | enum MessageType {
  type MessageName (line 92) | type MessageName = keyof typeof MessageType
  type DHTRecord (line 94) | interface DHTRecord {
  type SendingQueryEvent (line 100) | interface SendingQueryEvent {
  type PeerResponseEvent (line 105) | interface PeerResponseEvent {
  type FinalPeerEvent (line 116) | interface FinalPeerEvent {
  type QueryErrorEvent (line 122) | interface QueryErrorEvent {
  type ProviderEvent (line 128) | interface ProviderEvent {
  type ValueEvent (line 134) | interface ValueEvent {
  type AddingPeerEvent (line 140) | interface AddingPeerEvent {
  type DialingPeerEvent (line 146) | interface DialingPeerEvent {
  type QueryEvent (line 152) | type QueryEvent = SendingQueryEvent | PeerResponseEvent | FinalPeerEvent...

FILE: packages/ipfs-core-types/src/diag/index.ts
  type API (line 3) | interface API<OptionExtension = {}> {
  type CmdsResult (line 9) | interface CmdsResult {

FILE: packages/ipfs-core-types/src/files/index.ts
  type API (line 6) | interface API<OptionExtension = {}> {
  type MFSEntry (line 163) | interface MFSEntry {
  type MFSOptions (line 195) | interface MFSOptions {
  type ChmodOptions (line 202) | interface ChmodOptions extends MFSOptions, AbortOptions {
  type CpOptions (line 224) | interface CpOptions extends MFSOptions, AbortOptions {
  type MkdirOptions (line 246) | interface MkdirOptions extends MFSOptions, AbortOptions {
  type StatOptions (line 278) | interface StatOptions extends AbortOptions {
  type StatResult (line 295) | interface StatResult {
  type TouchOptions (line 347) | interface TouchOptions extends MFSOptions, AbortOptions {
  type RmOptions (line 369) | interface RmOptions extends MFSOptions, AbortOptions {
  type ReadOptions (line 391) | interface ReadOptions extends AbortOptions {
  type WriteOptions (line 403) | interface WriteOptions extends MFSOptions, AbortOptions {
  type MvOptions (line 475) | interface MvOptions extends MFSOptions, AbortOptions {

FILE: packages/ipfs-core-types/src/index.ts
  type RefsAPI (line 25) | interface RefsAPI<OptionExtension = {}> extends Refs<OptionExtension> {
  type IPFS (line 29) | interface IPFS<OptionExtension = {}> extends RootAPI<OptionExtension> {
  type Bases (line 53) | interface Bases {
  type Codecs (line 58) | interface Codecs {
  type Hashers (line 63) | interface Hashers {

FILE: packages/ipfs-core-types/src/key/index.ts
  type API (line 4) | interface API<OptionExtension = {}> {
  type GenOptions (line 112) | interface GenOptions extends AbortOptions {
  type Key (line 117) | interface Key {
  type RenameKeyResult (line 122) | interface RenameKeyResult {

FILE: packages/ipfs-core-types/src/log/index.ts
  type API (line 3) | interface API<OptionExtension = {}> {

FILE: packages/ipfs-core-types/src/name/index.ts
  type API (line 6) | interface API<OptionExtension = {}> {
  type PublishOptions (line 45) | interface PublishOptions extends AbortOptions {
  type PublishResult (line 73) | interface PublishResult {
  type ResolveOptions (line 85) | interface ResolveOptions extends AbortOptions {

FILE: packages/ipfs-core-types/src/name/pubsub/index.ts
  type API (line 3) | interface API<OptionExtension = {}> {
  type PubsubCancelResult (line 42) | interface PubsubCancelResult {
  type PubsubStateResult (line 46) | interface PubsubStateResult {

FILE: packages/ipfs-core-types/src/object/index.ts
  type API (line 6) | interface API<OptionExtension = {}> {
  type NewObjectOptions (line 17) | interface NewObjectOptions extends AbortOptions, PreloadOptions {
  type StatResult (line 21) | interface StatResult {
  type PutOptions (line 30) | interface PutOptions extends AbortOptions, PreloadOptions {

FILE: packages/ipfs-core-types/src/object/patch/index.ts
  type API (line 5) | interface API<OptionExtension = {}> {

FILE: packages/ipfs-core-types/src/pin/index.ts
  type API (line 5) | interface API<OptionExtension = {}> {
  type AddOptions (line 98) | interface AddOptions extends AbortOptions {
  type AddAllOptions (line 115) | interface AddAllOptions extends AbortOptions {
  type AddInput (line 127) | type AddInput = CID | AddInputWithOptions
  type AddInputWithOptions (line 129) | interface AddInputWithOptions {
  type PinType (line 151) | type PinType = 'recursive' | 'direct' | 'indirect' | 'all'
  type PinQueryType (line 153) | type PinQueryType = 'recursive' | 'direct' | 'indirect' | 'all'
  type LsOptions (line 155) | interface LsOptions extends AbortOptions {
  type LsResult (line 160) | interface LsResult {
  type RmOptions (line 166) | interface RmOptions extends AbortOptions {
  type RmAllInput (line 170) | interface RmAllInput {

FILE: packages/ipfs-core-types/src/pin/remote/index.ts
  type API (line 6) | interface API<OptionExtension = {}> {
  type AddOptions (line 36) | interface AddOptions extends RemoteServiceOptions {
  type Query (line 59) | interface Query extends RemoteServiceOptions {
  type RemoteServiceOptions (line 78) | interface RemoteServiceOptions {
  type Pin (line 85) | interface Pin {
  type Status (line 91) | type Status =

FILE: packages/ipfs-core-types/src/pin/remote/service/index.ts
  type API (line 3) | interface API<OptionExtension = {}> {
  type Credentials (line 22) | interface Credentials {
  type RemotePinService (line 33) | interface RemotePinService {
  type RemotePinServiceWithStat (line 44) | interface RemotePinServiceWithStat extends RemotePinService {
  type Stat (line 53) | type Stat = ValidStat | InvalidStat
  type ValidStat (line 55) | interface ValidStat {
  type InvalidStat (line 60) | interface InvalidStat {
  type PinCount (line 65) | interface PinCount {

FILE: packages/ipfs-core-types/src/pubsub/index.ts
  type API (line 6) | interface API<OptionExtension = {}> {
  type SubscribeOptions (line 82) | interface SubscribeOptions extends AbortOptions {

FILE: packages/ipfs-core-types/src/refs/index.ts
  type API (line 3) | interface API<OptionExtension = {}> {
  type Refs (line 15) | interface Refs<OptionExtension = {}> { (ipfsPath: IPFSPath | IPFSPath[],...
  type RefsOptions (line 17) | interface RefsOptions extends AbortOptions, PreloadOptions {
  type Local (line 25) | interface Local<OptionExtension = {}> { (options?: AbortOptions & Option...
  type RefsResult (line 27) | interface RefsResult {

FILE: packages/ipfs-core-types/src/repo/index.ts
  type API (line 4) | interface API<OptionExtension = {}> {
  type GCOptions (line 24) | interface GCOptions extends AbortOptions {
  type GCError (line 28) | interface GCError {
  type GCSuccess (line 33) | interface GCSuccess {
  type GCResult (line 38) | type GCResult = GCSuccess | GCError
  type StatResult (line 40) | interface StatResult {

FILE: packages/ipfs-core-types/src/root.ts
  type API (line 7) | interface API<OptionExtension = {}> {
  type IPFSEntry (line 142) | interface IPFSEntry {
  type AddProgressFn (line 152) | interface AddProgressFn { (bytes: number, path?: string): void }
  type AddOptions (line 154) | interface AddOptions extends AbortOptions {
  type AddAllOptions (line 216) | interface AddAllOptions extends AddOptions {
  type AddResult (line 237) | interface AddResult {
  type ShardingOptions (line 245) | interface ShardingOptions {
  type CatOptions (line 249) | interface CatOptions extends AbortOptions, PreloadOptions {
  type GetOptions (line 260) | interface GetOptions extends AbortOptions, PreloadOptions {
  type ListOptions (line 266) | interface ListOptions extends AbortOptions, PreloadOptions {
  type IDOptions (line 270) | interface IDOptions extends AbortOptions {
  type IDResult (line 274) | interface IDResult {
  type VersionResult (line 289) | interface VersionResult {
  type DNSOptions (line 300) | interface DNSOptions extends AbortOptions {
  type PingOptions (line 304) | interface PingOptions extends AbortOptions {
  type PingResult (line 308) | interface PingResult {
  type ResolveOptions (line 314) | interface ResolveOptions extends AbortOptions {
  type MountOptions (line 319) | interface MountOptions extends AbortOptions {
  type MountResult (line 324) | interface MountResult {

FILE: packages/ipfs-core-types/src/stats/index.ts
  type API (line 6) | interface API<OptionExtension = {}> {
  type BWOptions (line 16) | interface BWOptions extends AbortOptions {
  type BWResult (line 38) | interface BWResult {

FILE: packages/ipfs-core-types/src/swarm/index.ts
  type API (line 5) | interface API<OptionExtension = {}> {
  type AddrsResult (line 32) | interface AddrsResult {
  type PeersOptions (line 37) | interface PeersOptions extends AbortOptions {
  type PeersResult (line 44) | interface PeersResult {

FILE: packages/ipfs-core-types/src/utils.ts
  type Entry (line 4) | type Entry<Content extends AsyncIterable<Uint8Array> | Blob> =
  type BaseEntry (line 8) | interface BaseEntry {
  type FileEntry (line 13) | interface FileEntry <Content extends AsyncIterable<Uint8Array> | Blob> e...
  type DirectoryEntry (line 17) | interface DirectoryEntry extends BaseEntry {
  type ImportCandidateStream (line 21) | type ImportCandidateStream =
  type ImportCandidate (line 25) | type ImportCandidate =
  type ToFile (line 30) | interface ToFile extends ToFileMetadata {
  type ToDirectory (line 35) | interface ToDirectory extends ToFileMetadata {
  type ToFileMetadata (line 40) | interface ToFileMetadata {
  type ToContent (line 50) | type ToContent =
  type ToMode (line 59) | type ToMode =
  type BaseFile (line 63) | interface BaseFile {
  type InputFile (line 69) | interface InputFile extends BaseFile {
  type BrowserImportCandidate (line 73) | interface BrowserImportCandidate {
  type Await (line 84) | type Await<T> =
  type AwaitIterable (line 92) | type AwaitIterable<T> =
  type AbortOptions (line 99) | interface AbortOptions {
  type PreloadOptions (line 112) | interface PreloadOptions {
  type IPFSPath (line 119) | type IPFSPath = CID | string
  type BufferStore (line 121) | interface BufferStore {

FILE: packages/ipfs-core-utils/src/errors.js
  class TimeoutError (line 2) | class TimeoutError extends Error {
    method constructor (line 3) | constructor (message = 'request timed out') {

FILE: packages/ipfs-core-utils/src/files/format-mode.js
  constant S_ISUID (line 1) | const S_ISUID = parseInt('4000', 8) //   set UID bit
  constant S_ISGID (line 2) | const S_ISGID = parseInt('2000', 8) //   set-group-ID bit (see below)
  constant S_ISVTX (line 3) | const S_ISVTX = parseInt('1000', 8) //   sticky bit (see below)
  constant S_IRUSR (line 5) | const S_IRUSR = parseInt('400', 8) //    owner has read permission
  constant S_IWUSR (line 6) | const S_IWUSR = parseInt('200', 8) //    owner has write permission
  constant S_IXUSR (line 7) | const S_IXUSR = parseInt('100', 8) //    owner has execute permission
  constant S_IRGRP (line 9) | const S_IRGRP = parseInt('40', 8) //     group has read permission
  constant S_IWGRP (line 10) | const S_IWGRP = parseInt('20', 8) //     group has write permission
  constant S_IXGRP (line 11) | const S_IXGRP = parseInt('10', 8) //     group has execute permission
  constant S_IROTH (line 13) | const S_IROTH = parseInt('4', 8) //      others have read permission
  constant S_IWOTH (line 14) | const S_IWOTH = parseInt('2', 8) //      others have write permission
  constant S_IXOTH (line 15) | const S_IXOTH = parseInt('1', 8)
  function checkPermission (line 23) | function checkPermission (mode, perm, type, output) {
  function formatMode (line 36) | function formatMode (mode, isDirectory) {

FILE: packages/ipfs-core-utils/src/files/format-mtime.js
  function formatMtime (line 5) | function formatMtime (mtime) {

FILE: packages/ipfs-core-utils/src/files/normalise-candidate-multiple.js
  function toFileObject (line 100) | async function toFileObject (input, normaliseContent) {

FILE: packages/ipfs-core-utils/src/files/normalise-candidate-single.js
  function toFileObject (line 91) | async function toFileObject (input, normaliseContent) {

FILE: packages/ipfs-core-utils/src/files/normalise-content.browser.js
  function normaliseContent (line 14) | async function normaliseContent (input) {
  function itToBlob (line 67) | async function itToBlob (stream) {

FILE: packages/ipfs-core-utils/src/files/normalise-content.js
  function normaliseContent (line 25) | async function normaliseContent (input) {
  function toBytes (line 77) | function toBytes (chunk) {

FILE: packages/ipfs-core-utils/src/files/normalise-input-multiple.browser.js
  function normaliseInput (line 21) | function normaliseInput (input) {

FILE: packages/ipfs-core-utils/src/files/normalise-input-multiple.js
  function normaliseInput (line 19) | function normaliseInput (input) {

FILE: packages/ipfs-core-utils/src/files/normalise-input-single.browser.js
  function normaliseInput (line 21) | function normaliseInput (input) {

FILE: packages/ipfs-core-utils/src/files/normalise-input-single.js
  function normaliseInput (line 19) | function normaliseInput (input) {

FILE: packages/ipfs-core-utils/src/files/utils.js
  function isBytes (line 5) | function isBytes (obj) {
  function isBlob (line 13) | function isBlob (obj) {
  function isFileObject (line 25) | function isFileObject (obj) {

FILE: packages/ipfs-core-utils/src/mode-to-string.js
  function modeToString (line 5) | function modeToString (mode) {

FILE: packages/ipfs-core-utils/src/multibases.js
  class Multibases (line 12) | class Multibases {
    method constructor (line 18) | constructor (options) {
    method addBase (line 40) | addBase (base) {
    method removeBase (line 54) | removeBase (base) {
    method getBase (line 62) | async getBase (nameOrPrefix) {
    method listBases (line 81) | listBases () {

FILE: packages/ipfs-core-utils/src/multicodecs.js
  class Multicodecs (line 12) | class Multicodecs {
    method constructor (line 18) | constructor (options) {
    method addCodec (line 40) | addCodec (codec) {
    method removeCodec (line 54) | removeCodec (codec) {
    method getCodec (line 62) | async getCodec (code) {
    method listCodecs (line 79) | listCodecs () {

FILE: packages/ipfs-core-utils/src/multihashes.js
  class Multihashes (line 12) | class Multihashes {
    method constructor (line 18) | constructor (options) {
    method addHasher (line 40) | addHasher (hasher) {
    method removeHasher (line 54) | removeHasher (hasher) {
    method getHasher (line 62) | async getHasher (code) {
    method listHashers (line 79) | listHashers () {

FILE: packages/ipfs-core-utils/src/multipart-request.browser.js
  function multipartRequest (line 16) | async function multipartRequest (source, abortController, headers = {}) {

FILE: packages/ipfs-core-utils/src/multipart-request.js
  function multipartRequest (line 16) | async function multipartRequest (source, abortController, headers = {}, ...

FILE: packages/ipfs-core-utils/src/multipart-request.node.js
  function multipartRequest (line 23) | async function multipartRequest (source, abortController, headers = {}, ...

FILE: packages/ipfs-core-utils/src/pins/normalise-input.js
  function isIterable (line 24) | function isIterable (thing) {
  function isAsyncIterable (line 32) | function isAsyncIterable (thing) {
  function isCID (line 40) | function isCID (thing) {
  function toPin (line 178) | function toPin (input) {

FILE: packages/ipfs-core-utils/src/to-cid-and-path.js
  constant IPFS_PREFIX (line 4) | const IPFS_PREFIX = '/ipfs/'
  function toCidAndPath (line 10) | function toCidAndPath (string) {

FILE: packages/ipfs-core-utils/src/to-url-string.js
  function toUrlString (line 12) | function toUrlString (url) {

FILE: packages/ipfs-core-utils/src/types.ts
  type LoadBaseFn (line 5) | interface LoadBaseFn { (codeOrName: string): Promise<MultibaseCodec<any>> }
  type LoadCodecFn (line 6) | interface LoadCodecFn { (codeOrName: number | string): Promise<BlockCode...
  type LoadHasherFn (line 7) | interface LoadHasherFn { (codeOrName: number | string): Promise<Multihas...

FILE: packages/ipfs-core-utils/src/with-timeout-option.js
  function withTimeoutOption (line 15) | function withTimeoutOption (fn, optionsArgIndex) {

FILE: packages/ipfs-core-utils/test/files/normalise-input-multiple.spec.js
  constant BLOB (line 21) | let BLOB
  function verifyNormalisation (line 32) | async function verifyNormalisation (input) {
  function testContent (line 52) | async function testContent (input) {
  function testFailure (line 62) | async function testFailure (input, message) {
  function iterableOf (line 71) | function iterableOf (thing) {
  function asyncIterableOf (line 80) | function asyncIterableOf (thing) {
  function browserReadableStreamOf (line 89) | function browserReadableStreamOf (thing) {
  function testInputType (line 104) | function testInputType (content, name, { acceptStream, acceptContentStre...

FILE: packages/ipfs-core-utils/test/files/normalise-input-single.spec.js
  constant BLOB (line 21) | let BLOB
  function verifyNormalisation (line 32) | async function verifyNormalisation (input) {
  function testContent (line 52) | async function testContent (input) {
  function testFailure (line 62) | async function testFailure (input, message) {
  function iterableOf (line 71) | function iterableOf (thing) {
  function asyncIterableOf (line 80) | function asyncIterableOf (thing) {
  function browserReadableStreamOf (line 89) | function browserReadableStreamOf (thing) {
  function testInputType (line 104) | function testInputType (content, name, { acceptStream }) {

FILE: packages/ipfs-core-utils/test/pins/normalise-input.spec.js
  function verifyNormalisation (line 17) | async function verifyNormalisation (input, withOptions) {
  function iterableOf (line 34) | function iterableOf (thing) {
  function asyncIterableOf (line 43) | function asyncIterableOf (thing) {
  function testInputType (line 55) | function testInputType (content, name, withOptions) {

FILE: packages/ipfs-core/.aegir.js
  method before (line 21) | async before (options) {
  method after (line 56) | async after (options, before) {

FILE: packages/ipfs-core/src/block-storage.js
  class BlockStorage (line 23) | class BlockStorage extends BaseBlockstore {
    method constructor (line 30) | constructor (blockstore, bitswap) {
    method open (line 37) | open () {
    method close (line 41) | close () {
    method unwrap (line 45) | unwrap () {
    method put (line 56) | async put (cid, block, options = {}) {
    method putMany (line 74) | async * putMany (blocks, options = {}) {
    method get (line 90) | async get (cid, options = {}) {
    method getMany (line 104) | async * getMany (cids, options = {}) {
    method delete (line 133) | async delete (cid, options) {
    method deleteMany (line 143) | async * deleteMany (cids, options) {
    method has (line 151) | async has (cid, options = {}) {
    method query (line 159) | async * query (q, options = {}) {
    method queryKeys (line 167) | async * queryKeys (q, options = {}) {

FILE: packages/ipfs-core/src/components/add-all/index.js
  function createAddAll (line 30) | function createAddAll ({ repo, preload, hashers, options }) {
  function transformFile (line 140) | function transformFile (opts) {
  function preloadFile (line 175) | function preloadFile (preload, opts) {
  function pinFile (line 202) | function pinFile (repo, opts) {

FILE: packages/ipfs-core/src/components/add.js
  function createAdd (line 8) | function createAdd ({ addAll }) {

FILE: packages/ipfs-core/src/components/bitswap/index.js
  class BitswapAPI (line 13) | class BitswapAPI {
    method constructor (line 18) | constructor ({ network }) {

FILE: packages/ipfs-core/src/components/bitswap/stat.js
  function createStat (line 7) | function createStat ({ network }) {

FILE: packages/ipfs-core/src/components/bitswap/unwant.js
  function createUnwant (line 7) | function createUnwant ({ network }) {

FILE: packages/ipfs-core/src/components/bitswap/wantlist-for-peer.js
  function createWantlistForPeer (line 7) | function createWantlistForPeer ({ network }) {

FILE: packages/ipfs-core/src/components/bitswap/wantlist.js
  function createWantlist (line 7) | function createWantlist ({ network }) {

FILE: packages/ipfs-core/src/components/block/get.js
  function createGet (line 8) | function createGet ({ preload, repo }) {

FILE: packages/ipfs-core/src/components/block/index.js
  class BlockAPI (line 10) | class BlockAPI {
    method constructor (line 18) | constructor ({ codecs, hashers, preload, repo }) {

FILE: packages/ipfs-core/src/components/block/put.js
  function createPut (line 16) | function createPut ({ codecs, hashers, repo, preload }) {

FILE: packages/ipfs-core/src/components/block/rm.js
  constant BLOCK_RM_CONCURRENCY (line 9) | const BLOCK_RM_CONCURRENCY = 8
  function createRm (line 15) | function createRm ({ repo }) {

FILE: packages/ipfs-core/src/components/block/stat.js
  function createStat (line 10) | function createStat ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/block/utils.js
  function cleanCid (line 6) | function cleanCid (cid) {

FILE: packages/ipfs-core/src/components/bootstrap/add.js
  function createAdd (line 8) | function createAdd ({ repo }) {

FILE: packages/ipfs-core/src/components/bootstrap/clear.js
  function createClear (line 8) | function createClear ({ repo }) {

FILE: packages/ipfs-core/src/components/bootstrap/index.js
  class BootstrapAPI (line 6) | class BootstrapAPI {
    method constructor (line 11) | constructor ({ repo }) {

FILE: packages/ipfs-core/src/components/bootstrap/list.js
  function createList (line 8) | function createList ({ repo }) {

FILE: packages/ipfs-core/src/components/bootstrap/reset.js
  function createReset (line 9) | function createReset ({ repo }) {

FILE: packages/ipfs-core/src/components/bootstrap/rm.js
  function createRm (line 8) | function createRm ({ repo }) {

FILE: packages/ipfs-core/src/components/bootstrap/utils.js
  function isValidMultiaddr (line 6) | function isValidMultiaddr (ma) {

FILE: packages/ipfs-core/src/components/cat.js
  function createCat (line 13) | function createCat ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/config/index.js
  function createConfig (line 11) | function createConfig ({ repo }) {
  function listProfiles (line 93) | async function listProfiles (_options) { // eslint-disable-line require-...

FILE: packages/ipfs-core/src/components/dag/export.js
  constant NO_LINKS_CODECS (line 14) | const NO_LINKS_CODECS = [
  function createExport (line 40) | function createExport ({ repo, preload, codecs }) {
  function makeLoader (line 97) | function makeLoader (repo, writer, options, codecs) {

FILE: packages/ipfs-core/src/components/dag/get.js
  function createGet (line 13) | function createGet ({ codecs, repo, preload }) {

FILE: packages/ipfs-core/src/components/dag/import.js
  function createImport (line 20) | function createImport ({ repo }) {
  function importCar (line 91) | async function importCar (repo, options, source) {

FILE: packages/ipfs-core/src/components/dag/index.js
  class DagAPI (line 7) | class DagAPI {
    method constructor (line 15) | constructor ({ repo, codecs, hashers, preload }) {

FILE: packages/ipfs-core/src/components/dag/put.js
  function createPut (line 11) | function createPut ({ repo, codecs, hashers, preload }) {

FILE: packages/ipfs-core/src/components/dag/resolve.js
  function createResolve (line 11) | function createResolve ({ repo, codecs, preload }) {

FILE: packages/ipfs-core/src/components/dht.js
  constant IPNS_PREFIX (line 17) | const IPNS_PREFIX = '/ipns/'
  function toDHTKey (line 22) | function toDHTKey (str) {
  function createDht (line 72) | function createDht ({ network, repo, peerId }) {

FILE: packages/ipfs-core/src/components/dns.js
  function fqdnFixups (line 9) | function fqdnFixups (domain) {
  function createDns (line 18) | function createDns () {

FILE: packages/ipfs-core/src/components/files/chmod.js
  function calculateModification (line 55) | function calculateModification (mode, originalMode, isDirectory) {
  function calculateUGO (line 77) | function calculateUGO (references, modification) {
  function calculateSpecial (line 100) | function calculateSpecial (references, mode, modification) {
  function parseSymbolicMode (line 125) | function parseSymbolicMode (input, originalMode, isDirectory) {
  function calculateMode (line 195) | function calculateMode (mode, metadata) {
  function createChmod (line 214) | function createChmod (context) {

FILE: packages/ipfs-core/src/components/files/cp.js
  function createCp (line 48) | function createCp (context) {

FILE: packages/ipfs-core/src/components/files/flush.js
  function createFlush (line 22) | function createFlush (context) {

FILE: packages/ipfs-core/src/components/files/index.js
  function createMfs (line 86) | function createMfs (options) {
  function createFiles (line 132) | function createFiles ({ repo, preload, hashers, options: constructorOpti...

FILE: packages/ipfs-core/src/components/files/ls.js
  function createLs (line 34) | function createLs (context) {

FILE: packages/ipfs-core/src/components/files/mkdir.js
  function createMkdir (line 48) | function createMkdir (context) {

FILE: packages/ipfs-core/src/components/files/mv.js
  function createMv (line 35) | function createMv (context) {

FILE: packages/ipfs-core/src/components/files/read.js
  function createRead (line 29) | function createRead (context) {

FILE: packages/ipfs-core/src/components/files/rm.js
  function createRm (line 39) | function createRm (context) {

FILE: packages/ipfs-core/src/components/files/stat.js
  function createStat (line 34) | function createStat (context) {

FILE: packages/ipfs-core/src/components/files/touch.js
  function createTouch (line 44) | function createTouch (context) {

FILE: packages/ipfs-core/src/components/files/utils/add-link.js
  function addLink (line 41) | async function addLink (context, options) {

FILE: packages/ipfs-core/src/components/files/utils/create-lock.js
  function createLock (line 15) | function createLock (repoOwner = false) {

FILE: packages/ipfs-core/src/components/files/utils/create-node.js
  function createNode (line 21) | async function createNode (context, type, options) {

FILE: packages/ipfs-core/src/components/files/utils/dir-sharded.js
  class Dir (line 48) | class Dir {
    method constructor (line 53) | constructor (props, options) {
    method put (line 75) | async put (name, value) { }
    method get (line 80) | get (name) {
    method eachChildSeries (line 87) | async * eachChildSeries () { }
    method flush (line 92) | async * flush (blockstore) { }
  class DirSharded (line 95) | class DirSharded extends Dir {
    method constructor (line 100) | constructor (props, options) {
    method put (line 114) | async put (name, value) {
    method get (line 121) | get (name) {
    method childCount (line 125) | childCount () {
    method directChildrenCount (line 129) | directChildrenCount () {
    method onlyChild (line 133) | onlyChild () {
    method eachChildSeries (line 137) | async * eachChildSeries () {
    method flush (line 150) | async * flush (blockstore) {

FILE: packages/ipfs-core/src/components/files/utils/hamt-constants.js
  function hamtHashFn (line 9) | async function hamtHashFn (buf) {

FILE: packages/ipfs-core/src/components/files/utils/remove-link.js
  function removeLink (line 42) | async function removeLink (context, options) {

FILE: packages/ipfs-core/src/components/files/utils/to-async-iterator.js
  function toAsyncIterator (line 11) | function toAsyncIterator (content) {

FILE: packages/ipfs-core/src/components/files/utils/to-mfs-path.js
  constant IPFS_PREFIX (line 7) | const IPFS_PREFIX = 'ipfs'

FILE: packages/ipfs-core/src/components/files/utils/to-path-components.js
  function toPathComponents (line 5) | function toPathComponents (path = '') {

FILE: packages/ipfs-core/src/components/files/utils/to-trail.js
  function toTrail (line 22) | async function toTrail (context, path) {

FILE: packages/ipfs-core/src/components/files/utils/update-mfs-root.js
  function updateMfsRoot (line 18) | async function updateMfsRoot (context, cid, options) {

FILE: packages/ipfs-core/src/components/files/utils/update-tree.js
  function updateTree (line 31) | async function updateTree (context, trail, options) {

FILE: packages/ipfs-core/src/components/files/utils/with-mfs-root.js
  function loadMfsRoot (line 19) | async function loadMfsRoot (context, options) {

FILE: packages/ipfs-core/src/components/files/write.js
  function createWrite (line 83) | function createWrite (context) {

FILE: packages/ipfs-core/src/components/get.js
  constant DEFAULT_COMPRESSION_LEVEL (line 12) | const DEFAULT_COMPRESSION_LEVEL = 6
  function createGet (line 21) | function createGet ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/id.js
  function createId (line 22) | function createId ({ peerId, network }) {
  function findPeer (line 87) | async function findPeer (peerId, libp2p, options) {
  function findPeerOnDht (line 117) | async function findPeerOnDht (peerId, libp2p, options) {

FILE: packages/ipfs-core/src/components/index.js
  constant IPNS_INIT_KEYSPACE_TIMEOUT (line 56) | const IPNS_INIT_KEYSPACE_TIMEOUT = 30000
  class IPFS (line 67) | class IPFS {
    method constructor (line 75) | constructor ({ print, storage, codecs, options }) {
    method init (line 234) | async init () { // eslint-disable-line require-await
  function create (line 278) | async function create (options = {}) {

FILE: packages/ipfs-core/src/components/ipns.js
  class IPNSAPI (line 23) | class IPNSAPI {
    method constructor (line 31) | constructor (options = { pass: '' }) {
    method getIPNS (line 41) | getIPNS () {
    method routing (line 50) | get routing () {
    method startOffline (line 66) | startOffline ({ repo, peerId, keychain }) {
    method startOnline (line 86) | async startOnline ({ libp2p, repo, peerId, keychain }) {
    method stop (line 98) | async stop () {
    method publish (line 112) | publish (peerId, value, lifetime, options) {
    method resolve (line 124) | resolve (name, options) {
    method initializeKeyspace (line 133) | initializeKeyspace (peerId, value, options) {

FILE: packages/ipfs-core/src/components/is-online.js
  function createIsOnline (line 6) | function createIsOnline ({ network }) {

FILE: packages/ipfs-core/src/components/key/export.js
  function createExport (line 7) | function createExport ({ keychain }) {

FILE: packages/ipfs-core/src/components/key/gen.js
  constant DEFAULT_KEY_TYPE (line 3) | const DEFAULT_KEY_TYPE = 'Ed25519'
  constant DEFAULT_KEY_SIZE (line 4) | const DEFAULT_KEY_SIZE = 2048
  function createGen (line 10) | function createGen ({ keychain }) {

FILE: packages/ipfs-core/src/components/key/import.js
  function createImport (line 7) | function createImport ({ keychain }) {

FILE: packages/ipfs-core/src/components/key/index.js
  class KeyAPI (line 13) | class KeyAPI {
    method constructor (line 18) | constructor ({ keychain }) {

FILE: packages/ipfs-core/src/components/key/info.js
  function createInfo (line 7) | function createInfo ({ keychain }) {

FILE: packages/ipfs-core/src/components/key/list.js
  function createList (line 7) | function createList ({ keychain }) {

FILE: packages/ipfs-core/src/components/key/rename.js
  function createRename (line 7) | function createRename ({ keychain }) {

FILE: packages/ipfs-core/src/components/key/rm.js
  function createRm (line 7) | function createRm ({ keychain }) {

FILE: packages/ipfs-core/src/components/libp2p.js
  function createLibp2p (line 51) | function createLibp2p ({
  function getLibp2pOptions (line 90) | function getLibp2pOptions ({ options, config, datastore, keychainConfig,...

FILE: packages/ipfs-core/src/components/ls.js
  function createLs (line 14) | function createLs ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/name/index.js
  class NameAPI (line 5) | class NameAPI {
    method constructor (line 17) | constructor ({ dns, ipns, repo, codecs, peerId, isOnline, keychain, op...

FILE: packages/ipfs-core/src/components/name/publish.js
  function createPublish (line 25) | function createPublish ({ ipns, repo, codecs, peerId, isOnline, keychain...

FILE: packages/ipfs-core/src/components/name/pubsub/cancel.js
  function createCancel (line 9) | function createCancel ({ ipns, options }) {

FILE: packages/ipfs-core/src/components/name/pubsub/index.js
  class PubSubAPI (line 5) | class PubSubAPI {
    method constructor (line 11) | constructor ({ ipns, options }) {

FILE: packages/ipfs-core/src/components/name/pubsub/state.js
  function createState (line 9) | function createState ({ ipns, options }) {

FILE: packages/ipfs-core/src/components/name/pubsub/subs.js
  function createSubs (line 9) | function createSubs ({ ipns, options }) {

FILE: packages/ipfs-core/src/components/name/pubsub/utils.js
  function getPubsubRouting (line 15) | function getPubsubRouting (ipns, options) {

FILE: packages/ipfs-core/src/components/name/resolve.js
  function createResolve (line 37) | function createResolve ({ dns, ipns, isOnline, options: { offline } }) {

FILE: packages/ipfs-core/src/components/name/utils.js
  function resolvePath (line 17) | async function resolvePath ({ ipns, repo, codecs }, name, options) {

FILE: packages/ipfs-core/src/components/network.js
  class Network (line 30) | class Network {
    method constructor (line 38) | constructor (peerId, libp2p, bitswap, repo, blockstore) {
    method start (line 49) | static async start ({ peerId, repo, print, hashers, options }) {
    method stop (line 93) | static async stop (network) {
  constant WEBSOCKET_STAR_PROTO_CODE (line 135) | const WEBSOCKET_STAR_PROTO_CODE = 479

FILE: packages/ipfs-core/src/components/object/data.js
  function createData (line 9) | function createData ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/object/get.js
  function createGet (line 9) | function createGet ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/object/index.js
  class ObjectAPI (line 15) | class ObjectAPI {
    method constructor (line 22) | constructor ({ repo, codecs, preload }) {

FILE: packages/ipfs-core/src/components/object/links.js
  function findLinks (line 17) | function findLinks (node, links = []) {
  function createLinks (line 62) | function createLinks ({ repo, codecs }) {

FILE: packages/ipfs-core/src/components/object/new.js
  function createNew (line 12) | function createNew ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/object/patch/add-link.js
  function createAddLink (line 10) | function createAddLink ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/object/patch/append-data.js
  function createAppendData (line 11) | function createAppendData ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/object/patch/index.js
  class ObjectPatchAPI (line 10) | class ObjectPatchAPI {
    method constructor (line 16) | constructor ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/object/patch/rm-link.js
  function createRmLink (line 10) | function createRmLink ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/object/patch/set-data.js
  function createSetData (line 10) | function createSetData ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/object/put.js
  function createPut (line 11) | function createPut ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/object/stat.js
  function createStat (line 10) | function createStat ({ repo, preload }) {

FILE: packages/ipfs-core/src/components/pin/add-all.js
  function createAddAll (line 25) | function createAddAll ({ repo, codecs }) {

FILE: packages/ipfs-core/src/components/pin/add.js
  function createAdd (line 8) | function createAdd ({ addAll }) {

FILE: packages/ipfs-core/src/components/pin/index.js
  class PinAPI (line 7) | class PinAPI {
    method constructor (line 13) | constructor ({ codecs, repo }) {

FILE: packages/ipfs-core/src/components/pin/ls.js
  function toPin (line 18) | function toPin (type, cid, metadata) {
  function createLs (line 37) | function createLs ({ repo, codecs }) {

FILE: packages/ipfs-core/src/components/pin/rm-all.js
  function createRmAll (line 11) | function createRmAll ({ repo, codecs }) {

FILE: packages/ipfs-core/src/components/pin/rm.js
  function createRm (line 7) | function createRm ({ rmAll }) {

FILE: packages/ipfs-core/src/components/ping.js
  function createPing (line 39) | function createPing ({ network }) {

FILE: packages/ipfs-core/src/components/pubsub.js
  function createPubsub (line 17) | function createPubsub ({ network, config }) {

FILE: packages/ipfs-core/src/components/refs/index.js
  constant ERR_NOT_FOUND (line 8) | const ERR_NOT_FOUND = notFoundError().code
  function createRefs (line 35) | function createRefs ({ repo, codecs, resolve, preload }) {
  function getFullPath (line 90) | function getFullPath (preload, ipfsPath, options) {
  function formatLink (line 150) | function formatLink (srcCid, dstCid, linkName = '', format = Format.defa...

FILE: packages/ipfs-core/src/components/refs/local.js
  function createLocal (line 7) | function createLocal ({ repo }) {

FILE: packages/ipfs-core/src/components/repo/gc.js
  function createGc (line 23) | function createGc ({ repo, hashers }) {

FILE: packages/ipfs-core/src/components/repo/index.js
  class RepoAPI (line 10) | class RepoAPI {
    method constructor (line 16) | constructor ({ repo, hashers }) {

FILE: packages/ipfs-core/src/components/repo/stat.js
  function createStat (line 7) | function createStat ({ repo }) {

FILE: packages/ipfs-core/src/components/repo/version.js
  function createVersion (line 8) | function createVersion ({ repo }) {

FILE: packages/ipfs-core/src/components/resolve.js
  function createResolve (line 14) | function createResolve ({ repo, codecs, bases, name }) {
  function parseBytes (line 66) | function parseBytes (str) {

FILE: packages/ipfs-core/src/components/root.js
  class RootAPI (line 14) | class RootAPI {
    method constructor (line 18) | constructor ({ preload, repo, hashers, options }) {

FILE: packages/ipfs-core/src/components/start.js
  function createStart (line 16) | function createStart ({ network, preload, peerId, keychain, repo, ipns, ...

FILE: packages/ipfs-core/src/components/stats/bw.js
  function getBandwidthStats (line 18) | function getBandwidthStats (libp2p, opts) {
  function createBw (line 57) | function createBw ({ network }) {

FILE: packages/ipfs-core/src/components/stats/index.js
  class StatsAPI (line 5) | class StatsAPI {
    method constructor (line 11) | constructor ({ repo, network }) {

FILE: packages/ipfs-core/src/components/stop.js
  function createStop (line 11) | function createStop ({ network, preload, ipns, repo, mfsPreload }) {

FILE: packages/ipfs-core/src/components/storage.js
  class Storage (line 32) | class Storage {
    method constructor (line 41) | constructor (peerId, keychain, repo, print, isNew) {
    method start (line 55) | static async start (print, codecs, options) {

FILE: packages/ipfs-core/src/components/swarm/addrs.js
  function createAddrs (line 11) | function createAddrs ({ network }) {

FILE: packages/ipfs-core/src/components/swarm/connect.js
  function createConnect (line 7) | function createConnect ({ network }) {

FILE: packages/ipfs-core/src/components/swarm/disconnect.js
  function createDisconnect (line 7) | function createDisconnect ({ network }) {

FILE: packages/ipfs-core/src/components/swarm/index.js
  class SwarmAPI (line 7) | class SwarmAPI {
    method constructor (line 12) | constructor ({ network }) {

FILE: packages/ipfs-core/src/components/swarm/local-addrs.js
  function createLocalAddrs (line 7) | function createLocalAddrs ({ network }) {

FILE: packages/ipfs-core/src/components/swarm/peers.js
  function createPeers (line 11) | function createPeers ({ network }) {

FILE: packages/ipfs-core/src/components/version.js
  function createVersion (line 8) | function createVersion ({ repo }) {

FILE: packages/ipfs-core/src/errors.js
  class NotInitializedError (line 2) | class NotInitializedError extends Error {
    method constructor (line 3) | constructor (message = 'not initialized') {
  class AlreadyInitializingError (line 11) | class AlreadyInitializingError extends Error {
    method constructor (line 12) | constructor (message = 'cannot initialize an initializing node') {
  class AlreadyInitializedError (line 20) | class AlreadyInitializedError extends Error {
    method constructor (line 21) | constructor (message = 'cannot re-initialize an initialized node') {
  class NotStartedError (line 29) | class NotStartedError extends Error {
    method constructor (line 30) | constructor (message = 'not started') {
  class AlreadyStartingError (line 38) | class AlreadyStartingError extends Error {
    method constructor (line 39) | constructor (message = 'cannot start, already startin') {
  class AlreadyStartedError (line 47) | class AlreadyStartedError extends Error {
    method constructor (line 48) | constructor (message = 'cannot start, already started') {
  class NotEnabledError (line 56) | class NotEnabledError extends Error {
    method constructor (line 57) | constructor (message = 'not enabled') {

FILE: packages/ipfs-core/src/ipns/index.js
  class IPNS (line 18) | class IPNS {
    method constructor (line 29) | constructor (routing, datastore, peerId, keychain, options) {
    method publish (line 45) | async publish (peerId, value, lifetime = IpnsPublisher.defaultRecordLi...
    method resolve (line 81) | async resolve (name, options = {}) {
    method initializeKeyspace (line 119) | async initializeKeyspace (peerId, value, options) { // eslint-disable-...

FILE: packages/ipfs-core/src/ipns/publisher.js
  constant ERR_NOT_FOUND (line 19) | const ERR_NOT_FOUND = notFoundError().code
  class IpnsPublisher (line 23) | class IpnsPublisher {
    method constructor (line 28) | constructor (routing, datastore) {
    method publishWithEOL (line 41) | async publishWithEOL (peerId, value, lifetime, options) {
    method publish (line 54) | publish (peerId, value, options) {
    method _putRecordToRouting (line 63) | async _putRecordToRouting (record, peerId, options) {
    method _publishEntry (line 87) | async _publishEntry (key, entry, options) {
    method _getPublished (line 112) | async _getPublished (peerId, options = {}) {
    method _unmarshalData (line 158) | _unmarshalData (data) {
    method _updateOrCreateRecord (line 172) | async _updateOrCreateRecord (peerId, value, lifetime, options) {

FILE: packages/ipfs-core/src/ipns/republisher.js
  class IpnsRepublisher (line 23) | class IpnsRepublisher {
    method constructor (line 34) | constructor (publisher, datastore, peerId, keychain, options = { pass:...
    method start (line 43) | async start () { // eslint-disable-line require-await
    method stop (line 116) | async stop () {
    method _republishEntries (line 133) | async _republishEntries (peerId, pass, options) {
    method _republishEntry (line 171) | async _republishEntry (peerId, options) {
    method _getPreviousValue (line 187) | async _getPreviousValue (peerId) {

FILE: packages/ipfs-core/src/ipns/resolver.js
  constant ERR_NOT_FOUND (line 18) | const ERR_NOT_FOUND = Errors.notFoundError().code
  class IpnsResolver (line 22) | class IpnsResolver {
    method constructor (line 26) | constructor (routing) {
    method resolve (line 36) | async resolve (name, options = {}) {
    method resolver (line 72) | async resolver (name, depth, options) {
    method _resolveName (line 99) | async _resolveName (name, options) {
    method _validateRecord (line 126) | async _validateRecord (peerId, record) {

FILE: packages/ipfs-core/src/ipns/routing/config.js
  function createRouting (line 18) | function createRouting ({ libp2p, repo, peerId, options }) {

FILE: packages/ipfs-core/src/ipns/routing/dht-datastore.js
  class DHTDatastore (line 11) | class DHTDatastore {
    method constructor (line 16) | constructor (dht) {
    method put (line 25) | async put (key, value, options) {
    method get (line 38) | async get (key, options) {

FILE: packages/ipfs-core/src/ipns/routing/offline-datastore.js
  class OfflineDatastore (line 15) | class OfflineDatastore {
    method constructor (line 19) | constructor (datastore) {
    method put (line 32) | async put (key, value, options) { // eslint-disable-line require-await
    method get (line 62) | async get (key, options) {
    method _routingKey (line 95) | _routingKey (key) {

FILE: packages/ipfs-core/src/ipns/routing/pubsub-datastore.js
  class IpnsPubsubDatastore (line 19) | class IpnsPubsubDatastore {
    method constructor (line 25) | constructor (pubsub, localDatastore, peerId) {
    method put (line 42) | async put (key, value, options) {
    method get (line 59) | async get (key, options) {
    method _handleSubscriptionKey (line 94) | _handleSubscriptionKey (key) {
    method getSubscriptions (line 117) | getSubscriptions () {
    method cancel (line 128) | async cancel (name) { // eslint-disable-line require-await

FILE: packages/ipfs-core/src/mfs-preload.js
  function createMfsPreloader (line 18) | function createMfsPreloader ({ preload, files, options = {} }) {

FILE: packages/ipfs-core/src/preload.js
  function createPreloader (line 12) | function createPreloader (options = {}) {

FILE: packages/ipfs-core/src/types.ts
  type Options (line 15) | interface Options {
  type Libp2pFactoryFnArgs (line 132) | interface Libp2pFactoryFnArgs {
  type Libp2pFactoryFn (line 140) | interface Libp2pFactoryFn {
  type InitOptions (line 147) | interface InitOptions {
  type RelayOptions (line 180) | interface RelayOptions {
  type PreloadOptions (line 199) | interface PreloadOptions {
  type ExperimentalOptions (line 217) | interface ExperimentalOptions {
  type Print (line 234) | interface Print { (...args: any[]): void }
  type Preload (line 236) | interface Preload {
  type MfsPreload (line 242) | interface MfsPreload {
  type NetworkService (line 247) | type NetworkService = Service<NetworkOptions, Network>
  type LoadBaseFn (line 249) | interface LoadBaseFn { (codeOrName: number | string): Promise<MultibaseC...
  type LoadCodecFn (line 250) | interface LoadCodecFn { (codeOrName: number | string): Promise<BlockCode...
  type LoadHasherFn (line 251) | interface LoadHasherFn { (codeOrName: number | string): Promise<Multihas...
  type IPLDOptions (line 253) | interface IPLDOptions {

FILE: packages/ipfs-core/src/utils.js
  constant ERR_BAD_PATH (line 16) | const ERR_BAD_PATH = 'ERR_BAD_PATH'
  constant OFFLINE_ERROR (line 18) | const OFFLINE_ERROR = 'This command must be run in online mode. Try runn...
  constant MFS_ROOT_KEY (line 19) | const MFS_ROOT_KEY = new Key('/local/filesroot')
  constant MFS_MAX_CHUNK_SIZE (line 20) | const MFS_MAX_CHUNK_SIZE = 262144
  constant MFS_MAX_LINKS (line 21) | const MFS_MAX_LINKS = 174

FILE: packages/ipfs-core/src/utils/service.js
  class Service (line 41) | class Service {
    method create (line 53) | static create ({ start, stop }) {
    method start (line 66) | static async start (service, options) {
    method stop (line 120) | static async stop (service) {
    method try (line 156) | static try ({ state }) {
    method use (line 175) | static async use ({ state }, options) {
    method panic (line 192) | static panic ({ state }) {
    method constructor (line 205) | constructor (activate, deactivate) {
    method use (line 227) | async use (options) {
    method try (line 234) | try () {

FILE: packages/ipfs-core/src/utils/tlru.js
  class TLRU (line 12) | class TLRU {
    method constructor (line 18) | constructor (maxSize) {
    method get (line 29) | get (key) {
    method set (line 49) | set (key, value, ttl) {
    method has (line 59) | has (key) {
    method remove (line 72) | remove (key) {
    method clear (line 81) | clear () {

FILE: packages/ipfs-core/test/block-storage.spec.js
  class MockBitswap (line 12) | class MockBitswap extends MemoryBlockstore {
    method constructor (line 16) | constructor (started) {

FILE: packages/ipfs-core/test/create-node.spec.js
  function createNode (line 230) | function createNode (repo) {

FILE: packages/ipfs-core/test/utils/clean.js
  function clean (line 9) | async function clean (dir) {

FILE: packages/ipfs-core/test/utils/create-backend.js
  function createBackend (line 4) | function createBackend (overrides = {}) {

FILE: packages/ipfs-core/test/utils/create-repo.js
  function createTempRepo (line 18) | async function createTempRepo (options = {}) {

FILE: packages/ipfs-core/test/utils/mock-preload-node-utils.js
  function getPreloadCids (line 21) | async function getPreloadCids (addr) {
  function clearPreloadCids (line 31) | function clearPreloadCids (addr) {
  function waitForCids (line 43) | async function waitForCids (cids, opts) {

FILE: packages/ipfs-core/test/utils/mock-preload-node.js
  function createNode (line 13) | function createNode () {

FILE: packages/ipfs-core/test/utils/wait-for.js
  function waitFor (line 13) | async function waitFor (test, options) {

FILE: packages/ipfs-daemon/src/index.js
  class Daemon (line 12) | class Daemon {
    method constructor (line 16) | constructor (options = {}) {
    method start (line 27) | async start () {
    method stop (line 51) | async stop () {
  function getLibp2p (line 68) | async function getLibp2p ({ libp2pOptions }) {

FILE: packages/ipfs-daemon/test/index.spec.js
  function createDaemon (line 9) | function createDaemon () {

FILE: packages/ipfs-grpc-client/src/core-api/add-all.js
  function sendDirectory (line 13) | function sendDirectory (index, sink, path, mode, mtime) {
  function sendFile (line 45) | async function sendFile (index, sink, content, path, mode, mtime) {
  function sendFiles (line 90) | async function sendFiles (stream, sink) {
  function grpcAddAll (line 112) | function grpcAddAll (grpc, service, opts) {

FILE: packages/ipfs-grpc-client/src/core-api/files/ls.js
  function grpcMfsLs (line 10) | function grpcMfsLs (grpc, service, opts) {

FILE: packages/ipfs-grpc-client/src/core-api/files/write.js
  function grpcMfsWrite (line 24) | function grpcMfsWrite (grpc, service, opts) {

FILE: packages/ipfs-grpc-client/src/core-api/id.js
  function grpcId (line 11) | function grpcId (grpc, service, opts) {

FILE: packages/ipfs-grpc-client/src/core-api/pubsub/subscribe.js
  function grpcPubsubSubscribe (line 13) | function grpcPubsubSubscribe (grpc, service, opts) {

FILE: packages/ipfs-grpc-client/src/core-api/pubsub/unsubscribe.js
  function grpcPubsubUnsubscribe (line 11) | function grpcPubsubUnsubscribe (grpc, service, opts) {

FILE: packages/ipfs-grpc-client/src/grpc/transport.js
  function transport (line 5) | function transport () {

FILE: packages/ipfs-grpc-client/src/grpc/transport.node.js
  function WebsocketTransport (line 24) | function WebsocketTransport (options) {
  function websocketRequest (line 46) | function websocketRequest (options) {
  function constructWebSocketAddress (line 131) | function constructWebSocketAddress (url) {
  function headersToBytes (line 148) | function headersToBytes (headers) {
  function encodeASCII (line 159) | function encodeASCII (input) {
  function isValidHeaderAscii (line 179) | function isValidHeaderAscii (val) {

FILE: packages/ipfs-grpc-client/src/index.js
  function normaliseUrls (line 26) | function normaliseUrls (opts) {
  function create (line 37) | function create (opts = { url: '' }) {

FILE: packages/ipfs-grpc-client/src/types.ts
  type Options (line 5) | interface Options {
  type RPCOptions (line 10) | interface RPCOptions<Metadata> {

FILE: packages/ipfs-grpc-client/src/utils/bidi-to-duplex.js
  function sendMessages (line 12) | async function sendMessages (service, client, source) {
  function bidiToDuplex (line 30) | function bidiToDuplex (grpc, service, options) {

FILE: packages/ipfs-grpc-client/src/utils/client-stream-to-promise.js
  function clientStreamToPromise (line 20) | async function clientStreamToPromise (grpc, service, source, options) {

FILE: packages/ipfs-grpc-client/src/utils/load-services.js
  constant CONVERSION_OPTS (line 7) | const CONVERSION_OPTS = {
  function loadServices (line 20) | function loadServices () {

FILE: packages/ipfs-grpc-client/src/utils/server-stream-to-iterator.js
  function serverStreamToIterator (line 19) | function serverStreamToIterator (grpc, service, request, options) {

FILE: packages/ipfs-grpc-client/src/utils/to-headers.js
  function toHeaders (line 6) | function toHeaders (object = {}) {

FILE: packages/ipfs-grpc-client/src/utils/unary-to-promise.js
  function unaryToPromise (line 20) | function unaryToPromise (grpc, service, request, options) {

FILE: packages/ipfs-grpc-client/test/agent.js
  function startServer (line 6) | function startServer () {
  method addRequest (line 35) | addRequest () {

FILE: packages/ipfs-grpc-server/src/endpoints/add.js
  function grpcAdd (line 9) | function grpcAdd (ipfs, options = {}) {

FILE: packages/ipfs-grpc-server/src/endpoints/id.js
  function grpcId (line 8) | function grpcId (ipfs, options = {}) {

FILE: packages/ipfs-grpc-server/src/endpoints/mfs/ls.js
  function grpcMfsLs (line 7) | function grpcMfsLs (ipfs, options = {}) {

FILE: packages/ipfs-grpc-server/src/endpoints/mfs/write.js
  function grpcMfsWrite (line 9) | function grpcMfsWrite (ipfs, options = {}) {

FILE: packages/ipfs-grpc-server/src/endpoints/pubsub/subscribe.js
  function grpcPubsubSubscribe (line 13) | function grpcPubsubSubscribe (ipfs, options = {}) {

FILE: packages/ipfs-grpc-server/src/endpoints/pubsub/unsubscribe.js
  function grpcPubsubUnsubscribe (line 8) | function grpcPubsubUnsubscribe (ipfs, options = {}) {

FILE: packages/ipfs-grpc-server/src/index.js
  function createServer (line 25) | async function createServer (ipfs, options = {}) {

FILE: packages/ipfs-grpc-server/src/types.ts
  type Options (line 5) | interface Options {
  type UnaryEndpoint (line 9) | interface UnaryEndpoint<InputMessage, OutputMessage, Metadata> { (input:...
  type BidirectionalStreamingEndpoint (line 10) | interface BidirectionalStreamingEndpoint<InputMessage, OutputMessage, Me...
  type ClientStreamingEndpoint (line 11) | interface ClientStreamingEndpoint<InputMessage, OutputMessage, Metadata>...
  type ServerStreamingEndpoint (line 12) | interface ServerStreamingEndpoint<InputMessage, OutputMessage, Metadata>...
  type WebsocketMessage (line 14) | interface WebsocketMessage {
  type WebsocketServerInfo (line 20) | interface WebsocketServerInfo {
  type WebsocketServer (line 25) | interface WebsocketServer extends EventEmitter {

FILE: packages/ipfs-grpc-server/src/utils/encode-mtime.js
  function encodeMtime (line 5) | function encodeMtime (mtime) {

FILE: packages/ipfs-grpc-server/src/utils/load-services.js
  constant CONVERSION_OPTS (line 6) | const CONVERSION_OPTS = {
  function loadServices (line 14) | function loadServices () {

FILE: packages/ipfs-grpc-server/src/utils/web-socket-message-channel.js
  constant HEADER_SIZE (line 9) | const HEADER_SIZE = 5
  constant TRAILER_BYTES (line 10) | const TRAILER_BYTES = 0x80
  class WebSocketMessageChannel (line 36) | class WebSocketMessageChannel {
    method constructor (line 40) | constructor (ws) {
    method sendMetadata (line 102) | sendMetadata (metadata) {
    method sendMessage (line 109) | sendMessage (message) {
    method sendTrailer (line 128) | sendTrailer (err) {
    method end (line 151) | end (err) {

FILE: packages/ipfs-grpc-server/src/utils/web-socket-server.js
  class Messages (line 32) | class Messages extends EventEmitter {
    method constructor (line 36) | constructor (wss) {
    method stop (line 69) | stop () {
    method ready (line 80) | ready () {
  function webSocketServer (line 110) | async function webSocketServer (ipfs, options = {}) {

FILE: packages/ipfs-grpc-server/test/utils/channel.js
  class MessageChannel (line 4) | class MessageChannel {
    method constructor (line 5) | constructor () {
    method sendMetadata (line 12) | sendMetadata (metadata) {
    method sendMessage (line 16) | sendMessage (message) {
    method sendTrailers (line 22) | sendTrailers (trailers) {
    method end (line 26) | end (error) {
    method clientSend (line 32) | clientSend (message) {
    method clientEnd (line 38) | clientEnd (err) {
  function createChannel (line 45) | function createChannel () {

FILE: packages/ipfs-grpc-server/test/utils/server.js
  function server (line 6) | function server ({ ipfs, options }) {

FILE: packages/ipfs-http-client/.aegir.js
  method before (line 10) | async before (options) {
  method after (line 29) | async after (options, before) {

FILE: packages/ipfs-http-client/src/add-all.js
  function toCoreInterface (line 113) | function toCoreInterface ({ name, hash, size, mode, mtime, mtimeNsecs }) {

FILE: packages/ipfs-http-client/src/add.js
  function createAdd (line 14) | function createAdd (options) {

FILE: packages/ipfs-http-client/src/bitswap/index.js
  function createBitswap (line 9) | function createBitswap (config) {

FILE: packages/ipfs-http-client/src/bitswap/stat.js
  function stat (line 15) | async function stat (options = {}) {
  function toCoreInterface (line 30) | function toCoreInterface (res) {

FILE: packages/ipfs-http-client/src/bitswap/unwant.js
  function unwant (line 13) | async function unwant (cid, options = {}) {

FILE: packages/ipfs-http-client/src/bitswap/wantlist-for-peer.js
  function wantlistForPeer (line 14) | async function wantlistForPeer (peerId, options = {}) {

FILE: packages/ipfs-http-client/src/bitswap/wantlist.js
  function wantlist (line 14) | async function wantlist (options = {}) {

FILE: packages/ipfs-http-client/src/block/get.js
  function get (line 13) | async function get (cid, options = {}) {

FILE: packages/ipfs-http-client/src/block/index.js
  function createBlock (line 9) | function createBlock (config) {

FILE: packages/ipfs-http-client/src/block/put.js
  function put (line 16) | async function put (data, options = {}) {

FILE: packages/ipfs-http-client/src/block/rm.js
  function toCoreInterface (line 41) | function toCoreInterface (removed) {

FILE: packages/ipfs-http-client/src/block/stat.js
  function stat (line 14) | async function stat (cid, options = {}) {

FILE: packages/ipfs-http-client/src/bootstrap/add.js
  function add (line 14) | async function add (addr, options = {}) {

FILE: packages/ipfs-http-client/src/bootstrap/clear.js
  function clear (line 14) | async function clear (options = {}) {

FILE: packages/ipfs-http-client/src/bootstrap/index.js
  function createBootstrap (line 10) | function createBootstrap (config) {

FILE: packages/ipfs-http-client/src/bootstrap/list.js
  function list (line 14) | async function list (options = {}) {

FILE: packages/ipfs-http-client/src/bootstrap/reset.js
  function reset (line 14) | async function reset (options = {}) {

FILE: packages/ipfs-http-client/src/bootstrap/rm.js
  function rm (line 14) | async function rm (addr, options = {}) {

FILE: packages/ipfs-http-client/src/config/index.js
  function createConfig (line 10) | function createConfig (config) {

FILE: packages/ipfs-http-client/src/config/profiles/apply.js
  function apply (line 13) | async function apply (profile, options = {}) {

FILE: packages/ipfs-http-client/src/config/profiles/index.js
  function createProfiles (line 7) | function createProfiles (config) {

FILE: packages/ipfs-http-client/src/config/profiles/list.js
  function list (line 14) | async function list (options = {}) {

FILE: packages/ipfs-http-client/src/dag/index.js
  function createDag (line 11) | function createDag (codecs, config) {

FILE: packages/ipfs-http-client/src/dht/index.js
  function createDht (line 11) | function createDht (config) {

FILE: packages/ipfs-http-client/src/diag/cmds.js
  function cmds (line 13) | async function cmds (options = {}) {

FILE: packages/ipfs-http-client/src/diag/index.js
  function createDiag (line 8) | function createDiag (config) {

FILE: packages/ipfs-http-client/src/diag/net.js
  function net (line 13) | async function net (options = {}) {

FILE: packages/ipfs-http-client/src/diag/sys.js
  function sys (line 13) | async function sys (options = {}) {

FILE: packages/ipfs-http-client/src/files/chmod.js
  function chmod (line 13) | async function chmod (path, mode, options = {}) {

FILE: packages/ipfs-http-client/src/files/cp.js
  function cp (line 14) | async function cp (sources, destination, options = {}) {

FILE: packages/ipfs-http-client/src/files/flush.js
  function flush (line 14) | async function flush (path, options = {}) {

FILE: packages/ipfs-http-client/src/files/index.js
  function createFiles (line 16) | function createFiles (config) {

FILE: packages/ipfs-http-client/src/files/ls.js
  function toCoreInterface (line 48) | function toCoreInterface (entry) {

FILE: packages/ipfs-http-client/src/files/mkdir.js
  function mkdir (line 13) | async function mkdir (path, options = {}) {

FILE: packages/ipfs-http-client/src/files/mv.js
  function mv (line 13) | async function mv (sources, destination, options = {}) {

FILE: packages/ipfs-http-client/src/files/rm.js
  function rm (line 14) | async function rm (path, options = {}) {

FILE: packages/ipfs-http-client/src/files/stat.js
  function stat (line 15) | async function stat (path, options = {}) {
  function toCoreInterface (line 35) | function toCoreInterface (entry) {

FILE: packages/ipfs-http-client/src/files/touch.js
  function touch (line 13) | async function touch (path, options = {}) {

FILE: packages/ipfs-http-client/src/files/write.js
  function write (line 17) | async function write (path, input, options = {}) {

FILE: packages/ipfs-http-client/src/id.js
  function id (line 16) | async function id (options = {}) {

FILE: packages/ipfs-http-client/src/index.js
  function create (line 65) | function create (options = {}) {

FILE: packages/ipfs-http-client/src/is-online.js
  function isOnline (line 17) | async function isOnline (options = {}) {

FILE: packages/ipfs-http-client/src/key/gen.js
  function gen (line 14) | async function gen (name, options) {

FILE: packages/ipfs-http-client/src/key/import.js
  function importKey (line 14) | async function importKey (name, pem, password, options = {}) {

FILE: packages/ipfs-http-client/src/key/index.js
  function createKey (line 12) | function createKey (config) {

FILE: packages/ipfs-http-client/src/key/list.js
  function list (line 14) | async function list (options = {}) {

FILE: packages/ipfs-http-client/src/key/rename.js
  function rename (line 14) | async function rename (oldName, newName, options = {}) {

FILE: packages/ipfs-http-client/src/key/rm.js
  function rm (line 14) | async function rm (name, options = {}) {

FILE: packages/ipfs-http-client/src/lib/abort-signal.js
  function filter (line 7) | function filter (signals) {
  function abortSignal (line 14) | function abortSignal (...signals) {

FILE: packages/ipfs-http-client/src/lib/core.js
  constant DEFAULT_PROTOCOL (line 16) | const DEFAULT_PROTOCOL = isBrowser || isWebWorker ? location.protocol : ...
  constant DEFAULT_HOST (line 17) | const DEFAULT_HOST = isBrowser || isWebWorker ? location.hostname : 'loc...
  constant DEFAULT_PORT (line 18) | const DEFAULT_PORT = isBrowser || isWebWorker ? location.port : '5001'
  constant KEBAB_REGEX (line 131) | const KEBAB_REGEX = /[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g
  class Client (line 149) | class Client extends HTTP {
    method constructor (line 153) | constructor (options = {}) {

FILE: packages/ipfs-http-client/src/lib/mode-to-string.js
  function modeToString (line 5) | function modeToString (mode) {

FILE: packages/ipfs-http-client/src/lib/object-to-camel-with-metadata.js
  function objectToCamelWithMetadata (line 6) | function objectToCamelWithMetadata (entry) {

FILE: packages/ipfs-http-client/src/lib/object-to-camel.js
  function objectToCamel (line 11) | function objectToCamel (obj) {

FILE: packages/ipfs-http-client/src/lib/parse-mtime.js
  function parseMtime (line 6) | function parseMtime (input) {

FILE: packages/ipfs-http-client/src/lib/to-url-search-params.js
  function toUrlSearchParams (line 8) | function toUrlSearchParams ({ arg, searchParams, hashAlg, mtime, mode, ....

FILE: packages/ipfs-http-client/src/log/index.js
  function createLog (line 8) | function createLog (config) {

FILE: packages/ipfs-http-client/src/log/level.js
  function level (line 14) | async function level (subsystem, level, options = {}) {

FILE: packages/ipfs-http-client/src/log/ls.js
  function ls (line 13) | async function ls (options = {}) {

FILE: packages/ipfs-http-client/src/ls.js
  function mapLink (line 21) | async function mapLink (link) {
  function typeOf (line 102) | function typeOf (link) {

FILE: packages/ipfs-http-client/src/mount.js
  function mount (line 14) | async function mount (options = {}) {

FILE: packages/ipfs-http-client/src/name/index.js
  function createName (line 8) | function createName (config) {

FILE: packages/ipfs-http-client/src/name/publish.js
  function publish (line 14) | async function publish (path, options = {}) {

FILE: packages/ipfs-http-client/src/name/pubsub/cancel.js
  function cancel (line 14) | async function cancel (name, options = {}) {

FILE: packages/ipfs-http-client/src/name/pubsub/index.js
  function createPubsub (line 8) | function createPubsub (config) {

FILE: packages/ipfs-http-client/src/name/pubsub/state.js
  function state (line 14) | async function state (options = {}) {

FILE: packages/ipfs-http-client/src/name/pubsub/subs.js
  function subs (line 13) | async function subs (options = {}) {

FILE: packages/ipfs-http-client/src/object/data.js
  function data (line 14) | async function data (cid, options = {}) {

FILE: packages/ipfs-http-client/src/object/get.js
  function get (line 15) | async function get (cid, options = {}) {

FILE: packages/ipfs-http-client/src/object/index.js
  function createObject (line 13) | function createObject (codecs, config) {

FILE: packages/ipfs-http-client/src/object/links.js
  function links (line 14) | async function links (cid, options = {}) {

FILE: packages/ipfs-http-client/src/object/new.js
  function newObject (line 14) | async function newObject (options = {}) {

FILE: packages/ipfs-http-client/src/object/patch/add-link.js
  function addLink (line 14) | async function addLink (cid, dLink, options = {}) {

FILE: packages/ipfs-http-client/src/object/patch/append-data.js
  function appendData (line 16) | async function appendData (cid, data, options = {}) {

FILE: packages/ipfs-http-client/src/object/patch/index.js
  function createPatch (line 9) | function createPatch (config) {

FILE: packages/ipfs-http-client/src/object/patch/rm-link.js
  function rmLink (line 14) | async function rmLink (cid, dLink, options = {}) {

FILE: packages/ipfs-http-client/src/object/patch/set-data.js
  function setData (line 16) | async function setData (cid, data, options = {}) {

FILE: packages/ipfs-http-client/src/object/put.js
  function put (line 20) | async function put (obj, options = {}) {

FILE: packages/ipfs-http-client/src/object/stat.js
  function stat (line 14) | async function stat (cid, options = {}) {

FILE: packages/ipfs-http-client/src/pin/add.js
  function createAdd (line 13) | function createAdd (config) {

FILE: packages/ipfs-http-client/src/pin/index.js
  function createPin (line 11) | function createPin (config) {

FILE: packages/ipfs-http-client/src/pin/ls.js
  function toPin (line 15) | function toPin (type, cid, metadata) {

FILE: packages/ipfs-http-client/src/pin/remote/add.js
  function createAdd (line 11) | function createAdd (client) {

FILE: packages/ipfs-http-client/src/pin/remote/index.js
  function createRemote (line 11) | function createRemote (config) {

FILE: packages/ipfs-http-client/src/pin/remote/ls.js
  function createLs (line 11) | function createLs (client) {

FILE: packages/ipfs-http-client/src/pin/remote/rm-all.js
  function createRmAll (line 11) | function createRmAll (client) {

FILE: packages/ipfs-http-client/src/pin/remote/rm.js
  function createRm (line 11) | function createRm (client) {

FILE: packages/ipfs-http-client/src/pin/remote/service/add.js
  function createAdd (line 12) | function createAdd (client) {

FILE: packages/ipfs-http-client/src/pin/remote/service/index.js
  function createService (line 9) | function createService (config) {

FILE: packages/ipfs-http-client/src/pin/remote/service/ls.js
  function createLs (line 12) | function createLs (client) {

FILE: packages/ipfs-http-client/src/pin/remote/service/rm.js
  function createRm (line 11) | function createRm (client) {

FILE: packages/ipfs-http-client/src/pin/remote/service/utils.js
  function encodeEndpoint (line 8) | function encodeEndpoint (url) {
  function decodeRemoteService (line 22) | function decodeRemoteService (json) {
  function decodeStat (line 34) | function decodeStat (json) {

FILE: packages/ipfs-http-client/src/pin/rm.js
  function rm (line 20) | async function rm (path, options = {}) {

FILE: packages/ipfs-http-client/src/pubsub/index.js
  function createPubsub (line 11) | function createPubsub (config) {

FILE: packages/ipfs-http-client/src/pubsub/ls.js
  function ls (line 14) | async function ls (options = {}) {

FILE: packages/ipfs-http-client/src/pubsub/peers.js
  function peers (line 14) | async function peers (topic, options = {}) {

FILE: packages/ipfs-http-client/src/pubsub/publish.js
  function publish (line 16) | async function publish (topic, data, options = {}) {

FILE: packages/ipfs-http-client/src/pubsub/subscribe.js
  function subscribe (line 25) | async function subscribe (topic, handler, options = {}) { // eslint-disa...
  function readMessages (line 100) | async function readMessages (response, { onMessage, onEnd, onError }) {

FILE: packages/ipfs-http-client/src/pubsub/subscription-tracker.js
  class SubscriptionTracker (line 11) | class SubscriptionTracker {
    method constructor (line 12) | constructor () {
    method subscribe (line 22) | subscribe (topic, handler, signal) {
    method unsubscribe (line 46) | unsubscribe (topic, handler) {

FILE: packages/ipfs-http-client/src/pubsub/unsubscribe.js
  function unsubscribe (line 16) | async function unsubscribe (topic, handler) {

FILE: packages/ipfs-http-client/src/repo/index.js
  function createRepo (line 8) | function createRepo (config) {

FILE: packages/ipfs-http-client/src/repo/stat.js
  function stat (line 13) | async function stat (options = {}) {

FILE: packages/ipfs-http-client/src/repo/version.js
  function version (line 13) | async function version (options = {}) {

FILE: packages/ipfs-http-client/src/resolve.js
  function resolve (line 13) | async function resolve (path, options = {}) {

FILE: packages/ipfs-http-client/src/stats/index.js
  function createStats (line 8) | function createStats (config) {

FILE: packages/ipfs-http-client/src/stop.js
  function stop (line 13) | async function stop (options = {}) {

FILE: packages/ipfs-http-client/src/swarm/addrs.js
  function addrs (line 15) | async function addrs (options = {}) {

FILE: packages/ipfs-http-client/src/swarm/connect.js
  function connect (line 13) | async function connect (addr, options = {}) {

FILE: packages/ipfs-http-client/src/swarm/disconnect.js
  function disconnect (line 13) | async function disconnect (addr, options = {}) {

FILE: packages/ipfs-http-client/src/swarm/index.js
  function createSwarm (line 10) | function createSwarm (config) {

FILE: packages/ipfs-http-client/src/swarm/local-addrs.js
  function localAddrs (line 14) | async function localAddrs (options = {}) {

FILE: packages/ipfs-http-client/src/swarm/peers.js
  function peers (line 15) | async function peers (options = {}) {

FILE: packages/ipfs-http-client/src/types.ts
  type Options (line 9) | interface Options {
  type LoadBaseFn (line 21) | interface LoadBaseFn { (codeOrName: number | string): Promise<MultibaseC...
  type LoadCodecFn (line 22) | interface LoadCodecFn { (codeOrName: number | string): Promise<BlockCode...
  type LoadHasherFn (line 23) | interface LoadHasherFn { (codeOrName: number | string): Promise<Multihas...
  type IPLDOptions (line 25) | interface IPLDOptions {
  type HTTPClientExtraOptions (line 34) | interface HTTPClientExtraOptions {
  type EndpointConfig (line 39) | interface EndpointConfig {
  type IPFSHTTPClient (line 47) | interface IPFSHTTPClient extends IPFS<HTTPClientExtraOptions> {

FILE: packages/ipfs-http-client/src/version.js
  function version (line 14) | async function version (options = {}) {

FILE: packages/ipfs-http-client/test/constructor.spec.js
  function clientWorks (line 185) | async function clientWorks (client) {
  function expectConfig (line 192) | function expectConfig (ipfs, { host, port, protocol, apiPath }) {

FILE: packages/ipfs-http-client/test/node/agent.js
  function startServer (line 13) | function startServer (handler) {

FILE: packages/ipfs-http-client/test/node/custom-headers.js
  function startServer (line 9) | function startServer (fn) {

FILE: packages/ipfs-http-client/test/ping.spec.js
  function isPong (line 10) | function isPong (pingResponse) {

FILE: packages/ipfs-http-client/test/utils/throws-async.js
  function throwsAsync (line 2) | async function throwsAsync (fnOrPromise) {

FILE: packages/ipfs-http-gateway/src/index.js
  constant LOG (line 7) | const LOG = 'ipfs:http-gateway'
  constant LOG_ERROR (line 8) | const LOG_ERROR = 'ipfs:http-gateway:error'
  function hapiInfoToMultiaddr (line 18) | function hapiInfoToMultiaddr (info) {
  function serverCreator (line 36) | async function serverCreator (serverAddrs, createServer, ipfs) {
  class HttpGateway (line 53) | class HttpGateway {
    method constructor (line 57) | constructor (ipfs) {
    method start (line 64) | async start () {
    method _createGatewayServer (line 82) | async _createGatewayServer (host, port, ipfs) {
    method stop (line 109) | async stop () {

FILE: packages/ipfs-http-gateway/src/resources/gateway.js
  method handler (line 24) | async handler (request, h) {
  method afterHandler (line 182) | afterHandler (request, h) {

FILE: packages/ipfs-http-gateway/src/types.ts
  type ServerApplicationState (line 6) | interface ServerApplicationState {
  type ServerInfo (line 9) | interface ServerInfo {

FILE: packages/ipfs-http-gateway/src/utils/path.js
  function splitPath (line 5) | function splitPath (path) {
  function removeLeadingSlash (line 16) | function removeLeadingSlash (url) {
  function removeTrailingSlash (line 27) | function removeTrailingSlash (url) {
  function removeSlashFromBothEnds (line 38) | function removeSlashFromBothEnds (url) {
  function joinURLParts (line 48) | function joinURLParts (...urls) {

FILE: packages/ipfs-http-gateway/test/utils/http.js
  function http (line 4) | async function http (request, { ipfs } = {}) {

FILE: packages/ipfs-http-response/src/dir-view/index.js
  function getParentHref (line 9) | function getParentHref (path) {
  function render (line 22) | function render (path, links) {

FILE: packages/ipfs-http-response/src/index.js
  function getResponse (line 62) | async function getResponse (ipfsNode, ipfsPath) {

FILE: packages/ipfs-http-response/src/resolver.js
  constant INDEX_HTML_FILES (line 4) | const INDEX_HTML_FILES = [

FILE: packages/ipfs-http-response/src/utils/path.js
  function cidArray (line 8) | function cidArray (path) {
  function removeLeadingSlash (line 26) | function removeLeadingSlash (url) {
  function removeTrailingSlash (line 37) | function removeTrailingSlash (url) {
  function removeSlashFromBothEnds (line 48) | function removeSlashFromBothEnds (url) {
  function joinURLParts (line 58) | function joinURLParts (...urls) {

FILE: packages/ipfs-http-response/test/utils/web-response-env.js
  class Response (line 1) | class Response {
    method constructor (line 6) | constructor (body, init) {
  class WebResponseGlobalScope (line 18) | class WebResponseGlobalScope {
    method constructor (line 19) | constructor () {

FILE: packages/ipfs-http-server/src/api/resources/bitswap.js
  method handler (line 26) | async handler (request, h) {
  method handler (line 89) | async handler (request, h) {
  method handler (line 155) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/block.js
  method handler (line 35) | async handler (request, h) {
  method handler (line 127) | async handler (request, h) {
  method handler (line 207) | handler (request, h) {
  method handler (line 269) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/bootstrap.js
  method handler (line 67) | async handler (request, h) {
  method handler (line 167) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/config.js
  method handler (line 82) | async handler (request, h) {
  method handler (line 301) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/dag.js
  method handler (line 65) | async handler (request, h) {
  method handler (line 187) | async handler (request, h) {
  method handler (line 265) | async handler (request, h) {
  method handler (line 331) | async handler (request, h) {
  method handler (line 385) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/dht.js
  function mapQueryEvent (line 18) | function mapQueryEvent (event) {
  method handler (line 84) | async handler (request, h) {
  method handler (line 152) | async handler (request, h) {
  method handler (line 228) | async handler (request, h) {
  method handler (line 291) | async handler (request, h) {
  method handler (line 390) | async handler (request, h) {
  method handler (line 458) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/dns.js
  method handler (line 31) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files-regular.js
  method handler (line 36) | handler (request, h) {
  method handler (line 99) | handler (request, h) {
  method handler (line 200) | handler (request, h) {
  method handler (line 355) | async handler (request, h) {
  function toTypeCode (line 437) | function toTypeCode (type) {
  method handler (line 479) | handler (request, h) {
  method handler (line 534) | handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/chmod.js
  method handler (line 42) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/cp.js
  method handler (line 46) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/flush.js
  method handler (line 30) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/ls.js
  method handler (line 51) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/mkdir.js
  method handler (line 54) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/mv.js
  method handler (line 43) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/read.js
  method handler (line 36) | handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/rm.js
  method handler (line 31) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/stat.js
  method handler (line 25) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/touch.js
  method handler (line 48) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/files/utils/parse-mtime.js
  function parseMtime (line 6) | function parseMtime (secs, nsecs) {

FILE: packages/ipfs-http-server/src/api/resources/files/write.js
  method handler (line 77) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/key.js
  function toKeyInfo (line 6) | function toKeyInfo (key) {

FILE: packages/ipfs-http-server/src/api/resources/name.js
  method handler (line 31) | async handler (request, h) {
  method handler (line 104) | async handler (request, h) {
  method handler (line 158) | async handler (request, h) {
  method handler (line 200) | async handler (request, h) {
  method handler (line 247) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/object.js
  constant DECODINGS (line 18) | const DECODINGS = {
  method handler (line 88) | async handler (request, h) {
  method handler (line 177) | async handler (request, h) {
  method handler (line 269) | async handler (request, h) {
  method handler (line 373) | async handler (request, h) {
  method handler (line 436) | async handler (request, h) {
  method handler (line 492) | async handler (request, h) {
  method handler (line 576) | async handler (request, h) {
  method handler (line 668) | async handler (request, h) {
  method handler (line 755) | async handler (request, h) {
  method handler (line 852) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/pin.js
  function toPin (line 18) | function toPin (type, cid, metadata) {
  method handler (line 64) | async handler (request, h) {
  method handler (line 147) | async handler (request, h) {
  method handler (line 219) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/ping.js
  method handler (line 32) | handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/pubsub.js
  method handler (line 54) | async handler (request, h) {
  method handler (line 177) | async handler (request, h) {
  method handler (line 225) | async handler (request, h) {
  method handler (line 276) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/repo.js
  method handler (line 28) | handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/resolve.js
  method handler (line 30) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/stats.js
  method handler (line 30) | handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/swarm.js
  method handler (line 27) | async handler (request, h) {
  method handler (line 80) | async handler (request, h) {
  method handler (line 125) | async handler (request, h) {
  method handler (line 172) | async handler (request, h) {
  method handler (line 243) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/resources/version.js
  method handler (line 20) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/routes/debug.js
  method handler (line 15) | async handler (request, h) {
  method handler (line 30) | async handler (request, h) {

FILE: packages/ipfs-http-server/src/api/routes/webui.js
  method handler (line 26) | handler (_request, h) {

FILE: packages/ipfs-http-server/src/error-handler.js
  function errorHandler (line 6) | function errorHandler (server) {

FILE: packages/ipfs-http-server/src/index.js
  constant LOG (line 11) | const LOG = 'ipfs:http-api'
  constant LOG_ERROR (line 12) | const LOG_ERROR = 'ipfs:http-api:error'
  function hapiInfoToMultiaddr (line 23) | function hapiInfoToMultiaddr (info) {
  function serverCreator (line 42) | async function serverCreator (serverAddrs, createServer, ipfs, cors) {
  function isAllowedOrigin (line 63) | function isAllowedOrigin (str, allowedOrigins = []) {
  class HttpApi (line 89) | class HttpApi {
    method constructor (line 93) | constructor (ipfs) {
    method start (line 103) | async start () {
    method _createApiServer (line 130) | async _createApiServer (host, port, ipfs, cors) {
    method apiAddr (line 273) | get apiAddr () {
    method stop (line 280) | async stop () {

FILE: packages/ipfs-http-server/src/types.ts
  type ServerApplicationState (line 7) | interface ServerApplicationState {
  type RequestApplicationState (line 10) | interface RequestApplicationState {
  type ServerInfo (line 13) | interface ServerInfo {
  type MultipartUpload (line 20) | interface MultipartUpload {
  type MultipartFile (line 26) | interface MultipartFile extends MultipartUpload {
  type MultipartDirectory (line 31) | interface MultipartDirectory extends MultipartUpload {
  type MultipartSymlink (line 35) | interface MultipartSymlink extends MultipartUpload {
  type MultipartEntry (line 40) | type MultipartEntry = MultipartFile | MultipartDirectory | MultipartSymlink

FILE: packages/ipfs-http-server/src/utils/joi.js
  method coerce (line 63) | coerce (value, _helpers) {
  method coerce (line 77) | coerce (value, _helpers) {
  method coerce (line 91) | coerce (value, _helpers) {
  method coerce (line 105) | coerce (value, _helpers) {
  method coerce (line 119) | coerce (value, _helpers) {
  method coerce (line 133) | coerce (value, _helpers) {
  method coerce (line 147) | coerce (value, _helpers) {

FILE: packages/ipfs-http-server/src/utils/stream-response.js
  constant ERROR_TRAILER (line 8) | const ERROR_TRAILER = 'X-Stream-Error'
  function streamResponse (line 17) | async function streamResponse (request, h, getSource, options = {}) {

FILE: packages/ipfs-http-server/test/inject/files.js
  function assertAddArgs (line 42) | async function assertAddArgs (url, fn) {

FILE: packages/ipfs-http-server/test/inject/mfs/write.js
  function send (line 29) | async function send (text, options = {}) {

FILE: packages/ipfs-http-server/test/utils/all-ndjson.js
  function allNdjson (line 2) | function allNdjson (res) {

FILE: packages/ipfs-http-server/test/utils/http.js
  function http (line 3) | async function http (request, { ipfs, cors } = {}) {

FILE: packages/ipfs-http-server/test/utils/match-iterable.js
  function matchIterable (line 4) | function matchIterable () {

FILE: packages/ipfs-http-server/test/utils/test-http-method.js
  constant METHODS (line 5) | const METHODS = [
  function testHttpMethod (line 13) | async function testHttpMethod (url, ipfs) {

FILE: packages/ipfs-message-port-client/.aegir.js
  method before (line 26) | async before () {
  method after (line 39) | async after (options, before) {

FILE: packages/ipfs-message-port-client/src/block.js
  class BlockClient (line 17) | class BlockClient extends Client {
    method constructor (line 21) | constructor (transport) {

FILE: packages/ipfs-message-port-client/src/client.js
  class Client (line 39) | class Client {
    method constructor (line 45) | constructor (namespace, methods, transport) {

FILE: packages/ipfs-message-port-client/src/client/error.js
  class TimeoutError (line 2) | class TimeoutError extends Error {
    method name (line 3) | get name () {
  class AbortError (line 8) | class AbortError extends Error {
    method name (line 9) | get name () {
  class DisconnectError (line 14) | class DisconnectError extends Error {
    method name (line 15) | get name () {

FILE: packages/ipfs-message-port-client/src/client/query.js
  class Query (line 19) | class Query {
    method constructor (line 25) | constructor (namespace, method, input) {
    method toJSON (line 45) | toJSON () {
    method transfer (line 54) | transfer () {

FILE: packages/ipfs-message-port-client/src/client/service.js
  class Service (line 18) | class Service {
    method constructor (line 24) | constructor (namespace, methods, transport) {

FILE: packages/ipfs-message-port-client/src/client/transport.js
  class MessageTransport (line 19) | class MessageTransport {
    method constructor (line 25) | constructor (port) {
    method execute (line 56) | execute (query) {
    method connect (line 87) | connect (port) {
    method disconnect (line 110) | disconnect () {
    method timeout (line 132) | static timeout (self, id) {
    method abort (line 150) | abort (id) {
    method postQuery (line 174) | static postQuery (port, id, query) {
    method handleEvent (line 193) | handleEvent (event) {

FILE: packages/ipfs-message-port-client/src/core.js
  class CoreClient (line 53) | class CoreClient extends Client {
    method constructor (line 57) | constructor (transport) {
  function isBytes (line 489) | function isBytes (obj) {

FILE: packages/ipfs-message-port-client/src/dag.js
  class DAGClient (line 18) | class DAGClient extends Client {
    method constructor (line 22) | constructor (transport) {

FILE: packages/ipfs-message-port-client/src/files.js
  class FilesClient (line 20) | class FilesClient extends Client {
    method constructor (line 24) | constructor (transport) {

FILE: packages/ipfs-message-port-client/src/index.js
  class IPFSClient (line 9) | class IPFSClient extends CoreClient {
    method constructor (line 13) | constructor (transport) {
    method attach (line 28) | static attach (self, port) {
    method detached (line 40) | static detached () {
    method from (line 51) | static from (port) {

FILE: packages/ipfs-message-port-client/src/interface.ts
  type MessagePortClientOptions (line 4) | interface MessagePortClientOptions {

FILE: packages/ipfs-message-port-client/test/interface-message-port-client.js
  method spawn (line 8) | spawn () {
  method clean (line 11) | clean () {}

FILE: packages/ipfs-message-port-protocol/src/data.ts
  type JSONObject (line 1) | interface JSONObject { [key: string]: JSONValue }
  type JSONArray (line 2) | type JSONArray = JSONValue[]
  type JSONValue (line 3) | type JSONValue =
  type Encoded (line 11) | type Encoded<_Data, Representation> = Representation // eslint-disable-l...
  type StringEncoded (line 12) | type StringEncoded<T> = Encoded<T, string>
  type Result (line 14) | type Result<X, T> = { ok: true, value: T } | { ok: false, error: X }
  type EncodedError (line 16) | interface EncodedError {

FILE: packages/ipfs-message-port-protocol/src/files.ts
  type EncodedStat (line 4) | interface EncodedStat {

FILE: packages/ipfs-message-port-protocol/src/root.ts
  type FileType (line 5) | type FileType = 'dir' | 'file'
  type EncodedFileContent (line 7) | type EncodedFileContent = ArrayBufferView | ArrayBuffer | Blob | string ...
  type EncodedFileInput (line 9) | interface EncodedFileInput {
  type EncodedDirectoryInput (line 16) | interface EncodedDirectoryInput {
  type EncodedAddInput (line 22) | type EncodedAddInput = EncodedFileContent | EncodedFileInput | EncodedDi...
  type EncodedAddAllInput (line 23) | type EncodedAddAllInput = RemoteIterable<EncodedAddInput>
  type EncodedAddResult (line 25) | interface EncodedAddResult {
  type EncodedIPFSEntry (line 33) | interface EncodedIPFSEntry {

FILE: packages/ipfs-message-port-protocol/src/rpc.ts
  type Procedure (line 1) | type Procedure<T> = T extends (arg: infer I) => infer O
  type Remote (line 5) | type Remote<T extends Record<string, unknown>> = {
  type Return (line 9) | type Return<T> = T extends Promise<infer U>
  type QueryOptions (line 13) | interface QueryOptions {
  type TransferOptions (line 19) | interface TransferOptions {
  type NonUndefined (line 23) | type NonUndefined<A> = A extends undefined ? never : A
  type ProcedureNames (line 25) | type ProcedureNames<T extends Record<string, unknown>> = Array<{
  type Method (line 32) | type Method<T extends Record<string, unknown>> = ServiceQuery<T>['method']
  type Namespace (line 37) | type Namespace<T extends Record<string, unknown>> = ServiceQuery<T>['nam...
  type Values (line 39) | type Values<T extends Record<string, unknown>> = T[keyof T]
  type Keys (line 40) | type Keys<T extends Record<string, unknown>> = keyof T
  type Inn (line 42) | type Inn<T extends Record<string, unknown>> = ServiceQuery<T>['input']
  type Out (line 43) | type Out<T extends Record<string, unknown>> = ServiceQuery<T>['result']
  type RPCQuery (line 45) | type RPCQuery<T extends Record<string, unknown>> = Pick<
  type ServiceQuery (line 50) | type ServiceQuery<T> = Values<
  type NamespacedQuery (line 56) | type NamespacedQuery<S, NS> = Values<
  type R (line 69) | type R<O> = O extends Promise<infer T>
  type WithTransferOptions (line 73) | type WithTransferOptions<O> = O extends Record<string, unknown> ? O & Tr...
  type MultiService (line 75) | type MultiService <T> = {
  type NamespacedService (line 79) | type NamespacedService<S> = {
  type NamespacedMethod (line 83) | type NamespacedMethod<T> = T extends (arg: infer I) => infer O

FILE: packages/ipfs-message-port-server/src/block.js
  class BlockService (line 15) | class BlockService {
    method constructor (line 19) | constructor (ipfs) {
    method get (line 36) | async get (query) {
    method put (line 58) | async put (query) {
    method rm (line 79) | async rm (query) {
    method stat (line 104) | async stat (query) {

FILE: packages/ipfs-message-port-server/src/core.js
  class CoreService (line 49) | class CoreService {
    method constructor (line 53) | constructor (ipfs) {
    method addAll (line 60) | addAll (query) {
    method add (line 110) | async add (query) {
    method cat (line 163) | cat (query) {
    method ls (line 180) | ls (query) {

FILE: packages/ipfs-message-port-server/src/dag.js
  class DAGService (line 12) | class DAGService {
    method constructor (line 16) | constructor (ipfs) {
    method put (line 28) | async put (query) {
    method get (line 51) | async get (query) {
    method resolve (line 82) | async resolve (query) {

FILE: packages/ipfs-message-port-server/src/files.js
  class FilesService (line 12) | class FilesService {
    method constructor (line 17) | constructor (ipfs) {
    method stat (line 27) | async stat (input) {

FILE: packages/ipfs-message-port-server/src/server.js
  class Query (line 98) | class Query {
    method constructor (line 104) | constructor (namespace, method, input) {
    method abort (line 121) | abort () {
  class Server (line 138) | class Server {
    method constructor (line 142) | constructor (services) {
    method connect (line 151) | connect (port) {
    method disconnect (line 159) | disconnect (port) {
    method handleEvent (line 170) | handleEvent (event) {
    method abort (line 197) | abort (id) {
    method handleQuery (line 212) | async handleQuery (id, query, port) {
    method run (line 242) | run (query) {
    method execute (line 267) | execute (data) {
  class UnsupportedMessageError (line 275) | class UnsupportedMessageError extends RangeError {
    method constructor (line 279) | constructor (event) {
    method name (line 284) | get name () {
  method name (line 290) | get name () {

FILE: packages/ipfs-message-port-server/src/service.js
  class IPFSService (line 13) | class IPFSService {
    method constructor (line 17) | constructor (ipfs) {

FILE: packages/ipfs/src/cli.js
  function main (line 69) | async function main (argv) {

FILE: packages/ipfs/src/path.browser.js
  function path (line 2) | function path () {

FILE: packages/ipfs/src/path.js
  function path (line 4) | function path () {

FILE: packages/ipfs/test/utils/mock-pinning-service.js
  class PinningService (line 10) | class PinningService {
    method start (line 17) | static async start ({ port = defaultPort, token = defaultToken } = {}) {
    method stop (line 33) | static stop (service) {
    method constructor (line 52) | constructor ({ server, host, port, token }) {
    method endpoint (line 59) | get endpoint () {

FILE: packages/ipfs/test/utils/mock-preload-node.js
  function createNode (line 14) | function createNode () {
Condensed preview — 1310 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,338K chars).
[
  {
    "path": ".dockerignore",
    "chars": 3,
    "preview": "*\n\n"
  },
  {
    "path": ".editorconfig",
    "chars": 118,
    "preview": "[*]\nindent_style = space\nindent_size = 2\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nend_of_line = lf\n"
  },
  {
    "path": ".gitattributes",
    "chars": 149,
    "preview": "* text=auto\n**/test/fixtures/** text eol=lf\n**/test/gateway/** text eol=lf\n**/src/init-files/** text eol=lf\n\n*.data bina"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 295,
    "preview": "blank_issues_enabled: false\ncontact_links:\n - name: Getting Help on IPFS\n   url: https://ipfs.io/help\n   about: All info"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/open_an_issue.md",
    "chars": 1511,
    "preview": "---\nname: Open an issue\nabout: For reporting bugs or errors in the JavaScript IPFS implementation\ntitle: ''\nlabels: need"
  },
  {
    "path": ".github/config.yml",
    "chars": 2900,
    "preview": "# Configuration for welcome - https://github.com/behaviorbot/welcome\n\n# Configuration for new-issue-welcome - https://gi"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 215,
    "preview": "version: 2\nupdates:\n- package-ecosystem: npm\n  directory: \"/\"\n  schedule:\n    interval: daily\n    time: \"10:00\"\n  open-p"
  },
  {
    "path": ".github/workflows/examples.yml",
    "chars": 7479,
    "preview": "name: Examples\non:\n  push:\n    branches:\n      - master\n  pull_request:\n    branches:\n      - '**'\n\njobs:\n\n  build:\n    "
  },
  {
    "path": ".github/workflows/externals.yml",
    "chars": 1632,
    "preview": "name: Externals\non:\n  push:\n    branches:\n      - master\n  pull_request:\n    branches:\n      - '**'\n\njobs:\n\n  build:\n   "
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 921,
    "preview": "name: Close and mark stale issue\n\non:\n  schedule:\n  - cron: '0 0 * * *'\n\njobs:\n  stale:\n\n    runs-on: ubuntu-latest\n    "
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 8127,
    "preview": "name: Test\non:\n  push:\n    branches:\n      - master\n  pull_request:\n    branches:\n      - '**'\n\njobs:\n\n  build:\n    name"
  },
  {
    "path": ".gitignore",
    "chars": 442,
    "preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\npackage-lock.json\nyarn.lock\ntsconfig-types.aegir.json\n\n# Coverage directory used by too"
  },
  {
    "path": ".release-please-manifest.json",
    "chars": 697,
    "preview": "{\"packages/interface-ipfs-core\":\"0.158.1\",\"packages/ipfs\":\"0.66.1\",\"packages/ipfs-cli\":\"0.16.1\",\"packages/ipfs-client\":\""
  },
  {
    "path": ".release-please.json",
    "chars": 855,
    "preview": "{\n  \"plugins\": [\"node-workspace\"],\n  \"bump-minor-pre-major\": true,\n  \"group-pull-request-title-pattern\": \"chore: release"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 812,
    "preview": "# Change Log\n\nPlease see the individual package changelogs for what's new:\n\n* [`/packages/interface-ipfs-core/CHANGELOG."
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 166,
    "preview": "# Contributor Code of Conduct\n\nThe `js-ipfs` project follows the [`IPFS Community Code of Conduct`](https://github.com/i"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 646,
    "preview": "# Contributing guidelines\n\nIPFS as a project, including js-ipfs and all of its modules, follows the [standard IPFS Commu"
  },
  {
    "path": "COPYRIGHT",
    "chars": 402,
    "preview": "This project is transitioning from an MIT-only license to a dual MIT/Apache-2.0 license.\nUnless otherwise noted, all cod"
  },
  {
    "path": "Dockerfile.latest",
    "chars": 627,
    "preview": "FROM node:16-alpine\n\nENV IPFS_VERSION=latest\nENV IPFS_MONITORING=1\nENV IPFS_PATH=/root/.jsipfs\nENV BUILD_DEPS='libnspr4 "
  },
  {
    "path": "Dockerfile.next",
    "chars": 625,
    "preview": "FROM node:16-alpine\n\nENV IPFS_VERSION=next\nENV IPFS_MONITORING=1\nENV IPFS_PATH=/root/.jsipfs\nENV BUILD_DEPS='libnspr4 li"
  },
  {
    "path": "LICENSE",
    "chars": 158,
    "preview": "This project is dual licensed under MIT and Apache-2.0.\n\nMIT: https://www.opensource.org/licenses/mit\nApache-2.0: https:"
  },
  {
    "path": "LICENSE-APACHE",
    "chars": 520,
    "preview": "Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the "
  },
  {
    "path": "LICENSE-MIT",
    "chars": 1046,
    "preview": "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and"
  },
  {
    "path": "README.md",
    "chars": 27505,
    "preview": "> # ⛔️ DEPRECATED: [js-IPFS](https://github.com/ipfs/js-ipfs) has been superseded by [Helia](https://github.com/ipfs/hel"
  },
  {
    "path": "docs/ARCHITECTURE.md",
    "chars": 1485,
    "preview": "# IPFS Architecture <!-- omit in toc -->\n\n## Table of Contents <!-- omit in toc -->\n\n- [Code Architecture and folder Str"
  },
  {
    "path": "docs/BROWSERS.md",
    "chars": 5291,
    "preview": "# Using JS IPFS in the Browser <!-- omit in toc -->\n\n## Table of Contents <!-- omit in toc -->\n\n- [Limitations of the Br"
  },
  {
    "path": "docs/CLI.md",
    "chars": 1430,
    "preview": "# IPFS CLI <!-- omit in toc -->\n\n## Table of contents <!-- omit in toc -->\n\n- [Overview](#overview)\n- [Configuration](#c"
  },
  {
    "path": "docs/CONFIG.md",
    "chars": 10917,
    "preview": "# The js-ipfs config file <!-- omit in toc -->\n\nThe js-ipfs config file is a JSON document located in the root directory"
  },
  {
    "path": "docs/CORS.md",
    "chars": 830,
    "preview": "# CORS <!-- omit in toc -->\n\n## Table of Contents <!-- omit in toc -->\n\n- [Overview](#overview)\n- [Configure CORS header"
  },
  {
    "path": "docs/DAEMON.md",
    "chars": 947,
    "preview": "\n# Running IPFS as a daemon <!-- omit in toc -->\n\n> How to run a long-lived IPFS process\n\n## Table of contents <!-- omit"
  },
  {
    "path": "docs/DELEGATE_ROUTERS.md",
    "chars": 2011,
    "preview": "# Configuring Delegate Routers <!-- omit in toc -->\n\n- [What is it?](#what-is-it)\n- [How do I do it?](#how-do-i-do-it)\n\n"
  },
  {
    "path": "docs/DEVELOPMENT.md",
    "chars": 5077,
    "preview": "# Development <!-- omit in toc -->\n\n> Getting started with development on IPFS\n\n- [Install npm@7](#install-npm7)\n- [Clon"
  },
  {
    "path": "docs/DOCKER.md",
    "chars": 1302,
    "preview": "\n# Running js-ipfs with Docker\n\nWe have automatic Docker builds setup with Docker Hub: https://hub.docker.com/r/ipfs/js-"
  },
  {
    "path": "docs/EARLY_TESTERS.md",
    "chars": 2351,
    "preview": "# Early Testers Programme <!-- omit in toc -->\n\n- [What is it?](#what-is-it)\n- [What are the expectations?](#what-are-th"
  },
  {
    "path": "docs/FAQ.md",
    "chars": 9559,
    "preview": "# FAQ <!-- omit in toc -->\n\n## Table of Contents <!-- omit in toc -->\n\n- [Why isn't there DHT support in js-IPFS?](#why-"
  },
  {
    "path": "docs/IPLD.md",
    "chars": 6119,
    "preview": "# IPLD Codecs <!-- omit in toc -->\n\n## Table of Contents <!-- omit in toc -->\n\n- [Overview](#overview)\n- [Bundled BlockC"
  },
  {
    "path": "docs/MIGRATION-TO-ASYNC-AWAIT.md",
    "chars": 20020,
    "preview": "# Migrating to the new JS IPFS Core API in 0.48.0 <!-- omit in toc -->\n\nA migration guide for refactoring your applicati"
  },
  {
    "path": "docs/MODULE.md",
    "chars": 16626,
    "preview": "# IPFS Module <!-- omit in toc -->\n\nUse the IPFS module as a dependency of your project to spawn in process instances of"
  },
  {
    "path": "docs/MONITORING.md",
    "chars": 517,
    "preview": "# Monitoring\n\nThe HTTP API exposed with js-ipfs can also be used for exposing metrics about the running js-ipfs node and"
  },
  {
    "path": "docs/README.md",
    "chars": 1547,
    "preview": "# IPFS Docs <!-- omit in toc -->\n\n- [API Docs](#api-docs)\n- [How tos and other documentation](#how-tos-and-other-documen"
  },
  {
    "path": "docs/RELEASES.md",
    "chars": 6477,
    "preview": "# Releases <!-- omit in toc -->\n\n## Table of Contents <!-- omit in toc -->\n\n- [Release Philosophy](#release-philosophy)\n"
  },
  {
    "path": "docs/RELEASE_ISSUE_TEMPLATE.md",
    "chars": 6606,
    "preview": "# Release Template\n\n> short tl;dr; of the release\n\n# 🗺 What's left for release\n\n<List of items with PRs and/or Issues to"
  },
  {
    "path": "docs/core-api/BITSWAP.md",
    "chars": 5411,
    "preview": "# Bitswap API <!-- omit in toc -->\n\n- [`ipfs.bitswap.wantlist([options])`](#ipfsbitswapwantlistoptions)\n  - [Parameters]"
  },
  {
    "path": "docs/core-api/BLOCK.md",
    "chars": 6271,
    "preview": "# Block API <!-- omit in toc -->\n\n- [`ipfs.block.get(cid, [options])`](#ipfsblockgetcid-options)\n  - [Parameters](#param"
  },
  {
    "path": "docs/core-api/BOOTSTRAP.md",
    "chars": 6323,
    "preview": "# Bootstrap API <!-- omit in toc -->\n\n> Manipulates the bootstrap list, which contains the addresses of the bootstrap no"
  },
  {
    "path": "docs/core-api/CONFIG.md",
    "chars": 7173,
    "preview": "# Config API <!-- omit in toc -->\n\n- [`ipfs.config.get(key, [options])`](#ipfsconfiggetkey-options)\n  - [Parameters](#pa"
  },
  {
    "path": "docs/core-api/DAG.md",
    "chars": 9055,
    "preview": "# DAG API <!-- omit in toc -->\n\n> The dag API comes to replace the `object API`, it supports the creation and manipulati"
  },
  {
    "path": "docs/core-api/DHT.md",
    "chars": 9876,
    "preview": "# DHT API <!-- omit in toc -->\n\n- [`ipfs.dht.findPeer(peerId, [options])`](#ipfsdhtfindpeerpeerid-options)\n  - [Paramete"
  },
  {
    "path": "docs/core-api/FILES.md",
    "chars": 35751,
    "preview": "# Files API <!-- omit in toc -->\n\n> The files API enables users to use the File System abstraction of IPFS. There are tw"
  },
  {
    "path": "docs/core-api/KEY.md",
    "chars": 7568,
    "preview": "# Key API <!-- omit in toc -->\n\n- [`ipfs.key.gen(name, [options])`](#ipfskeygenname-options)\n  - [Parameters](#parameter"
  },
  {
    "path": "docs/core-api/MISCELLANEOUS.md",
    "chars": 9361,
    "preview": "# Miscellaneous API <!-- omit in toc -->\n\n- [`ipfs.id([options])`](#ipfsidoptions)\n  - [Parameters](#parameters)\n  - [Op"
  },
  {
    "path": "docs/core-api/NAME.md",
    "chars": 7993,
    "preview": "# Name API <!-- omit in toc -->\n\n- [`ipfs.name.publish(value, [options])`](#ipfsnamepublishvalue-options)\n  - [Parameter"
  },
  {
    "path": "docs/core-api/OBJECT.md",
    "chars": 14326,
    "preview": "# Object API <!-- omit in toc -->\n\n> ⚠️ Object API is [deprecated](https://github.com/ipfs/go-ipfs/issues/7936), use [FI"
  },
  {
    "path": "docs/core-api/PIN.md",
    "chars": 18915,
    "preview": "# Pin API <!-- omit in toc -->\n\n- [`ipfs.pin.add(ipfsPath, [options])`](#ipfspinaddipfspath-options)\n  - [Parameters](#p"
  },
  {
    "path": "docs/core-api/PUBSUB.md",
    "chars": 6214,
    "preview": "# PubSub API <!-- omit in toc -->\n\n- [`ipfs.pubsub.subscribe(topic, handler, [options])`](#ipfspubsubsubscribetopic-hand"
  },
  {
    "path": "docs/core-api/README.md",
    "chars": 1147,
    "preview": "# IPFS Core API\n\nThis directory contains the description of the core JS IPFS API. In order to be considered \"valid\", a J"
  },
  {
    "path": "docs/core-api/REFS.md",
    "chars": 3313,
    "preview": "# Refs API <!-- omit in toc -->\n\n- [`ipfs.refs(ipfsPath, [options])`](#ipfsrefsipfspath-options)\n  - [Parameters](#param"
  },
  {
    "path": "docs/core-api/REPO.md",
    "chars": 3534,
    "preview": "# Repo API <!-- omit in toc -->\n\n- [`ipfs.repo.gc([options])`](#ipfsrepogcoptions)\n  - [Parameters](#parameters)\n  - [Op"
  },
  {
    "path": "docs/core-api/STATS.md",
    "chars": 2538,
    "preview": "# Stats API <!-- omit in toc -->\n\n- [`ipfs.stats.bitswap([options]`](#ipfsstatsbitswapoptions)\n- [`ipfs.stats.repo([opti"
  },
  {
    "path": "docs/core-api/SWARM.md",
    "chars": 6767,
    "preview": "# Swarm API <!-- skip in toc -->\n\n- [Swarm API](#swarm-api)\n  - [`ipfs.swarm.addrs([options])`](#ipfsswarmaddrsoptions)\n"
  },
  {
    "path": "docs/img/architecture.txt",
    "chars": 4932,
    "preview": " ┌─────────────────────────────────────────────────────────────────────────────┐\n │                            The IPFS "
  },
  {
    "path": "docs/img/core.txt",
    "chars": 2010,
    "preview": "┌─────────────────────────────────────────────────────────────────────────────┐\n│                                       "
  },
  {
    "path": "docs/img/overview.txt",
    "chars": 993,
    "preview": "\n                     offline mode - uses IPFS core directly\n                  ┌────────────────────────────────────────"
  },
  {
    "path": "docs/upgrading/v0.62-v0.63.md",
    "chars": 6431,
    "preview": "<!--Specify versions for migration below-->\n# Migrating to ipfs@0.63 and ipfs-core@0.15 <!-- omit in toc -->\n\n> A migrat"
  },
  {
    "path": "docs/upgrading/v0.63-v0.64.md",
    "chars": 693,
    "preview": "<!--Specify versions for migration below-->\n# Migrating to ipfs@0.64 and ipfs-core@0.16 <!-- omit in toc -->\n\n> A migrat"
  },
  {
    "path": "docs/upgrading/v0.64-v0.65.md",
    "chars": 1141,
    "preview": "<!--Specify versions for migration below-->\n# Migrating to ipfs@0.65 and ipfs-core@0.17 <!-- omit in toc -->\n\n> A migrat"
  },
  {
    "path": "package-list.json",
    "chars": 1779,
    "preview": "{\n  \"columns\": [\n    \"Package\",\n    \"Version\",\n    \"Deps\",\n    \"CI/Travis\",\n    \"Coverage\",\n    \"Lead Maintainer\"\n  ],\n "
  },
  {
    "path": "package.json",
    "chars": 3006,
    "preview": "{\n  \"name\": \"js-ipfs\",\n  \"version\": \"1.0.0\",\n  \"description\": \"JavaScript implementation of the IPFS specification\",\n  \""
  },
  {
    "path": "packages/interface-ipfs-core/.aegir.js",
    "chars": 108,
    "preview": "\n/** @type {import('aegir').PartialOptions} */\nexport default {\n  build: {\n    bundlesizeMax: '338kB'\n  }\n}\n"
  },
  {
    "path": "packages/interface-ipfs-core/CHANGELOG.md",
    "chars": 86085,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "packages/interface-ipfs-core/LICENSE",
    "chars": 158,
    "preview": "This project is dual licensed under MIT and Apache-2.0.\n\nMIT: https://www.opensource.org/licenses/mit\nApache-2.0: https:"
  },
  {
    "path": "packages/interface-ipfs-core/LICENSE-APACHE",
    "chars": 520,
    "preview": "Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the "
  },
  {
    "path": "packages/interface-ipfs-core/LICENSE-MIT",
    "chars": 1046,
    "preview": "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and"
  },
  {
    "path": "packages/interface-ipfs-core/README.md",
    "chars": 6654,
    "preview": "> # ⛔️ DEPRECATED: [js-IPFS](https://github.com/ipfs/js-ipfs) has been superseded by [Helia](https://github.com/ipfs/hel"
  },
  {
    "path": "packages/interface-ipfs-core/maintainer.json",
    "chars": 224,
    "preview": "{\n  \"repoLeadMaintainer\": {\n    \"name\": \"Alan Shaw\",\n    \"email\": \"alan.shaw@protocol.ai\",\n    \"username\": \"alanshaw\"\n  "
  },
  {
    "path": "packages/interface-ipfs-core/package.json",
    "chars": 3028,
    "preview": "{\n  \"name\": \"interface-ipfs-core\",\n  \"version\": \"0.158.1\",\n  \"description\": \"A test suite and interface you can use to i"
  },
  {
    "path": "packages/interface-ipfs-core/src/add-all.js",
    "chars": 18755,
    "preview": "/* eslint-env mocha, browser */\n\nimport { fixtures } from './utils/index.js'\nimport { Readable } from 'readable-stream'\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/add.js",
    "chars": 15983,
    "preview": "/* eslint-env mocha, browser */\n\nimport { fixtures } from './utils/index.js'\nimport { Readable } from 'readable-stream'\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/bitswap/index.js",
    "chars": 462,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testStat } from './stat.js'\nimport { testWantlist } from './wan"
  },
  {
    "path": "packages/interface-ipfs-core/src/bitswap/stat.js",
    "chars": 1001,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/bitswap/transfer.js",
    "chars": 3332,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/bitswap/unwant.js",
    "chars": 805,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\n\n/**\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/bitswap/utils.js",
    "chars": 1550,
    "preview": "import delay from 'delay'\n\n/**\n * @typedef {import('@libp2p/interface-peer-id').PeerId} PeerId\n */\n\n/**\n * @param {impor"
  },
  {
    "path": "packages/interface-ipfs-core/src/bitswap/wantlist-for-peer.js",
    "chars": 1490,
    "preview": "/* eslint-env mocha */\n\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimport { waitForWantlistKey } from './uti"
  },
  {
    "path": "packages/interface-ipfs-core/src/bitswap/wantlist.js",
    "chars": 3321,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/block/get.js",
    "chars": 2998,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { identity }"
  },
  {
    "path": "packages/interface-ipfs-core/src/block/index.js",
    "chars": 305,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testGet } from './get.js'\nimport { testPut } from './put.js'\nim"
  },
  {
    "path": "packages/interface-ipfs-core/src/block/put.js",
    "chars": 2063,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { base58btc "
  },
  {
    "path": "packages/interface-ipfs-core/src/block/rm.js",
    "chars": 4834,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { expect } f"
  },
  {
    "path": "packages/interface-ipfs-core/src/block/stat.js",
    "chars": 1717,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { CID } from"
  },
  {
    "path": "packages/interface-ipfs-core/src/bootstrap/add.js",
    "chars": 2324,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/bootstrap/clear.js",
    "chars": 1652,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/bootstrap/index.js",
    "chars": 372,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testAdd } from './add.js'\nimport { testClear } from './clear.js"
  },
  {
    "path": "packages/interface-ipfs-core/src/bootstrap/list.js",
    "chars": 888,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/bootstrap/reset.js",
    "chars": 1319,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/bootstrap/rm.js",
    "chars": 2046,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/cat.js",
    "chars": 6173,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { toString a"
  },
  {
    "path": "packages/interface-ipfs-core/src/config/get.js",
    "chars": 1995,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\n\n/**\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/config/index.js",
    "chars": 325,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testGet } from './get.js'\nimport { testSet } from './set.js'\nim"
  },
  {
    "path": "packages/interface-ipfs-core/src/config/profiles/apply.js",
    "chars": 1821,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../../utils/mocha.js'\n\n/"
  },
  {
    "path": "packages/interface-ipfs-core/src/config/profiles/index.js",
    "chars": 228,
    "preview": "import { createSuite } from '../../utils/suite.js'\nimport { testApply } from './apply.js'\nimport { testList } from './li"
  },
  {
    "path": "packages/interface-ipfs-core/src/config/profiles/list.js",
    "chars": 959,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../../utils/mocha.js'\n\n/"
  },
  {
    "path": "packages/interface-ipfs-core/src/config/replace.js",
    "chars": 1064,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\n\n/**\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/config/set.js",
    "chars": 2419,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { expect } f"
  },
  {
    "path": "packages/interface-ipfs-core/src/dag/export.js",
    "chars": 2772,
    "preview": "/* eslint-env mocha */\n\nimport all from 'it-all'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from "
  },
  {
    "path": "packages/interface-ipfs-core/src/dag/get.js",
    "chars": 12031,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport * as dagPB f"
  },
  {
    "path": "packages/interface-ipfs-core/src/dag/import.js",
    "chars": 5754,
    "preview": "/* eslint-env mocha */\n\nimport all from 'it-all'\nimport drain from 'it-drain'\nimport { CID } from 'multiformats/cid'\nimp"
  },
  {
    "path": "packages/interface-ipfs-core/src/dag/index.js",
    "chars": 502,
    "preview": "\nimport { createSuite } from '../utils/suite.js'\nimport { testExport } from './export.js'\nimport { testGet } from './get"
  },
  {
    "path": "packages/interface-ipfs-core/src/dag/put.js",
    "chars": 3419,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport * as dagCBOR"
  },
  {
    "path": "packages/interface-ipfs-core/src/dag/resolve.js",
    "chars": 4458,
    "preview": "/* eslint-env mocha */\n\nimport * as dagPB from '@ipld/dag-pb'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, "
  },
  {
    "path": "packages/interface-ipfs-core/src/dag/sharness-t0053-dag.js",
    "chars": 8134,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/dht/disabled.js",
    "chars": 1298,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/dht/find-peer.js",
    "chars": 2317,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/dht/find-provs.js",
    "chars": 2222,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/dht/get.js",
    "chars": 2309,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/dht/index.js",
    "chars": 548,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testPut } from './put.js'\nimport { testGet } from './get.js'\nim"
  },
  {
    "path": "packages/interface-ipfs-core/src/dht/provide.js",
    "chars": 1740,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { CID } from"
  },
  {
    "path": "packages/interface-ipfs-core/src/dht/put.js",
    "chars": 1718,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/dht/query.js",
    "chars": 1521,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/dht/utils.js",
    "chars": 1276,
    "preview": "\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { CID } from 'multiformats/cid'\nimp"
  },
  {
    "path": "packages/interface-ipfs-core/src/files/chmod.js",
    "chars": 12673,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { nanoid } f"
  },
  {
    "path": "packages/interface-ipfs-core/src/files/cp.js",
    "chars": 16621,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { concat as "
  },
  {
    "path": "packages/interface-ipfs-core/src/files/flush.js",
    "chars": 1584,
    "preview": "/* eslint-env mocha */\n\nimport { nanoid } from 'nanoid'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt "
  },
  {
    "path": "packages/interface-ipfs-core/src/files/index.js",
    "chars": 695,
    "preview": "\nimport { createSuite } from '../utils/suite.js'\nimport { testChmod } from './chmod.js'\nimport { testCp } from './cp.js'"
  },
  {
    "path": "packages/interface-ipfs-core/src/files/ls.js",
    "chars": 6953,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { expect } f"
  },
  {
    "path": "packages/interface-ipfs-core/src/files/mkdir.js",
    "chars": 7684,
    "preview": "/* eslint-env mocha */\n\nimport { nanoid } from 'nanoid'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt "
  },
  {
    "path": "packages/interface-ipfs-core/src/files/mv.js",
    "chars": 11361,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { concat as "
  },
  {
    "path": "packages/interface-ipfs-core/src/files/read.js",
    "chars": 4639,
    "preview": "/* eslint-env mocha */\n\nimport { concat as uint8ArrayConcat } from 'uint8arrays/concat'\nimport drain from 'it-drain'\nimp"
  },
  {
    "path": "packages/interface-ipfs-core/src/files/rm.js",
    "chars": 9525,
    "preview": "/* eslint-env mocha */\n\nimport { nanoid } from 'nanoid'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt "
  },
  {
    "path": "packages/interface-ipfs-core/src/files/stat.js",
    "chars": 12413,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { nanoid } f"
  },
  {
    "path": "packages/interface-ipfs-core/src/files/touch.js",
    "chars": 4918,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { concat as "
  },
  {
    "path": "packages/interface-ipfs-core/src/files/write.js",
    "chars": 31584,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { concat as "
  },
  {
    "path": "packages/interface-ipfs-core/src/get.js",
    "chars": 13474,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { toString a"
  },
  {
    "path": "packages/interface-ipfs-core/src/index.js",
    "chars": 1821,
    "preview": "import { createSuite } from './utils/suite.js'\nimport { testAdd } from './add.js'\nimport { testAddAll } from './add-all."
  },
  {
    "path": "packages/interface-ipfs-core/src/key/gen.js",
    "chars": 1869,
    "preview": "/* eslint-env mocha */\n\nimport { nanoid } from 'nanoid'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt "
  },
  {
    "path": "packages/interface-ipfs-core/src/key/import.js",
    "chars": 1062,
    "preview": "/* eslint-env mocha */\n\nimport { nanoid } from 'nanoid'\nimport { keys } from '@libp2p/crypto'\nimport { expect } from 'ae"
  },
  {
    "path": "packages/interface-ipfs-core/src/key/index.js",
    "chars": 381,
    "preview": "\nimport { createSuite } from '../utils/suite.js'\nimport { testGen } from './gen.js'\nimport { testList } from './list.js'"
  },
  {
    "path": "packages/interface-ipfs-core/src/key/list.js",
    "chars": 1116,
    "preview": "/* eslint-env mocha */\n\nimport { nanoid } from 'nanoid'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt "
  },
  {
    "path": "packages/interface-ipfs-core/src/key/rename.js",
    "chars": 1258,
    "preview": "/* eslint-env mocha */\n\nimport { nanoid } from 'nanoid'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt "
  },
  {
    "path": "packages/interface-ipfs-core/src/key/rm.js",
    "chars": 1059,
    "preview": "/* eslint-env mocha */\n\nimport { nanoid } from 'nanoid'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt "
  },
  {
    "path": "packages/interface-ipfs-core/src/ls.js",
    "chars": 9967,
    "preview": "/* eslint-env mocha */\n\nimport { fixtures } from './utils/index.js'\nimport { expect } from 'aegir/chai'\nimport { getDesc"
  },
  {
    "path": "packages/interface-ipfs-core/src/miscellaneous/dns.js",
    "chars": 2360,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\n\n/**\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/miscellaneous/id.js",
    "chars": 2857,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/miscellaneous/index.js",
    "chars": 388,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testId } from './id.js'\nimport { testVersion } from './version."
  },
  {
    "path": "packages/interface-ipfs-core/src/miscellaneous/resolve.js",
    "chars": 5725,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport * as isIpfs "
  },
  {
    "path": "packages/interface-ipfs-core/src/miscellaneous/stop.js",
    "chars": 1259,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\n\n/**\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/miscellaneous/version.js",
    "chars": 1178,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\n\n/**\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/name/index.js",
    "chars": 235,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testPublish } from './publish.js'\nimport { testResolve } from '"
  },
  {
    "path": "packages/interface-ipfs-core/src/name/publish.js",
    "chars": 3598,
    "preview": "/* eslint-env mocha */\n\nimport { nanoid } from 'nanoid'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/"
  },
  {
    "path": "packages/interface-ipfs-core/src/name/resolve.js",
    "chars": 9756,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { expect } f"
  },
  {
    "path": "packages/interface-ipfs-core/src/name/utils.js",
    "chars": 223,
    "preview": "import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\n\nexport const fixture = Object.freeze({\n  c"
  },
  {
    "path": "packages/interface-ipfs-core/src/name-pubsub/cancel.js",
    "chars": 1929,
    "preview": "/* eslint-env mocha */\n\nimport all from 'it-all'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from "
  },
  {
    "path": "packages/interface-ipfs-core/src/name-pubsub/index.js",
    "chars": 341,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testCancel } from './cancel.js'\nimport { testState } from './st"
  },
  {
    "path": "packages/interface-ipfs-core/src/name-pubsub/pubsub.js",
    "chars": 6092,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/name-pubsub/state.js",
    "chars": 847,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\n\n/**\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/name-pubsub/subs.js",
    "chars": 1333,
    "preview": "/* eslint-env mocha */\n\nimport all from 'it-all'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from "
  },
  {
    "path": "packages/interface-ipfs-core/src/object/data.js",
    "chars": 1453,
    "preview": "/* eslint-env mocha */\n\nimport { nanoid } from 'nanoid'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt "
  },
  {
    "path": "packages/interface-ipfs-core/src/object/get.js",
    "chars": 4159,
    "preview": "/* eslint-env mocha */\n\nimport * as dagPB from '@ipld/dag-pb'\nimport { nanoid } from 'nanoid'\nimport { expect } from 'ae"
  },
  {
    "path": "packages/interface-ipfs-core/src/object/index.js",
    "chars": 484,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testNew } from './new.js'\nimport { testPut } from './put.js'\nim"
  },
  {
    "path": "packages/interface-ipfs-core/src/object/links.js",
    "chars": 3314,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport * as dagPB f"
  },
  {
    "path": "packages/interface-ipfs-core/src/object/new.js",
    "chars": 1045,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\n\n/**\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/object/patch/add-link.js",
    "chars": 3109,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport * as dagPB f"
  },
  {
    "path": "packages/interface-ipfs-core/src/object/patch/append-data.js",
    "chars": 1595,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { expect } f"
  },
  {
    "path": "packages/interface-ipfs-core/src/object/patch/index.js",
    "chars": 393,
    "preview": "import { createSuite } from '../../utils/suite.js'\nimport { testAddLink } from './add-link.js'\nimport { testRmLink } fro"
  },
  {
    "path": "packages/interface-ipfs-core/src/object/patch/rm-link.js",
    "chars": 2719,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport * as dagPB f"
  },
  {
    "path": "packages/interface-ipfs-core/src/object/patch/set-data.js",
    "chars": 1723,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { expect } f"
  },
  {
    "path": "packages/interface-ipfs-core/src/object/put.js",
    "chars": 3099,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport * as dagPB f"
  },
  {
    "path": "packages/interface-ipfs-core/src/object/stat.js",
    "chars": 2685,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport * as dagPB f"
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/add-all.js",
    "chars": 3040,
    "preview": "/* eslint-env mocha */\n\nimport { fixtures, clearPins } from './utils.js'\nimport { expect } from 'aegir/chai'\nimport { ge"
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/add.js",
    "chars": 5070,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { fixtures, "
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/index.js",
    "chars": 435,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testAdd } from './add.js'\nimport { testAddAll } from './add-all"
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/ls.js",
    "chars": 7041,
    "preview": "/* eslint-env mocha */\n\nimport { fixtures } from './utils.js'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, "
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/remote/add.js",
    "chars": 3485,
    "preview": "/* eslint-env mocha */\n\nimport { fixtures, clearRemotePins, clearServices } from '../utils.js'\nimport { expect } from 'a"
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/remote/index.js",
    "chars": 383,
    "preview": "import { createSuite } from '../../utils/suite.js'\nimport { testService } from './service.js'\nimport { testAdd } from '."
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/remote/ls.js",
    "chars": 10680,
    "preview": "/* eslint-env mocha */\n\nimport { clearRemotePins, addRemotePins, clearServices } from '../utils.js'\nimport { expect } fr"
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/remote/rm-all.js",
    "chars": 4143,
    "preview": "/* eslint-env mocha */\n\nimport { clearRemotePins, addRemotePins, clearServices } from '../utils.js'\nimport { expect } fr"
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/remote/rm.js",
    "chars": 4578,
    "preview": "/* eslint-env mocha */\n\nimport { clearRemotePins, addRemotePins, clearServices } from '../utils.js'\nimport { expect } fr"
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/remote/service.js",
    "chars": 6107,
    "preview": "/* eslint-env mocha */\n\nimport { clearServices } from '../utils.js'\nimport { expect } from 'aegir/chai'\nimport { getDesc"
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/rm-all.js",
    "chars": 1313,
    "preview": "/* eslint-env mocha */\n\nimport { fixtures, clearPins } from './utils.js'\nimport { expect } from 'aegir/chai'\nimport { ge"
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/rm.js",
    "chars": 2436,
    "preview": "/* eslint-env mocha */\n\nimport { fixtures, expectPinned, clearPins } from './utils.js'\nimport { expect } from 'aegir/cha"
  },
  {
    "path": "packages/interface-ipfs-core/src/pin/utils.js",
    "chars": 3728,
    "preview": "import { expect } from 'aegir/chai'\nimport loadFixture from 'aegir/fixtures'\nimport { CID } from 'multiformats/cid'\nimpo"
  },
  {
    "path": "packages/interface-ipfs-core/src/ping/index.js",
    "chars": 156,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testPing } from './ping.js'\n\nconst tests = {\n  ping: testPing\n}"
  },
  {
    "path": "packages/interface-ipfs-core/src/ping/ping.js",
    "chars": 1864,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimpor"
  },
  {
    "path": "packages/interface-ipfs-core/src/ping/utils.js",
    "chars": 600,
    "preview": "import { expect } from 'aegir/chai'\n\n/**\n * @param {*} obj\n */\nexport function expectIsPingResponse (obj) {\n  expect(obj"
  },
  {
    "path": "packages/interface-ipfs-core/src/pubsub/index.js",
    "chars": 432,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testPublish } from './publish.js'\nimport { testSubscribe } from"
  },
  {
    "path": "packages/interface-ipfs-core/src/pubsub/ls.js",
    "chars": 1955,
    "preview": "/* eslint-env mocha */\n\nimport { getTopic } from './utils.js'\nimport { expect } from 'aegir/chai'\nimport { getDescribe, "
  },
  {
    "path": "packages/interface-ipfs-core/src/pubsub/peers.js",
    "chars": 4097,
    "preview": "/* eslint-env mocha */\n\nimport { waitForPeers, getTopic } from './utils.js'\nimport { expect } from 'aegir/chai'\nimport {"
  },
  {
    "path": "packages/interface-ipfs-core/src/pubsub/publish.js",
    "chars": 2304,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { nanoid } f"
  },
  {
    "path": "packages/interface-ipfs-core/src/pubsub/subscribe.js",
    "chars": 19828,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { toString a"
  },
  {
    "path": "packages/interface-ipfs-core/src/pubsub/unsubscribe.js",
    "chars": 2579,
    "preview": "/* eslint-env mocha */\n\nimport { isBrowser, isWebWorker, isElectronRenderer } from 'ipfs-utils/src/env.js'\nimport { getT"
  },
  {
    "path": "packages/interface-ipfs-core/src/pubsub/utils.js",
    "chars": 834,
    "preview": "import { nanoid } from 'nanoid'\nimport delay from 'delay'\n\n/**\n * @typedef {import('@libp2p/interface-peer-id').PeerId} "
  },
  {
    "path": "packages/interface-ipfs-core/src/refs-local.js",
    "chars": 1947,
    "preview": "/* eslint-env mocha */\n\nimport { fixtures } from './utils/index.js'\nimport { expect } from 'aegir/chai'\nimport { getDesc"
  },
  {
    "path": "packages/interface-ipfs-core/src/refs.js",
    "chars": 12831,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from './utils/mocha.js'\nimport"
  },
  {
    "path": "packages/interface-ipfs-core/src/repo/gc.js",
    "chars": 7253,
    "preview": "/* eslint-env mocha */\n\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { expect } f"
  },
  {
    "path": "packages/interface-ipfs-core/src/repo/index.js",
    "chars": 270,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testVersion } from './version.js'\nimport { testStat } from './s"
  },
  {
    "path": "packages/interface-ipfs-core/src/repo/stat.js",
    "chars": 702,
    "preview": "/* eslint-env mocha */\n\nimport { expectIsRepo } from '../stats/utils.js'\nimport { getDescribe, getIt } from '../utils/mo"
  },
  {
    "path": "packages/interface-ipfs-core/src/repo/version.js",
    "chars": 711,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'aegir/chai'\nimport { getDescribe, getIt } from '../utils/mocha.js'\n\n/**\n"
  },
  {
    "path": "packages/interface-ipfs-core/src/stats/bitswap.js",
    "chars": 715,
    "preview": "/* eslint-env mocha */\n\nimport { getDescribe, getIt } from '../utils/mocha.js'\nimport { expectIsBitswap } from './utils."
  },
  {
    "path": "packages/interface-ipfs-core/src/stats/bw.js",
    "chars": 1145,
    "preview": "/* eslint-env mocha */\n\nimport { expectIsBandwidth } from './utils.js'\nimport { expect } from 'aegir/chai'\nimport { getD"
  },
  {
    "path": "packages/interface-ipfs-core/src/stats/index.js",
    "chars": 270,
    "preview": "import { createSuite } from '../utils/suite.js'\nimport { testBitswap } from './bitswap.js'\nimport { testBw } from './bw."
  }
]

// ... and 1110 more files (download for full content)

About this extraction

This page contains the full source code of the ipfs/js-ipfs GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1310 files (20.1 MB), approximately 1.6M tokens, and a symbol index with 1414 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!