Henara.Grpc.Client.Dakota 1.1.0

Henara.Grpc.Client.Dakota

gRPC client library for the Dakota pipeline gateway and reporting service. Usable from any .NET host (ASP.NET Core, WinForms, MAUI, console). Authentication is supplied by an ICallTokenProvider; the Dakota clients carry no static API token.

Environment variables

Variable Required by Description
URL_DAKOTA_PIPELINE AddDakotaExternalGrpcClients Absolute URL of the pipeline gateway
URL_DAKOTA_REPORTER AddDakotaExternalGrpcClients Absolute URL of the reporting service

Both are validated at registration and throw immediately if missing/invalid.

DI setup — native client (WinForms / MAUI)

The native app performs an interactive Keycloak login (Authorization Code + PKCE in a webview) against the public client henara-main-sso, then hands the resulting tokens to the provider.

services.AddNativeKeycloakAuth(o =>
{
    o.TokenEndpoint = "https://auth.praxx.me/realms/henara/protocol/openid-connect/token";
    o.ClientId      = "henara-main-sso";
});
services.AddDakotaExternalGrpcClients(); // URLs from env vars above

// after the webview login completes:
var auth = provider.GetRequiredService<KeycloakRefreshingTokenProvider>();
auth.Initialize(accessToken, refreshToken, expiresInSeconds); // tokens from the login response

The provider refreshes the access token automatically before it expires (rotating the refresh token). If the refresh fails, the next call throws — re-run the interactive login and call Initialize(...) again.

If your native host already owns a Keycloak session (it logged the user in and refreshes tokens itself, e.g. via a WebView2 + SessionManager), do not use AddNativeKeycloakAuth/Initialize here — use the Henara.Grpc.Client.DakotaSlim package, which adapts your existing token onto these Dakota clients with a single registration and no second refresh-token rotator.

DI setup — inside our stack

Register any ICallTokenProvider that yields a valid Keycloak bearer (e.g. the Blazor frontend's KeycloakUserCallTokenProvider), then the clients:

services.AddScoped<ICallTokenProvider, KeycloakUserCallTokenProvider>();
services.AddDakotaExternalGrpcClients();

Example calls

var reporter = provider.GetRequiredService<IDakotaReporterClient>();

await foreach (var p in reporter.GetDakotaStati(new DakotaFilter { CustomerId = new MatchesIntFilterDto(20130000) }))
    Console.WriteLine($"{p.CreatedAt:o} {p.ReceiverIk} {p.FileName}");

var (rows, total) = await reporter.GetFilesPaged(page: 0, pageSize: 100, search: "");

var gateway = provider.GetRequiredService<IDakotaGatewayClient>();
await foreach (var r in gateway.DispatchDakotaProcess(pairs))
    Console.WriteLine(r.IsDispatched ? r.PipelineId.ToString() : r.Message);

The reporting service scopes all results to the caller's customer id(s); Henara admins see everything.

Showing the top 20 packages that depend on Henara.Grpc.Client.Dakota.

Packages Downloads
Henara.Grpc.Client.DakotaSlim
Slim native gRPC client wiring for hosts that already own a Keycloak session (e.g. SmartVO). Adapts a host-supplied access token to the Dakota external clients; contains no interactive login and no token refresh of its own.
122
Henara.Grpc.Client.DakotaSlim
Slim native gRPC client wiring for hosts that already own a Keycloak session (e.g. SmartVO). Adapts a host-supplied access token to the Dakota external clients; contains no interactive login and no token refresh of its own.
3
Henara.Grpc.Client.DakotaSlim
Slim native gRPC client wiring for hosts that already own a Keycloak session (e.g. SmartVO). Adapts a host-supplied access token to the Dakota external clients; contains no interactive login and no token refresh of its own.
2
Henara.Grpc.Client.DakotaSlim
Slim native gRPC client wiring for hosts that already own a Keycloak session (e.g. SmartVO). Adapts a host-supplied access token to the Dakota external clients; contains no interactive login and no token refresh of its own.
0

Version Downloads Last updated
2.2.0 125 07/13/2026
2.1.0 6 07/09/2026
2.0.0 3 07/05/2026
1.3.0 4 06/25/2026
1.2.0 1 06/25/2026
1.1.0 1 06/25/2026
1.0.0 2 06/25/2026