@helia/verified-fetch 8.0.3 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/index.min.js +53 -53
  2. package/dist/index.min.js.map +4 -4
  3. package/dist/src/constants.d.ts +1 -0
  4. package/dist/src/constants.d.ts.map +1 -1
  5. package/dist/src/constants.js +1 -0
  6. package/dist/src/constants.js.map +1 -1
  7. package/dist/src/index.d.ts +3 -3
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +1 -1
  10. package/dist/src/index.js.map +1 -1
  11. package/dist/src/url-resolver.d.ts.map +1 -1
  12. package/dist/src/url-resolver.js +1 -13
  13. package/dist/src/url-resolver.js.map +1 -1
  14. package/dist/src/utils/canonical-uri.d.ts +9 -0
  15. package/dist/src/utils/canonical-uri.d.ts.map +1 -0
  16. package/dist/src/utils/canonical-uri.js +157 -0
  17. package/dist/src/utils/canonical-uri.js.map +1 -0
  18. package/dist/src/utils/ipfs-uri.d.ts +8 -0
  19. package/dist/src/utils/ipfs-uri.d.ts.map +1 -0
  20. package/dist/src/utils/ipfs-uri.js +10 -0
  21. package/dist/src/utils/ipfs-uri.js.map +1 -0
  22. package/dist/src/utils/ipfs-url-to-ipfs-path.d.ts +5 -0
  23. package/dist/src/utils/ipfs-url-to-ipfs-path.d.ts.map +1 -0
  24. package/dist/src/utils/ipfs-url-to-ipfs-path.js +16 -0
  25. package/dist/src/utils/ipfs-url-to-ipfs-path.js.map +1 -0
  26. package/dist/src/utils/libp2p-defaults.browser.d.ts +2 -1
  27. package/dist/src/utils/libp2p-defaults.browser.d.ts.map +1 -1
  28. package/dist/src/utils/libp2p-defaults.browser.js +13 -8
  29. package/dist/src/utils/libp2p-defaults.browser.js.map +1 -1
  30. package/dist/src/utils/libp2p-defaults.d.ts +2 -1
  31. package/dist/src/utils/libp2p-defaults.d.ts.map +1 -1
  32. package/dist/src/utils/libp2p-defaults.js +3 -7
  33. package/dist/src/utils/libp2p-defaults.js.map +1 -1
  34. package/dist/src/utils/parse-resource.d.ts.map +1 -1
  35. package/dist/src/utils/parse-resource.js +2 -1
  36. package/dist/src/utils/parse-resource.js.map +1 -1
  37. package/dist/src/utils/x-ipfs-path.d.ts +11 -0
  38. package/dist/src/utils/x-ipfs-path.d.ts.map +1 -0
  39. package/dist/src/utils/x-ipfs-path.js +30 -0
  40. package/dist/src/utils/x-ipfs-path.js.map +1 -0
  41. package/dist/src/verified-fetch.d.ts.map +1 -1
  42. package/dist/src/verified-fetch.js +37 -11
  43. package/dist/src/verified-fetch.js.map +1 -1
  44. package/package.json +1 -2
  45. package/src/constants.ts +1 -0
  46. package/src/index.ts +4 -4
  47. package/src/url-resolver.ts +1 -17
  48. package/src/utils/canonical-uri.ts +184 -0
  49. package/src/utils/ipfs-uri.ts +9 -0
  50. package/src/utils/ipfs-url-to-ipfs-path.ts +18 -0
  51. package/src/utils/libp2p-defaults.browser.ts +14 -10
  52. package/src/utils/libp2p-defaults.ts +5 -9
  53. package/src/utils/parse-resource.ts +2 -1
  54. package/src/utils/x-ipfs-path.ts +34 -0
  55. package/src/verified-fetch.ts +37 -12
  56. package/dist/src/utils/ipfs-path-to-string.d.ts +0 -6
  57. package/dist/src/utils/ipfs-path-to-string.d.ts.map +0 -1
  58. package/dist/src/utils/ipfs-path-to-string.js +0 -10
  59. package/dist/src/utils/ipfs-path-to-string.js.map +0 -1
  60. package/src/utils/ipfs-path-to-string.ts +0 -9
