Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: expose .dns property on @helia/interface #465

Merged
merged 5 commits into from
Mar 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading