Henara.Grpc.Client.Dakota 1.0.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.
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 |
.NET 10.0
- Grpc.AspNetCore (>= 2.80.0)
- Grpc.Net.Client (>= 2.80.0)
- Henara.Grpc.Client.Common (>= 1.0.0)
- ImageLink.Application.Pipeline (>= 1.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.8)