@@ -0,0 +1,30 @@
1
+ import { toIPFSPath } from "./ipfs-url-to-ipfs-path.js";
2
+ /**
3
+ * True when every byte of the UTF-8 encoding of `value` is HTAB (0x09), SP
4
+ * (0x20) or visible ASCII (0x21-0x7E), the only bytes an HTTP field value can
5
+ * carry. Any code point above 0x7E encodes to bytes that are all above 0x7F,
6
+ * so testing code points is equivalent to testing the encoded bytes.
7
+ */
8
+ function isFieldValue(value) {
9
+ for (let i = 0; i < value.length; i++) {
10
+ const code = value.charCodeAt(i);
11
+ if (code !== 0x09 && (code < 0x20 || code > 0x7e)) {
12
+ return false;
13
+ }
14
+ }
15
+ return true;
16
+ }
17
+ /**
18
+ * Build the value of the deprecated `x-ipfs-path` response header: the content
19
+ * path for the requested URL, with the percent-encoding of the request target
20
+ * removed. Returns `undefined` when that path contains a byte that cannot be
21
+ * carried by an HTTP field value, in which case the header must be omitted
22
+ * rather than sent with the offending bytes mangled or dropped.
23
+ *
24
+ * @see https://github.com/ipfs/specs/pull/548
25
+ */
26
+ export function toXIpfsPath(url) {
27
+ const ipfsPath = toIPFSPath(url);
28
+ return isFieldValue(ipfsPath) ? ipfsPath : undefined;
29
+ }
30
+ //# sourceMappingURL=x-ipfs-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x-ipfs-path.js","sourceRoot":"","sources":["../../../src/utils/x-ipfs-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD;;;;;GAKG;AACH,SAAS,YAAY,CAAE,KAAa;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAEhC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YAClD,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAE,GAAQ;IACnC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAEhC,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AACtD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"verified-fetch.d.ts","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAA8C,0BAA0B,EAAE,QAAQ,EAAkB,iBAAiB,IAAI,oBAAoB,EAAqD,MAAM,YAAY,CAAA;AAEhO,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAsC7C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+B;IACjE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAE5B,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,0BAA+B;IA+ChE;;;;;;OAMG;IACG,KAAK,CAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiNhF;;;OAGG;IACH,OAAO,CAAC,eAAe;IAkDvB,OAAO,CAAC,aAAa;IAYrB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;YAyEb,iBAAiB;IA2D/B;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC"}
1
+ {"version":3,"file":"verified-fetch.d.ts","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAA8C,0BAA0B,EAAE,QAAQ,EAAkB,iBAAiB,IAAI,oBAAoB,EAAqD,MAAM,YAAY,CAAA;AAEhO,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAsC7C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+B;IACjE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAE5B,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,0BAA+B;IA+ChE;;;;;;OAMG;IACG,KAAK,CAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyNhF;;;OAGG;IACH,OAAO,CAAC,eAAe;IAkDvB,OAAO,CAAC,aAAa;IAYrB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;YAyFb,iBAAiB;IA2D/B;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC"}
@@ -3,8 +3,7 @@ import { ipnsResolver } from '@helia/ipns';
3
3
  import { isPeerId, isPublicKey } from '@libp2p/interface';
4
4
  import { CID } from 'multiformats/cid';
5
5
  import { CustomProgressEvent } from 'progress-events';
6
- import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
7
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
6
+ import { MAX_HEADER_VALUE_LENGTH } from "./constants.js";
8
7
  import { CarPlugin } from "./plugins/plugin-handle-car.js";
9
8
  import { IpldPlugin } from "./plugins/plugin-handle-ipld.js";
10
9
  import { IpnsRecordPlugin } from "./plugins/plugin-handle-ipns-record.js";
@@ -19,10 +18,12 @@ import { errorToObject } from "./utils/error-to-object.js";
19
18
  import { errorToResponse } from "./utils/error-to-response.js";
20
19
  import { getETag, ifNoneMatches } from "./utils/get-e-tag.js";
21
20
  import { getRangeHeader } from "./utils/get-range-header.js";
21
+ import { toIpfsUri } from "./utils/ipfs-uri.js";
22
22
  import { stringToIpfsUrl } from "./utils/parse-resource.js";
23
23
  import { setCacheControlHeader } from "./utils/response-headers.js";
24
24
  import { notAcceptableResponse, notImplementedResponse, notModifiedResponse } from "./utils/responses.js";
