Releases: blowdart/idunno.Bluesky
v.1.8.0
Added
idunno.AtProto
- Added metrics in
AtProtoHttpClientMetricsincluding request duration, request count and failure count. - Added metrics in
DidPlcDirectoryincluding request duration, request count and failure count. - Added extensions for
OpenTelemetry.Metrics:AddAtProtoHttpClientMetrics,AddAtProtoDirectoryMetrics, andAddAtProtoJetStreamMetrics. - Added new constructor overloads for
AtProtoHttpClientto allow for use withMetricsFactory. - Added
ThrottledtoAccountStatusin Jetstream account events. - Added
MaxMessageSizetoJetStreamOptionsto guard against a malicious jetstream server sending overly large messages. - Added optional validation callbacks to
AtProtoAgent.BuildOAuthLoginUrito allow for validation of the discovered PDS and authorization server URIs. - Added default validation function to disallow loopback and private IP ranges in discovered URIs, to mitigate SSRF attacks.
- Added override on
ToString()onAtProtoCredentialto return a redacted string in case of accidental logging. - Added default SSRF protections to
AtProtoAgent,AtProtoHttpClientandAtProtoJetStreamwith idunno.Security.Ssrf.
This can be disabled by passing your ownHttpClientwhen creating an agent, or intoAtProtoHttpClient. - Added
AllowLoopbackparameter toBuildOAuth2LoginUrito allow loopback addresses in discovered URIs for testing and development purposes. This is disabled by default.
idunno.AtProto.Types
- Added == and != operations to
Cid.
idunno.Bluesky
-
Added
Botproperty toProfilerecord to set or unset the profile self label
indicating a bot account, see [APP-1928] add bot/automated account badge and self-labeling settings -
Added
SelfLabelsproperty toProfileViewBasicwhich returns a list of self labels applied to a profile,
which can be used in conjunction withSelfLabelValuesto check if a profile has applied any self labels to itself,
including theBotself label andDiscourageShowingToLoggedOutUserself label. e.g.var profile = await agent.GetProfile("beans.monster"); if (profile.Result.SelfLabels.Contains(SelfLabelValues.Bot)) { // 🤖 - Do some action because the profile self identifies as a bot. }
-
Added
SelfLabelsproperty toPostView. -
Added
SelfLabelValuesclass. -
Added
BotandDiscourageShowingToLoggedOutUsertoSelfLabelValues. -
Added
JsonPolymorphicattributes to individual records to remove the extraneousExtensionDataentries. -
Added
CreateStatus,GetStatusandUpdateStatustoBlueskyAgent. -
Added a setter to
DurationMinutesonStatusand setters toExternalPropertiesto allow for updating of an existing profile status.
Documentation
- Added documentation for metrics.
- Added documentation for setting a status on a profile.
Changed
idunno.AtProto
- Changed
AtJetStreamIdentityclass to makeHandleproperty nullable. - Add version to
JetstreamMetrics - Made
JetStream.MeterNameandJetStream.MeterVersionproperties public to allow for easy OTEL configuration. - Fixed OAuth logout.
- Changed
JetStreamMetricsfrompublictointernalbecause it is not intended for public use. - Remove
[Serializable]fromAtProtoCredential. - Exclude
CredentialinCredentialExceptionfrom serialization because it may contain sensitive information.
idunno.AtProto.Types
- Updated DID validation regex to align with specs: allow digits in DID method.
idunno.Bluesky
- Updated
SuggestedActorsto includeRecIdStr, see Add recIdStr to suggested follows by actor - Added setter to
Notification.Declaration.AllowSubscriptionsfor easy updating of the value. - Mark
SetStatusas obsolete in favor ofCreateStatusandUpdateStatus.
This allows for better handling of the case where a profile does not have an existing status,
and clearer intent when updating an existing status. - Marked
SelfLabelNamesas obsolete in favor ofSelfLabelValues, as the new name is more correct.
v.1.7.0
⚠️ Security Advisory
A transitive dependency of idunno.AtProto and idunno.AtProto.OAuthCallback, Microsoft.Bcl.Memory had a Denial of Service security vulnerability, CVE-2026-26127
v1.7.0 updates the dependencies, resolving the vulnerability.
v1.6.0
Added
idunno.AtProto
- Added
AccessTokenException, which will be thrown if a supplied access token is not valid for a service. - Added
GetRawRecordtoAtProtoAgentandAtProtoServer.
idunno.AtProto.Types
- Added
Selfproperty toRecordKeywhich returns aRecordKeywith the value ofself.
idunno.Bluesky
- Added support for drafts, including
Draftrecord,CreateDraft(),GetDraft(),ListDrafts(),DeleteDraft()andPublishDraft(). - Added
Post(DraftWithId)to create a post from a draft.
Fixed
idunno.Bluesky
- Fixed
DeleteLike()to use the correct collection when validating theuriparameter.
Documentation
- Removed erroneous references to
CreatePost(), thanks shiftkey
Changed
idunno.AtProto
GetRecord<T>andListRecords<T>will now attempt to resolve the PDS hosting the record if a service is not specified.GetRecord,CreateRecord,DeleteRecord,PutRecord,ListRecordsandApplyWritesmethods onAtProtoServerwill now
throwAccessTokenExceptionif any specified credentials have not been issued by the specified service.- Removed
Typeproperty fromBlob. - Removed
Typeproperty fromSelfLabels.
idunno.Bluesky
- Removed
Typeproperty fromFacet.
Breaking Changes
idunno.AtProto
- The overloads for
ListRecords<T>that requires authentication will ignore any service parameter passed to it.
idunno.Bluesky
- Switched
RemainingDailyVideosandRemainingDailyBytesinUploadLimitstolong?
v1.5.0
Added
idunno.AtProto
- Added
TypeResolverstatic class. - Added
TimestampIdentifiertoSourceGenerationContext.
idunno.AtProto.Types
- Added new constructor on
TimeStampIdentifierto create from aRecordKey. - Added
TimeStampIdentifierJsonConverterforTimeStampIdentifier. - Added explicit and implicit conversions between
TimeStampIdentifierandRecordKey. - Added tests for
TimeStampIdentifierserialization and deserialization.
idunno.Bluesky
- Added
TypeResolverstatic class. - Added support for
GetActorStarterPacks(), addresses #288, thank you j-childers - Added
FeedItemrecord to represent feeds added in aStarterPackrecord. - Added
Presentationproperty toEmbeddedVideoandEmbeddedVideoViewto for video presentation hints. - Added
VideoPresentationKnowValuesstatic class with known presentation values for videos.
Changed
idunno.Bluesky
- Added
Statusproperty toProfileViewBasic,ProfileViewandProfileViewDetailedto represent live streaming status for a profile, if any. - Changed
Descriptionproperty inListViewto be nullable to match the API, fixes #289 EmbeddedVideoandEmbeddedVideoViewinclude the optionalPresentationproperty. See Add presentation to video embed as a hint to the client about how to display the video.EmbeddedVideoandEmbeddedVideoViewconstructors updated to take optionalpresentationparameter.
Breaking Changes
idunno.AtProto
BlobReferencesnow enforces that the link property is a CID.
idunno.Bluesky
- Changed
StarterPackFeedsproperty to be a list ofFeedItem, fixes #288 - Changed
StarterPackconstructor to take a list ofFeedItemfor feeds parameter, fixes #288 - Changed
EmbeddedVideoandEmbeddedVideoViewto include the optionalPresentationproperty. EmbeddedVideoconstructor overload that took a singleCaptionparameter has been removed. Use the constructor that takes anICollectionofCaption.
v.1.4.0
Added
idunno.AtProto
- Add public
AtProtoJsonSerializerOptionsto enable easier creation ofJsonSerializerOptionswith chained resolvers
for customAtProtoRecordclasses. - Add
ToAccessCredentialsandToAccessTokenCredentialmethods toSession.
idunno.Bluesky
- Add "cashtag" facet detection to the default facet extractor. See Add cashtag support for stock ticker discussions
- Add
SetLiveStatusto indicate if a user is live streaming, andSetStatusandDeleteStatusto set and delete a user's status. - Add
BlueskyJsonSerializerOptionsto enable easier creation ofJsonSerializerOptionswith chained resolvers
v1.3.0
Added
idunno.AtProto
- Add non-generic version of
AtProtoHttpClientto allow for "raw" get/post operations. - Add
AccessTokenCredentialto wrap an access jwt for which no refresh token is available. - Add
Resolutionclass with static methods to resolve DIDs for handles,and DidDocuments and PDS URIs for handles and DIDs without needing to instantiate a client. - Add
GetGraphemeLengthextension method onstringto get the grapheme length of a string.
Documentation
- Add documentation for using the raw client
- Add documentation on using your own record types with typed client, and an approach to mapping a lexicon definition to a C# POCO.
Changed
idunno.AtProto
- Bump
ZstdSharp.Portfrom 0.8.6 to 0.8.7.
idunno.Bluesky
- Change
DeleteRepostto accept either a repost AT-URI, or the AT-URI of the original post. - Change access modifiers on the constructors for
FacetandPostBuilderFacetFeaturetopublic.
v1.2.0
Added
idunno.AtProto
- Add .NET 10 support
- Add support for configuration binding and options in DI.
- Add
OAuthLoginStatetoSourceGenerationContext. - Expose
ValidationRegexconstants onDidandHandle. - Add optional parameter
uriExtraParameterstoBuildOAuth2LoginUri. - Add optional parameter
stateExtraPropertiestoBuildOAuth2LoginUri.
idunno.AtProto.OAuthCallback
- Add .NET 10 support
idunno.AtProto.Types
- Create common ATProto types
idunno.AtProto.Typespackage.
idunno.Bluesky
- Add .NET 10 support
- Add support for configuration binding and options in DI.
Changed
idunno.AtProto
- Update 3rd party dependencies.
- Fix
AtProtoAgent.RefreshCredentials()to attempt a refresh if the access token has expired and there is a refresh token available. - Update OAuth code for
IdentityModel.OidcClient.Extensionsversion 7.0.0.
idunno.AtProto.OAuthCallback
- Update 3rd party dependencies.
idunno.Bluesky
- Update 3rd party dependencies.
Breaking Changes
idunno.AtProto
- Move common ATProto types to
idunno.AtProto.Typespackage. - The
AtProtoAgentconstructor can now take anClaimsPrincipalorClaimsIdentity.
This means you must now use named parameters to call the desired constructor, e.g.using var agentWithoutLogging = new AtProtoAgent(service: new("https://bsky.social")); { }
v1.1.0
Added
idunno.Bluesky
- Add support for pronouns and website in
Profileand its associated views. - Add support for some of the more useful unspecced APIs
GetAgeAssuranceState()GetPopularFeedGenerators()GetSuggestedStarterPacks()GetSuggestedUsers()GetTaggedSuggestions()GetTrendingTopics()GetTrends()
- Add support for Tags in
ReplyTo()andQuote()methods. - Expose
FacetExtractoronBlueskyAgent.
Fixed
idunno.AtProto
- Calling logout on an agent which is authenticated via OAuth no longer causes a DPoP error on the AtProto API.
Breaking Changes
idunno.Bluesky
- The constructor for
Profile()which takes requires values for all parameters now includes a pronouns and website parameter.
v1.0.0
v0.9.9
- Bump System.Text.Json from 9.0.8 to 9.0.9.