Skip to content

Commit

Permalink
feat: expose .dns property on @helia/interface (#465)
Browse files Browse the repository at this point in the history
Exposes a `.dns` property on the Helia interface for use with other
modules such as @helia/ipns.

Refs: ipfs/helia-verified-fetch#13 (comment)
  • Loading branch information
achingbrain authored Mar 13, 2024
1 parent a64e5de commit 8c9bb7d
Show file tree
Hide file tree
Showing 9 changed files with 27 additions and 1 deletion.
3 changes: 2 additions & 1 deletion packages/helia/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,13 @@
"@libp2p/webrtc": "^4.0.20",
"@libp2p/websockets": "^8.0.16",
"@libp2p/webtransport": "^4.0.20",
"@multiformats/dns": "^1.0.1",
"blockstore-core": "^4.4.0",
"datastore-core": "^9.2.9",
"interface-blockstore": "^5.2.10",
"interface-datastore": "^8.2.11",
"ipns": "^9.0.0",
"libp2p": "^1.2.4",
"libp2p": "^1.3.0",
"multiformats": "^13.1.0"
},
"devDependencies": {
Expand Down
1 change: 1 addition & 0 deletions packages/helia/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ export async function createHelia (init: Partial<HeliaInit> = {}): Promise<Helia
libp2p = await createLibp2p<DefaultLibp2pServices>({
...init,
libp2p: {
dns: init.dns,
...init.libp2p,

// ignore the libp2p start parameter as it should be on the main init
Expand Down
1 change: 1 addition & 0 deletions packages/helia/src/utils/libp2p-defaults.browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export interface DefaultLibp2pServices extends Record<string, unknown> {
export function libp2pDefaults (options: Libp2pDefaultsOptions = {}): Libp2pOptions<DefaultLibp2pServices> {
return {
peerId: options.peerId,
dns: options.dns,
addresses: {
listen: [
'/webrtc'
Expand Down
1 change: 1 addition & 0 deletions packages/helia/src/utils/libp2p-defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export interface DefaultLibp2pServices extends Record<string, unknown> {
export function libp2pDefaults (options: Libp2pDefaultsOptions = {}): Libp2pOptions<DefaultLibp2pServices> {
return {
peerId: options.peerId,
dns: options.dns,
addresses: {
listen: [
'/ip4/0.0.0.0/tcp/0',
Expand Down
2 changes: 2 additions & 0 deletions packages/helia/src/utils/libp2p.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { libp2pDefaults } from './libp2p-defaults.js'
import type { DefaultLibp2pServices } from './libp2p-defaults.js'
import type { ComponentLogger, Libp2p, PeerId } from '@libp2p/interface'
import type { Keychain, KeychainInit } from '@libp2p/keychain'
import type { DNS } from '@multiformats/dns'
import type { Datastore } from 'interface-datastore'
import type { Libp2pOptions } from 'libp2p'

Expand All @@ -20,6 +21,7 @@ export interface CreateLibp2pOptions<T extends Record<string, unknown>> {
export interface Libp2pDefaultsOptions {
peerId?: PeerId
keychain?: KeychainInit
dns?: DNS
}

export async function createLibp2p <T extends Record<string, unknown> = DefaultLibp2pServices> (options: CreateLibp2pOptions<T>): Promise<Libp2p<T>> {
Expand Down
1 change: 1 addition & 0 deletions packages/interface/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
},
"dependencies": {
"@libp2p/interface": "^1.1.4",
"@multiformats/dns": "^1.0.1",
"interface-blockstore": "^5.2.10",
"interface-datastore": "^8.2.11",
"interface-store": "^5.1.8",
Expand Down
7 changes: 7 additions & 0 deletions packages/interface/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import type { Blocks } from './blocks.js'
import type { Pins } from './pins.js'
import type { Routing } from './routing.js'
import type { AbortOptions, ComponentLogger } from '@libp2p/interface'
import type { DNS } from '@multiformats/dns'
import type { Datastore } from 'interface-datastore'
import type { MultihashHasher } from 'multiformats'
import type { CID } from 'multiformats/cid'
Expand Down Expand Up @@ -67,6 +68,12 @@ export interface Helia {
*/
hashers: Record<number, MultihashHasher>

/**
* The DNS property can be used to perform lookups of various record types and
* will use a resolver appropriate to the current platform.
*/
dns: DNS

/**
* Starts the Helia node
*/
Expand Down
1 change: 1 addition & 0 deletions packages/utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
"@libp2p/logger": "^4.0.7",
"@libp2p/peer-collections": "^5.1.7",
"@libp2p/utils": "^5.2.6",
"@multiformats/dns": "^1.0.1",
"any-signal": "^4.1.1",
"blockstore-core": "^4.4.0",
"cborg": "^4.0.9",
Expand Down
11 changes: 11 additions & 0 deletions packages/utils/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import { contentRoutingSymbol, peerRoutingSymbol, start, stop } from '@libp2p/interface'
import { defaultLogger } from '@libp2p/logger'
import { dns } from '@multiformats/dns'
import drain from 'it-drain'
import { CustomProgressEvent } from 'progress-events'
import { PinsImpl } from './pins.js'
Expand All @@ -32,6 +33,7 @@ import type { DAGWalker, GCOptions, Helia as HeliaInterface, Routing } from '@he
import type { BlockBroker } from '@helia/interface/blocks'
import type { Pins } from '@helia/interface/pins'
import type { ComponentLogger, Logger } from '@libp2p/interface'
import type { DNS } from '@multiformats/dns'
import type { Blockstore } from 'interface-blockstore'
import type { Datastore } from 'interface-datastore'
import type { CID } from 'multiformats/cid'
Expand Down Expand Up @@ -103,6 +105,11 @@ export interface HeliaInit {
* Components used by subclasses
*/
components?: Record<string, any>

/**
* An optional DNS implementation used to perform queries for DNS records.
*/
dns?: DNS
}

interface Components {
Expand All @@ -112,6 +119,7 @@ interface Components {
dagWalkers: Record<number, DAGWalker>
logger: ComponentLogger
blockBrokers: BlockBroker[]
dns: DNS
}

export class Helia implements HeliaInterface {
Expand All @@ -122,13 +130,15 @@ export class Helia implements HeliaInterface {
public routing: Routing
public dagWalkers: Record<number, DAGWalker>
public hashers: Record<number, MultihashHasher>
public dns: DNS
private readonly log: Logger

constructor (init: HeliaInit) {
this.logger = init.logger ?? defaultLogger()
this.log = this.logger.forComponent('helia')
this.hashers = defaultHashers(init.hashers)
this.dagWalkers = defaultDagWalkers(init.dagWalkers)
this.dns = init.dns ?? dns()

const components: Components = {
blockstore: init.blockstore,
Expand All @@ -137,6 +147,7 @@ export class Helia implements HeliaInterface {
dagWalkers: this.dagWalkers,
logger: this.logger,
blockBrokers: [],
dns: this.dns,
...(init.components ?? {})
}

Expand Down

0 comments on commit 8c9bb7d

Please sign in to comment.