Skip to content

Commit cceb4db

Browse files
authored
Merge branch 'main' into dependabot/npm_and_yarn/node-datachannel-0.23.0
2 parents 9268253 + 023ea57 commit cceb4db

File tree

128 files changed

+4130
-1496
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+4130
-1496
lines changed

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"packages/auto-tls":"0.0.0","packages/connection-encrypter-plaintext":"2.0.11","packages/connection-encrypter-tls":"2.0.11","packages/crypto":"5.0.7","packages/interface":"2.2.1","packages/interface-compliance-tests":"6.1.11","packages/interface-internal":"2.1.1","packages/kad-dht":"14.1.3","packages/keychain":"5.0.10","packages/libp2p":"2.3.1","packages/logger":"5.1.4","packages/metrics-devtools":"1.1.10","packages/metrics-prometheus":"4.2.7","packages/metrics-simple":"1.2.7","packages/multistream-select":"6.0.9","packages/peer-collections":"6.0.12","packages/peer-discovery-bootstrap":"11.0.13","packages/peer-discovery-mdns":"11.0.13","packages/peer-id":"5.0.8","packages/peer-record":"8.0.12","packages/peer-store":"11.0.12","packages/pnet":"2.0.13","packages/protocol-autonat":"2.0.12","packages/protocol-dcutr":"2.0.12","packages/protocol-echo":"2.1.3","packages/protocol-fetch":"2.0.12","packages/protocol-identify":"3.0.12","packages/protocol-perf":"4.0.13","packages/protocol-ping":"2.0.12","packages/pubsub":"10.0.12","packages/pubsub-floodsub":"10.1.11","packages/record":"4.0.4","packages/stream-multiplexer-mplex":"11.0.13","packages/transport-circuit-relay-v2":"3.1.3","packages/transport-memory":"1.0.1","packages/transport-tcp":"10.0.13","packages/transport-webrtc":"5.0.19","packages/transport-websockets":"9.0.13","packages/transport-webtransport":"5.0.18","packages/upnp-nat":"2.0.12","packages/utils":"6.2.1"}
1+
{"packages/auto-tls":"1.0.1","packages/connection-encrypter-plaintext":"2.0.12","packages/connection-encrypter-tls":"2.0.12","packages/crypto":"5.0.8","packages/interface":"2.3.0","packages/interface-compliance-tests":"6.2.1","packages/interface-internal":"2.2.1","packages/kad-dht":"14.1.5","packages/keychain":"5.0.11","packages/libp2p":"2.4.1","packages/logger":"5.1.5","packages/metrics-devtools":"1.1.12","packages/metrics-prometheus":"4.2.9","packages/metrics-simple":"1.2.8","packages/multistream-select":"6.0.10","packages/peer-collections":"6.0.13","packages/peer-discovery-bootstrap":"11.0.15","packages/peer-discovery-mdns":"11.0.15","packages/peer-id":"5.0.9","packages/peer-record":"8.0.13","packages/peer-store":"11.0.13","packages/pnet":"2.0.15","packages/protocol-autonat":"2.0.14","packages/protocol-dcutr":"2.0.14","packages/protocol-echo":"2.1.5","packages/protocol-fetch":"2.0.14","packages/protocol-identify":"3.0.14","packages/protocol-perf":"4.0.15","packages/protocol-ping":"2.0.14","packages/pubsub":"10.0.14","packages/pubsub-floodsub":"10.1.13","packages/record":"4.0.4","packages/stream-multiplexer-mplex":"11.0.15","packages/transport-circuit-relay-v2":"3.1.5","packages/transport-memory":"1.0.2","packages/transport-tcp":"10.0.14","packages/transport-webrtc":"5.0.21","packages/transport-websockets":"9.1.0","packages/transport-webtransport":"5.0.20","packages/upnp-nat":"3.0.2","packages/utils":"6.3.0"}

