Skip to content

Releases: ipfs/boxo

v0.19.0

09 Apr 10:00
b50fcfd
Compare
Choose a tag to compare

Added

  • routing/http/server now adds Cache-Control HTTP header to GET requests: 15 seconds for empty responses, or 5 minutes for responses with providers.
  • routing/http/server the /ipns endpoint is more friendly to users opening URL in web browsers: returns Content-Disposition header and defaults to application/vnd.ipfs.ipns-record response when Accept is missing.
  • provider:
    • Exports a NewPrioritizedProvider, which can be used to prioritize certain providers while ignoring duplicates.
    • 🛠️ NewPinnedProvider now prioritizes root blocks, even if onlyRoots is set to false.

Changed

  • go version changed to 1.21

Fixed

  • 🛠️routing/http/server: delegated peer routing endpoint now supports both PeerID string notaitons from libp2p specs.
  • bitswap: add missing client WithBlockReceivedNotifier and WithoutDuplicatedBlockStats options to the exchange.

Full Changelog: v0.18.0...v0.19.0

v0.18.0

20 Feb 08:46
c336fc9
Compare
Choose a tag to compare

Added

  • blockservice now has ContextWithSession and EmbedSessionInContext functions, which allows to embed a session in a context. Future calls to BlockGetter.GetBlock, BlockGetter.GetBlocks and NewSession will use the session in the context.
  • blockservice.NewWritethrough deprecated function has been removed, instead you can do blockservice.New(..., ..., WriteThrough()) like previously.
  • gateway: a new header configuration middleware has been added to replace the existing header configuration, which can be used more generically.
  • namesys now has a WithMaxCacheTTL option, which allows you to define a maximum TTL that will be used for caching IPNS entries.

Fixed

  • 🛠 boxo/gateway: when making a trustless CAR request with the "entity-bytes" parameter, using a negative index greater than the underlying entity length could trigger reading more data than intended
  • 🛠 boxo/gateway: the header configuration Config.Headers and AddAccessControlHeaders has been replaced by the new middleware provided by NewHeaders.
  • 🛠 routing/http/client: the default HTTP client is no longer a global singleton. Therefore, using WithUserAgent won't modify the user agent of existing routing clients. This will also prevent potential race conditions. In addition, incompatible options will now return errors instead of silently failing.

What's Changed

New Contributors

Full Changelog: v0.16.0...v0.18.0

v0.17.0

10 Jan 15:41
8530184
Compare
Choose a tag to compare

Added

  • 🛠 pinning/pinner: you can now give a custom name when pinning a CID. To reflect this, the Pinner has been adjusted. Note that calling Pin for the same CID with a different name will replace its current name by the newly given name.

Removed

  • 🛠 tracing jaeger exporter has been removed due to it's deprecation and removal from upstream, you should use otlp exporter instead. See the docs for an example.

What's Changed

New Contributors

Full Changelog: v0.16.0...v0.17.0

v0.16.0

06 Dec 09:27
709c7c6
Compare
Choose a tag to compare

Changed

  • 🛠 boxo/namesys: now fails when multiple valid DNSLink entries are found for the same domain. This used to cause undefined behavior before. Now, we return an error, according to the specification.

Removed

  • 🛠 boxo/gateway: removed support for undocumented legacy ipfs-404.html. Use _redirects instead.
  • 🛠 boxo/namesys: removed support for legacy DNSLink entries at the root of the domain. Use _dnslink. TXT record instead.
  • 🛠 boxo/coreapi, an intrinsic part of Kubo, has been removed and moved to kubo/core/coreiface.

Fixed

  • boxo/gateway
    • a panic (which is recovered) could sporadically be triggered inside a CAR request, if the right conditions were met.
    • no longer emits http: superfluous response.WriteHeader warnings when an error happens.

What's Changed

New Contributors

Full Changelog: v0.15.0...v0.16.0

v0.15.0

03 Nov 08:15
521f8d4
Compare
Choose a tag to compare

Changed

What's Changed

Full Changelog: v0.14.0...v0.15.0

v0.14.0

01 Nov 09:40
07c5719
Compare
Choose a tag to compare

Added

  • boxo/gateway:
    • A new WithResolver(...) option can be used with NewBlocksBackend(...) allowing the user to pass their custom Resolver implementation.
    • The gateway now sets a Cache-Control header for requests under the /ipns/ namespace if the TTL for the corresponding IPNS Records or DNSLink entities is known.
  • boxo/bitswap/client:
    • A new WithoutDuplicatedBlockStats() option can be used with bitswap.New and bsclient.New. This disable accounting for duplicated blocks, which requires a blockstore.Has() lookup for every received block and thus, can impact performance.
  • ✨ Migrated repositories into Boxo

