Scenariusz: session-expired
Scenariusz session-expired symuluje wygaśnięcie sesji KSeF. Pierwsze zapytanie kończy się sukcesem, ale kolejne zwracają KsefSessionError. Pozwala to testować mechanizm automatycznego odnawiania sesji.
Zachowanie
Dział zatytułowany „Zachowanie”| Zapytanie | Rezultat |
|---|---|
| Pierwsze (fetch/send) | Sukces |
| Drugie i kolejne | KsefSessionError |
Scenariusz rejestruje hooki beforeFetch i beforeSend z wewnętrznym licznikiem requestCount. Pierwszy request przechodzi bez zmian, każdy kolejny rzuca KsefSessionError.
Stan wewnętrzny
Dział zatytułowany „Stan wewnętrzny”// Uproszczony mechanizm scenariuszalet requestCount = 0
const hooks = { beforeFetch: () => { requestCount++ if (requestCount > 1) { throw new KsefSessionError('Session expired') } }, beforeSend: () => { requestCount++ if (requestCount > 1) { throw new KsefSessionError('Session expired') } },}Kiedy używać
Dział zatytułowany „Kiedy używać”- Testowanie
SessionManageri automatycznego odnawiania sesji - Weryfikacja, że aplikacja poprawnie reaguje na wygaśnięcie sesji
- Testowanie retry z ponownym uwierzytelnieniem
Przykład
Dział zatytułowany „Przykład”import { createKsefSimulator } from '@ksefnik/simulator'import { createKsefnik } from '@ksefnik/core'import { KsefSessionError } from '@ksefnik/shared'
const { adapter } = createKsefSimulator({ scenario: 'session-expired',})
const ksefnik = createKsefnik({ nip: '1234567890', adapter,})
// Pierwsze zapytanie -- OKconst first = await ksefnik.invoices.sync({ dateFrom: '2026-03-01', dateTo: '2026-03-31',})console.log(first.count) // np. 5
// Drugie zapytanie -- błąd sesjitry { await ksefnik.invoices.sync({ dateFrom: '2026-03-01', dateTo: '2026-03-31', })} catch (error) { if (error instanceof KsefSessionError) { console.log(error.message) // "Session expired" }}