Skip to content

Commit e683721

Browse files
authored
fix: update multiaddr methods (#117)
Invoke non-deprecated methods
1 parent 0c91771 commit e683721

File tree

6 files changed

+40
-32
lines changed

6 files changed

+40
-32
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ yarn.lock
99
.vscode
1010
.tmp-compiled-docs
1111
tsconfig-doc-check.aegir.json
12+
test-results

examples/serving-websites-from-web-browsers/test-results/.last-run.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/http-peer-id-auth/test/index.spec.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
import { generateKeyPair, privateKeyFromProtobuf } from '@libp2p/crypto/keys'
33
import { peerIdFromPrivateKey } from '@libp2p/peer-id'
44
import { expect } from 'aegir/chai'
5-
import { toString as uint8ArrayToString, fromString as uint8ArrayFromString } from 'uint8arrays'
5+
import { fromString as uint8ArrayFromString } from 'uint8arrays'
66
import { ClientInitiatedHandshake, ServerInitiatedHandshake } from '../src/client.js'
77
import { PEER_ID_AUTH_SCHEME, createServerChallenge, serverResponds } from '../src/index.js'
8-
import { sign } from '../src/utils.js'
8+
import { sign, verify } from '../src/utils.js'
99
import type { PeerId, PrivateKey } from '@libp2p/interface'
1010

1111
describe('@libp2p/http-peer-id-auth', () => {
@@ -96,6 +96,27 @@ describe('@libp2p/http-peer-id-auth', () => {
9696
['client-public-key', clientPubKeyEncoded],
9797
['hostname', 'example.com']
9898
])
99-
expect(uint8ArrayToString(serverSig, 'base64urlpad')).to.equal('UA88qZbLUzmAxrD9KECbDCgSKAUBAvBHrOCF2X0uPLR1uUCF7qGfLPc7dw3Olo-LaFCDpk5sXN7TkLWPVvuXAA==')
99+
100+
await expect(verify(serverKey.publicKey, PEER_ID_AUTH_SCHEME, [
101+
// cspell:disable-next-line
102+
['challenge-server', 'ERERERERERERERERERERERERERERERERERERERERERE='],
103+
['client-public-key', clientPubKeyEncoded],
104+
['hostname', 'example.com']
105+
], serverSig)).to.eventually.be.true()
106+
107+
await expect(verify(serverKey.publicKey, PEER_ID_AUTH_SCHEME, [
108+
// cspell:disable-next-line
109+
['challenge-server', 'ERERERERERERERERERERERERERERERERERERERERERE='],
110+
['client-public-key', clientPubKeyEncoded],
111+
['hostname', 'example.com']
112+
], uint8ArrayFromString('UA88qZbLUzmAxrD9KECbDCgSKAUBAvBHrOCF2X0uPLR1uUCF7qGfLPc7dw3Olo-LaFCDpk5sXN7TkLWPVvuXAA==', 'base64urlpad'))).to.eventually.be.true()
113+
114+
// TODO: safari generates non-deterministic different signatures?
115+
await expect(verify(serverKey.publicKey, PEER_ID_AUTH_SCHEME, [
116+
// cspell:disable-next-line
117+
['challenge-server', 'ERERERERERERERERERERERERERERERERERERERERERE='],
118+
['client-public-key', clientPubKeyEncoded],
119+
['hostname', 'example.com']
120+
], uint8ArrayFromString('hq3aR3scVMt8VrRopWYJHHJsEerdqnt-f_JvNQJ6R09yRy57Ut9_7G30TRHUqBtJb_Eh5kq3P5VvPWVQW43fBA==', 'base64urlpad'))).to.eventually.be.true()
100121
})
101122
})

