InvoiceTransport constructor
InvoiceTransport({})
baseUrl muss auf /v3 enden, sonst wirft schon das Anlegen.
httpClient darf kein RetryClient (oder anderer wiederholender
Client) sein: ein zweites stilles Senden von issueInvoice ohne
idempotencyKey waere eine zweite Rechnung.
Implementation
InvoiceTransport({
required String apiKey,
String? baseUrl,
http.Client? httpClient,
Duration? timeout,
String? clientHeader,
bool omitKasseneckHeaders = false,
}) : _apiKey = apiKey.trim(),
baseUrl = v3BaseUrl('RechnungTransport', baseUrl, kInvoiceBaseUrl),
_kopf = V3Headers('RechnungTransport', clientHeader: clientHeader, omit: omitKasseneckHeaders),
_http = httpClient ?? http.Client(),
_timeout = timeout ?? const Duration(seconds: 30) {
// Geprüft wird nur, was ohne Netz sicher falsch ist. Die Meldung nennt die
// Art des Schlüssels, nie seinen Wert.
if (_apiKey.isEmpty) {
throw const KasseneckValidationError('RechnungTransport', 'apiKey fehlt', 'request');
}
if (RegExp(r'^pk_(live|test)_', caseSensitive: false).hasMatch(_apiKey)) {
throw const KasseneckValidationError('RechnungTransport',
'das ist ein Partner-Schlüssel (pk_…) — die Rechnungs-API nimmt den api_key des Kontos (kr_…)', 'request');
}
if (RegExp(r'^cb_(live|test)_', caseSensitive: false).hasMatch(_apiKey)) {
throw const KasseneckValidationError('RechnungTransport',
'das ist ein Kassen-Token (cb_…) — die Rechnungs-API nimmt den api_key des Kontos (kr_…)', 'request');
}
}