Jezda.Common.Integrations.Abstractions 3.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Jezda.Common.Integrations.Abstractions --version 3.0.0
                    
NuGet\Install-Package Jezda.Common.Integrations.Abstractions -Version 3.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Jezda.Common.Integrations.Abstractions" Version="3.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Jezda.Common.Integrations.Abstractions" Version="3.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Jezda.Common.Integrations.Abstractions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Jezda.Common.Integrations.Abstractions --version 3.0.0
                    
#r "nuget: Jezda.Common.Integrations.Abstractions, 3.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Jezda.Common.Integrations.Abstractions@3.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Jezda.Common.Integrations.Abstractions&version=3.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Jezda.Common.Integrations.Abstractions&version=3.0.0
                    
Install as a Cake Tool

Jezda.Common.Integrations.Abstractions

Shared abstractions for external task provider integrations, including the IExternalTaskProvider interface, DTOs, and resilience defaults.

Key Types

  • IExternalTaskProvider — unified interface for importing tasks from external providers (GitHub, Jira, Azure DevOps)
  • ExternalProvider — enum identifying the provider
  • ExternalProjectDto / ExternalTaskDto — normalized DTOs returned by all providers
  • ConnectionValidationResult — what ValidateConnectionAsync returns: IsValid, and for a rejected token a TokenRejectionReason (InvalidToken, NotSendable, MissingScope, AccessDenied, SignInPage) plus a Detail for logs and support (status and path, or where a sign-in page is; never the token or the response body). Map Reason to a message for the user; Detail is English and not meant for display
  • HttpResilienceDefaults.AddIntegrationResilience() — extension method for configuring standard resilience policies on IHttpClientBuilder. It retries a 429 only when Retry-After asks for at most 5 s; a longer pause, or a 429 without Retry-After, reaches the caller at once instead of ending as a timeout. Each address (scheme, host and port) has its own circuit breaker, so one customer's site that is down does not cut off the others; credentials typed into a base URL never reach the key. The overload AddIntegrationResilience(pipelineKey) takes another key for providers whose callers share one address: Azure DevOps adds the organisation on dev.azure.com, GitHub, Monday and ClickUp use IntegrationPipelineKeys.AddressAndAuthorization (address plus a hash of the Authorization header), and Trello hashes its token query parameter the same way. A 429 does not count towards the breaker, which tokens on the same key share, so one token's rate limit does not cut off the others; only when it answers the single probe of a half-open breaker does it keep the breaker open, since it says nothing about whether the provider recovered
  • IntegrationRateLimitException — an HttpRequestException with status 429 that a provider throws when it recognises a rate limit, even one answered with 403; RetryAt says when to try again, when the provider said. GitHub throws it for now
  • HttpRedirectDefaults.DisableAutoRedirect() — extension method that stops an IHttpClientBuilder from following redirects, which would drop the Authorization header and make a valid token read as expired

Connection validation

Breaking change: ValidateConnectionAsync returns ConnectionValidationResult instead of bool, so a caller can tell a revoked token from one without a scope. Replace if (await provider.ValidateConnectionAsync(...)) with .IsValid, and show the user a message per Reason:

Reason What the user should do
InvalidToken Create a new token; this one is wrong, revoked or expired
NotSendable Paste the token again without stray characters (a smart quote, a line break)
MissingScope Add the missing scope to the token (Azure DevOps: Work Items (Read); Monday.com: the permission behind missingRequiredPermissions); a new token with the same scopes fails the same way
AccessDenied Check the token's scopes and any Conditional Access, IP allow list or firewall in front of the provider
SignInPage Check the base URL and the token; a gateway may ask for its own sign-in (Detail names where)

Exceptions keep their meaning: "could not check", never "bad token".

Project identity

Breaking change in meaning: ExternalProjectDto.Id and ExternalTaskDto.ProjectId are now the provider's durable id, and they no longer hold the name a project goes by. Rows stored by an older version hold what is now Path.

Provider Id / ProjectId Path Previous Id
GitHub repository id (1009267206) owner/repo owner/repo
Azure DevOps project GUID project name project name
Jira project id (10001) project key (PROJ) project key
ClickUp, Monday, Trello same as before equal to Id unchanged
  • Key stored rows on Id, and bind tasks to projects by ExternalTaskDto.ProjectId. A rename or transfer on the provider's side does not change it.
  • Treat Path as a value to refresh from GetProjectsAsync, not as a key.
  • GetTasksAsync accepts either Id or the current Path, so stored rows keep working while they are migrated. A row stored as a path can stop working once the project is renamed: the old path can fail with an error such as 404, and such a row can no longer be matched to a project in the list. Matching a stored row against ExternalProjectDto.Id does not work until it is migrated, so migrate before comparing.
  • On GitHub and Azure DevOps, resolving the project costs extra requests: one per GetTasksAsync call, and one per distinct project in a SearchTasksAsync result.

Project metadata

CreatedAt, UpdatedAt, IsArchived and IsPrivate on ExternalProjectDto are nullable. Null means the provider does not report the value, not that the answer is no.

Provider CreatedAt UpdatedAt IsArchived IsPrivate
GitHub created_at later of pushed_at, updated_at archived private
Azure DevOps null lastUpdateTime state is deleting or deleted visibility is not public
Jira null null archived null
Trello null dateLastActivity closed prefs.permissionLevel is not public
ClickUp, Monday null null null null

Jira's isPrivate means the calling user cannot see the project, not that the project is closed to the public, so IsPrivate stays null there. Azure DevOps has no archive feature, and its project list returns only wellFormed projects by default, so IsArchived there is false in practice.

Usage

Implementations are provided by the provider-specific packages:

  • Jezda.Common.Integrations.GitHub
  • Jezda.Common.Integrations.Jira
  • Jezda.Common.Integrations.AzureDevOps

Resolve all registered providers via IEnumerable<IExternalTaskProvider> and filter by the Provider property.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Jezda.Common.Integrations.Abstractions:

Package Downloads
Jezda.Common.Integrations

Base integration client for external service integrations. Provides shared HTTP client infrastructure, logging, and serialization.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.1.1 109 11/10/2026
3.1.0 104 11/10/2026
3.0.0 114 11/10/2026
2.0.0 154 11/8/2026
1.2.2 235 10/5/2026
1.2.1 159 10/5/2026
1.2.0 311 8/15/2026
1.1.0 298 7/5/2026
1.0.38 302 5/11/2026
1.0.37 750 3/12/2026