Arbeidstilsynet.Brevgenerator.Client
5.2.0
dotnet add package Arbeidstilsynet.Brevgenerator.Client --version 5.2.0
NuGet\Install-Package Arbeidstilsynet.Brevgenerator.Client -Version 5.2.0
<PackageReference Include="Arbeidstilsynet.Brevgenerator.Client" Version="5.2.0" />
<PackageVersion Include="Arbeidstilsynet.Brevgenerator.Client" Version="5.2.0" />
<PackageReference Include="Arbeidstilsynet.Brevgenerator.Client" />
paket add Arbeidstilsynet.Brevgenerator.Client --version 5.2.0
#r "nuget: Arbeidstilsynet.Brevgenerator.Client, 5.2.0"
#:package Arbeidstilsynet.Brevgenerator.Client@5.2.0
#addin nuget:?package=Arbeidstilsynet.Brevgenerator.Client&version=5.2.0
#tool nuget:?package=Arbeidstilsynet.Brevgenerator.Client&version=5.2.0
Arbeidstilsynet.Brevgenerator.Client
NuGet-pakke i C# for å konsumere Brevgenerator-API.
Modeller for payload ligger i Arbeidstilsynet.Brevgenerator.Client.Models.
Autentisering må angis eksplisitt av konsumenten. Klienten støtter to moduser:
- BearerToken – async factory som returnerer et gyldig bearer token (f.eks. Entra ID client credentials). Eneste støttet av nåværende deployet API.
- ApiKey – async factory som returnerer ApiKey, som sendes i headeren
x-api-key. Ble brukt før.
Hvordan installere
dotnet add package Arbeidstilsynet.Brevgenerator.Client
Bruk
Det finnes to måter å opprette klienten på:
Alternativ 1: Dependency Injection med egen ITokenProvider
Implementer ITokenProvider-grensesnittet og registrer klienten i DI-containeren via AddBrevgeneratorClient<T>:
using Arbeidstilsynet.Brevgenerator.Client.DependencyInjection;
using Arbeidstilsynet.Brevgenerator.Client.Ports;
// 1. Implementer ITokenProvider
public class MyTokenProvider : ITokenProvider
{
public async Task<string> GetToken()
{
// Hent token fra f.eks. Entra ID
return await HentAzureTokenAsync();
}
}
// 2. Registrer i DI-containeren (f.eks. i Program.cs)
services.AddBrevgeneratorClient<MyTokenProvider>(
hostEnvironment,
new BrevgeneratorConfig { AuthMode = AuthMode.BearerToken, BaseUrl = "https://brevgenerator.example.com" }
);
// 3. Injiser IBrevgeneratorClient der du trenger den
public class MyService(IBrevgeneratorClient brevClient)
{
public async Task<string> GenererBrev(GenererBrevArgs args)
{
return await brevClient.GenererBrev(args);
}
}
Alternativ 2: Opprett klient direkte med en token-funksjon
Bruk CreateBrevgeneratorClient for å opprette klienten uten å sette opp en egen ITokenProvider-klasse eller ServiceCollection. Nyttig i enklere oppsett eller legacy-kode:
using Arbeidstilsynet.Brevgenerator.Client.DependencyInjection;
using var client = Extensions.CreateBrevgeneratorClient(
hostEnvironment,
tokenFunc: async () => await HentAzureTokenAsync(),
new BrevgeneratorConfig { AuthMode = AuthMode.BearerToken, BaseUrl = "https://brevgenerator.example.com" }
);
var result = await client.GenererBrev(payload);
Bygge payload
using Arbeidstilsynet.Brevgenerator.Client.Models;
using Arbeidstilsynet.Brevgenerator.Client.Ports;
var payload = GenererBrevArgsBuilder
.Create()
.AddMarkdown(
"# Sample Markdown content\n## {{ exampleVariable }}",
new() { { "exampleVariable", "value" } }
)
.WithDefaultTemplate(Language.Nynorsk, SignatureVariant.ElektroniskGodkjent)
.WithDefaultTemplateFields(
new()
{
Dato = "2024",
SaksbehandlerNavn = "Lorem Ipsum",
Saksnummer = "2024/1234",
Virksomhet = new()
{
Adresse = "Hei",
Navn = "Mr Ipsum",
Postnr = "1234",
Poststed = "Stedet"
}
}
)
.WithMetadata(documentTitle: "My document", author: "A. U. Thor")
.Build();
var result = await client.GenererBrev(payload);
Automatisk retry ved overbelastning
Når APIet er overbelastet svarer det 503 Service Unavailable med en Retry-After-header. Brevgenerering er
uten sideeffekter, så klienten prøver slike spørringer automatisk på nytt, og venter minst den serveroppgitte
tiden pluss litt tilfeldig jitter slik at flere konsumenter ikke prøver samtidig. Alt annet, inkludert 503
uten gyldig Retry-After, kastes videre til kalleren som før.
| Innstilling | Standard | Beskrivelse |
|---|---|---|
MaxRetryAttempts |
2 |
Antall nye forsøk etter det første. 0 skrur av retry. |
MaxRetryAfterDelay |
30 sekunder | Største Retry-After klienten godtar. Lengre verdier gir 503 til kalleren. |
new BrevgeneratorConfig
{
MaxRetryAttempts = 2,
MaxRetryAfterDelay = TimeSpan.FromSeconds(30),
}
Bruk overloaden som tar CancellationToken for å avbryte både pågående spørring og venting før nytt forsøk:
var result = await client.GenererBrev(payload, cancellationToken);
Konfigurasjon av Base-URL og IHostEnvironment
Klienten bruker IHostEnvironment for å automatisk velge riktig base-URL basert på miljøet:
| Miljø | URL |
|---|---|
| Development | http://localhost:4000 |
| Production | https://brevgen2-api.arbeidstilsynet.no/ |
| Andre (f.eks. Test, Staging) | https://brevgen2-api.dev.arbeidstilsynet.no/ |
Dersom BaseUrl er satt i BrevgeneratorConfig, vil denne alltid bli brukt — uavhengig av miljø. Miljøbasert URL-oppslag skjer kun når BaseUrl er null eller tom.
// BaseUrl er satt → denne brukes alltid, IHostEnvironment ignoreres
new BrevgeneratorConfig { AuthMode = AuthMode.BearerToken, BaseUrl = "https://min-egen-url.example.com" }
// BaseUrl er null → URL bestemmes av IHostEnvironment
new BrevgeneratorConfig { AuthMode = AuthMode.BearerToken, BaseUrl = null }
Hvordan publisere ny versjon
- Oppdater
Versioni BrevgeneratorClient.csproj med passende nytt semantisk versjonsnummer - Skriv inn dine endringer i CHANGELOG.md
- PR og merge til main-branch
- Lag Git tag
nuget-client-v<x.y.z> - En ny pakke blir bygget og publisert i nuget.org, klar til bruk
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. 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. |
-
net10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Http (>= 10.0.10)
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Http (>= 10.0.10)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
# Changelog
## 5.2.0
- The client now retries automatically when the API responds `503 Service Unavailable` with a valid
`Retry-After` header (overload), waiting at least the server-provided delay plus a small random
jitter. Nothing else is retried.
- New `BrevgeneratorConfig` settings: `MaxRetryAttempts` (default `2`, `0` disables retry) and
`MaxRetryAfterDelay` (default 30 seconds). Longer `Retry-After` values are not retried; the 503 is
returned to the caller instead.
- New overload `GenererBrev(GenererBrevArgs payload, CancellationToken cancellationToken)`, which
cancels both an in-flight request and a pending retry delay. Note: custom implementations or
hand-written fakes of `IBrevgeneratorClient` must implement the new method.
## 5.1.1
- Updated XML documentation comments to align with the project glossary:
"flettefelt" is now described as "variabler" (variables), and the document
template metadata (DefaultTemplateFields / DirektoratTemplateFields) is now
called "dokumentmalfelt" instead of "flettefelter".
## 5.1.0
- Added `BasicConfig.MergeCss: bool`, which can be set in `WithConversionOptions` to append custom CSS to the template's default CSS instead of replacing it entirely
## 5.0.1
- Fix access level of internal class' constructor
## 5.0.0
- Oppdatert pakkestruktur for å få en bedre forståelse om hva som er `internal` og hva som burde være `public`
- Lagt til støtte for å bruke pakken via DI-extension `ServiceCollection.AddBrevgeneratorClient()`
- DI må nå gjøres med `ServiceProvider.GetRequiredService<IBrevgeneratorClient>()`
- For å opprette klient uten eksisterende DI må den nye hjelpemetoden `Arbeidstilsynet.Brevgenerator.Client.DependencyInjection.Extensions.CreateBrevgeneratorClient()` brukes i stedet for direkte konstruktør
## 4.0.0
- Publiserer nå til `nuget.org` i stedet for Azure DevOps
- Omdøpt pakke fra `AT.Brevgenerator.Klient` til `Arbeidstilsynet.Brevgenerator.Client`
- Omdøpt namespace fra `AT.Brevgenerator.Klient` / `AT.Brevgenerator.Klient.Model` til `Arbeidstilsynet.Brevgenerator.Client` / `Arbeidstilsynet.Brevgenerator.Client.Models`
- Omdøpt `BrevgeneratorKlient` / `IBrevgeneratorKlient` til `BrevgeneratorClient` / `IBrevgeneratorClient`
## 3.3.0
- Lagt til støtte for `ErUnntattOffentlighet` og `UnntattOffentlighetHjemmel` i direktorat-template
- GenererBrevArgsBuilder sjekker nå at `UnntattOffentlighetHjemmel` er definert når `ErUnntattOffentlighet` er `true`
## 3.2.0
Støtte for ny dokument-mal "direktorat" med egen logo og andre felter. Konfigurer med nye metoder i builder `WithDirektoratTemplate` og `WithDirektoratTemplateFields`.
Til forskjell fra "default" template er ingen felter i `DirektoratTemplateFields` påkrevd.
## 3.1.6
- Fiks så `bearerTokenFactory` alltid kalles ved gjenbruk av samme httpClient
- Sett headers på selve request i stedet for å mutere `httpClient.DefaultRequestHeaders`
- Refactor av intern mappestruktur
## 3.1.5
- Fjern logging av payload og forenklet feilhåndtering
## 3.1.4
- Publiserer fra GitHub til public feed `AT.Public.NuGet`
## 3.1.3 - 2025-10-31
Fjernet `Path,Timeout,WaitForFonts` fra PuppeteerPDFOptions. Dette er en breaking change, men disse egenskapene var ikke ment å være tilgjengelige. API schema har blitt oppdatert og forsøk på å bruke disse vil bli stoppet av schema validation.
## 3.1.2 - 2025-10-09
Lagt til ClientId, TenantId og Scope i `BrevgeneratorSecret`
## 3.1.1 - 2025-10-09
Lagt til `AT.Brevgenerator.Klient.Model.BrevgeneratorSecret`
## 3.1.0 - 2025-10-09
Lagt til støtte for `DefaultTemplateFields.TidligereReferanse`
## 3.0.0 - 2025-08-29
Breaking changes:
- Fjernet automatisk uthenting av API Key fra AWS (ApiKeyRetriever og IApiKeyRetriever er fjernet).
- Fjernet AWS-avhengigheter (APIGateway, SimpleSystemsManagement) og forenklet `BrevgeneratorConfig` til kun `ApiUrl`.
- Region og ParameterStoreApiKeyIdName fjernet fra konfigurasjon.
- `AuthMode` må angis eksplisitt i konstruktør.
Nytt:
- Støtte for Bearer token (Entra ID client credentials e.l.) via `bearerTokenFactory`.
Migrering:
- Opprett konfig: `var config = new BrevgeneratorConfig(apiUrl);`
- Konstruer klient:
```cs
new BrevgeneratorKlient(
config,
BrevgeneratorKlient.AuthMode.BearerToken,
bearerTokenFactory: async () => await GetToken()
);
```
eller
```cs
new BrevgeneratorKlient(
config,
BrevgeneratorKlient.AuthMode.ApiKey,
apiKeyFactory: async () => await GetApiKey()
);
```
## 2.3.3 - 2025-04-08
Opprydding i model for å tilsvare API sitt schema:
- Satt de fleste felter i AT.Brevgenerator.Klient.Model.DefaultTemplateFields som required.
- Satt alle felter i AT.Brevgenerator.Klient.Model.Virksomhet som required.
- Forbedret håndtering av initialisering i builder.
## 2.3.2 - 2025-04-02
Fjernt nullability fra AT.Brevgenerator.Klient.Model.GeneratePdfOptions.Dynamic siden det er påkrevd av APIet
## 2.3.1 - 2025-03-28
Fjernet AT.Brevgenerator.Klient.Model.BasicConfig.BodyClass som ikke gjør noe
## 2.3.0 - 2025-03-27
Lagt til støtte for blank template
## 2.2.0 - 2025-01-22
Lagt til støtte for `null` som variabelverdi i forbindelse med truthy logikk
## 2.1.0 - 2025-01-14
Lagt til nye valgfrie felter i default template: DeresDato, DeresReferanse, ErUnntattOffentlighet
## 2.0.0 - 2024-11-29
Endret TargetFramework til net8.0
## 1.1.0 - 2024-10-29
La til signatureVariant Usignert
## 1.0.2 - 2024-10-18
Fiks få med signatureVariant i ArgsBuilder
## 1.0.1 - 2024-10-17
Fiks serialisering av enums
## 1.0.0 - 2024-10-09
Første versjon av pakken