InvoiceTransport constructor

InvoiceTransport({
  1. required String apiKey,
  2. String? baseUrl,
  3. Client? httpClient,
  4. Duration? timeout,
  5. String? clientHeader,
  6. bool omitKasseneckHeaders = false,
})

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');
  }
}