Changed

  • boxo/gateway
    • 🛠 The IPFSBackend interface was updated to make the responses of the Head method more explicit. It now returns a HeadResponse instead of a files.Node.
  • boxo/routing/http/client.Client is now exported. This means you can now pass it around functions, or add it to a struct if you want.
  • 🛠 The path package has been massively refactored. With this refactor, we have condensed the different path-related and/or Kubo-specific packages under a single generic one. Therefore, there are many breaking changes. Please consult the documentation for more details on how to use the new package.
    • Note: content paths created with boxo/path are automatically normalized:
      • Replace multiple slashes with a single slash.
      • Eliminate each . path name element (the current directory).
      • Eliminate each inner .. path name element (the parent directory) along with the non-.. element that precedes it.
      • Eliminate .. elements that begin a rooted path: that is, replace "/.." by "/" at the beginning of a path.
  • 🛠 The signature of CoreAPI.ResolvePath in coreiface has changed to now return the remainder segments as a second return value, matching the signature of resolver.ResolveToLastNode.
  • 🛠 routing/http/client.FindPeers now returns iter.ResultIter[types.PeerRecord] instead of iter.ResultIter[types.Record]. The specification indicates that records for this method will always be Peer Records.
  • 🛠 The namesys package has been refactored. The following are the largest modifications:
    • The options in coreiface/options/namesys have been moved to namesys and their names have been made more consistent.
    • Many of the exported structs and functions have been renamed in order to be consistent with the remaining packages.
    • namesys.Resolver.Resolve now returns a TTL, in addition to the resolved path. If the TTL is unknown, 0 is returned. IPNSResolver is able to resolve a TTL, while DNSResolver is not.
    • namesys/resolver.ResolveIPNS has been moved to namesys.ResolveIPNS and now returns a TTL
      in addition to the resolved path.
  • boxo/ipns record defaults follow recommendations from IPNS Record Specification:
    • DefaultRecordTTL is now set to 1h
    • DefaultRecordLifetime follows the increased expiration window of Amino DHT (go-libp2p-kad-dht#793) and is set to 48h
  • 🛠 The gateway's IPFSBackend.ResolveMutable is now expected to return a TTL in addition to the resolved path. If the TTL is unknown, 0 should be returned.

Removed

  • 🛠 util.MultiErr has been removed. Please use Go's native support for wrapping errors, or errors.Join instead.

What's Changed

See v0.13.0...v0.14.0

v0.13.1

21 Sep 14:56
e0d4b3e
Compare
Choose a tag to compare

Added

  • An option DisableHTMLErrors has been added to gateway.Config. When this option
    is true, pretty HTML error pages for web browsers are disabled. Instead, a
    text/plain page with the raw error message as the body is returned.

What's Changed

  • fix(gateway): ipfs install link by @lidel in #468
  • feat(gateway): add DisableHTMLErrors option by @hacdias in #463

Full Changelog: v0.13.0...v0.13.1

v0.13.0

20 Sep 07:06
33ff595
Compare
Choose a tag to compare

Added

  • ✨ The routing/http implements Delegated Peer Routing introduced in IPIP-417.

Changed

  • 🛠 The routing/http package received the following modifications:
    • Client GetIPNSRecord and PutIPNSRecord have been renamed to GetIPNS and
      PutIPNS, respectively. Similarly, the required function names in the server
      ContentRouter have also been updated.
    • ReadBitswapProviderRecord has been renamed to BitswapRecord and marked as deprecated.
      From now on, please use the protocol-agnostic PeerRecord for most use cases. The new
      Peer Schema has been introduced in IPIP-417.

Removed

  • 🛠 The routing/http package experienced following removals:
    • Server and client no longer support the experimental Provide method.
      ProvideBitswap is still usable, but marked as deprecated. A protocol-agnostic
      provide mechanism is being worked on in IPIP-378.
    • Server no longer exports FindProvidersPath and ProvidePath.

Fixed

  • The normalization of DNSLink identifiers in gateway has been corrected in the edge
    case where the value passed to the path component of the URL is already normalized.

What's Changed

  • ci: uci/copy-templates by @web3-bot in #431
  • Merge release v0.12.0 by @hacdias in #448
  • blockservice/test: passthrough blockservice options [skip changelog] by @Wondertan in #449
  • bitswap: reenable tests by @Jorropo in #423
  • bitswap: mark TestSessionGetBlocks flaky by @Jorropo in #456
  • feat(routing/http)!: delegated peer routing server and client, IPIP 417 by @hacdias in #422
  • ci: remove obsolete protocol/cache-go-action by @galargh in #460
  • fix(gateway): normalization of DNSLink inlining by @lidel in #462

Full Changelog: v0.12.0...v0.13.0

v0.12.0

22 Aug 11:06
c540780
Compare
Choose a tag to compare

Added

  • The routing/http client and server now support Delegated IPNS at /routing/v1 as per IPIP-379.
  • 🛠 The verifycid package has been updated with the new Allowlist interface as part of reducing globals efforts.
  • The blockservice and provider packages has been updated to accommodate for changes in verifycid.

Changed

Removed

N/A

Fixed

  • HTTP Gateway API: Not having a block will result in a 5xx error rather than 404
  • HTTP Gateway API: CAR requests will return 200s and a CAR file proving a requested path does not exist rather than returning an error
  • 🛠 MultiFileReader has been updated with a new header with the encoded file name instead of the plain filename, due to a regression found in net/textproto. This only affects files with binary characters in their name. By keeping the old header, we maximize backwards compatibility.
    New Client Old Client
    New Server 🟡*
    Old Server
    *Old clients can only send Unicode file paths to the server.

Security

N/A

What's Changed

New Contributors

Full Changelog: v0.11.0...v0.12.0

v0.10.3

08 Aug 11:58
2967d50
Compare
Choose a tag to compare

Added

Changed

Removed

Fixed

  • Handle _redirects file when If-None-Match header is present (#412)

Security

What's Changed

Full Changelog: v0.10.2...v0.10.3