packages/auto-tls/CHANGELOG.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Changelog
2+
3+
## [1.0.1](https://github.com/libp2p/js-libp2p/compare/auto-tls-v1.0.0...auto-tls-v1.0.1) (2024-12-10)
4+
5+
6+
### Dependencies
7+
8+
* The following workspace dependencies were updated
9+
* dependencies
10+
* @libp2p/interface-internal bumped from ^2.2.0 to ^2.2.1
11+
12+
## 1.0.0 (2024-12-09)
13+
14+
15+
### Features
16+
17+
* add auto-confirm option to auto-tls ([#2875](https://github.com/libp2p/js-libp2p/issues/2875)) ([2625cc3](https://github.com/libp2p/js-libp2p/commit/2625cc323b77ed4843d200a3b7022f80eba2e8f8))
18+
* add auto-tls service ([#2798](https://github.com/libp2p/js-libp2p/issues/2798)) ([d866eb5](https://github.com/libp2p/js-libp2p/commit/d866eb5bb8269485364c233119331ca073ff1343))
19+
20+
21+
### Bug Fixes
22+
23+
* add retries to certificate provisioning ([#2841](https://github.com/libp2p/js-libp2p/issues/2841)) ([98b4304](https://github.com/libp2p/js-libp2p/commit/98b43045cb4786defc74e21c637489109377ea35))
24+
* require external confirmation of public addresses ([#2867](https://github.com/libp2p/js-libp2p/issues/2867)) ([d19974d](https://github.com/libp2p/js-libp2p/commit/d19974d93a1015acfca95c2155dbcffc5fd6a6c0))
25+
26+
27+
### Dependencies
28+
29+
* The following workspace dependencies were updated
30+
* dependencies
31+
* @libp2p/crypto bumped from ^5.0.7 to ^5.0.8
32+
* @libp2p/interface bumped from ^2.2.1 to ^2.3.0
33+
* @libp2p/interface-internal bumped from ^2.1.1 to ^2.2.0
34+
* @libp2p/keychain bumped from ^5.0.10 to ^5.0.11
35+
* @libp2p/utils bumped from ^6.2.1 to ^6.3.0
36+
* devDependencies
37+
* @libp2p/logger bumped from ^5.1.4 to ^5.1.5
38+
* @libp2p/peer-id bumped from ^5.0.8 to ^5.0.9

packages/auto-tls/package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@libp2p/auto-tls",
3-
"version": "0.0.0",
3+
"version": "1.0.1",
44
"description": "Automatically acquire a <peerId>.libp2p.direct TLS certificate",
55
"license": "Apache-2.0 OR MIT",
66
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/auto-tls#readme",
@@ -47,12 +47,12 @@
4747
},
4848
"dependencies": {
4949
"@chainsafe/is-ip": "^2.0.2",
50-
"@libp2p/crypto": "^5.0.7",
50+
"@libp2p/crypto": "^5.0.8",
5151
"@libp2p/http-fetch": "^2.1.0",
52-
"@libp2p/interface": "^2.2.1",
53-
"@libp2p/interface-internal": "^2.1.1",
54-
"@libp2p/keychain": "^5.0.10",
55-
"@libp2p/utils": "^6.2.1",
52+
"@libp2p/interface": "^2.3.0",
53+
"@libp2p/interface-internal": "^2.2.1",
54+
"@libp2p/keychain": "^5.0.11",
55+
"@libp2p/utils": "^6.3.0",
5656
"@multiformats/multiaddr": "^12.3.3",
5757
"@multiformats/multiaddr-matcher": "^1.6.0",
5858
"@peculiar/x509": "^1.12.3",
@@ -64,8 +64,8 @@
6464
"uint8arrays": "^5.1.0"
6565
},
6666
"devDependencies": {
67-
"@libp2p/logger": "^5.1.4",
68-
"@libp2p/peer-id": "^5.0.8",
67+
"@libp2p/logger": "^5.1.5",
68+
"@libp2p/peer-id": "^5.0.9",
6969
"aegir": "^45.0.5",
7070
"datastore-core": "^10.0.2",
7171
"p-event": "^6.0.1",

packages/auto-tls/src/auto-tls.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { base36 } from 'multiformats/bases/base36'
1010
import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
1111
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
1212
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
13-
import { DEFAULT_ACCOUNT_PRIVATE_KEY_BITS, DEFAULT_ACCOUNT_PRIVATE_KEY_NAME, DEFAULT_ACME_DIRECTORY, DEFAULT_CERTIFICATE_DATASTORE_KEY, DEFAULT_CERTIFICATE_PRIVATE_KEY_BITS, DEFAULT_CERTIFICATE_PRIVATE_KEY_NAME, DEFAULT_FORGE_DOMAIN, DEFAULT_FORGE_ENDPOINT, DEFAULT_PROVISION_DELAY, DEFAULT_PROVISION_REQUEST_TIMEOUT, DEFAULT_PROVISION_TIMEOUT, DEFAULT_RENEWAL_THRESHOLD } from './constants.js'
13+
import { DEFAULT_ACCOUNT_PRIVATE_KEY_BITS, DEFAULT_ACCOUNT_PRIVATE_KEY_NAME, DEFAULT_ACME_DIRECTORY, DEFAULT_AUTO_CONFIRM_ADDRESS, DEFAULT_CERTIFICATE_DATASTORE_KEY, DEFAULT_CERTIFICATE_PRIVATE_KEY_BITS, DEFAULT_CERTIFICATE_PRIVATE_KEY_NAME, DEFAULT_FORGE_DOMAIN, DEFAULT_FORGE_ENDPOINT, DEFAULT_PROVISION_DELAY, DEFAULT_PROVISION_REQUEST_TIMEOUT, DEFAULT_PROVISION_TIMEOUT, DEFAULT_RENEWAL_THRESHOLD } from './constants.js'
1414
import { DomainMapper } from './domain-mapper.js'
1515
import { createCsr, importFromPem, loadOrCreateKey, supportedAddressesFilter } from './utils.js'
1616
import type { AutoTLSComponents, AutoTLSInit, AutoTLS as AutoTLSInterface } from './index.js'
@@ -60,9 +60,10 @@ export class AutoTLS implements AutoTLSInterface {
6060
private readonly email
6161
private readonly domain
6262
private readonly domainMapper: DomainMapper
63+
private readonly autoConfirmAddress: boolean
6364

6465
constructor (components: AutoTLSComponents, init: AutoTLSInit = {}) {
65-
this.log = components.logger.forComponent('libp2p:certificate-manager')
66+
this.log = components.logger.forComponent('libp2p:auto-tls')
6667
this.addressManager = components.addressManager
6768
this.privateKey = components.privateKey
6869
this.peerId = components.peerId
@@ -80,6 +81,7 @@ export class AutoTLS implements AutoTLSInterface {
8081
this.certificatePrivateKeyName = init.certificatePrivateKeyName ?? DEFAULT_CERTIFICATE_PRIVATE_KEY_NAME
8182
this.certificatePrivateKeyBits = init.certificatePrivateKeyBits ?? DEFAULT_CERTIFICATE_PRIVATE_KEY_BITS
8283
this.certificateDatastoreKey = init.certificateDatastoreKey ?? DEFAULT_CERTIFICATE_DATASTORE_KEY
84+
this.autoConfirmAddress = init.autoConfirmAddress ?? DEFAULT_AUTO_CONFIRM_ADDRESS
8385
this.clientAuth = new ClientAuth(this.privateKey)
8486
this.started = false
8587
this.fetching = false
@@ -100,10 +102,16 @@ export class AutoTLS implements AutoTLSInterface {
100102
]
101103

102104
get [serviceDependencies] (): string[] {
103-
return [
105+
const dependencies = [
104106
'@libp2p/identify',
105107
'@libp2p/keychain'
106108
]
109+
110+
if (!this.autoConfirmAddress) {
111+
dependencies.push('@libp2p/autonat')
112+
}
113+
114+
return dependencies
107115
}
108116

109117
async start (): Promise<void> {
@@ -346,8 +354,8 @@ export class AutoTLS implements AutoTLSInterface {
346354
'Content-Type': 'application/json'
347355
},
348356
body: JSON.stringify({
349-
value: keyAuthorization,
350-
addresses
357+
Value: keyAuthorization,
358+
Addresses: addresses
351359
}),
352360
...options
353361
})

packages/auto-tls/src/constants.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ export const DEFAULT_FORGE_ENDPOINT = 'https://registration.libp2p.direct'
22
export const DEFAULT_FORGE_DOMAIN = 'libp2p.direct'
33
export const DEFAULT_ACME_DIRECTORY = 'https://acme-v02.api.letsencrypt.org/directory'
44
export const DEFAULT_PROVISION_TIMEOUT = 120_000
5-
export const DEFAULT_PROVISION_REQUEST_TIMEOUT = 10_000
5+
export const DEFAULT_PROVISION_REQUEST_TIMEOUT = 60_000
66
export const DEFAULT_PROVISION_DELAY = 5_000
77
export const DEFAULT_RENEWAL_THRESHOLD = 86_400_000
88
export const DEFAULT_ACCOUNT_PRIVATE_KEY_NAME = 'auto-tls-acme-account-private-key'
99
export const DEFAULT_ACCOUNT_PRIVATE_KEY_BITS = 2048
1010
export const DEFAULT_CERTIFICATE_PRIVATE_KEY_NAME = 'auto-tls-certificate-private-key'
1111
export const DEFAULT_CERTIFICATE_PRIVATE_KEY_BITS = 2048
1212
export const DEFAULT_CERTIFICATE_DATASTORE_KEY = '/libp2p/auto-tls/certificate'
13+
export const DEFAULT_AUTO_CONFIRM_ADDRESS = false

packages/auto-tls/src/domain-mapper.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import { isIPv4, isIPv6 } from '@chainsafe/is-ip'
2+
import { multiaddr } from '@multiformats/multiaddr'
23
import { getPublicIps } from './utils.js'
34
import type { ComponentLogger, Libp2pEvents, Logger, TypedEventTarget } from '@libp2p/interface'
45
import type { AddressManager } from '@libp2p/interface-internal'
56

7+
const MAX_DATE = 8_640_000_000_000_000
8+
69
export interface DomainMapperComponents {
710
logger: ComponentLogger
811
events: TypedEventTarget<Libp2pEvents>
@@ -11,6 +14,7 @@ export interface DomainMapperComponents {
1114

1215
export interface DomainMapperInit {
1316
domain: string
17+
autoConfirmAddress?: boolean
1418
}
1519

1620
export class DomainMapper {
@@ -19,13 +23,15 @@ export class DomainMapper {
1923
private readonly events: TypedEventTarget<Libp2pEvents>
2024
private readonly mappedAddresses: Set<string>
2125
private readonly domain: string
26+
private readonly autoConfirmAddress: boolean
2227
private hasCertificate: boolean
2328

2429
constructor (components: DomainMapperComponents, init: DomainMapperInit) {
25-
this.log = components.logger.forComponent('libp2p:certificate-manager:domain-mapper')
30+
this.log = components.logger.forComponent('libp2p:auto-tls:domain-mapper')
2631
this.addressManager = components.addressManager
2732
this.events = components.events
2833
this.domain = init.domain
34+
this.autoConfirmAddress = init.autoConfirmAddress ?? false
2935

3036
this.mappedAddresses = new Set()
3137
this.hasCertificate = false
@@ -58,7 +64,10 @@ export class DomainMapper {
5864
}
5965

6066
updateMappings (): void {
61-
const publicIps = getPublicIps(this.addressManager.getAddresses())
67+
const publicIps = getPublicIps(
68+
this.addressManager.getAddressesWithMetadata()
69+
.map(({ multiaddr }) => multiaddr)
70+
)
6271

6372
// did our public IPs change?
6473
const addedIp4 = []
@@ -113,13 +122,29 @@ export class DomainMapper {
113122
this.log.trace('mapping IP %s to domain %s', ip, domain)
114123
this.addressManager.addDNSMapping(domain, [ip])
115124
this.mappedAddresses.add(ip)
125+
126+
if (this.autoConfirmAddress) {
127+
const ma = multiaddr(`/dns4/${domain}`)
128+
this.log('auto-confirming IP address %a', ma)
129+
this.addressManager.confirmObservedAddr(ma, {
130+
ttl: MAX_DATE - Date.now()
131+
})
132+
}
116133
})
117134

118135
addedIp6.forEach(ip => {
119136
const domain = this.toDomain(ip, 6)
120137
this.log.trace('mapping IP %s to domain %s', ip, domain)
121138
this.addressManager.addDNSMapping(domain, [ip])
122139
this.mappedAddresses.add(ip)
140+
141+
if (this.autoConfirmAddress) {
142+
const ma = multiaddr(`/dns6/${domain}`)
143+
this.log('auto-confirming IP address %a', ma)
144+
this.addressManager.confirmObservedAddr(ma, {
145+
ttl: MAX_DATE - Date.now()
146+
})
147+
}
123148
})
124149
}
125150

packages/auto-tls/src/index.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ export interface AutoTLSInit {
112112
* How long asking the forge endpoint to answer a DNS challenge can take
113113
* before we retry
114114
*
115-
* @default 10_000
115+
* @default 60_000
116116
*/
117117
provisionRequestTimeout?: number
118118

@@ -168,6 +168,17 @@ export interface AutoTLSInit {
168168
* @default 2048
169169
*/
170170
certificatePrivateKeyBits?: number
171+
172+
/**
173+
* Any mapped addresses are added to the observed address list. These
174+
* addresses require additional verification by the `@libp2p/autonat` protocol
175+
* or similar before they are trusted.
176+
*
177+
* To skip this verification and trust them immediately pass `true` here
178+
*
179+
* @default false
180+
*/
181+
autoConfirmAddress?: boolean
171182
}
172183

173184
export interface AutoTLS {

0 commit comments

Comments
 (0)