packages/http-utils/src/constants.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,3 @@
1-
export const HTTP_PATH_CODEC = 0x01e1
2-
export const HTTP_CODEC = 0x01e0
3-
export const DNS_CODEC = 0x35
4-
export const DNS4_CODEC = 0x36
5-
export const DNS6_CODEC = 0x37
6-
export const DNSADDR_CODEC = 0x38
7-
export const DNS_CODECS = [
8-
DNS_CODEC,
9-
DNS4_CODEC,
10-
DNS6_CODEC,
11-
DNSADDR_CODEC
12-
]
131
export const STATUS_CODES: Record<string, string> = {
142
100: 'Continue', // RFC 7231 6.2.1
153
101: 'Switching Protocols', // RFC 7231 6.2.2

packages/http-utils/src/index.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import { HTTPParser } from '@achingbrain/http-parser-js'
88
import { InvalidParametersError, isPeerId, ProtocolError } from '@libp2p/interface'
99
import { peerIdFromString } from '@libp2p/peer-id'
10-
import { fromStringTuples, isMultiaddr, multiaddr } from '@multiformats/multiaddr'
10+
import { isMultiaddr, multiaddr } from '@multiformats/multiaddr'
1111
import { multiaddrToUri } from '@multiformats/multiaddr-to-uri'
1212
import { uriToMultiaddr } from '@multiformats/uri-to-multiaddr'
1313
import { queuelessPushable } from 'it-queueless-pushable'
@@ -17,11 +17,12 @@ import { base64pad } from 'multiformats/bases/base64'
1717
import { sha1 } from 'multiformats/hashes/sha1'
1818
import { Uint8ArrayList } from 'uint8arraylist'
1919
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
20-
import { DNS_CODECS, HTTP_CODEC, HTTP_PATH_CODEC } from './constants.js'
2120
import { Request } from './request.js'
2221
import type { AbortOptions, PeerId, Stream } from '@libp2p/interface'
2322
import type { Multiaddr } from '@multiformats/multiaddr'
2423

24+
const DNS_CODECS = ['dns', 'dns4', 'dns6', 'dnsaddr']
25+
2526
/**
2627
* A subset of options passed to middleware
2728
*/
@@ -244,9 +245,9 @@ export function toResource (resource: string | URL | PeerId | Multiaddr | Multia
244245
// check for `/http/` tuple and transform to URL if present
245246
if (Array.isArray(resource)) {
246247
for (const ma of resource) {
247-
const stringTuples = ma.stringTuples()
248+
const components = ma.getComponents()
248249

249-
if (stringTuples.find(([codec]) => codec === HTTP_CODEC) != null) {
250+
if (components.some(({ name }) => name === 'http')) {
250251
const uri = multiaddrToUri(ma)
251252
return new URL(`${uri}${path ?? ''}`)
252253
}
@@ -315,8 +316,8 @@ export function getHost (addresses: URL | Multiaddr[], headers: Headers): string
315316
// try to extract domain from DNS addresses
316317
if (!isValidHost(host) && Array.isArray(addresses)) {
317318
for (const address of addresses) {
318-
const stringTuples = address.stringTuples()
319-
const filtered = stringTuples.filter(([key]) => DNS_CODECS.includes(key))?.[0]?.[1]
319+
const components = address.getComponents()
320+
const filtered = components.filter(({ name }) => DNS_CODECS.includes(name))?.[0]?.value
320321

321322
if (filtered != null) {
322323
host = filtered
@@ -377,13 +378,14 @@ export function stripHTTPPath (addresses: Multiaddr[]): { httpPath: string, addr
377378
// strip http-path tuple but record the value if set
378379
let httpPath = '/'
379380
addresses = addresses.map(ma => {
380-
return fromStringTuples(
381-
ma.stringTuples().filter(t => {
382-
if (t[0] === HTTP_PATH_CODEC && t[1] != null) {
383-
httpPath = `/${t[1]}`
381+
return multiaddr(
382+
ma.getComponents().filter(component => {
383+
if (component.name === 'http-path') {
384+
httpPath = component.value ?? '/'
385+
return false
384386
}
385387

386-
return t[0] !== HTTP_PATH_CODEC
388+
return true
387389
})
388390
)
389391
})

packages/http/src/http.browser.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,11 +181,11 @@ export class HTTP implements HTTPInterface, Startable {
181181

182182
private async sendRequest (resource: Multiaddr[] | URL, init: FetchInit): Promise<Response> {
183183
if (resource instanceof URL) {
184-
this.log('making request with global fetch')
184+
this.log('making request to %s with global fetch')
185185
return globalThis.fetch(resource, init)
186186
}
187187

188-
this.log('making request with libp2p fetch')
188+
this.log('making request to %s with libp2p fetch', resource)
189189
const host = getHost(resource, getHeaders(init))
190190

191191
// strip http-path tuple but record the value if set

0 commit comments

Comments
 (0)