diff --git a/README.md b/README.md index bc37989f..00a2a568 100644 --- a/README.md +++ b/README.md @@ -159,24 +159,42 @@ graph TD; # 🏭 Code Structure -Helia embraces a modular approach and encourages users to bring their own implementations of interfacing libraries to suit their needs. Helia also ships supplemental libraries and tools including: +Helia embraces a modular approach and encourages users to bring their own implementations of various APIs to suit their needs. -- [`@helia/UnixFS`](./packages/unixfs) -- [`@helia/mfs`](./packages/mfs) -- [`@helia/ipns`](./packages/ipns) -- [`@helia/car`](./packages/car) -- [`@helia/strings`](./packages/strings) -- [`@helia/json`](./packages/json) -- [`@helia/dag-json`](./packages/dag-json) -- [`@helia/dag-cbor`](./packages/dag-cbor) +The basic Helia API is defined in: -These libraries are by no means the "one true implementation", but instead instead provide optionality depending on one's needs. - -This repo itself is made up of these packages: - [`/packages/interface`](./packages/interface) The Helia API + +The API is implemented by: + - [`/packages/helia`](./packages/helia) An implementation of the Helia API + +Helia also ships a number of supplemental libraries and tools. + +These libraries are not intended to be the "one true implementation" of any given API, but are made available for users to include depending on the need of their particular application: + +- [./packages/unixfs](./packages/unixfs) The `@helia/unixfs` module +- [./packages/mfs](./packages/mfs) The `@helia/mfs` module +- [./packages/ipns](./packages/ipns) `@helia/ipns` +- [./packages/car](./packages/car) `@helia/car` +- [./packages/strings](./packages/strings) `@helia/strings` +- [./packages/json](./packages/json) `@helia/json` +- [./packages/dag-json](./packages/dag-json) `@helia/dag-json` +- [./packages/dag-cbor](./packages/dag-cbor) `@helia/dag-cbor` + +An interface suite ensures everything is compatible: + - [`/packages/interop`](./packages/interop) Interop tests for Helia +## Other modules + +There are several other modules available outside this repo: + +- [`@helia/delegated-routing-v1-http-api`](https://github.com/ipfs/helia-delegated-routing-v1-http-api) An implementation of the [Delegated Routing v1 HTTP API](https://specs.ipfs.tech/routing/http-routing-v1/) including a server and a client +- [Helia WNFS](https://github.com/shovelers/helia-wnfs) a [WNFS](https://guide.fission.codes/developers/webnative/file-system-wnfs) implementation built on top of Helia +- [`@helia/remote-pinning`](https://github.com/ipfs/helia-remote-pinning) A Helia client for communicating with [IPFS Pinning Services](https://ipfs.github.io/pinning-services-api-spec/) +- [`@helia/http-gateway`](https://github.com/ipfs/helia-http-gateway) An implentation of the [IPFS HTTP Gateway API](https://docs.ipfs.tech/concepts/ipfs-gateway/#gateway-types) built with Helia + # 📣 Project status Helia v1 shipped in 202303 (see [releases](https://github.com/ipfs/helia/releases)), and development keeps on trucking as we work on initiatives in the [roadmap](#roadmap) and make performance improvements and bug fixes along the way. diff --git a/packages/helia/package.json b/packages/helia/package.json index 928b6f13..f0cee030 100644 --- a/packages/helia/package.json +++ b/packages/helia/package.json @@ -46,10 +46,6 @@ ".": { "types": "./dist/src/index.d.ts", "import": "./dist/src/index.js" - }, - "./hashers": { - "types": "./dist/src/utils/default-hashers.d.ts", - "import": "./dist/src/utils/default-hashers.js" } }, "eslintConfig": { diff --git a/packages/helia/src/index.ts b/packages/helia/src/index.ts index f9d63277..c5a47f47 100644 --- a/packages/helia/src/index.ts +++ b/packages/helia/src/index.ts @@ -22,6 +22,7 @@ import { MemoryBlockstore } from 'blockstore-core' import { MemoryDatastore } from 'datastore-core' import { HeliaImpl } from './helia.js' +import { libp2pDefaults } from './utils/libp2p-defaults.js' import { createLibp2p } from './utils/libp2p.js' import type { DefaultLibp2pServices } from './utils/libp2p-defaults.js' import type { Helia } from '@helia/interface' @@ -40,6 +41,9 @@ export * from '@helia/interface' export * from '@helia/interface/blocks' export * from '@helia/interface/pins' +export type { DefaultLibp2pServices } +export { libp2pDefaults } + /** * DAGWalkers take a block and yield CIDs encoded in that block */ diff --git a/packages/helia/src/utils/libp2p-defaults.browser.ts b/packages/helia/src/utils/libp2p-defaults.browser.ts index 0a1e71d6..253527dc 100644 --- a/packages/helia/src/utils/libp2p-defaults.browser.ts +++ b/packages/helia/src/utils/libp2p-defaults.browser.ts @@ -34,7 +34,7 @@ export interface DefaultLibp2pServices extends Record { pubsub: PubSub } -export function libp2pDefaults (options: Libp2pDefaultsOptions): Libp2pOptions { +export function libp2pDefaults (options: Libp2pDefaultsOptions = {}): Libp2pOptions { return { peerId: options.peerId, addresses: { diff --git a/packages/helia/src/utils/libp2p-defaults.ts b/packages/helia/src/utils/libp2p-defaults.ts index 549d04c4..2d1fb042 100644 --- a/packages/helia/src/utils/libp2p-defaults.ts +++ b/packages/helia/src/utils/libp2p-defaults.ts @@ -38,7 +38,7 @@ export interface DefaultLibp2pServices extends Record { upnp: unknown } -export function libp2pDefaults (options: Libp2pDefaultsOptions): Libp2pOptions { +export function libp2pDefaults (options: Libp2pDefaultsOptions = {}): Libp2pOptions { return { peerId: options.peerId, addresses: { diff --git a/packages/interop/package.json b/packages/interop/package.json index be61bb97..a0e3d86d 100644 --- a/packages/interop/package.json +++ b/packages/interop/package.json @@ -53,27 +53,41 @@ "test:electron-main": "aegir test -t electron-main" }, "devDependencies": { - "@chainsafe/libp2p-noise": "^14.0.0", - "@chainsafe/libp2p-yamux": "^6.0.1", "@helia/block-brokers": "^0.0.0", + "@helia/car": "^2.0.0", + "@helia/dag-cbor": "^2.0.0", + "@helia/dag-json": "^2.0.0", "@helia/interface": "^3.0.0", - "@libp2p/identify": "^1.0.1", + "@helia/ipns": "^4.0.0", + "@helia/json": "^2.0.0", + "@helia/mfs": "^2.0.0", + "@helia/strings": "^2.0.0", + "@helia/unixfs": "^2.0.0", + "@ipld/car": "^5.2.5", + "@ipld/dag-cbor": "^9.0.7", + "@libp2p/interface": "^1.1.1", + "@libp2p/kad-dht": "^12.0.2", + "@libp2p/keychain": "^4.0.5", "@libp2p/peer-id": "^4.0.3", - "@libp2p/tcp": "^9.0.1", + "@libp2p/peer-id-factory": "^4.0.3", "@libp2p/websockets": "^8.0.1", "@multiformats/sha3": "^3.0.0", "aegir": "^42.0.0", - "blockstore-core": "^4.0.0", - "datastore-core": "^9.0.0", "helia": "^3.0.0", + "ipfs-core-types": "^0.14.1", + "ipfs-unixfs-importer": "^15.2.3", "ipfsd-ctl": "^13.0.0", "it-all": "^3.0.4", "it-drain": "^3.0.5", + "it-last": "^3.0.4", + "it-map": "^3.0.5", "it-to-buffer": "^4.0.1", "kubo": "^0.25.0", "kubo-rpc-client": "^3.0.1", - "libp2p": "^1.0.1", - "multiformats": "^13.0.0" + "multiformats": "^13.0.0", + "p-defer": "^4.0.0", + "uint8arrays": "^5.0.1", + "wherearewe": "^2.0.1" }, "browser": { "./dist/test/fixtures/create-helia.js": "./dist/test/fixtures/create-helia.browser.js", diff --git a/packages/interop/test/car.spec.ts b/packages/interop/test/car.spec.ts index 41b8992c..0b108366 100644 --- a/packages/interop/test/car.spec.ts +++ b/packages/interop/test/car.spec.ts @@ -14,7 +14,7 @@ import type { Helia } from '@helia/interface' import type { FileCandidate } from 'ipfs-unixfs-importer' import type { Controller } from 'ipfsd-ctl' -describe('car interop', () => { +describe('@helia/car', () => { let helia: Helia let c: Car let u: UnixFS diff --git a/packages/interop/test/dag-cbor.spec.ts b/packages/interop/test/dag-cbor.spec.ts index 6bbc4cf7..f6aa223b 100644 --- a/packages/interop/test/dag-cbor.spec.ts +++ b/packages/interop/test/dag-cbor.spec.ts @@ -10,7 +10,7 @@ import type { Helia } from '@helia/interface' import type { PutOptions as KuboAddOptions } from 'ipfs-core-types/src/block/index.js' import type { Controller } from 'ipfsd-ctl' -describe('dag-json interop', () => { +describe('@helia/dag-cbor', () => { let helia: Helia let d: DAGCBOR let kubo: Controller diff --git a/packages/interop/test/dag-json.spec.ts b/packages/interop/test/dag-json.spec.ts index a16338cb..45b870b1 100644 --- a/packages/interop/test/dag-json.spec.ts +++ b/packages/interop/test/dag-json.spec.ts @@ -10,7 +10,7 @@ import type { Helia } from '@helia/interface' import type { PutOptions as KuboAddOptions } from 'ipfs-core-types/src/block/index.js' import type { Controller } from 'ipfsd-ctl' -describe('dag-json interop', () => { +describe('@helia/dag-json', () => { let helia: Helia let d: DAGJSON let kubo: Controller diff --git a/packages/interop/test/fixtures/create-helia.browser.ts b/packages/interop/test/fixtures/create-helia.browser.ts index 8a48541f..642f5f2f 100644 --- a/packages/interop/test/fixtures/create-helia.browser.ts +++ b/packages/interop/test/fixtures/create-helia.browser.ts @@ -1,51 +1,62 @@ -import { noise } from '@chainsafe/libp2p-noise' -import { yamux } from '@chainsafe/libp2p-yamux' import { bitswap } from '@helia/block-brokers' -import { identify } from '@libp2p/identify' +import { ipnsValidator, ipnsSelector } from '@helia/ipns' +import { kadDHT, removePublicAddressesMapper } from '@libp2p/kad-dht' import { webSockets } from '@libp2p/websockets' import { all } from '@libp2p/websockets/filters' -import { MemoryBlockstore } from 'blockstore-core' -import { MemoryDatastore } from 'datastore-core' -import { createHelia, type HeliaInit } from 'helia' -import { createLibp2p } from 'libp2p' +import { sha3512 } from '@multiformats/sha3' +import { createHelia, libp2pDefaults } from 'helia' import type { Helia } from '@helia/interface' +import type { Libp2p } from '@libp2p/interface' +import type { DefaultLibp2pServices } from 'helia' -export async function createHeliaNode (init?: Partial): Promise { - const blockstore = new MemoryBlockstore() - const datastore = new MemoryDatastore() +export async function createHeliaNode (): Promise>> { + const defaults = libp2pDefaults() - // dial-only in the browser until webrtc browser-to-browser arrives - const libp2p = await createLibp2p({ - transports: [ - webSockets({ - filter: all - }) - ], - connectionEncryption: [ - noise() - ], - streamMuxers: [ - yamux() - ], - datastore, - services: { - identify: identify() - }, - connectionGater: { - // allow dialing loopback - denyDialMultiaddr: () => false - } - }) + // allow dialing insecure WebSockets + defaults.transports?.pop() + defaults.transports = [ + ...(defaults.transports ?? []), + webSockets({ + filter: all + }) + ] + + // allow dialing loopback + defaults.connectionGater = { + denyDialMultiaddr: () => false + } - const helia = await createHelia({ - libp2p, + // use LAN DHT + defaults.services = { + ...(defaults.services ?? {}), + dht: kadDHT({ + validators: { + ipns: ipnsValidator + }, + selectors: { + ipns: ipnsSelector + }, + // skips waiting for the initial self-query to find peers + allowQueryWithZeroPeers: true, + + protocol: '/ipfs/lan/kad/1.0.0', + peerInfoMapper: removePublicAddressesMapper, + clientMode: false + }) + } + + // remove services that are not used in tests + delete defaults.services.autoNAT + delete defaults.services.dcutr + delete defaults.services.delegatedRouting + + return createHelia>({ blockBrokers: [ bitswap() ], - blockstore, - datastore, - ...init + libp2p: defaults, + hashers: [ + sha3512 + ] }) - - return helia } diff --git a/packages/interop/test/fixtures/create-helia.ts b/packages/interop/test/fixtures/create-helia.ts index 559a3fec..301ce0bb 100644 --- a/packages/interop/test/fixtures/create-helia.ts +++ b/packages/interop/test/fixtures/create-helia.ts @@ -1,48 +1,49 @@ -import { noise } from '@chainsafe/libp2p-noise' -import { yamux } from '@chainsafe/libp2p-yamux' import { bitswap } from '@helia/block-brokers' -import { identify } from '@libp2p/identify' -import { tcp } from '@libp2p/tcp' -import { MemoryBlockstore } from 'blockstore-core' -import { MemoryDatastore } from 'datastore-core' -import { createHelia, type HeliaInit } from 'helia' -import { createLibp2p } from 'libp2p' +import { ipnsValidator, ipnsSelector } from '@helia/ipns' +import { kadDHT, removePublicAddressesMapper } from '@libp2p/kad-dht' +import { sha3512 } from '@multiformats/sha3' +import { createHelia, libp2pDefaults } from 'helia' import type { Helia } from '@helia/interface' +import type { Libp2p } from '@libp2p/interface' +import type { DefaultLibp2pServices } from 'helia' -export async function createHeliaNode (init?: Partial): Promise { - const blockstore = new MemoryBlockstore() - const datastore = new MemoryDatastore() +export async function createHeliaNode (): Promise>> { + const defaults = libp2pDefaults() + defaults.addresses = { + listen: [ + '/ip4/0.0.0.0/tcp/0' + ] + } + defaults.services = { + ...(defaults.services ?? {}), + dht: kadDHT({ + validators: { + ipns: ipnsValidator + }, + selectors: { + ipns: ipnsSelector + }, + // skips waiting for the initial self-query to find peers + allowQueryWithZeroPeers: true, - const libp2p = await createLibp2p({ - addresses: { - listen: [ - '/ip4/0.0.0.0/tcp/0' - ] - }, - transports: [ - tcp() - ], - connectionEncryption: [ - noise() - ], - streamMuxers: [ - yamux() - ], - datastore, - services: { - identify: identify() - } - }) + protocol: '/ipfs/lan/kad/1.0.0', + peerInfoMapper: removePublicAddressesMapper, + clientMode: false + }) + } + + // remove services that are not used in tests + delete defaults.services.autoNAT + delete defaults.services.dcutr + delete defaults.services.delegatedRouting - const helia = await createHelia({ - libp2p, + return createHelia>({ blockBrokers: [ bitswap() ], - blockstore, - datastore, - ...init + libp2p: defaults, + hashers: [ + sha3512 + ] }) - - return helia } diff --git a/packages/interop/test/fixtures/create-kubo.browser.ts b/packages/interop/test/fixtures/create-kubo.browser.ts index 2e6645e4..48a6633b 100644 --- a/packages/interop/test/fixtures/create-kubo.browser.ts +++ b/packages/interop/test/fixtures/create-kubo.browser.ts @@ -15,6 +15,7 @@ export async function createKuboNode (): Promise { ] } } - } + }, + args: ['--enable-pubsub-experiment', '--enable-namesys-pubsub'] }) } diff --git a/packages/interop/test/fixtures/create-kubo.ts b/packages/interop/test/fixtures/create-kubo.ts index f05517ea..fa7718b4 100644 --- a/packages/interop/test/fixtures/create-kubo.ts +++ b/packages/interop/test/fixtures/create-kubo.ts @@ -17,6 +17,7 @@ export async function createKuboNode (): Promise { ] } } - } + }, + args: ['--enable-pubsub-experiment', '--enable-namesys-pubsub'] }) } diff --git a/packages/interop/test/blockstore.spec.ts b/packages/interop/test/helia-blockstore.spec.ts similarity index 97% rename from packages/interop/test/blockstore.spec.ts rename to packages/interop/test/helia-blockstore.spec.ts index fa08cfcb..401e4c73 100644 --- a/packages/interop/test/blockstore.spec.ts +++ b/packages/interop/test/helia-blockstore.spec.ts @@ -11,7 +11,7 @@ import { createKuboNode } from './fixtures/create-kubo.js' import type { Helia } from '@helia/interface' import type { Controller } from 'ipfsd-ctl' -describe('blockstore', () => { +describe('helia - blockstore', () => { let helia: Helia let kubo: Controller diff --git a/packages/interop/test/hashes.spec.ts b/packages/interop/test/helia-hashes.spec.ts similarity index 94% rename from packages/interop/test/hashes.spec.ts rename to packages/interop/test/helia-hashes.spec.ts index 79715829..ef1ff42d 100644 --- a/packages/interop/test/hashes.spec.ts +++ b/packages/interop/test/helia-hashes.spec.ts @@ -11,16 +11,12 @@ import { createKuboNode } from './fixtures/create-kubo.js' import type { Helia } from '@helia/interface' import type { Controller } from 'ipfsd-ctl' -describe('hashes', () => { +describe('helia - hashes', () => { let helia: Helia let kubo: Controller beforeEach(async () => { - helia = await createHeliaNode({ - hashers: [ - sha3512 - ] - }) + helia = await createHeliaNode() kubo = await createKuboNode() // connect the two nodes diff --git a/packages/interop/test/pins.spec.ts b/packages/interop/test/helia-pins.spec.ts similarity index 98% rename from packages/interop/test/pins.spec.ts rename to packages/interop/test/helia-pins.spec.ts index d443846f..f798ea06 100644 --- a/packages/interop/test/pins.spec.ts +++ b/packages/interop/test/helia-pins.spec.ts @@ -11,7 +11,7 @@ import { createKuboNode } from './fixtures/create-kubo.js' import type { Helia } from '@helia/interface' import type { Controller } from 'ipfsd-ctl' -describe('pins', () => { +describe('helia - pins', () => { let helia: Helia let kubo: Controller diff --git a/packages/interop/test/ipns-libp2p.spec.ts b/packages/interop/test/ipns-libp2p.spec.ts index 87cfc9d5..a71c8055 100644 --- a/packages/interop/test/ipns-libp2p.spec.ts +++ b/packages/interop/test/ipns-libp2p.spec.ts @@ -2,14 +2,9 @@ import { ipns } from '@helia/ipns' import { libp2p } from '@helia/ipns/routing' -import { identify } from '@libp2p/identify' -import { kadDHT, removePublicAddressesMapper, type KadDHT } from '@libp2p/kad-dht' -import { keychain, type Keychain } from '@libp2p/keychain' import { peerIdFromString } from '@libp2p/peer-id' import { createEd25519PeerId, createRSAPeerId, createSecp256k1PeerId } from '@libp2p/peer-id-factory' import { expect } from 'aegir/chai' -import { ipnsSelector } from 'ipns/selector' -import { ipnsValidator } from 'ipns/validator' import last from 'it-last' import { CID } from 'multiformats/cid' import * as raw from 'multiformats/codecs/raw' @@ -26,10 +21,12 @@ import { waitFor } from './fixtures/wait-for.js' import type { Helia } from '@helia/interface' import type { IPNS } from '@helia/ipns' import type { Libp2p, PeerId } from '@libp2p/interface' +import type { KadDHT } from '@libp2p/kad-dht' +import type { Keychain } from '@libp2p/keychain' import type { Controller } from 'ipfsd-ctl' keyTypes.forEach(type => { - describe(`libp2p routing with ${type} keys`, () => { + describe(`@helia/ipns - libp2p routing with ${type} keys`, () => { let helia: Helia> let kubo: Controller let name: IPNS @@ -50,27 +47,7 @@ keyTypes.forEach(type => { const digest = await sha256.digest(input) value = CID.createV1(raw.code, digest) - helia = await createHeliaNode({ - services: { - identify: identify(), - dht: kadDHT({ - validators: { - ipns: ipnsValidator - }, - selectors: { - ipns: ipnsSelector - }, - // skips waiting for the initial self-query to find peers - allowQueryWithZeroPeers: true, - - // use lan-only mode - protocol: '/ipfs/lan/kad/1.0.0', - peerInfoMapper: removePublicAddressesMapper, - clientMode: false - }), - keychain: keychain() - } - }) + helia = await createHeliaNode() kubo = await createKuboNode() // find a PeerId that is KAD-closer to the resolver than the publisher when used as an IPNS key diff --git a/packages/interop/test/ipns-pubsub.spec.ts b/packages/interop/test/ipns-pubsub.spec.ts index b8feb78b..4884762f 100644 --- a/packages/interop/test/ipns-pubsub.spec.ts +++ b/packages/interop/test/ipns-pubsub.spec.ts @@ -1,11 +1,8 @@ /* eslint-env mocha */ /* eslint max-nested-callbacks: ["error", 5] */ -import { gossipsub } from '@chainsafe/libp2p-gossipsub' import { ipns } from '@helia/ipns' import { pubsub } from '@helia/ipns/routing' -import { identify } from '@libp2p/identify' -import { keychain, type Keychain } from '@libp2p/keychain' import { peerIdFromKeys } from '@libp2p/peer-id' import { expect } from 'aegir/chai' import last from 'it-last' @@ -24,9 +21,9 @@ import { keyTypes } from './fixtures/key-types.js' import { waitFor } from './fixtures/wait-for.js' import type { Helia } from '@helia/interface' import type { IPNS } from '@helia/ipns' -import type { Identify } from '@libp2p/identify' import type { Libp2p } from '@libp2p/interface' import type { PubSub } from '@libp2p/interface/pubsub' +import type { Keychain } from '@libp2p/keychain' import type { Controller } from 'ipfsd-ctl' const LIBP2P_KEY_CODEC = 0x72 @@ -35,22 +32,14 @@ const LIBP2P_KEY_CODEC = 0x72 // component of the keypair, but that means we can't test pubsub // resolution because Kubo will use the DHT as well keyTypes.filter(keyType => keyType !== 'RSA').forEach(keyType => { - describe(`pubsub routing with ${keyType} keys`, () => { + describe(`@helia/ipns - pubsub routing with ${keyType} keys`, () => { let helia: Helia> let kubo: Controller let name: IPNS beforeEach(async () => { - helia = await createHeliaNode<{ identify: Identify, pubsub: PubSub, keychain: Keychain }>({ - services: { - identify: identify(), - pubsub: gossipsub(), - keychain: keychain() - } - }) - kubo = await createKuboNode({ - args: ['--enable-pubsub-experiment', '--enable-namesys-pubsub'] - }) + helia = await createHeliaNode() + kubo = await createKuboNode() // connect the two nodes await connect(helia, kubo, '/meshsub/1.1.0') diff --git a/packages/interop/test/json.spec.ts b/packages/interop/test/json.spec.ts index 55cc9107..9cb702c0 100644 --- a/packages/interop/test/json.spec.ts +++ b/packages/interop/test/json.spec.ts @@ -10,7 +10,7 @@ import type { Helia } from '@helia/interface' import type { PutOptions as KuboAddOptions } from 'ipfs-core-types/src/block/index.js' import type { Controller } from 'ipfsd-ctl' -describe('json interop', () => { +describe('@helia/json', () => { let helia: Helia let j: JSON let kubo: Controller diff --git a/packages/interop/test/mfs.spec.ts b/packages/interop/test/mfs.spec.ts index 963f0474..58b48d78 100644 --- a/packages/interop/test/mfs.spec.ts +++ b/packages/interop/test/mfs.spec.ts @@ -7,7 +7,7 @@ import { createKuboNode } from './fixtures/create-kubo.js' import type { Helia } from '@helia/interface' import type { Controller } from 'ipfsd-ctl' -describe('mfs interop', () => { +describe('@helia/mfs', () => { let helia: Helia let fs: MFS let kubo: Controller diff --git a/packages/interop/test/strings.spec.ts b/packages/interop/test/strings.spec.ts index 894f6964..66f8bcdb 100644 --- a/packages/interop/test/strings.spec.ts +++ b/packages/interop/test/strings.spec.ts @@ -11,7 +11,7 @@ import type { Helia } from '@helia/interface' import type { PutOptions as KuboAddOptions } from 'ipfs-core-types/src/block/index.js' import type { Controller } from 'ipfsd-ctl' -describe('strings interop', () => { +describe('@helia/strings', () => { let helia: Helia let str: Strings let kubo: Controller diff --git a/packages/interop/test/unixfs-bitswap.spec.ts b/packages/interop/test/unixfs-bitswap.spec.ts index 7990e7de..948d61fb 100644 --- a/packages/interop/test/unixfs-bitswap.spec.ts +++ b/packages/interop/test/unixfs-bitswap.spec.ts @@ -11,7 +11,7 @@ import type { Libp2p } from '@libp2p/interface' import type { FileCandidate } from 'ipfs-unixfs-importer' import type { Controller } from 'ipfsd-ctl' -describe('unixfs bitswap interop', () => { +describe('@helia/unixfs - bitswap', () => { let helia: Helia let unixFs: UnixFS let kubo: Controller diff --git a/packages/interop/test/unixfs-files.spec.ts b/packages/interop/test/unixfs-files.spec.ts index db329bf4..45dd3d83 100644 --- a/packages/interop/test/unixfs-files.spec.ts +++ b/packages/interop/test/unixfs-files.spec.ts @@ -13,7 +13,7 @@ import type { AddOptions as KuboAddOptions } from 'ipfs-core-types/src/root.js' import type { FileCandidate } from 'ipfs-unixfs-importer' import type { Controller } from 'ipfsd-ctl' -describe('unixfs interop', () => { +describe('@helia/unixfs - files', () => { let helia: Helia let unixFs: UnixFS let kubo: Controller