Skip to content

v0.2.0

Latest

Choose a tag to compare

@MasterJ93 MasterJ93 released this 11 Aug 02:00

Version 0.2.0 includes the following changes:

New Features

  • Added VerifiedIdentity for displaying the relationship between an AT Protocol handle and a decentralized identifier (DID).
  • Expanded the DID and DID Document support in DIDCore.
    • General DID syntax and custom DID methods can now be represented.
    • Added validation for absolute and relative DID references.
    • Added typed support for DID Document contexts, controllers, services, authentication relationships, and verification methods.

Changes:

  • Added the PrivacyInfo.xcprivacy file.
  • Added DIDCore as an ATIdentityTools dependency.
    • DIDCore has always been included in this package, but ATIdentityTools can now use its types and methods directly.
  • Updated DID resolution and caching to use DIDCore.DIDDocument instead of the DID Document model from ATCommonWeb.
  • Simplified DID caching.
    • Added CacheFreshness for identifying fresh, stale, and expired entries.
    • Stale entries are refreshed before being returned.
    • Expired entries are resolved again instead of being returned.
    • Updated the DIDCache methods to focus on storing, retrieving, and removing entries.
  • Added NetworkTransport and URLSessionNetworkTransport for DID resolution.
    • The did:plc and did:web resolvers now use the same network transport.
  • Improved handle resolution.
    • Handles are now normalized and validated before lookup.
    • DNS is checked before HTTP, followed by the configured backup nameservers.
    • Added HandleResolutionMethod and HandleResolutionFailure to preserve errors from each attempted resolution method.
  • Backup nameserver lookups now support IPv4 and IPv6 addresses.
  • Renamed the following HandleResolver methods:
    • resolveDNS(with:) is now resolveDNS(for:).
    • resolveHTTP(with:) is now resolveHTTP(for:).
    • resolveDNSBackup(with:) is now resolveDNSBackup(for:).
    • Renamed willForceRefresh to forceRefresh in the DID resolver methods.
  • Resolver timeouts now use seconds instead of milliseconds and default to 3 seconds.
  • Added public initializers to HandleResolverOptions and DIDResolverOptions.
    • Both structs now conform to Sendable.
  • Updated the resolver protocols, models, and errors to improve their Sendable conformance.
  • Removed existential any from DIDMethod.didMethods.
  • Added more documentation, as well as sample code, for:
    • DIDResolver
    • DIDDocumentResolverProtocol
    • HandleResolver
    • IdentityResolver
    • VerifiedIdentity
  • Added more unit tests for:
    • DID and handle resolution.
    • DID syntax and reference validation.
    • did:web URL conversions.
    • DID Document validation.
    • Caching.
    • Custom network transports.
    • Backup nameserver resolution.
    • Resolver timeouts and error handling.
    • Verified AT Protocol identities.

Bug Fixes

  • Fixed malformed DID validation and did:web URL conversion errors.
  • Fixed an issue where resolver timeout values could be interpreted as milliseconds even though the resolver options documented them as seconds.
  • Fixed an issue where in-memory DID cache TTL values were treated as milliseconds instead of seconds.
  • Fixed an issue where resolved backup nameserver IP addresses were not stored and reused correctly.
  • Fixed an issue where duplicate DNS TXT records containing the same DID could be rejected.
  • Fixed an issue where conflicting DNS TXT records were not reported correctly.
  • Fixed an issue where HTTP handle resolution did not validate the response status or complete response body.
  • Fixed an issue where errors from failed handle-resolution methods could be discarded.
  • Fixed an issue where a resolved DID Document could contain an identifier different from the requested DID.
  • Fixed DID resolution to report missing documents correctly when a PLC directory or did:web server returns a 404 response.

Once again, thank you for your support. Please give feedback, bug reports, and contributions if you have time. Consider starring this project if you find it helpful, and feel free to donate an amount that reflects the value it has brought to you. Your support helps ensure the continued development and improvement of this project. You can also speak to me on Bluesky (@cjrriley.ca) for any questions.