Scenariusz: timeout
Scenariusz timeout symuluje sytuację, w której API KSeF nie odpowiada w wymaganym czasie. Przydatny do testowania logiki ponawiania zapytań (retry) i odporności aplikacji na awarie sieci.
Zachowanie
Dział zatytułowany „Zachowanie”| Operacja | Rezultat |
|---|---|
fetchInvoices | Opóźnienie + KsefTimeoutError |
sendInvoice | Opóźnienie + KsefTimeoutError |
getUpo | Działa normalnie |
Scenariusz rejestruje hooki beforeFetch i beforeSend, które wprowadzają opóźnienie, a następnie rzucają KsefTimeoutError.
Parametry
Dział zatytułowany „Parametry”| Parametr | Typ | Domyślnie | Opis |
|---|---|---|---|
delayMs | number | 10000 | Czas opóźnienia przed rzuceniem błędu |
Przykład
Dział zatytułowany „Przykład”import { createKsefSimulator } from '@ksefnik/simulator'import { createKsefnik } from '@ksefnik/core'
const { adapter } = createKsefSimulator({ scenario: 'timeout', delayMs: 100, // 100ms w testach})
const ksefnik = createKsefnik({ nip: '1234567890', adapter,})
// Bez retry -- błądtry { await ksefnik.invoices.sync({ dateFrom: '2026-03-01', dateTo: '2026-03-31', })} catch (error) { console.log(error.name) // "KsefTimeoutError" console.log(error.message) // "Request timed out after 100ms"}Testowanie z retry
Dział zatytułowany „Testowanie z retry”import { withRetry } from '@ksefnik/core'
// withRetry automatycznie ponawia zapytania przy timeoutconst ksefnik = createKsefnik({ nip: '1234567890', adapter: withRetry(adapter, { maxRetries: 3, baseDelay: 50, }),})
// Po 3 nieudanych próbach rzuci KsefTimeoutErrortry { await ksefnik.invoices.sync({ dateFrom: '2026-03-01', dateTo: '2026-03-31', })} catch (error) { console.log(error.retryCount) // 3}