25
25
  import { ServerTiming } from "./utils/server-timing.js";
26
+ import { toXIpfsPath } from "./utils/x-ipfs-path.js";
26
27
  /**
27
28
  * Retypes the `.signal` property of the options from
28
29
  * `AbortSignal | null | undefined` to `AbortSignal | undefined`.
@@ -134,7 +135,15 @@ export class VerifiedFetch {
134
135
  serverTiming
135
136
  });
136
137
  }
137
- const url = this.parseResource(resource);
138
+ let url;
139
+ try {
140
+ url = this.parseResource(resource);
141
+ }
142
+ catch (err) {
143
+ return this.handleFinalResponse(errorToResponse(resource, err, opts), withServerTiming, {
144
+ serverTiming
145
+ });
146
+ }
138
147
  if (url.protocol === 'ipfs:' && url.pathname === '') {
139
148
  // if we don't need to resolve an IPNS names or traverse a DAG, we can
140
149
  // check the if-none-match header and maybe return a 304 without needing
@@ -359,13 +368,30 @@ export class VerifiedFetch {
359
368
  });
360
369
  }
361
370
  if (context?.terminalElement?.cid != null && context?.url != null) {
362
- // headers can ony contain extended ASCII but IPFS paths can be unicode
363
- const decodedPath = context.url.pathname.split('/')
364
- .map(component => decodeURIComponent(component))
365
- .join('/')
366
- .trim();
367
- const path = uint8ArrayToString(uint8ArrayFromString(decodedPath, 'ascii'), 'ascii');
368
- response.headers.set('x-ipfs-path', `/${context.url.protocol === 'ipfs:' ? 'ipfs' : 'ipns'}/${context?.url.hostname}${path === '/' ? '' : path}`);
371
+ const ipfsUri = toIpfsUri(context.url);
372
+ // the value is ASCII-only so string length equals byte length; a value
373
+ // of exactly MAX_HEADER_VALUE_LENGTH bytes is still sent
374
+ if (ipfsUri != null && ipfsUri.length <= MAX_HEADER_VALUE_LENGTH) {
375
+ try {
376
+ response.headers.set('ipfs-uri', ipfsUri);
377
+ }
378
+ catch (err) {
379
+ this.log.error('could not set ipfs-uri to "%s"', ipfsUri);
380
+ }
381
+ }
382
+ // x-ipfs-path is deprecated by IPIP-0548 in favour of ipfs-uri, and is
383
+ // kept for clients that still read it. It is omitted for content paths
384
+ // that an HTTP field value cannot carry, e.g. a file name with
385
+ // non-ASCII bytes
386
+ const ipfsPath = toXIpfsPath(context.url);
387
+ if (ipfsPath != null && ipfsPath.length <= MAX_HEADER_VALUE_LENGTH) {
388
+ try {
389
+ response.headers.set('x-ipfs-path', ipfsPath);
390
+ }
391
+ catch (err) {
392
+ this.log.error('could not set x-ipfs-path to "%s"', ipfsPath);
393
+ }
394
+ }
369
395
  }
370
396
  // set CORS headers. If hosting your own gateway with verified-fetch behind
371
397
  // the scenes, you can alter these before you send the response to the
@@ -376,7 +402,7 @@ export class VerifiedFetch {
376
402
  response.headers.set('access-control-allow-origin', '*');
377
403
  response.headers.set('access-control-allow-methods', 'GET, HEAD, OPTIONS');
378
404
  response.headers.set('access-control-allow-headers', 'Content-Type, Range, User-Agent, X-Requested-With');
379
- response.headers.set('access-control-expose-headers', 'Content-Range, Content-Length, X-Ipfs-Path, X-Ipfs-Roots, X-Chunked-Output, X-Stream-Output');
405
+ response.headers.set('access-control-expose-headers', 'Content-Range, Content-Length, Ipfs-Uri, X-Ipfs-Path, X-Ipfs-Roots, X-Chunked-Output, X-Stream-Output');
380
406
  if (context?.terminalElement?.cid != null && response.headers.get('etag') == null) {
381
407
  const etag = getETag({
382
408
  cid: context.terminalElement.cid,
@@ -1 +1 @@
1
- {"version":3,"file":"verified-fetch.js","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verified-fetch.js","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/verified-fetch",
3
- "version": "8.0.3",
3
+ "version": "8.1.0",
4
4
  "description": "A fetch-like API for obtaining verified & trustless IPFS content on the web",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/ipfs/helia-verified-fetch/tree/main/packages/verified-fetch#readme",
@@ -179,7 +179,6 @@
179
179
  "@ipld/dag-json": "^11.0.0",
180
180
  "@ipld/dag-pb": "^4.1.5",
181
181
  "@libp2p/interface": "^3.2.0",
182
- "@libp2p/kad-dht": "^16.2.0",
183
182
  "@libp2p/peer-id": "^6.0.6",
184
183
  "@libp2p/utils": "^7.0.15",
185
184
  "@libp2p/webrtc": "^6.0.16",
package/src/constants.ts CHANGED
@@ -4,3 +4,4 @@ export const CODEC_LIBP2P_KEY = 0x72
4
4
 
5
5
  export const SESSION_CACHE_MAX_SIZE = 100
6
6
  export const SESSION_CACHE_TTL_MS = 60 * 1000
7
+ export const MAX_HEADER_VALUE_LENGTH = 8192
package/src/index.ts CHANGED
@@ -869,13 +869,13 @@ import type { RequestedMimeType } from './verified-fetch.ts'
869
869
  import type { DNSLink, ResolveProgressEvents as ResolveDNSLinkProgressEvents } from '@helia/dnslink'
870
870
  import type { GetBlockProgressEvents, Helia, ProviderOptions } from '@helia/interface'
871
871
  import type { ResolveProgressEvents as ResolveIPNSNameProgressEvents, IPNSRoutingProgressEvents, IPNSResolver } from '@helia/ipns'
872
- import type { AbortOptions, ServiceMap, Logger, PeerId, PublicKey } from '@libp2p/interface'
872
+ import type { CreateLibp2pOptions } from '@helia/libp2p'
873
+ import type { AbortOptions, Logger, PeerId, PublicKey } from '@libp2p/interface'
873
874
  import type { DNSResolvers, DNS } from '@multiformats/dns'
874
875
  import type { DNSResolver } from '@multiformats/dns/resolvers'
875
876
  import type { HeliaInit } from 'helia'
876
877
  import type { Blockstore } from 'interface-blockstore'
877
878
  import type { ExporterProgressEvents, PathEntry } from 'ipfs-unixfs-exporter'
878
- import type { Libp2pOptions } from 'libp2p'
879
879
  import type { CID } from 'multiformats/cid'
880
880
  import type { ProgressEvent, ProgressOptions } from 'progress-events'
881
881
 
@@ -1157,7 +1157,7 @@ export interface CreateVerifiedFetchInit {
1157
1157
  * If you need a deep merge, you should do it yourself before passing the
1158
1158
  * configuration here.
1159
1159
  */
