Version 0.2.0 includes the following changes:
New Features
- Added
VerifiedIdentityfor 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.xcprivacyfile. - 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.DIDDocumentinstead of the DID Document model from ATCommonWeb. - Simplified DID caching.
- Added
CacheFreshnessfor identifying fresh, stale, and expired entries. - Stale entries are refreshed before being returned.
- Expired entries are resolved again instead of being returned.
- Updated the
DIDCachemethods to focus on storing, retrieving, and removing entries.
- Added
- Added
NetworkTransportandURLSessionNetworkTransportfor DID resolution.- The
did:plcanddid:webresolvers now use the same network transport.
- The
- Improved handle resolution.
- Handles are now normalized and validated before lookup.
- DNS is checked before HTTP, followed by the configured backup nameservers.
- Added
HandleResolutionMethodandHandleResolutionFailureto preserve errors from each attempted resolution method.
- Backup nameserver lookups now support IPv4 and IPv6 addresses.
- Renamed the following
HandleResolvermethods:resolveDNS(with:)is nowresolveDNS(for:).resolveHTTP(with:)is nowresolveHTTP(for:).resolveDNSBackup(with:)is nowresolveDNSBackup(for:).- Renamed
willForceRefreshtoforceRefreshin the DID resolver methods.
- Resolver timeouts now use seconds instead of milliseconds and default to 3 seconds.
- Added public initializers to
HandleResolverOptionsandDIDResolverOptions.- Both
structs now conform toSendable.
- Both
- Updated the resolver protocols, models, and errors to improve their
Sendableconformance. - Removed existential
anyfromDIDMethod.didMethods. - Added more documentation, as well as sample code, for:
DIDResolverDIDDocumentResolverProtocolHandleResolverIdentityResolverVerifiedIdentity
- Added more unit tests for:
- DID and handle resolution.
- DID syntax and reference validation.
did:webURL 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:webURL 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:webserver returns a404response.
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.