1160
- libp2pConfig?: Partial<Libp2pOptions<ServiceMap>>
1160
+ libp2pConfig?: CreateLibp2pOptions
1161
1161
  }
1162
1162
 
1163
1163
  export interface CreateVerifiedFetchOptions {
@@ -1393,7 +1393,7 @@ export async function createVerifiedFetch (init?: Helia | CreateVerifiedFetchIni
1393
1393
  if (!isHelia(init)) {
1394
1394
  const dns = createDns(init?.dnsResolvers)
1395
1395
 
1396
- const libp2pConfig = getLibp2pConfig()
1396
+ const libp2pConfig = getLibp2pConfig(init?.libp2pConfig)
1397
1397
  libp2pConfig.dns = dns
1398
1398
 
1399
1399
  const delegatedRouters = init?.routers ?? ['https://delegated-ipfs.dev']
@@ -12,6 +12,7 @@ import { CODEC_LIBP2P_KEY, SESSION_CACHE_MAX_SIZE, SESSION_CACHE_TTL_MS } from '
12
12
  import { abbreviate } from './utils/abbreviate.ts'
13
13
  import { applyRedirects } from './utils/apply-redirect.ts'
14
14
  import { splitIPNSName } from './utils/ipfs-path-to-cid.ts'
15
+ import { toIPFSPath } from './utils/ipfs-url-to-ipfs-path.ts'
15
16
  import { ServerTiming } from './utils/server-timing.ts'
16
17
  import type { ResolveURLOptions, ResolveURLResult, URLResolver as URLResolverInterface } from './index.ts'
17
18
  import type { DNSLink } from '@helia/dnslink'
@@ -318,23 +319,6 @@ export class URLResolver implements URLResolverInterface {
318
319
  }
319
320
  }
320
321
 
321
- function toIPFSPath (url: URL): string {
322
- let pathname = url.pathname.split('/')
323
- .map(component => decodeURIComponent(component))
324
- .join('/')
325
- .trim()
326
-
327
- if (pathname.length > 0 && !pathname.startsWith('/')) {
328
- pathname = `/${pathname}`
329
- }
330
-
331
- if (url.protocol === 'ipns:' && pathname === '/') {
332
- pathname = ''
333
- }
334
-
335
- return `/${url.protocol === 'ipfs:' ? 'ipfs' : 'ipns'}/${url.hostname}${pathname}`
336
- }
337
-
338
322
  /**
339
323
  * E.g.
340
324
  *
@@ -0,0 +1,184 @@
1
+ import { InvalidParametersError } from '@libp2p/interface'
2
+ import { base36 } from 'multiformats/bases/base36'
3
+ import { base58btc } from 'multiformats/bases/base58'
4
+ import { CID } from 'multiformats/cid'
5
+ import * as Digest from 'multiformats/hashes/digest'
6
+ import { CODEC_LIBP2P_KEY } from '../constants.ts'
7
+
8
+ /**
9
+ * Percent-encode a single path segment for the `Ipfs-Uri` header value.
10
+ *
11
+ * Every byte of the segment's UTF-8 encoding that is outside the RFC 3986
12
+ * unreserved set (ALPHA / DIGIT / "-" / "." / "_" / "~") is encoded as %XX
13
+ * with uppercase hex, so the output is ASCII-only and byte-identical across
14
+ * implementations. `encodeURIComponent` covers everything except the
15
+ * sub-delims `!'()*` which are handled separately.
16
+ */
17
+ function encodeSegment (segment: string): string {
18
+ return encodeURIComponent(segment)
19
+ .replace(/[!'()*]/g, c => `%${c.charCodeAt(0).toString(16).toUpperCase()}`)
20
+ }
21
+
22
+ /**
23
+ * Percent-decode a raw URL path segment. Segments that are not valid
24
+ * percent-encoding (e.g. a lone `%`) are used as-is.
25
+ */
26
+ function decodeSegment (segment: string): string {
27
+ try {
28
+ return decodeURIComponent(segment)
29
+ } catch {
30
+ return segment
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Resolve the dot segments of a decoded path: "." drops out and ".." removes
36
+ * the segment before it. A ".." with nothing left to remove is discarded, so
37
+ * the result can never climb above the content root.
38
+ */
39
+ function resolveDotSegments (segments: string[]): string[] {
40
+ const resolved: string[] = []
41
+
42
+ for (const segment of segments) {
43
+ if (segment === '.') {
44
+ continue
45
+ }
46
+
47
+ if (segment === '..') {
48
+ resolved.pop()
49
+
50
+ continue
51
+ }
52
+
53
+ resolved.push(segment)
54
+ }
55
+
56
+ return resolved
57
+ }
58
+
59
+ /**
60
+ * Convert a WHATWG URL pathname into the path part of an `Ipfs-Uri` value.
61
+ * The URI path mirrors the content path the gateway resolved and served, so
62
+ * it follows the same order of operations: each raw pathname segment is
63
+ * percent-decoded once, which turns an encoded slash (%2F) into a path
64
+ * separator, and only then are dot segments resolved. A "." or ".." can
65
+ * therefore never reach the value. Every remaining segment is strictly
66
+ * re-encoded and joined with "/": interior empty segments are dropped, a
67
+ * trailing slash is kept, and an empty remainder produces no path at all.
68
+ */
69
+ function toUriPath (pathname: string): string {
70
+ if (pathname === '') {
71
+ return ''
72
+ }
73
+
74
+ const decoded = pathname.split('/').map(decodeSegment).join('/')
75
+ const segments = resolveDotSegments(decoded.split('/').filter(segment => segment !== ''))
76
+ const trailingSlash = decoded.endsWith('/') ? '/' : ''
77
+
78
+ if (segments.length === 0) {
79
+ return trailingSlash
80
+ }
81
+
82
+ return `/${segments.map(encodeSegment).join('/')}${trailingSlash}`
83
+ }
84
+
85
+ /**
86
+ * Canonical authority for an `ipfs://` URI: the CID re-encoded as a CIDv1 in
87
+ * lowercase base32 (multibase prefix `b`). CIDv0 and other encodings of the
88
+ * same CID normalize to the same string.
89
+ */
90
+ function ipfsAuthority (host: string): string {
91
+ return CID.parse(host).toV1().toString()
92
+ }
93
+
94
+ /**
95
+ * Canonical authority for an `ipns://` URI naming a cryptographic IPNS name:
96
+ * the root re-encoded as a CIDv1 in lowercase base36 (multibase prefix `k`).
97
+ * Legacy base58btc peer id strings (`Qm...`, `12D3Koo...`) normalize to a
98
+ * libp2p-key CIDv1 in base36. A root carrying any other multicodec is not an
99
+ * IPNS Name, so there is no `ipns://` URI to report and the header is omitted.
100
+ */
101
+ function ipnsAuthority (host: string): string | undefined {
102
+ if (host.startsWith('Q') || host.startsWith('1')) {
103
+ const digest = Digest.decode(base58btc.baseDecode(host))
104
+
105
+ return CID.createV1(CODEC_LIBP2P_KEY, digest).toString(base36)
106
+ }
107
+
108
+ const cid = CID.parse(host)
109
+
110
+ if (cid.code !== CODEC_LIBP2P_KEY) {
111
+ return undefined
112
+ }
113
+
114
+ return cid.toV1().toString(base36)
115
+ }
116
+
117
+ /**
118
+ * The `dnslink-name` form of the `ipns://` URI spec: two or more labels
119
+ * separated by dots, each label 1 to 63 lowercase letters, digits and interior
120
+ * hyphens, with no leading or trailing hyphen.
121
+ *
122
+ * @see https://specs.ipfs.tech/ipns-uri/#syntax
123
+ */
124
+ const DNSLINK_NAME = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/
125
+
126
+ /**
127
+ * Canonical authority for an `ipns://` URI naming a DNSLink: the dotted DNS
128
+ * name as lowercase ASCII (A-labels for IDN), with a single trailing dot
129
+ * stripped first. WHATWG URLs treat `dnslink:` as a non-special scheme so
130
+ * the hostname keeps the case of the input; round-tripping through an
131
+ * `http:` URL applies domain parsing which lowercases and converts IDN
132
+ * labels to A-labels, but leaves malformed names such as `en..example.net`
133
+ * alone. A result outside the `dnslink-name` form cannot be a DNSLink name so
134
+ * the header is omitted.
135
+ */
136
+ function dnsLinkAuthority (host: string): string | undefined {
137
+ const name = decodeSegment(host).replace(/\.$/, '')
138
+ const authority = new URL(`http://${name}`).hostname
139
+
140
+ if (!DNSLINK_NAME.test(authority)) {
141
+ return undefined
142
+ }
143
+
144
+ return authority
145
+ }
146
+
147
+ /**
148
+ * Build the value of the `Ipfs-Uri` response header defined by IPIP-0548: a
149
+ * single canonical `ipfs://` or `ipns://` URI equivalent to the requested
150
+ * content path, before path traversal. The value never contains a query or a
151
+ * fragment. Returns `undefined` when the content root cannot be normalized,
152
+ * in which case the header is omitted.
153
+ */
154
+ export function toCanonicalUri (url: URL): URL {
155
+ try {
156
+ if (url.protocol === 'ipfs:') {
157
+ return new URL(`ipfs://${ipfsAuthority(url.hostname)}${toUriPath(url.pathname)}${url.search}${url.hash}`)
158
+ }
159
+
160
+ if (url.protocol === 'ipns:') {
161
+ const authority = ipnsAuthority(url.hostname)
162
+
163
+ if (authority == null) {
164
+ throw new InvalidParametersError(`Could not derive IPNS authority from ${url}`)
165
+ }
166
+
167
+ return new URL(`ipns://${authority}${toUriPath(url.pathname)}${url.search}${url.hash}`)
168
+ }
169
+
170
+ if (url.protocol === 'dnslink:') {
171
+ const authority = dnsLinkAuthority(url.hostname)
172
+
173
+ if (authority == null) {
174
+ throw new InvalidParametersError(`Could not derive IPNS authority from ${url}`)
175
+ }
176
+
177
+ return new URL(`dnslink://${authority}${toUriPath(url.pathname)}${url.search}${url.hash}`)
178
+ }
179
+ } catch {
180
+ // the content root could not be normalized, omit the header
181
+ }
182
+
183
+ throw new InvalidParametersError(`Could not derive canonical URI from ${url}`)
184
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Build the value of the `Ipfs-Uri` response header defined by IPIP-0548: a
3
+ * single canonical `ipfs://` or `ipns://` URI equivalent to the requested
4
+ * content path, before path traversal. The value never contains a query or a
5
+ * fragment.
6
+ */
7
+ export function toIpfsUri (url: URL): string | undefined {
8
+ return `${url.protocol === 'dnslink:' ? 'ipns:' : url.protocol}//${url.hostname}${url.pathname}`
9
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Turns an IPFS URL to an IPFS Path
3
+ */
4
+ export function toIPFSPath (url: URL): string {
5
+ let pathname = url.pathname.split('/')
6
+ .map(component => decodeURIComponent(component))
7
+ .join('/')
8
+
9
+ if (pathname.length > 0 && !pathname.startsWith('/')) {
10
+ pathname = `/${pathname}`
11
+ }
12
+
13
+ if (pathname === '/') {
14
+ pathname = ''
15
+ }
16
+
17
+ return `/${url.protocol === 'ipfs:' ? 'ipfs' : 'ipns'}/${url.hostname}${pathname}`
18
+ }
@@ -2,18 +2,14 @@ import { libp2pDefaults } from '@helia/libp2p'
2
2
  import { webRTCDirect } from '@libp2p/webrtc'
3
3
  import { webSockets } from '@libp2p/websockets'
4
4
  import type { ServiceFactoryMap } from './libp2p-types.ts'
5
- import type { DefaultLibp2pServices } from '@helia/libp2p'
5
+ import type { CreateLibp2pOptions, DefaultLibp2pServices } from '@helia/libp2p'
6
6
  import type { Libp2pOptions } from 'libp2p'
7
7
 
8
8
  type ServiceMap = Pick<DefaultLibp2pServices, 'dcutr' | 'identify' | 'identifyPush' | 'keychain' | 'ping'>
9
9
 
10
- export function getLibp2pConfig (): Libp2pOptions & Required<Pick<Libp2pOptions, 'services'>> {
11
- const libp2pDefaultOptions = libp2pDefaults()
12
-
13
- libp2pDefaultOptions.start = false
14
- libp2pDefaultOptions.addresses = { listen: [] }
15
- libp2pDefaultOptions.transports = [webRTCDirect(), webSockets()]
16
- libp2pDefaultOptions.peerDiscovery = [] // Avoid connecting to bootstrap nodes
10
+ export function getLibp2pConfig (options?: CreateLibp2pOptions): Libp2pOptions & Required<Pick<Libp2pOptions, 'services'>> {
11
+ // @ts-expect-error cannot derive correct type
12
+ const libp2pDefaultOptions = libp2pDefaults(options)
17
13
 
18
14
  const services: ServiceFactoryMap<ServiceMap> = {
19
15
  dcutr: libp2pDefaultOptions.services.dcutr,
@@ -24,8 +20,16 @@ export function getLibp2pConfig (): Libp2pOptions & Required<Pick<Libp2pOptions,
24
20
  }
25
21
 
26
22
  return {
27
- ...libp2pDefaultOptions,
28
- start: false,
23
+ addresses: {
24
+ listen: []
25
+ },
26
+ transports: [
27
+ webRTCDirect(),
28
+ webSockets()
29
+ ],
30
+ peerDiscovery: [
31
+ // Avoid connecting to bootstrap nodes
32
+ ],
29
33
  services
30
34
  }
31
35
  }
@@ -1,20 +1,17 @@
1
1
  import { libp2pDefaults } from '@helia/libp2p'
2
- import { kadDHT } from '@libp2p/kad-dht'
3
2
  import type { ServiceFactoryMap } from './libp2p-types.ts'
4
- import type { DefaultLibp2pServices } from '@helia/libp2p'
3
+ import type { CreateLibp2pOptions, DefaultLibp2pServices } from '@helia/libp2p'
5
4
  import type { Libp2pOptions } from 'libp2p'
6
5
 
7
- type ServiceMap = Pick<DefaultLibp2pServices, 'autoNAT' | 'dcutr' | 'dht' | 'identify' | 'identifyPush' | 'keychain' | 'ping' | 'upnp'>
6
+ type ServiceMap = Pick<DefaultLibp2pServices, 'autoNAT' | 'dcutr' | 'identify' | 'identifyPush' | 'keychain' | 'ping' | 'upnp'>
8
7
 
9
- export function getLibp2pConfig (): Libp2pOptions & Required<Pick<Libp2pOptions, 'services'>> {
10
- const libp2pDefaultOptions = libp2pDefaults()
8
+ export function getLibp2pConfig (options?: CreateLibp2pOptions): Libp2pOptions & Required<Pick<Libp2pOptions, 'services'>> {
9
+ // @ts-expect-error cannot derive correct type
10
+ const libp2pDefaultOptions = libp2pDefaults(options)
11
11
 
12
12
  const services: ServiceFactoryMap<ServiceMap> = {
13
13
  autoNAT: libp2pDefaultOptions.services.autoNAT,
14
14
  dcutr: libp2pDefaultOptions.services.dcutr,
15
- dht: kadDHT({
16
- clientMode: true
17
- }),
18
15
  identify: libp2pDefaultOptions.services.identify,
19
16
  identifyPush: libp2pDefaultOptions.services.identifyPush,
20
17
  keychain: libp2pDefaultOptions.services.keychain,
@@ -23,7 +20,6 @@ export function getLibp2pConfig (): Libp2pOptions & Required<Pick<Libp2pOptions,
23
20
  }
24
21
 
25
22
  return {
26
- ...libp2pDefaultOptions,
27
23
  services
28
24
  }
29
25
  }
@@ -1,6 +1,7 @@
1
1
  import { InvalidParametersError } from '@libp2p/interface'
2
2
  import { peerIdFromString } from '@libp2p/peer-id'
3
3
  import { CID } from 'multiformats/cid'
4
+ import { toCanonicalUri } from './canonical-uri.ts'
4
5
 
5
6
  /**
6
7
  * Turns an IPFS or IPNS path into a URL
@@ -55,7 +56,7 @@ export function stringToIpfsUrl (urlString: string): URL {
55
56
  }
56
57
  }
57
58
 
58
- return url
59
+ return toCanonicalUri(url)
59
60
  }
60
61
 
61
62
  throw new InvalidParametersError(`URL did not start with ipfs:// or ipns:// - ${urlString}`)
@@ -0,0 +1,34 @@
1
+ import { toIPFSPath } from './ipfs-url-to-ipfs-path.ts'
2
+
3
+ /**
4
+ * True when every byte of the UTF-8 encoding of `value` is HTAB (0x09), SP
5
+ * (0x20) or visible ASCII (0x21-0x7E), the only bytes an HTTP field value can
6
+ * carry. Any code point above 0x7E encodes to bytes that are all above 0x7F,
7
+ * so testing code points is equivalent to testing the encoded bytes.
8
+ */
9
+ function isFieldValue (value: string): boolean {
10
+ for (let i = 0; i < value.length; i++) {
11
+ const code = value.charCodeAt(i)
12
+
13
+ if (code !== 0x09 && (code < 0x20 || code > 0x7e)) {
14
+ return false
15
+ }
16
+ }
17
+
18
+ return true
19
+ }
20
+
21
+ /**
22
+ * Build the value of the deprecated `x-ipfs-path` response header: the content
23
+ * path for the requested URL, with the percent-encoding of the request target
24
+ * removed. Returns `undefined` when that path contains a byte that cannot be
25
+ * carried by an HTTP field value, in which case the header must be omitted
26
+ * rather than sent with the offending bytes mangled or dropped.
27
+ *
28
+ * @see https://github.com/ipfs/specs/pull/548
29
+ */
30
+ export function toXIpfsPath (url: URL): string | undefined {
31
+ const ipfsPath = toIPFSPath(url)
32
+
33
+ return isFieldValue(ipfsPath) ? ipfsPath : undefined
34
+ }