diff --git a/apps/dolly-backend/config.test.yml b/apps/dolly-backend/config.test.yml index 92360c927f6..84159bdfc80 100644 --- a/apps/dolly-backend/config.test.yml +++ b/apps/dolly-backend/config.test.yml @@ -28,15 +28,12 @@ spec: outbound: rules: - application: generer-navn-service - - application: testnav-arbeidsplassencv-proxy - - application: testnav-arbeidssoekerregisteret-proxy - application: testnav-bruker-service-dev - application: testnav-inntektsmelding-service - application: testnav-kodeverk-service - application: testnav-miljoer-service - application: testnav-organisasjon-forvalter - application: testnav-organisasjon-service - - application: testnav-nom-proxy - application: testnav-pdl-forvalter-dev - application: testnav-person-service - application: testnav-skattekort-service @@ -45,12 +42,16 @@ spec: - application: testnav-synt-sykemelding-api - application: testnav-synt-sykemelding-api-dev - application: testnav-tps-messaging-service - - application: testnav-yrkesskade-proxy - application: testnorge-profil-api-dev - application: etterlatte-testdata namespace: etterlatte - application: logging namespace: nais-system + - application: testnav-yrkesskade-proxy + - application: testnav-nom-proxy + - application: testnav-sykemelding-proxy + - application: testnav-arbeidsplassencv-proxy + - application: testnav-arbeidssoekerregisteret-proxy external: - host: testnav-arena-forvalteren-proxy.dev-fss-pub.nais.io - host: testnav-brregstub-proxy.dev-fss-pub.nais.io diff --git a/apps/dolly-backend/config.yml b/apps/dolly-backend/config.yml index 52885436af6..89b559c2645 100644 --- a/apps/dolly-backend/config.yml +++ b/apps/dolly-backend/config.yml @@ -28,27 +28,28 @@ spec: outbound: rules: - application: generer-navn-service - - application: testnav-arbeidsplassencv-proxy - - application: testnav-arbeidssoekerregisteret-proxy - application: testnav-bruker-service - application: testnav-inntektsmelding-service - application: testnav-kodeverk-service - application: testnav-miljoer-service - application: testnav-organisasjon-forvalter - application: testnav-organisasjon-service - - application: testnav-nom-proxy - application: testnav-pdl-forvalter - application: testnav-person-service - application: testnav-skattekort-service - application: testnav-sykemelding-api - application: testnav-synt-sykemelding-api - application: testnav-tps-messaging-service - - application: testnav-yrkesskade-proxy - application: testnorge-profil-api - application: etterlatte-testdata namespace: etterlatte - application: logging namespace: nais-system + - application: testnav-yrkesskade-proxy + - application: testnav-nom-proxy + - application: testnav-arbeidsplassencv-proxy + - application: testnav-arbeidssoekerregisteret-proxy + - application: testnav-sykemelding-proxy external: - host: testnav-arena-forvalteren-proxy.dev-fss-pub.nais.io - host: testnav-brregstub-proxy.dev-fss-pub.nais.io diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java b/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java index 49a646b9734..bc4c91d31b3 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/DollyBackendApplicationStarter.java @@ -12,4 +12,4 @@ public static void main(String[] args) { .initializers(new NaisEnvironmentApplicationContextInitializer()) .run(args); } -} +} \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/NySykemeldingConsumer.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/NySykemeldingConsumer.java new file mode 100644 index 00000000000..75b85cb998a --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/NySykemeldingConsumer.java @@ -0,0 +1,71 @@ +package no.nav.dolly.bestilling.sykemelding; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.v3.core.util.Json; +import lombok.extern.slf4j.Slf4j; +import no.nav.dolly.bestilling.ConsumerStatus; +import no.nav.dolly.bestilling.sykemelding.command.NySykemeldingDeleteCommand; +import no.nav.dolly.bestilling.sykemelding.command.NySykemeldingPostCommand; +import no.nav.dolly.bestilling.sykemelding.domain.dto.NySykemeldingRequestDTO; +import no.nav.dolly.bestilling.sykemelding.domain.dto.NySykemeldingResponseDTO; +import no.nav.dolly.config.Consumers; +import no.nav.dolly.metrics.Timed; +import no.nav.testnav.libs.securitycore.domain.ServerProperties; +import no.nav.testnav.libs.standalone.servletsecurity.exchange.TokenExchange; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +import static no.nav.dolly.util.JacksonExchangeStrategyUtil.getJacksonStrategy; + +@Slf4j +@Service +public class NySykemeldingConsumer extends ConsumerStatus { + + private final WebClient webClient; + private final TokenExchange tokenService; + private final ServerProperties serverProperties; + + public NySykemeldingConsumer( + TokenExchange accessTokenService, + Consumers consumers, + ObjectMapper objectMapper, + WebClient webClient) { + + this.tokenService = accessTokenService; + serverProperties = consumers.getTestnavSykemeldingProxy(); + this.webClient = webClient + .mutate() + .exchangeStrategies(getJacksonStrategy(objectMapper)) + .baseUrl(serverProperties.getUrl()) + .build(); + } + + @Timed(name = "providers", tags = { "operation", "nysykemelding_opprett" }) + public Mono postTsmSykemelding(NySykemeldingRequestDTO nySykemeldingRequestDTO) { + + log.info("Sykemelding sendt til tsm-input-dolly {}", Json.pretty(nySykemeldingRequestDTO)); + + return tokenService.exchange(serverProperties) + .flatMap(token -> new NySykemeldingPostCommand(webClient, nySykemeldingRequestDTO, token.getTokenValue()).call()); + } + + @Timed(name = "providers", tags = { "operation", "nysykemelding_delete" }) + public Mono deleteTsmSykemeldinger(String ident) { + + log.info("Sletter nye sykemeldinger for ident: {}", ident); + + return tokenService.exchange(serverProperties) + .flatMap(token -> new NySykemeldingDeleteCommand(webClient, ident, token.getTokenValue()).call()); + } + + @Override + public String serviceUrl() { + return serverProperties.getUrl(); + } + + @Override + public String consumerName() { + return "testnav-sykemelding-proxy"; + } +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/SykemeldingClient.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/SykemeldingClient.java index 2b8aef80d51..b5761f8a08f 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/SykemeldingClient.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/SykemeldingClient.java @@ -2,14 +2,17 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.v3.core.util.Json; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import ma.glasnost.orika.MapperFacade; import ma.glasnost.orika.MappingContext; import no.nav.dolly.bestilling.ClientRegister; import no.nav.dolly.bestilling.personservice.PersonServiceConsumer; -import no.nav.dolly.bestilling.sykemelding.domain.DetaljertSykemeldingRequest; -import no.nav.dolly.bestilling.sykemelding.dto.SykemeldingResponse; +import no.nav.dolly.bestilling.sykemelding.domain.dto.DetaljertSykemeldingRequestDTO; +import no.nav.dolly.bestilling.sykemelding.domain.dto.DetaljertSykemeldingResponseDTO; +import no.nav.dolly.bestilling.sykemelding.domain.dto.NySykemeldingRequestDTO; +import no.nav.dolly.bestilling.sykemelding.domain.dto.NySykemeldingResponseDTO; import no.nav.dolly.config.ApplicationConfig; import no.nav.dolly.consumer.kodeverk.KodeverkConsumer; import no.nav.dolly.consumer.norg2.Norg2Consumer; @@ -21,8 +24,8 @@ import no.nav.dolly.domain.resultset.dolly.DollyPerson; import no.nav.dolly.domain.resultset.sykemelding.RsSykemelding; import no.nav.dolly.errorhandling.ErrorStatusDecoder; -import no.nav.dolly.service.TransaksjonMappingService; import no.nav.dolly.service.TransactionHelperService; +import no.nav.dolly.service.TransaksjonMappingService; import no.nav.testnav.libs.reactivecore.web.WebClientError; import org.apache.commons.lang3.BooleanUtils; import org.springframework.stereotype.Service; @@ -32,9 +35,9 @@ import java.time.Duration; import java.time.LocalDateTime; import java.util.List; -import java.util.Objects; import java.util.stream.Collectors; +import static java.util.Objects.isNull; import static java.util.Objects.nonNull; import static no.nav.dolly.domain.resultset.SystemTyper.SYKEMELDING; import static no.nav.dolly.errorhandling.ErrorStatusDecoder.encodeStatus; @@ -47,6 +50,7 @@ public class SykemeldingClient implements ClientRegister { private final SykemeldingConsumer sykemeldingConsumer; + private final NySykemeldingConsumer nySykemeldingConsumer; private final ErrorStatusDecoder errorStatusDecoder; private final TransaksjonMappingService transaksjonMappingService; private final MapperFacade mapperFacade; @@ -58,134 +62,160 @@ public class SykemeldingClient implements ClientRegister { private final ApplicationConfig applicationConfig; @Override - public Mono gjenopprett(RsDollyUtvidetBestilling bestilling, DollyPerson dollyPerson, BestillingProgress progress, boolean isOpprettEndre) { - - return Mono.just(bestilling) - .filter(bestillling -> nonNull(bestillling.getSykemelding())) - .map(RsDollyUtvidetBestilling::getSykemelding) - .flatMap(sykemelding -> transaksjonMappingService.existAlready(SYKEMELDING, dollyPerson.getIdent(), null, bestilling.getId()) - .flatMap(exists -> { - - if (BooleanUtils.isTrue(exists) && !isOpprettEndre) { - return setProgress(progress, "OK"); - - } else { - return setProgress(progress, getGenereringStartet()) - .then(getPerson(dollyPerson.getIdent()) - .flatMap(persondata -> - postDetaljertSykemelding(sykemelding, persondata) - .filter(Objects::nonNull) - .flatMap(status -> saveTransaksjonId(status, bestilling.getId()) - .thenReturn(status)) - .map(this::getStatus)) - .timeout(Duration.ofSeconds(applicationConfig.getClientTimeout())) - .onErrorResume(error -> Mono.just(encodeStatus(WebClientError.describe(error).getMessage()))) - .collect(Collectors.joining()) - .flatMap(status -> oppdaterStatus(progress, status))); - } - })); - } + public Mono gjenopprett(RsDollyUtvidetBestilling bestilling, + DollyPerson dollyPerson, + BestillingProgress progress, + boolean isOpprettEndre) { - private Mono oppdaterStatus(BestillingProgress progress, String status) { + RsSykemelding sykemelding = bestilling.getSykemelding(); - return transactionHelperService.persister(progress, BestillingProgress::getSykemeldingStatus, - BestillingProgress::setSykemeldingStatus, status); + if (isNull(sykemelding)) { + return Mono.just(progress); + } + + if (sykemelding.hasNySykemelding()) { + var nySykemelding = sykemelding.getNySykemelding(); + return setProgress(progress, getGenereringStartet()) + .then(postNySykemelding(nySykemelding, dollyPerson.getIdent()) + .map(this::getStatus) + .timeout(Duration.ofSeconds(applicationConfig.getClientTimeout())) + .onErrorResume(error -> + Mono.just(encodeStatus(WebClientError.describe(error).getMessage())))) + .flatMap(status -> oppdaterStatus(progress, status)); + } + + if (sykemelding.hasDetaljertSykemelding()) { + + return transaksjonMappingService.existAlready( + SYKEMELDING, dollyPerson.getIdent(), null, bestilling.getId()) + .flatMap(exists -> { + if (BooleanUtils.isTrue(exists) && !isOpprettEndre) { + return setProgress(progress, "OK"); + } + return setProgress(progress, getGenereringStartet()) + .then(getPerson(dollyPerson.getIdent()) + .flatMap(persondata -> + postDetaljertSykemelding(sykemelding, persondata) + .flatMap(resp -> saveTransaksjonId(resp, bestilling.getId()) + .thenReturn(resp)) + .map(this::getStatus)) + .timeout(Duration.ofSeconds(applicationConfig.getClientTimeout())) + .onErrorResume(error -> + Mono.just(encodeStatus(WebClientError.describe(error).getMessage()))) + .collect(Collectors.joining())) + .flatMap(status -> oppdaterStatus(progress, status)); + }); + } + return Mono.just(progress); } @Override public void release(List identer) { - - // Sletting er ikke støttet + identer.forEach(ident -> nySykemeldingConsumer.deleteTsmSykemeldinger(ident) + .subscribe()); } - private String getStatus(SykemeldingResponse status) { + private Mono oppdaterStatus(BestillingProgress progress, String status) { + return transactionHelperService.persister( + progress, + BestillingProgress::getSykemeldingStatus, + BestillingProgress::setSykemeldingStatus, + status); + } + private String getStatus(DetaljertSykemeldingResponseDTO status) { log.info("Sykemelding response for {} mottatt, status: {}", status.getIdent(), status.getStatus()); - return status.getStatus().is2xxSuccessful() ? "OK" : - errorStatusDecoder.getErrorText(status.getStatus(), status.getAvvik()); + return status.getStatus().is2xxSuccessful() + ? "OK" + : errorStatusDecoder.getErrorText(status.getStatus(), status.getAvvik()); } - private Mono setProgress(BestillingProgress progress, String status) { + private String getStatus(NySykemeldingResponseDTO status) { + log.info("Ny sykemelding response for {} mottatt, {}", status.getIdent(), Json.pretty(status)); + return status.getStatus().is2xxSuccessful() + ? "OK" + : errorStatusDecoder.getErrorText(status.getStatus(), status.getAvvik()); + } - return transactionHelperService.persister(progress, BestillingProgress::getSykemeldingStatus, - BestillingProgress::setSykemeldingStatus, status); + private Mono setProgress(BestillingProgress progress, String status) { + return transactionHelperService.persister( + progress, + BestillingProgress::getSykemeldingStatus, + BestillingProgress::setSykemeldingStatus, + status); } private Flux getPerson(String ident) { - return personServiceConsumer.getPdlPersoner(List.of(ident)) .filter(pdlPersonBolk -> nonNull(pdlPersonBolk.getData())) .map(PdlPersonBolk::getData); } private Mono getNorgenhet(PdlPersonBolk.Data persondata) { - var geografiskOmrade = persondata.getHentGeografiskTilknytningBolk().stream() .map(PdlPersonBolk.GeografiskTilknytningBolk::getGeografiskTilknytning) - .map(geografiskTilknytning -> nonNull(geografiskTilknytning) && - isNotBlank(geografiskTilknytning.getGtType()) ? - switch (geografiskTilknytning.getGtType()) { - case "KOMMUNE" -> geografiskTilknytning.getGtKommune(); - case "BYDEL" -> geografiskTilknytning.getGtBydel(); + .map(gt -> nonNull(gt) && isNotBlank(gt.getGtType()) ? + switch (gt.getGtType()) { + case "KOMMUNE" -> gt.getGtKommune(); + case "BYDEL" -> gt.getGtBydel(); default -> null; } : null) .collect(Collectors.joining()); - return isNotBlank(geografiskOmrade) ? norg2Consumer.getNorgEnhet(geografiskOmrade) : Mono.empty(); } - private Mono postDetaljertSykemelding(RsSykemelding sykemelding, - PdlPersonBolk.Data persondata) { - + private Mono postDetaljertSykemelding(RsSykemelding sykemelding, + PdlPersonBolk.Data persondata) { return Mono.just(sykemelding) - .filter(RsSykemelding::hasDetaljertSykemelding) .map(RsSykemelding::getDetaljertSykemelding) .flatMap(detaljert -> Mono.zip(kodeverkConsumer.getKodeverkByName("Postnummer"), getNorgenhet(persondata)) .flatMap(kodeverk -> { - - var detaljertSykemeldingRequest = - mapperFacade.map(detaljert, - DetaljertSykemeldingRequest.class); - + var req = mapperFacade.map(detaljert, DetaljertSykemeldingRequestDTO.class); var context = new MappingContext.Factory().getContext(); context.setProperty("postnummer", kodeverk.getT1()); context.setProperty("norg2Enhet", kodeverk.getT2()); - - detaljertSykemeldingRequest.setPasient(mapperFacade.map(persondata, - DetaljertSykemeldingRequest.Pasient.class, context)); - - return sykemeldingConsumer.postDetaljertSykemelding(detaljertSykemeldingRequest); + req.setPasient(mapperFacade.map( + persondata, + DetaljertSykemeldingRequestDTO.Pasient.class, + context)); + return sykemeldingConsumer.postDetaljertSykemelding(req); })); } - private Mono saveTransaksjonId(SykemeldingResponse sykemelding, Long bestillingId) { + private Mono postNySykemelding(RsSykemelding.RsNySykemelding rsNySykemelding, + String ident) { - if (sykemelding.getStatus().is2xxSuccessful()) { + var aktivitet = rsNySykemelding.getAktivitet().stream() + .map(a -> new NySykemeldingRequestDTO.Aktivitet(a.getFom(), a.getTom())) + .collect(Collectors.toList()); - log.info("Lagrer transaksjon for {} i q1 ", sykemelding.getIdent()); + NySykemeldingRequestDTO request = new NySykemeldingRequestDTO(ident, aktivitet); - sykemelding.getSykemeldingRequest().setSykemeldingId(sykemelding.getMsgId()); + return nySykemeldingConsumer.postTsmSykemelding(request); + } + + private Mono saveTransaksjonId(DetaljertSykemeldingResponseDTO response, Long bestillingId) { + if (response.getStatus().is2xxSuccessful()) { + response.getSykemeldingRequest().setSykemeldingId(response.getMsgId()); return transaksjonMappingService.save(TransaksjonMapping.builder() - .ident(sykemelding.getIdent()) + .ident(response.getIdent()) .bestillingId(bestillingId) - .transaksjonId(toJson(sykemelding.getSykemeldingRequest())) + .transaksjonId(toJson(response.getSykemeldingRequest())) .datoEndret(LocalDateTime.now()) .system(SYKEMELDING.name()) .miljoe("q1") .build()); - } else { - return Mono.empty(); } + return Mono.empty(); } private String toJson(Object object) { - try { return objectMapper.writeValueAsString(object); } catch (JsonProcessingException e) { log.error("Feilet å konvertere transaksjonsId for sykemelding"); + return null; } - return null; } } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/SykemeldingConsumer.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/SykemeldingConsumer.java index 2790cce1427..d9dd812b1f0 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/SykemeldingConsumer.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/SykemeldingConsumer.java @@ -4,9 +4,9 @@ import io.swagger.v3.core.util.Json; import lombok.extern.slf4j.Slf4j; import no.nav.dolly.bestilling.ConsumerStatus; -import no.nav.dolly.bestilling.sykemelding.command.SykemeldingPostCommand; -import no.nav.dolly.bestilling.sykemelding.domain.DetaljertSykemeldingRequest; -import no.nav.dolly.bestilling.sykemelding.dto.SykemeldingResponse; +import no.nav.dolly.bestilling.sykemelding.command.DetaljertSykemeldingValideringPostCommand; +import no.nav.dolly.bestilling.sykemelding.domain.dto.DetaljertSykemeldingRequestDTO; +import no.nav.dolly.bestilling.sykemelding.domain.dto.DetaljertSykemeldingResponseDTO; import no.nav.dolly.config.Consumers; import no.nav.dolly.metrics.Timed; import no.nav.testnav.libs.securitycore.domain.ServerProperties; @@ -40,13 +40,13 @@ public SykemeldingConsumer( .build(); } - @Timed(name = "providers", tags = {"operation", "detaljertsykemelding_opprett"}) - public Mono postDetaljertSykemelding(DetaljertSykemeldingRequest detaljertSykemeldingRequest) { + @Timed(name = "providers", tags = { "operation", "detaljertsykemelding_opprett" }) + public Mono postDetaljertSykemelding(DetaljertSykemeldingRequestDTO detaljertSykemeldingRequestDTO) { - log.info("Detaljert Sykemelding sendt {}", Json.pretty(detaljertSykemeldingRequest)); + log.info("Detaljert Sykemelding sendt {}", Json.pretty(detaljertSykemeldingRequestDTO)); return tokenService.exchange(serverProperties) - .flatMap(token -> new SykemeldingPostCommand(webClient, detaljertSykemeldingRequest, + .flatMap(token -> new DetaljertSykemeldingValideringPostCommand(webClient, detaljertSykemeldingRequestDTO, token.getTokenValue()).call()); } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/SykemeldingPostCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/DetaljertSykemeldingValideringPostCommand.java similarity index 61% rename from apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/SykemeldingPostCommand.java rename to apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/DetaljertSykemeldingValideringPostCommand.java index a0f84f12703..9a67481014f 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/SykemeldingPostCommand.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/DetaljertSykemeldingValideringPostCommand.java @@ -2,8 +2,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import no.nav.dolly.bestilling.sykemelding.domain.DetaljertSykemeldingRequest; -import no.nav.dolly.bestilling.sykemelding.dto.SykemeldingResponse; +import no.nav.dolly.bestilling.sykemelding.domain.dto.DetaljertSykemeldingRequestDTO; +import no.nav.dolly.bestilling.sykemelding.domain.dto.DetaljertSykemeldingResponseDTO; import no.nav.testnav.libs.dto.sykemelding.v1.SykemeldingResponseDTO; import no.nav.testnav.libs.reactivecore.web.WebClientError; import no.nav.testnav.libs.reactivecore.web.WebClientHeader; @@ -14,16 +14,16 @@ @RequiredArgsConstructor @Slf4j -public class SykemeldingPostCommand implements Callable> { +public class DetaljertSykemeldingValideringPostCommand implements Callable> { private static final String DETALJERT_SYKEMELDING_URL = "/api/v1/sykemeldinger"; private final WebClient webClient; - private final DetaljertSykemeldingRequest request; + private final DetaljertSykemeldingRequestDTO request; private final String token; @Override - public Mono call() { + public Mono call() { return webClient .post() .uri(uriBuilder -> uriBuilder.path(DETALJERT_SYKEMELDING_URL).build()) @@ -31,15 +31,15 @@ public Mono call() { .bodyValue(request) .retrieve() .bodyToMono(SykemeldingResponseDTO.class) - .map(response -> SykemeldingResponse.builder() + .map(response -> DetaljertSykemeldingResponseDTO.builder() .status(response.getStatus()) .msgId(response.getSykemeldingId()) .ident(request.getPasient().getIdent()) - .sykemeldingRequest(SykemeldingResponse.SykemeldingRequest.builder() - .detaljertSykemeldingRequest(request) + .sykemeldingRequest(DetaljertSykemeldingResponseDTO.SykemeldingRequest.builder() + .detaljertSykemeldingRequestDTO(request) .build()) .build()) .doOnError(WebClientError.logTo(log)) - .onErrorResume(error -> SykemeldingResponse.of(WebClientError.describe(error), request.getPasient().getIdent())); + .onErrorResume(error -> DetaljertSykemeldingResponseDTO.of(WebClientError.describe(error), request.getPasient().getIdent())); } } \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/NySykemeldingDeleteCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/NySykemeldingDeleteCommand.java new file mode 100644 index 00000000000..8d2687d2165 --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/NySykemeldingDeleteCommand.java @@ -0,0 +1,35 @@ +package no.nav.dolly.bestilling.sykemelding.command; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import no.nav.testnav.libs.reactivecore.web.WebClientError; +import no.nav.testnav.libs.reactivecore.web.WebClientHeader; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.reactive.function.client.WebClientResponseException; +import reactor.core.publisher.Mono; + +import java.util.concurrent.Callable; + +@RequiredArgsConstructor +@Slf4j +public class NySykemeldingDeleteCommand implements Callable> { + + private static final String TSM_SYKEMELDING_URL = "/tsm/api/sykmelding/ident"; + + private final WebClient webClient; + private final String ident; + private final String token; + + @Override + public Mono call() { + return webClient + .delete() + .uri(uriBuilder -> uriBuilder.path(TSM_SYKEMELDING_URL).build()) + .headers(WebClientHeader.bearer(token)) + .header("X-ident", ident) + .retrieve() + .bodyToMono(Void.class) + .doOnError(throwable -> !(throwable instanceof WebClientResponseException.NotFound), WebClientError.logTo(log)) + .doOnSuccess(response -> log.info("Slettet sykemeldinger i tsm for ident: {}", ident)); + } +} \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/NySykemeldingPostCommand.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/NySykemeldingPostCommand.java new file mode 100644 index 00000000000..f486e17a416 --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/command/NySykemeldingPostCommand.java @@ -0,0 +1,37 @@ +package no.nav.dolly.bestilling.sykemelding.command; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import no.nav.dolly.bestilling.sykemelding.domain.dto.NySykemeldingRequestDTO; +import no.nav.dolly.bestilling.sykemelding.domain.dto.NySykemeldingResponseDTO; +import no.nav.testnav.libs.reactivecore.web.WebClientError; +import no.nav.testnav.libs.reactivecore.web.WebClientHeader; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +import java.util.concurrent.Callable; + +@RequiredArgsConstructor +@Slf4j +public class NySykemeldingPostCommand implements Callable> { + + private static final String TSM_SYKEMELDING_URL = "/tsm/api/sykmelding"; + + private final WebClient webClient; + private final NySykemeldingRequestDTO request; + private final String token; + + @Override + public Mono call() { + return webClient + .post() + .uri(uriBuilder -> uriBuilder.path(TSM_SYKEMELDING_URL).build()) + .headers(WebClientHeader.bearer(token)) + .bodyValue(request) + .retrieve() + .bodyToMono(NySykemeldingResponseDTO.class) + .doOnError(WebClientError.logTo(log)) + .onErrorResume(error -> NySykemeldingResponseDTO.of(WebClientError.describe(error), request.getIdent())); + + } +} \ No newline at end of file diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/SykemeldingTransaksjon.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/SykemeldingTransaksjon.java deleted file mode 100644 index f2c17974079..00000000000 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/SykemeldingTransaksjon.java +++ /dev/null @@ -1,18 +0,0 @@ -package no.nav.dolly.bestilling.sykemelding.domain; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -@JsonInclude(value = JsonInclude.Include.NON_NULL) -public class SykemeldingTransaksjon { - - private String orgnummer; - private String arbeidsforholdId; -} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/DetaljertSykemeldingRequest.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/DetaljertSykemeldingRequestDTO.java similarity index 97% rename from apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/DetaljertSykemeldingRequest.java rename to apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/DetaljertSykemeldingRequestDTO.java index 7e1d630ebfa..a74d830cdb0 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/DetaljertSykemeldingRequest.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/DetaljertSykemeldingRequestDTO.java @@ -1,4 +1,4 @@ -package no.nav.dolly.bestilling.sykemelding.domain; +package no.nav.dolly.bestilling.sykemelding.domain.dto; import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AllArgsConstructor; @@ -17,7 +17,7 @@ @NoArgsConstructor @AllArgsConstructor @JsonInclude(value = JsonInclude.Include.NON_EMPTY) -public class DetaljertSykemeldingRequest { +public class DetaljertSykemeldingRequestDTO { private Arbeidsgiver arbeidsgiver; private DollyDiagnose hovedDiagnose; diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/dto/SykemeldingResponse.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/DetaljertSykemeldingResponseDTO.java similarity index 70% rename from apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/dto/SykemeldingResponse.java rename to apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/DetaljertSykemeldingResponseDTO.java index 72963e010b0..10e50bfac8f 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/dto/SykemeldingResponse.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/DetaljertSykemeldingResponseDTO.java @@ -1,11 +1,10 @@ -package no.nav.dolly.bestilling.sykemelding.dto; +package no.nav.dolly.bestilling.sykemelding.domain.dto; import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import no.nav.dolly.bestilling.sykemelding.domain.DetaljertSykemeldingRequest; import no.nav.testnav.libs.reactivecore.web.WebClientError; import org.springframework.http.HttpStatus; import reactor.core.publisher.Mono; @@ -14,7 +13,7 @@ @Builder @NoArgsConstructor @AllArgsConstructor -public class SykemeldingResponse { +public class DetaljertSykemeldingResponseDTO { private HttpStatus status; private String avvik; @@ -22,8 +21,8 @@ public class SykemeldingResponse { private String msgId; private String ident; - public static Mono of(WebClientError.Description description, String ident) { - return Mono.just(SykemeldingResponse + public static Mono of(WebClientError.Description description, String ident) { + return Mono.just(DetaljertSykemeldingResponseDTO .builder() .ident(ident) .status(description.getStatus()) @@ -39,6 +38,6 @@ public static Mono of(WebClientError.Description descriptio public static class SykemeldingRequest { private String sykemeldingId; - private DetaljertSykemeldingRequest detaljertSykemeldingRequest; + private DetaljertSykemeldingRequestDTO detaljertSykemeldingRequestDTO; } } diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/NySykemeldingRequestDTO.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/NySykemeldingRequestDTO.java new file mode 100644 index 00000000000..42aec74be64 --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/NySykemeldingRequestDTO.java @@ -0,0 +1,31 @@ +package no.nav.dolly.bestilling.sykemelding.domain.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.time.LocalDate; +import java.util.List; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class NySykemeldingRequestDTO { + + private String ident; + private List aktivitet; + + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Aktivitet { + private LocalDate fom; + private LocalDate tom; + } +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/NySykemeldingResponseDTO.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/NySykemeldingResponseDTO.java new file mode 100644 index 00000000000..fca301a6508 --- /dev/null +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/domain/dto/NySykemeldingResponseDTO.java @@ -0,0 +1,43 @@ +package no.nav.dolly.bestilling.sykemelding.domain.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import no.nav.testnav.libs.reactivecore.web.WebClientError; +import org.springframework.http.HttpStatus; +import reactor.core.publisher.Mono; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class NySykemeldingResponseDTO { + + private HttpStatus status; + private String avvik; + private NySykemeldingRequest nySykemeldingRequest; + private String msgId; + private String ident; + + public static Mono of(WebClientError.Description description, String ident) { + return Mono.just(NySykemeldingResponseDTO + .builder() + .ident(ident) + .status(description.getStatus()) + .avvik(description.getMessage()) + .build()); + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + @JsonInclude(JsonInclude.Include.NON_EMPTY) + public static class NySykemeldingRequest { + + private String sykemeldingId; + private NySykemeldingRequestDTO nySykemeldingRequestDTO; + } +} diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/mapper/SykemeldingMappingStrategy.java b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/mapper/SykemeldingMappingStrategy.java index f57e82bedd2..7bb4ff62172 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/mapper/SykemeldingMappingStrategy.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/sykemelding/mapper/SykemeldingMappingStrategy.java @@ -3,10 +3,10 @@ import ma.glasnost.orika.CustomMapper; import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.MappingContext; -import no.nav.dolly.bestilling.sykemelding.domain.DetaljertSykemeldingRequest; -import no.nav.dolly.bestilling.sykemelding.domain.DetaljertSykemeldingRequest.Adresse; -import no.nav.dolly.bestilling.sykemelding.domain.DetaljertSykemeldingRequest.Organisasjon; -import no.nav.dolly.bestilling.sykemelding.domain.DetaljertSykemeldingRequest.Pasient; +import no.nav.dolly.bestilling.sykemelding.domain.dto.DetaljertSykemeldingRequestDTO; +import no.nav.dolly.bestilling.sykemelding.domain.dto.DetaljertSykemeldingRequestDTO.Adresse; +import no.nav.dolly.bestilling.sykemelding.domain.dto.DetaljertSykemeldingRequestDTO.Organisasjon; +import no.nav.dolly.bestilling.sykemelding.domain.dto.DetaljertSykemeldingRequestDTO.Pasient; import no.nav.dolly.consumer.norg2.dto.Norg2EnhetResponse; import no.nav.dolly.domain.PdlPerson; import no.nav.dolly.domain.PdlPersonBolk; @@ -29,11 +29,12 @@ public class SykemeldingMappingStrategy implements MappingStrategy { @Override public void register(MapperFactory factory) { - factory.classMap(RsDetaljertSykemelding.class, DetaljertSykemeldingRequest.class) + factory.classMap(RsDetaljertSykemelding.class, DetaljertSykemeldingRequestDTO.class) .customize(new CustomMapper<>() { @Override - public void mapAtoB(RsDetaljertSykemelding rsSykemelding, DetaljertSykemeldingRequest request, MappingContext context) { - + public void mapAtoB(RsDetaljertSykemelding rsSykemelding, + DetaljertSykemeldingRequestDTO request, + MappingContext context) { request.setSender(nonNull(request.getSender()) ? request.getSender() : Organisasjon.builder() @@ -46,9 +47,8 @@ public void mapAtoB(RsDetaljertSykemelding rsSykemelding, DetaljertSykemeldingRe .navn("Mini-Norge Legekontor") .orgNr("992741090") .build()); - if (isNull(rsSykemelding.getDetaljer())) { - request.setDetaljer(DetaljertSykemeldingRequest.Detaljer.builder() + request.setDetaljer(DetaljertSykemeldingRequestDTO.Detaljer.builder() .arbeidsforEtterEndtPeriode(true) .build()); } @@ -59,16 +59,13 @@ public void mapAtoB(RsDetaljertSykemelding rsSykemelding, DetaljertSykemeldingRe factory.classMap(PdlPersonBolk.Data.class, Pasient.class) .customize(new CustomMapper<>() { - @Override public void mapAtoB(PdlPersonBolk.Data persondata, Pasient pasient, MappingContext context) { - var person = persondata.getHentPersonBolk().stream() .filter(personBolk -> nonNull(personBolk.getPerson())) .findFirst().orElse(PdlPersonBolk.PersonBolk.builder() .person(new PdlPerson.Person()) .build()); - pasient.setIdent(person.getIdent()); mapperFacade.map(person.getPerson().getNavn().stream() .findFirst().orElse(new PdlPerson.Navn()), pasient); @@ -77,14 +74,12 @@ public void mapAtoB(PdlPersonBolk.Data persondata, Pasient pasient, MappingConte pasient.setFoedselsdato(person.getPerson().getFoedselsdato().stream() .map(PdlPerson.Foedselsdato::getFoedselsdato) .findFirst().orElse(null)); - pasient.setTelefon(person.getPerson().getTelefonnummer().stream() .filter(telefonnummer -> telefonnummer.getPrioritet() == 1) .map(telefonnummer -> String.format("%s %s", telefonnummer.getLandskode(), telefonnummer.getNummer())) .findFirst().orElse(null)); - var norg2enhet = (Norg2EnhetResponse) context.getProperty("norg2Enhet"); pasient.setNavKontor(nonNull(norg2enhet) ? norg2enhet.getEnhetNr() : null); } @@ -93,27 +88,23 @@ public void mapAtoB(PdlPersonBolk.Data persondata, Pasient pasient, MappingConte factory.classMap(BostedadresseDTO.class, Adresse.class) .customize(new CustomMapper<>() { - @Override - public void mapAtoB(BostedadresseDTO kilde, Adresse destinasjon, MappingContext context) { - + public void mapAtoB(BostedadresseDTO kilde, Adresse dest, MappingContext context) { var postnummere = (Map) context.getProperty("postnummer"); - if (nonNull(kilde.getVegadresse())) { - destinasjon.setPostnummer(kilde.getVegadresse().getPostnummer()); - destinasjon.setBy(postnummere.get(kilde.getVegadresse().getPostnummer())); - destinasjon.setGate(Stream.of(kilde.getVegadresse().getAdressenavn(), + dest.setPostnummer(kilde.getVegadresse().getPostnummer()); + dest.setBy(postnummere.get(kilde.getVegadresse().getPostnummer())); + dest.setGate(Stream.of(kilde.getVegadresse().getAdressenavn(), kilde.getVegadresse().getHusnummer(), kilde.getVegadresse().getHusbokstav()) .filter(StringUtils::isNotBlank) .collect(Collectors.joining(" "))); - destinasjon.setLand("NOR"); - + dest.setLand("NOR"); } else if (nonNull(kilde.getUtenlandskAdresse())) { - destinasjon.setPostnummer(kilde.getUtenlandskAdresse().getPostkode()); - destinasjon.setBy(kilde.getUtenlandskAdresse().getBySted()); - destinasjon.setGate(kilde.getUtenlandskAdresse().getAdressenavnNummer()); - destinasjon.setLand(kilde.getUtenlandskAdresse().getLandkode()); + dest.setPostnummer(kilde.getUtenlandskAdresse().getPostkode()); + dest.setBy(kilde.getUtenlandskAdresse().getBySted()); + dest.setGate(kilde.getUtenlandskAdresse().getAdressenavnNummer()); + dest.setLand(kilde.getUtenlandskAdresse().getLandkode()); } } }) diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/config/Consumers.java b/apps/dolly-backend/src/main/java/no/nav/dolly/config/Consumers.java index 476ea00baa4..a4e2ae66a02 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/config/Consumers.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/config/Consumers.java @@ -41,6 +41,7 @@ public class Consumers { private ServerProperties testnavSigrunstubProxy; private ServerProperties testnavSkjermingsregisterProxy; private ServerProperties testnavSykemeldingApi; + private ServerProperties testnavSykemeldingProxy; private ServerProperties testnavTpsMessagingService; private ServerProperties testnavUdistubProxy; private ServerProperties testnavSkattekortService; diff --git a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/sykemelding/RsSykemelding.java b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/sykemelding/RsSykemelding.java index b778230dfed..b3c06d7f595 100644 --- a/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/sykemelding/RsSykemelding.java +++ b/apps/dolly-backend/src/main/java/no/nav/dolly/domain/resultset/sykemelding/RsSykemelding.java @@ -2,7 +2,11 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.springframework.data.elasticsearch.annotations.DateFormat; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; @@ -23,6 +27,7 @@ public class RsSykemelding { private RsDetaljertSykemelding detaljertSykemelding; + private RsNySykemelding nySykemelding; @JsonIgnore public boolean hasDetaljertSykemelding() { @@ -30,6 +35,45 @@ public boolean hasDetaljertSykemelding() { return nonNull(detaljertSykemelding); } + @JsonIgnore + public boolean hasNySykemelding() { + + return nonNull(nySykemelding); + } + + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + @JsonInclude(JsonInclude.Include.NON_EMPTY) + public static class RsNySykemelding { + + private List aktivitet; + + public List getAktivitet() { + if (isNull(aktivitet)) { + aktivitet = new ArrayList<>(); + } + return aktivitet; + } + + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + @JsonInclude(JsonInclude.Include.NON_EMPTY) + public static class Aktivitet { + + @Field(type = FieldType.Date, format = DateFormat.basic_date, pattern = "uuuu-MM-dd") + private LocalDate fom; + + @Field(type = FieldType.Date, format = DateFormat.basic_date, pattern = "uuuu-MM-dd") + private LocalDate tom; + } + } + @Getter @Setter @Builder diff --git a/apps/dolly-backend/src/main/resources/application-local.yml b/apps/dolly-backend/src/main/resources/application-local.yml index b52caa69313..a948f97c6d8 100644 --- a/apps/dolly-backend/src/main/resources/application-local.yml +++ b/apps/dolly-backend/src/main/resources/application-local.yml @@ -67,4 +67,6 @@ consumers: etterlatte: url: https://etterlatte-testdata.intern.dev.nav.no nom-proxy: - url: https://testnav-nom-proxy.intern.dev.nav.no \ No newline at end of file + url: https://testnav-nom-proxy.intern.dev.nav.no + testnav-sykemelding-proxy: + url: https://testnav-sykemelding-proxy.intern.dev.nav.no diff --git a/apps/dolly-backend/src/main/resources/application.yml b/apps/dolly-backend/src/main/resources/application.yml index 633718d7b1d..7ce3a97b61c 100644 --- a/apps/dolly-backend/src/main/resources/application.yml +++ b/apps/dolly-backend/src/main/resources/application.yml @@ -38,7 +38,7 @@ spring: resourceserver: aad: issuer-uri: ${AZURE_OPENID_CONFIG_ISSUER} - accepted-audience: ${AZURE_APP_CLIENT_ID}, api:// ${AZURE_APP_CLIENT_ID} + accepted-audience: ${AZURE_APP_CLIENT_ID}, api:// ${AZURE_APP_CLIENT_ID} jackson: parser: include-source-in-location: true @@ -189,6 +189,11 @@ consumers: namespace: dolly url: https://testnav-udistub-proxy.dev-fss-pub.nais.io cluster: dev-fss + testnav-sykemelding-proxy: + name: testnav-sykemelding-proxy + namespace: dolly + url: http://testnav-sykemelding-proxy.dolly.svc.cluster.local + cluster: dev-gcp testnav-kontoregister-person-proxy: name: testnav-kontoregister-person-proxy namespace: dolly diff --git a/apps/dolly-frontend/config.idporten.yml b/apps/dolly-frontend/config.idporten.yml index ba33aec3cef..82450b0bda9 100644 --- a/apps/dolly-frontend/config.idporten.yml +++ b/apps/dolly-frontend/config.idporten.yml @@ -55,6 +55,7 @@ spec: - application: testnav-nom-proxy - application: testnav-altinn3-tilgang-proxy - application: testnav-arbeidssoekerregisteret-proxy + - application: testnav-sykemelding-proxy - application: testnav-api-oversikt-service - application: logging namespace: nais-system diff --git a/apps/dolly-frontend/config.test.yml b/apps/dolly-frontend/config.test.yml index d9fd75a404a..460bff7ca03 100644 --- a/apps/dolly-frontend/config.test.yml +++ b/apps/dolly-frontend/config.test.yml @@ -62,6 +62,7 @@ spec: - application: testnav-nom-proxy - application: testnav-altinn3-tilgang-service - application: testnav-arbeidssoekerregisteret-proxy + - application: testnav-sykemelding-proxy - application: testnav-api-oversikt-service - application: logging namespace: nais-system diff --git a/apps/dolly-frontend/config.unstable.yml b/apps/dolly-frontend/config.unstable.yml index c457627abc1..6d8f9d8a5b3 100644 --- a/apps/dolly-frontend/config.unstable.yml +++ b/apps/dolly-frontend/config.unstable.yml @@ -52,6 +52,7 @@ spec: - application: testnav-nom-proxy - application: testnav-altinn3-tilgang-service - application: testnav-arbeidssoekerregisteret-proxy + - application: testnav-sykemelding-proxy - application: testnav-api-oversikt-service - application: logging namespace: nais-system diff --git a/apps/dolly-frontend/config.yml b/apps/dolly-frontend/config.yml index b355ae48b92..a63b14ace9d 100644 --- a/apps/dolly-frontend/config.yml +++ b/apps/dolly-frontend/config.yml @@ -63,6 +63,7 @@ spec: - application: testnav-nom-proxy - application: testnav-altinn3-tilgang-proxy - application: testnav-arbeidssoekerregisteret-proxy + - application: testnav-sykemelding-proxy - application: testnav-api-oversikt-service - application: logging namespace: nais-system diff --git a/apps/dolly-frontend/src/main/java/no/nav/dolly/web/DollyFrontendApplicationStarter.java b/apps/dolly-frontend/src/main/java/no/nav/dolly/web/DollyFrontendApplicationStarter.java index fd573b8ff8b..68500dd74dd 100644 --- a/apps/dolly-frontend/src/main/java/no/nav/dolly/web/DollyFrontendApplicationStarter.java +++ b/apps/dolly-frontend/src/main/java/no/nav/dolly/web/DollyFrontendApplicationStarter.java @@ -96,6 +96,7 @@ public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { .route(createRoute(consumers.getTestnavLevendeArbeidsforholdAnsettelse(), "testnav-levende-arbeidsforhold-ansettelse")) .route(createRoute(consumers.getTestnavLevendeArbeidsforholdScheduler(), "testnav-levende-arbeidsforhold-scheduler")) .route(createRoute(consumers.getTestnavYrkesskadeProxy())) + .route(createRoute(consumers.getTestnavSykemeldingProxy())) .route(createRoute(consumers.getTestnavNomProxy())) .route(createRoute(consumers.getTestnavAltinn3TilgangService(), "testnav-altinn3-tilgang-service")) .route(createRoute(consumers.getTestnavArbeidssoekerregisteretProxy())) diff --git a/apps/dolly-frontend/src/main/java/no/nav/dolly/web/config/Consumers.java b/apps/dolly-frontend/src/main/java/no/nav/dolly/web/config/Consumers.java index c5b12b05835..ab054d8d9c0 100644 --- a/apps/dolly-frontend/src/main/java/no/nav/dolly/web/config/Consumers.java +++ b/apps/dolly-frontend/src/main/java/no/nav/dolly/web/config/Consumers.java @@ -66,6 +66,7 @@ public class Consumers { private ServerProperties testnavLevendeArbeidsforholdAnsettelse; private ServerProperties testnavLevendeArbeidsforholdScheduler; private ServerProperties testnavYrkesskadeProxy; + private ServerProperties testnavSykemeldingProxy; private ServerProperties testnavNomProxy; private ServerProperties testnavAltinn3TilgangService; private ServerProperties testnavArbeidssoekerregisteretProxy; diff --git a/apps/dolly-frontend/src/main/js/__tests__/mocks/mockServiceWorker.js b/apps/dolly-frontend/src/main/js/__tests__/mocks/mockServiceWorker.js index 7e23102e0b2..15623f1090b 100644 --- a/apps/dolly-frontend/src/main/js/__tests__/mocks/mockServiceWorker.js +++ b/apps/dolly-frontend/src/main/js/__tests__/mocks/mockServiceWorker.js @@ -7,8 +7,8 @@ * - Please do NOT modify this file. */ -const PACKAGE_VERSION = '2.11.1' -const INTEGRITY_CHECKSUM = 'f5825c521429caf22a4dd13b66e243af' +const PACKAGE_VERSION = '2.11.3' +const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() @@ -71,11 +71,6 @@ addEventListener('message', async function (event) { break } - case 'MOCK_DEACTIVATE': { - activeClientIds.delete(clientId) - break - } - case 'CLIENT_CLOSED': { activeClientIds.delete(clientId) @@ -94,6 +89,8 @@ addEventListener('message', async function (event) { }) addEventListener('fetch', function (event) { + const requestInterceptedAt = Date.now() + // Bypass navigation requests. if (event.request.mode === 'navigate') { return @@ -110,23 +107,29 @@ addEventListener('fetch', function (event) { // Bypass all requests when there are no active clients. // Prevents the self-unregistered worked from handling requests - // after it's been deleted (still remains active until the next reload). + // after it's been terminated (still remains active until the next reload). if (activeClientIds.size === 0) { return } const requestId = crypto.randomUUID() - event.respondWith(handleRequest(event, requestId)) + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) }) /** * @param {FetchEvent} event * @param {string} requestId + * @param {number} requestInterceptedAt */ -async function handleRequest(event, requestId) { +async function handleRequest(event, requestId, requestInterceptedAt) { const client = await resolveMainClient(event) const requestCloneForEvents = event.request.clone() - const response = await getResponse(event, client, requestId) + const response = await getResponse( + event, + client, + requestId, + requestInterceptedAt, + ) // Send back the response clone for the "response:*" life-cycle events. // Ensure MSW is active and ready to handle the message, otherwise @@ -204,7 +207,7 @@ async function resolveMainClient(event) { * @param {string} requestId * @returns {Promise} */ -async function getResponse(event, client, requestId) { +async function getResponse(event, client, requestId, requestInterceptedAt) { // Clone the request because it might've been already used // (i.e. its body has been read and sent to the client). const requestClone = event.request.clone() @@ -255,6 +258,7 @@ async function getResponse(event, client, requestId) { type: 'REQUEST', payload: { id: requestId, + interceptedAt: requestInterceptedAt, ...serializedRequest, }, }, diff --git a/apps/dolly-frontend/src/main/js/package-lock.json b/apps/dolly-frontend/src/main/js/package-lock.json index ee55c3b5684..83460e849d3 100644 --- a/apps/dolly-frontend/src/main/js/package-lock.json +++ b/apps/dolly-frontend/src/main/js/package-lock.json @@ -927,9 +927,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", - "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", "cpu": [ "ppc64" ], @@ -944,9 +944,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", - "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", "cpu": [ "arm" ], @@ -961,9 +961,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", - "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", "cpu": [ "arm64" ], @@ -978,9 +978,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", - "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", "cpu": [ "x64" ], @@ -995,9 +995,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", - "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", "cpu": [ "arm64" ], @@ -1012,9 +1012,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", - "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", "cpu": [ "x64" ], @@ -1029,9 +1029,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", - "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", "cpu": [ "arm64" ], @@ -1046,9 +1046,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", - "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", "cpu": [ "x64" ], @@ -1063,9 +1063,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", - "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", "cpu": [ "arm" ], @@ -1080,9 +1080,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", - "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", "cpu": [ "arm64" ], @@ -1097,9 +1097,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", - "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", "cpu": [ "ia32" ], @@ -1114,9 +1114,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", - "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", "cpu": [ "loong64" ], @@ -1131,9 +1131,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", - "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", "cpu": [ "mips64el" ], @@ -1148,9 +1148,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", - "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", "cpu": [ "ppc64" ], @@ -1165,9 +1165,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", - "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", "cpu": [ "riscv64" ], @@ -1182,9 +1182,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", - "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", "cpu": [ "s390x" ], @@ -1199,9 +1199,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", - "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", "cpu": [ "x64" ], @@ -1216,9 +1216,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", - "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", "cpu": [ "arm64" ], @@ -1233,9 +1233,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", - "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", "cpu": [ "x64" ], @@ -1250,9 +1250,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", - "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", "cpu": [ "arm64" ], @@ -1267,9 +1267,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", - "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", "cpu": [ "x64" ], @@ -1284,9 +1284,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", - "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", "cpu": [ "arm64" ], @@ -1301,9 +1301,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", - "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", "cpu": [ "x64" ], @@ -1318,9 +1318,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", - "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", "cpu": [ "arm64" ], @@ -1335,9 +1335,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", - "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", "cpu": [ "ia32" ], @@ -1352,9 +1352,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", - "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", "cpu": [ "x64" ], @@ -1518,9 +1518,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.35.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.35.0.tgz", - "integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==", + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", + "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", "dev": true, "license": "MIT", "engines": { @@ -1622,9 +1622,9 @@ } }, "node_modules/@hookform/resolvers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.2.1.tgz", - "integrity": "sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.2.2.tgz", + "integrity": "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==", "license": "MIT", "dependencies": { "@standard-schema/utils": "^0.3.0" @@ -1685,14 +1685,24 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@inquirer/ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.0.tgz", + "integrity": "sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@inquirer/confirm": { - "version": "5.1.16", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.16.tgz", - "integrity": "sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag==", + "version": "5.1.18", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.18.tgz", + "integrity": "sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.2.0", + "@inquirer/core": "^10.2.2", "@inquirer/type": "^3.0.8" }, "engines": { @@ -1708,15 +1718,15 @@ } }, "node_modules/@inquirer/core": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.2.0.tgz", - "integrity": "sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.2.2.tgz", + "integrity": "sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==", "dev": true, "license": "MIT", "dependencies": { + "@inquirer/ansi": "^1.0.0", "@inquirer/figures": "^1.0.13", "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", @@ -1868,9 +1878,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.30", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", - "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1902,16 +1912,16 @@ } }, "node_modules/@navikt/aksel-icons": { - "version": "7.29.1", - "resolved": "https://npm.pkg.github.com/download/@navikt/aksel-icons/7.29.1/dd3a4014c46263847d74a531a9b4cf2850bbe018", - "integrity": "sha512-ERX4lUCYcPDQN3UT1051UY8bDb6vBwAePMSDuRO5bLnTSSq8ZqNxPDtSxaihp35DeqZi08j7AJQXGGpn0exd9g==", + "version": "7.31.0", + "resolved": "https://npm.pkg.github.com/download/@navikt/aksel-icons/7.31.0/5d0ea15a5f0ba53bf9e0c38a0b45612235d6b332", + "integrity": "sha512-6rtyFhDDBOkyG815trxe9pnaJrvSnwLEpkJ7qh0qZm1B8g59a4bf2IJGVtKDPg9thVOrxNtA/H9G4N6n0v9Kkg==", "dev": true, "license": "MIT" }, "node_modules/@navikt/ds-css": { - "version": "7.29.1", - "resolved": "https://npm.pkg.github.com/download/@navikt/ds-css/7.29.1/fac35f81f5620714b47e5e3ed02671b896b0ba71", - "integrity": "sha512-Lm3Itq/Ls/7yB4btn4nRix4qOGCltn4Qszf+6SPOtK/oI4+h9TiqArV5+BGa02Ve+6NPi0ByDYLTOyQWTKwMng==", + "version": "7.31.0", + "resolved": "https://npm.pkg.github.com/download/@navikt/ds-css/7.31.0/78afbca44bf15ca55be50990b19693411994a579", + "integrity": "sha512-7wA5Goihfxai/IkTuDIErUSye+/X5UUP2ixT/blipkDbN1Ny6u7PaujYuuGzRR7Glez3suaB4+ATYMxAXLJziw==", "dev": true, "license": "MIT" }, @@ -1933,16 +1943,16 @@ } }, "node_modules/@navikt/ds-react": { - "version": "7.29.1", - "resolved": "https://npm.pkg.github.com/download/@navikt/ds-react/7.29.1/f3036f7ca457f8a0dc01631aff5962ca53d4e023", - "integrity": "sha512-GDTCBzoATjw/P/p/CXrknDkSCqNITppVIpKAuwwf7vEINPQJGiOWitx5uIe5r2DIoDq5wfzIXRWkGcIJLGGTJA==", + "version": "7.31.0", + "resolved": "https://npm.pkg.github.com/download/@navikt/ds-react/7.31.0/6a2825dae4e35d7f11a63e4ecbd3c0808ef5e308", + "integrity": "sha512-soQmDwnTMYoFTsJggDgYKijtSQe0VuHNbksGRrjgb2+F1HZ2zwjDP/mLzg73Mwr3kkrz4nkwS9NTGhoHO+dt3w==", "dev": true, "license": "MIT", "dependencies": { "@floating-ui/react": "0.27.8", "@floating-ui/react-dom": "^2.0.9", - "@navikt/aksel-icons": "^7.29.1", - "@navikt/ds-tokens": "^7.29.1", + "@navikt/aksel-icons": "^7.31.0", + "@navikt/ds-tokens": "^7.31.0", "clsx": "^2.1.0", "date-fns": "^4.0.0", "react-day-picker": "9.7.0" @@ -1953,9 +1963,9 @@ } }, "node_modules/@navikt/ds-tokens": { - "version": "7.29.1", - "resolved": "https://npm.pkg.github.com/download/@navikt/ds-tokens/7.29.1/7e294b5a3d8670cdb8590b8af75b8d9e6b170e68", - "integrity": "sha512-bgZE6i9YiPC86NtmkFuzlXEhrhgmL1cDCiy3TKZ7H9OiF93KYAPSxK+tGRmpFkf8LxXx5QXK3LYAfK8RmRDxFg==", + "version": "7.31.0", + "resolved": "https://npm.pkg.github.com/download/@navikt/ds-tokens/7.31.0/c8ff6b4d9a463ddab2a357fd4dee135c26693322", + "integrity": "sha512-cW7be0OyW9FIcIrgagIO0/YZoc3774iCqq9VYvx9cyIYT3CK6kSziCEyT/Kro3wEzyW+nJokTORgyx28zk3y9A==", "dev": true, "license": "MIT" }, @@ -2420,14 +2430,14 @@ } }, "node_modules/@playwright/experimental-ct-core": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-core/-/experimental-ct-core-1.55.0.tgz", - "integrity": "sha512-8HRI8Envzgv3bVr6CrKCW3NxFR3dvXaE10OACkfs50GiTn5t4m31UJ3wDpFAgzxZvXPoyLfG3mLG16YbpWS5Ww==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-core/-/experimental-ct-core-1.55.1.tgz", + "integrity": "sha512-Mhdmx3CDlOYi4Nr8N4bzaqhjmdcl+SKdsKWznN6TWZCFZDMZARyZ3Vp5IIS3AAoymzMCcG6bRsKicA79eUBLKA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.55.0", - "playwright-core": "1.55.0", + "playwright": "1.55.1", + "playwright-core": "1.55.1", "vite": "^6.3.4" }, "engines": { @@ -2567,13 +2577,13 @@ } }, "node_modules/@playwright/experimental-ct-react": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-react/-/experimental-ct-react-1.55.0.tgz", - "integrity": "sha512-mtm5kkcQx7ilqBnBIWHqhKVjvAjHQi5OBx+ySmofwj82IS8GiQvpKLVsFDeAEfNpVj+j6B1Dm+8610rqfH/9sw==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-react/-/experimental-ct-react-1.55.1.tgz", + "integrity": "sha512-q+qH/J99iV6+99oVT417AA8KsYp3lwxsnxZrLZjIwkEC5+G28QCkr7+UYAOZoNPzelGqHFMLhYMvc6mXuREa2w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@playwright/experimental-ct-core": "1.55.0", + "@playwright/experimental-ct-core": "1.55.1", "@vitejs/plugin-react": "^4.2.1" }, "bin": { @@ -2622,13 +2632,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.0.tgz", - "integrity": "sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz", + "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.55.0" + "playwright": "1.55.1" }, "bin": { "playwright": "cli.js" @@ -2694,9 +2704,9 @@ } }, "node_modules/@react-router/dev": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/@react-router/dev/-/dev-7.8.2.tgz", - "integrity": "sha512-9ilgQoNhvgvUyQKDapALt9qVO3GpSw9ng5X2BwIhLIwqh8CTyRM/jz5cK53p5yzGiVeyx9njXXfeuxUlvQgJuA==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@react-router/dev/-/dev-7.9.2.tgz", + "integrity": "sha512-uGDupa6S64Yv9pAtEWchPKQTyl9Ab59ztqyPilNAFYnktMEweOHTBfN4tMUinnxAJQByB6hAoLQmHcy0u6RdTA==", "dev": true, "license": "MIT", "dependencies": { @@ -2708,8 +2718,8 @@ "@babel/traverse": "^7.27.7", "@babel/types": "^7.27.7", "@npmcli/package-json": "^4.0.1", - "@react-router/node": "7.8.2", - "@vitejs/plugin-rsc": "0.4.11", + "@react-router/node": "7.9.2", + "@remix-run/node-fetch-server": "^0.9.0", "arg": "^5.0.1", "babel-dead-code-elimination": "^1.0.6", "chokidar": "^4.0.0", @@ -2724,7 +2734,6 @@ "prettier": "^3.6.2", "react-refresh": "^0.14.0", "semver": "^7.3.7", - "set-cookie-parser": "^2.6.0", "tinyglobby": "^0.2.14", "valibot": "^0.41.0", "vite-node": "^3.2.2" @@ -2736,8 +2745,9 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@react-router/serve": "^7.8.2", - "react-router": "^7.8.2", + "@react-router/serve": "^7.9.2", + "@vitejs/plugin-rsc": "*", + "react-router": "^7.9.2", "typescript": "^5.1.0", "vite": "^5.1.0 || ^6.0.0 || ^7.0.0", "wrangler": "^3.28.2 || ^4.0.0" @@ -2746,6 +2756,9 @@ "@react-router/serve": { "optional": true }, + "@vitejs/plugin-rsc": { + "optional": true + }, "typescript": { "optional": true }, @@ -2755,9 +2768,9 @@ } }, "node_modules/@react-router/node": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.8.2.tgz", - "integrity": "sha512-FNepNg4Aya6V0ZxD/+uObtqxtMXcsBGa0ax9PznUh5qr8g4M6Xo9IN+soLb1tghz6iS/F9djFyhJ/lDkF77dEw==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.9.2.tgz", + "integrity": "sha512-mGqpEXVWs1XmwpJdbESE2fzvS3a43EdMCuiL2U3Nmm1IuGdSjc60gQK/IeKWjNGdgj1pZEyyQK17fYXPqjp5Uw==", "license": "MIT", "dependencies": { "@mjackson/node-fetch-server": "^0.2.0" @@ -2766,7 +2779,7 @@ "node": ">=20.0.0" }, "peerDependencies": { - "react-router": "7.8.2", + "react-router": "7.9.2", "typescript": "^5.1.0" }, "peerDependenciesMeta": { @@ -2802,17 +2815,24 @@ } } }, + "node_modules/@remix-run/node-fetch-server": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.9.0.tgz", + "integrity": "sha512-SoLMv7dbH+njWzXnOY6fI08dFMI5+/dQ+vY3n8RnnbdG7MdJEgiP28Xj/xWlnRnED/aB6SFw56Zop+LbmaaKqA==", + "dev": true, + "license": "MIT" + }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.34", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.34.tgz", - "integrity": "sha512-LyAREkZHP5pMom7c24meKmJCdhf2hEyvam2q0unr3or9ydwDL+DJ8chTF6Av/RFPb3rH8UFBdMzO5MxTZW97oA==", + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.35.tgz", + "integrity": "sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==", "dev": true, "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.1.tgz", - "integrity": "sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.2.tgz", + "integrity": "sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==", "cpu": [ "arm" ], @@ -2824,9 +2844,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.1.tgz", - "integrity": "sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.2.tgz", + "integrity": "sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==", "cpu": [ "arm64" ], @@ -2838,9 +2858,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.1.tgz", - "integrity": "sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.2.tgz", + "integrity": "sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==", "cpu": [ "arm64" ], @@ -2852,9 +2872,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.1.tgz", - "integrity": "sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.2.tgz", + "integrity": "sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==", "cpu": [ "x64" ], @@ -2866,9 +2886,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.1.tgz", - "integrity": "sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.2.tgz", + "integrity": "sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==", "cpu": [ "arm64" ], @@ -2880,9 +2900,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.1.tgz", - "integrity": "sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.2.tgz", + "integrity": "sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==", "cpu": [ "x64" ], @@ -2894,9 +2914,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.1.tgz", - "integrity": "sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.2.tgz", + "integrity": "sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==", "cpu": [ "arm" ], @@ -2908,9 +2928,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.1.tgz", - "integrity": "sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.2.tgz", + "integrity": "sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==", "cpu": [ "arm" ], @@ -2922,9 +2942,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz", - "integrity": "sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.2.tgz", + "integrity": "sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==", "cpu": [ "arm64" ], @@ -2936,9 +2956,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz", - "integrity": "sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.2.tgz", + "integrity": "sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==", "cpu": [ "arm64" ], @@ -2949,10 +2969,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.1.tgz", - "integrity": "sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.2.tgz", + "integrity": "sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==", "cpu": [ "loong64" ], @@ -2964,9 +2984,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.1.tgz", - "integrity": "sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.2.tgz", + "integrity": "sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==", "cpu": [ "ppc64" ], @@ -2978,9 +2998,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.1.tgz", - "integrity": "sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.2.tgz", + "integrity": "sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==", "cpu": [ "riscv64" ], @@ -2992,9 +3012,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.1.tgz", - "integrity": "sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.2.tgz", + "integrity": "sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==", "cpu": [ "riscv64" ], @@ -3006,9 +3026,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.1.tgz", - "integrity": "sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.2.tgz", + "integrity": "sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==", "cpu": [ "s390x" ], @@ -3020,9 +3040,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.1.tgz", - "integrity": "sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.2.tgz", + "integrity": "sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==", "cpu": [ "x64" ], @@ -3034,9 +3054,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.1.tgz", - "integrity": "sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.2.tgz", + "integrity": "sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==", "cpu": [ "x64" ], @@ -3048,9 +3068,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.1.tgz", - "integrity": "sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.2.tgz", + "integrity": "sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==", "cpu": [ "arm64" ], @@ -3062,9 +3082,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.1.tgz", - "integrity": "sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.2.tgz", + "integrity": "sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==", "cpu": [ "arm64" ], @@ -3076,9 +3096,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.1.tgz", - "integrity": "sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.2.tgz", + "integrity": "sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==", "cpu": [ "ia32" ], @@ -3089,10 +3109,24 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.2.tgz", + "integrity": "sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.1.tgz", - "integrity": "sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.2.tgz", + "integrity": "sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==", "cpu": [ "x64" ], @@ -3341,13 +3375,13 @@ } }, "node_modules/@types/node": { - "version": "24.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.1.tgz", - "integrity": "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz", + "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.10.0" + "undici-types": "~7.12.0" } }, "node_modules/@types/parse-json": { @@ -3357,9 +3391,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.1.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz", - "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==", + "version": "19.1.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.13.tgz", + "integrity": "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3472,17 +3506,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.43.0.tgz", - "integrity": "sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.44.1.tgz", + "integrity": "sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/type-utils": "8.43.0", - "@typescript-eslint/utils": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", + "@typescript-eslint/scope-manager": "8.44.1", + "@typescript-eslint/type-utils": "8.44.1", + "@typescript-eslint/utils": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -3496,22 +3530,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.43.0", + "@typescript-eslint/parser": "^8.44.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.43.0.tgz", - "integrity": "sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.44.1.tgz", + "integrity": "sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", + "@typescript-eslint/scope-manager": "8.44.1", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1", "debug": "^4.3.4" }, "engines": { @@ -3527,14 +3561,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.43.0.tgz", - "integrity": "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.44.1.tgz", + "integrity": "sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.43.0", - "@typescript-eslint/types": "^8.43.0", + "@typescript-eslint/tsconfig-utils": "^8.44.1", + "@typescript-eslint/types": "^8.44.1", "debug": "^4.3.4" }, "engines": { @@ -3549,14 +3583,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", - "integrity": "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.44.1.tgz", + "integrity": "sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0" + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3567,9 +3601,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz", - "integrity": "sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.44.1.tgz", + "integrity": "sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==", "dev": true, "license": "MIT", "engines": { @@ -3584,15 +3618,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.43.0.tgz", - "integrity": "sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.44.1.tgz", + "integrity": "sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/utils": "8.43.0", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1", + "@typescript-eslint/utils": "8.44.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -3609,9 +3643,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.43.0.tgz", - "integrity": "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.44.1.tgz", + "integrity": "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==", "dev": true, "license": "MIT", "engines": { @@ -3623,16 +3657,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", - "integrity": "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.44.1.tgz", + "integrity": "sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.43.0", - "@typescript-eslint/tsconfig-utils": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", + "@typescript-eslint/project-service": "8.44.1", + "@typescript-eslint/tsconfig-utils": "8.44.1", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3652,16 +3686,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.43.0.tgz", - "integrity": "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.44.1.tgz", + "integrity": "sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0" + "@typescript-eslint/scope-manager": "8.44.1", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3676,13 +3710,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", - "integrity": "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.44.1.tgz", + "integrity": "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.43.0", + "@typescript-eslint/types": "8.44.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -3707,16 +3741,16 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.0.2.tgz", - "integrity": "sha512-tmyFgixPZCx2+e6VO9TNITWcCQl8+Nl/E8YbAyPVv85QCc7/A3JrdfG2A8gIzvVhWuzMOVrFW1aReaNxrI6tbw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.0.3.tgz", + "integrity": "sha512-PFVHhosKkofGH0Yzrw1BipSedTH68BFF8ZWy1kfUpCtJcouXXY0+racG8sExw7hw0HoX36813ga5o3LTWZ4FUg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.28.3", + "@babel/core": "^7.28.4", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.34", + "@rolldown/pluginutils": "1.0.0-beta.35", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -3737,34 +3771,6 @@ "node": ">=0.10.0" } }, - "node_modules/@vitejs/plugin-rsc": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-rsc/-/plugin-rsc-0.4.11.tgz", - "integrity": "sha512-+4H4wLi+Y9yF58znBfKgGfX8zcqUGt8ngnmNgzrdGdF1SVz7EO0sg7WnhK5fFVHt6fUxsVEjmEabsCWHKPL1Tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@mjackson/node-fetch-server": "^0.7.0", - "es-module-lexer": "^1.7.0", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17", - "periscopic": "^4.0.2", - "turbo-stream": "^3.1.0", - "vitefu": "^1.1.1" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*", - "vite": "*" - } - }, - "node_modules/@vitejs/plugin-rsc/node_modules/@mjackson/node-fetch-server": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@mjackson/node-fetch-server/-/node-fetch-server-0.7.0.tgz", - "integrity": "sha512-un8diyEBKU3BTVj3GzlTPA1kIjCkGdD+AMYQy31Gf9JCkfoZzwgJ79GUtHrF2BN3XPNMLpubbzPcxys+a3uZEw==", - "dev": true, - "license": "MIT" - }, "node_modules/@vitest/browser": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.2.4.tgz", @@ -4015,35 +4021,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -4285,9 +4262,9 @@ } }, "node_modules/axios": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.0.tgz", - "integrity": "sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -4399,6 +4376,16 @@ "license": "MIT", "optional": true }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz", + "integrity": "sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -4436,9 +4423,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz", - "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", + "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", "dev": true, "funding": [ { @@ -4456,9 +4443,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001737", - "electron-to-chromium": "^1.5.211", - "node-releases": "^2.0.19", + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001741", + "electron-to-chromium": "^1.5.218", + "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { @@ -4572,9 +4560,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001741", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz", - "integrity": "sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==", + "version": "1.0.30001745", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001745.tgz", + "integrity": "sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==", "dev": true, "funding": [ { @@ -4904,9 +4892,9 @@ } }, "node_modules/country-data-list": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/country-data-list/-/country-data-list-1.5.4.tgz", - "integrity": "sha512-y2gzj84oFCRIqNd9YwQL4X54yu/feqWMja2Ed2CI44mhKlybwQZlkR7AVO8dGOD0xCBfVGsJ76BFV6KOCyFtOA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/country-data-list/-/country-data-list-1.5.5.tgz", + "integrity": "sha512-igoAbJvlD/foOq4+aB3t24Hndvb5y/DasXcrVOtJMZ0UFLgfYq/mPMcCcSjJAIykLcTWOHZehZgNUJyaKMz1iA==", "license": "MIT" }, "node_modules/cross-spawn": { @@ -5101,9 +5089,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5240,9 +5228,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz", + "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -5318,9 +5306,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.215", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.215.tgz", - "integrity": "sha512-TIvGp57UpeNetj/wV/xpFNpWGb0b/ROw372lHPx5Aafx02gjTBtWnEEcaSX3W2dLM3OSdGGyHX/cHl01JQsLaQ==", + "version": "1.5.223", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.223.tgz", + "integrity": "sha512-qKm55ic6nbEmagFlTFczML33rF90aU+WtrJ9MdTCThrcvDNdUHN4p6QfVN78U06ZmguqXIyMPyYhw2TrbDUwPQ==", "dev": true, "license": "ISC" }, @@ -5377,9 +5365,9 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -5575,9 +5563,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", - "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", + "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5588,32 +5576,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.9", - "@esbuild/android-arm": "0.25.9", - "@esbuild/android-arm64": "0.25.9", - "@esbuild/android-x64": "0.25.9", - "@esbuild/darwin-arm64": "0.25.9", - "@esbuild/darwin-x64": "0.25.9", - "@esbuild/freebsd-arm64": "0.25.9", - "@esbuild/freebsd-x64": "0.25.9", - "@esbuild/linux-arm": "0.25.9", - "@esbuild/linux-arm64": "0.25.9", - "@esbuild/linux-ia32": "0.25.9", - "@esbuild/linux-loong64": "0.25.9", - "@esbuild/linux-mips64el": "0.25.9", - "@esbuild/linux-ppc64": "0.25.9", - "@esbuild/linux-riscv64": "0.25.9", - "@esbuild/linux-s390x": "0.25.9", - "@esbuild/linux-x64": "0.25.9", - "@esbuild/netbsd-arm64": "0.25.9", - "@esbuild/netbsd-x64": "0.25.9", - "@esbuild/openbsd-arm64": "0.25.9", - "@esbuild/openbsd-x64": "0.25.9", - "@esbuild/openharmony-arm64": "0.25.9", - "@esbuild/sunos-x64": "0.25.9", - "@esbuild/win32-arm64": "0.25.9", - "@esbuild/win32-ia32": "0.25.9", - "@esbuild/win32-x64": "0.25.9" + "@esbuild/aix-ppc64": "0.25.10", + "@esbuild/android-arm": "0.25.10", + "@esbuild/android-arm64": "0.25.10", + "@esbuild/android-x64": "0.25.10", + "@esbuild/darwin-arm64": "0.25.10", + "@esbuild/darwin-x64": "0.25.10", + "@esbuild/freebsd-arm64": "0.25.10", + "@esbuild/freebsd-x64": "0.25.10", + "@esbuild/linux-arm": "0.25.10", + "@esbuild/linux-arm64": "0.25.10", + "@esbuild/linux-ia32": "0.25.10", + "@esbuild/linux-loong64": "0.25.10", + "@esbuild/linux-mips64el": "0.25.10", + "@esbuild/linux-ppc64": "0.25.10", + "@esbuild/linux-riscv64": "0.25.10", + "@esbuild/linux-s390x": "0.25.10", + "@esbuild/linux-x64": "0.25.10", + "@esbuild/netbsd-arm64": "0.25.10", + "@esbuild/netbsd-x64": "0.25.10", + "@esbuild/openbsd-arm64": "0.25.10", + "@esbuild/openbsd-x64": "0.25.10", + "@esbuild/openharmony-arm64": "0.25.10", + "@esbuild/sunos-x64": "0.25.10", + "@esbuild/win32-arm64": "0.25.10", + "@esbuild/win32-ia32": "0.25.10", + "@esbuild/win32-x64": "0.25.10" } }, "node_modules/escalade": { @@ -5639,9 +5627,9 @@ } }, "node_modules/eslint": { - "version": "9.35.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.35.0.tgz", - "integrity": "sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==", + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", + "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5651,7 +5639,7 @@ "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.35.0", + "@eslint/js": "9.36.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -7259,16 +7247,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-reference": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", - "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.6" - } - }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -7429,9 +7407,9 @@ "license": "MIT" }, "node_modules/isbot": { - "version": "5.1.30", - "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.30.tgz", - "integrity": "sha512-3wVJEonAns1OETX83uWsk5IAne2S5zfDcntD2hbtU23LelSqNXzXs9zKjMPOLMzroCgIjCfjYAEHrd2D6FOkiA==", + "version": "5.1.31", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.31.tgz", + "integrity": "sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ==", "dev": true, "license": "Unlicense", "engines": { @@ -8019,9 +7997,9 @@ "license": "MIT" }, "node_modules/msw": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.11.1.tgz", - "integrity": "sha512-dGSRx0AJmQVQfpGXTsAAq4JFdwdhOBdJ6sJS/jnN0ac3s0NZB6daacHF1z5Pefx+IejmvuiLWw260RlyQOf3sQ==", + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.11.3.tgz", + "integrity": "sha512-878imp8jxIpfzuzxYfX0qqTq1IFQz/1/RBHs/PyirSjzi+xKM/RRfIpIqHSCWjH0GxidrjhgiiXC+DWXNDvT9w==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -8031,7 +8009,6 @@ "@inquirer/confirm": "^5.0.0", "@mswjs/interceptors": "^0.39.1", "@open-draft/deferred-promise": "^2.2.0", - "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", "@types/statuses": "^2.0.4", "graphql": "^16.8.1", @@ -8040,9 +8017,11 @@ "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", + "rettime": "^0.7.0", "strict-event-emitter": "^0.5.1", "tough-cookie": "^6.0.0", "type-fest": "^4.26.1", + "until-async": "^3.0.2", "yargs": "^17.7.2" }, "bin": { @@ -8064,22 +8043,22 @@ } }, "node_modules/msw/node_modules/tldts": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.13.tgz", - "integrity": "sha512-z/SgnxiICGb7Gli0z7ci9BZdjy1tQORUbdmzEUA7NbIJKWhdONn78Ji8gV0PAGfHPyEd+I+W2rMzhLjWkv2Olg==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.16.tgz", + "integrity": "sha512-5bdPHSwbKTeHmXrgecID4Ljff8rQjv7g8zKQPkCozRo2HWWni+p310FSn5ImI+9kWw9kK4lzOB5q/a6iv0IJsw==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.13" + "tldts-core": "^7.0.16" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/msw/node_modules/tldts-core": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.13.tgz", - "integrity": "sha512-Td0LeWLgXJGsikI4mO82fRexgPCEyTcwWiXJERF/GBHX3Dm+HQq/wx4HnYowCbiwQ8d+ENLZc+ktbZw8H+0oEA==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.16.tgz", + "integrity": "sha512-XHhPmHxphLi+LGbH0G/O7dmUH9V65OY20R7vH8gETHsp5AZCjBk9l8sqmRKLaGOxnETU7XNSDUPtewAy/K6jbA==", "dev": true, "license": "MIT" }, @@ -8252,9 +8231,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.20.tgz", - "integrity": "sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==", + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", "dev": true, "license": "MIT" }, @@ -8721,18 +8700,6 @@ "path2d": "^0.2.1" } }, - "node_modules/periscopic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-4.0.2.tgz", - "integrity": "sha512-sqpQDUy8vgB7ycLkendSKS6HnVz1Rneoc3Rc+ZBUCe2pbqlVuCC5vF52l0NJ1aiMg/r1qfYF9/myz8CZeI2rjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "is-reference": "^3.0.2", - "zimmerframe": "^1.0.0" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -8764,13 +8731,13 @@ } }, "node_modules/playwright": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.0.tgz", - "integrity": "sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz", + "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.55.0" + "playwright-core": "1.55.1" }, "bin": { "playwright": "cli.js" @@ -8783,9 +8750,9 @@ } }, "node_modules/playwright-core": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.0.tgz", - "integrity": "sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz", + "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==", "dev": true, "license": "Apache-2.0", "bin": { @@ -9259,9 +9226,9 @@ } }, "node_modules/react-hook-form": { - "version": "7.62.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz", - "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==", + "version": "7.63.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.63.0.tgz", + "integrity": "sha512-ZwueDMvUeucovM2VjkCf7zIHcs1aAlDimZu2Hvel5C5907gUzMpm4xCrQXtRzCvsBqFjonB4m3x4LzCFI1ZKWA==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -9379,9 +9346,9 @@ } }, "node_modules/react-router": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.2.tgz", - "integrity": "sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.2.tgz", + "integrity": "sha512-i2TPp4dgaqrOqiRGLZmqh2WXmbdFknUyiCRmSKs0hf6fWXkTKg5h56b+9F22NbGRAMxjYfqQnpi63egzD2SuZA==", "dev": true, "license": "MIT", "dependencies": { @@ -9757,6 +9724,13 @@ "node": ">= 4" } }, + "node_modules/rettime": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.7.0.tgz", + "integrity": "sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==", + "dev": true, + "license": "MIT" + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -9769,9 +9743,9 @@ } }, "node_modules/rollup": { - "version": "4.50.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz", - "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.2.tgz", + "integrity": "sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==", "dev": true, "license": "MIT", "dependencies": { @@ -9785,27 +9759,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.50.1", - "@rollup/rollup-android-arm64": "4.50.1", - "@rollup/rollup-darwin-arm64": "4.50.1", - "@rollup/rollup-darwin-x64": "4.50.1", - "@rollup/rollup-freebsd-arm64": "4.50.1", - "@rollup/rollup-freebsd-x64": "4.50.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.50.1", - "@rollup/rollup-linux-arm-musleabihf": "4.50.1", - "@rollup/rollup-linux-arm64-gnu": "4.50.1", - "@rollup/rollup-linux-arm64-musl": "4.50.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.50.1", - "@rollup/rollup-linux-ppc64-gnu": "4.50.1", - "@rollup/rollup-linux-riscv64-gnu": "4.50.1", - "@rollup/rollup-linux-riscv64-musl": "4.50.1", - "@rollup/rollup-linux-s390x-gnu": "4.50.1", - "@rollup/rollup-linux-x64-gnu": "4.50.1", - "@rollup/rollup-linux-x64-musl": "4.50.1", - "@rollup/rollup-openharmony-arm64": "4.50.1", - "@rollup/rollup-win32-arm64-msvc": "4.50.1", - "@rollup/rollup-win32-ia32-msvc": "4.50.1", - "@rollup/rollup-win32-x64-msvc": "4.50.1", + "@rollup/rollup-android-arm-eabi": "4.52.2", + "@rollup/rollup-android-arm64": "4.52.2", + "@rollup/rollup-darwin-arm64": "4.52.2", + "@rollup/rollup-darwin-x64": "4.52.2", + "@rollup/rollup-freebsd-arm64": "4.52.2", + "@rollup/rollup-freebsd-x64": "4.52.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.2", + "@rollup/rollup-linux-arm-musleabihf": "4.52.2", + "@rollup/rollup-linux-arm64-gnu": "4.52.2", + "@rollup/rollup-linux-arm64-musl": "4.52.2", + "@rollup/rollup-linux-loong64-gnu": "4.52.2", + "@rollup/rollup-linux-ppc64-gnu": "4.52.2", + "@rollup/rollup-linux-riscv64-gnu": "4.52.2", + "@rollup/rollup-linux-riscv64-musl": "4.52.2", + "@rollup/rollup-linux-s390x-gnu": "4.52.2", + "@rollup/rollup-linux-x64-gnu": "4.52.2", + "@rollup/rollup-linux-x64-musl": "4.52.2", + "@rollup/rollup-openharmony-arm64": "4.52.2", + "@rollup/rollup-win32-arm64-msvc": "4.52.2", + "@rollup/rollup-win32-ia32-msvc": "4.52.2", + "@rollup/rollup-win32-x64-gnu": "4.52.2", + "@rollup/rollup-win32-x64-msvc": "4.52.2", "fsevents": "~2.3.2" } }, @@ -9934,9 +9909,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.92.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.92.1.tgz", - "integrity": "sha512-ffmsdbwqb3XeyR8jJR6KelIXARM9bFQe8A6Q3W4Klmwy5Ckd5gz7jgUNHo4UOqutU5Sk1DtKLbpDP0nLCg1xqQ==", + "version": "1.93.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", + "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", "dev": true, "license": "MIT", "dependencies": { @@ -10772,9 +10747,9 @@ "license": "MIT" }, "node_modules/tar-fs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "dev": true, "license": "MIT", "optional": true, @@ -10890,9 +10865,9 @@ } }, "node_modules/tinyspy": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", - "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", "dev": true, "license": "MIT", "engines": { @@ -11040,13 +11015,6 @@ "node": "*" } }, - "node_modules/turbo-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-3.1.0.tgz", - "integrity": "sha512-tVI25WEXl4fckNEmrq70xU1XumxUwEx/FZD5AgEcV8ri7Wvrg2o7GEq8U7htrNx3CajciGm+kDyhRf5JB6t7/A==", - "dev": true, - "license": "MIT" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11185,12 +11153,22 @@ } }, "node_modules/undici-types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", + "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", "dev": true, "license": "MIT" }, + "node_modules/until-async": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/until-async/-/until-async-3.0.2.tgz", + "integrity": "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/kettanaito" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -11314,9 +11292,9 @@ } }, "node_modules/vite": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.5.tgz", - "integrity": "sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz", + "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==", "dev": true, "license": "MIT", "dependencies": { @@ -11505,26 +11483,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/vitefu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", - "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", - "dev": true, - "license": "MIT", - "workspaces": [ - "tests/deps/*", - "tests/projects/*", - "tests/projects/workspace/packages/*" - ], - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, "node_modules/vitest": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", @@ -12113,9 +12071,9 @@ } }, "node_modules/yup": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.0.tgz", - "integrity": "sha512-VJce62dBd+JQvoc+fCVq+KZfPHr+hXaxCcVgotfwWvlR0Ja3ffYKaJBT8rptPOSKOGJDCUnW2C2JWpud7aRP6Q==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.1.tgz", + "integrity": "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==", "license": "MIT", "dependencies": { "property-expr": "^2.0.5", @@ -12136,13 +12094,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zimmerframe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", - "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", - "dev": true, - "license": "MIT" - }, "node_modules/zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", diff --git a/apps/dolly-frontend/src/main/js/proxy-routes.json b/apps/dolly-frontend/src/main/js/proxy-routes.json index b8c5d5713d0..f51d653e17b 100644 --- a/apps/dolly-frontend/src/main/js/proxy-routes.json +++ b/apps/dolly-frontend/src/main/js/proxy-routes.json @@ -135,6 +135,9 @@ "/testnav-arbeidsplassencv-proxy": { "changeOrigin": true }, + "/testnav-sykemelding-proxy": { + "changeOrigin": true + }, "/testnav-helsepersonell-service": { "changeOrigin": true }, diff --git a/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/kriterier/BestillingKriterieMapper.tsx b/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/kriterier/BestillingKriterieMapper.tsx index 75b4d140aca..62511b67919 100644 --- a/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/kriterier/BestillingKriterieMapper.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/bestilling/sammendrag/kriterier/BestillingKriterieMapper.tsx @@ -35,7 +35,7 @@ import { kategoriKodeverk, tekniskNavnKodeverk, } from '@/components/fagsystem/sigrunstubSummertSkattegrunnlag/form/GrunnlagArrayForm' -import { useTpOrdningKodeverk } from '@/utils/hooks/usePensjon' +import { useTpOrdningKodeverk } from '@/utils/hooks/usePensjon' // TODO: Flytte til selector? // TODO: Flytte til selector? // - Denne kan forminskes ved bruk av hjelpefunksjoner @@ -1520,7 +1520,7 @@ const mapSykemelding = (bestillingData, data) => { if (sykemeldingKriterier) { const sykemelding = { header: 'Sykemelding', - items: null, + items: [] as any, } if (sykemeldingKriterier.syntSykemelding) { sykemelding.items = [ @@ -1528,6 +1528,13 @@ const mapSykemelding = (bestillingData, data) => { obj('Organisasjonsnummer', sykemeldingKriterier.syntSykemelding.orgnummer), obj('Arbeidsforhold-ID', sykemeldingKriterier.syntSykemelding.arbeidsforholdId), ] + } else if (sykemeldingKriterier.nySykemelding) { + sykemeldingKriterier.nySykemelding.aktivitet?.forEach((aktivitet: any) => { + sykemelding.items.push( + obj('Startdato', formatDate(aktivitet.fom)), + obj('Sluttdato', formatDate(aktivitet.tom)), + ) + }) } else if (sykemeldingKriterier.detaljertSykemelding) { sykemelding.items = [ obj('Startdato', formatDate(sykemeldingKriterier.detaljertSykemelding.startDato)), diff --git a/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/options/malOptions.tsx b/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/options/malOptions.tsx index 0e1c37b48b5..538b74d6fef 100644 --- a/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/options/malOptions.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/options/malOptions.tsx @@ -95,7 +95,7 @@ export const initialValuesBasedOnMal = (mal: any, environments: any) => { initialValuesMal.dokarkiv = getUpdatedDokarkiv(initialValuesMal.dokarkiv) } if (initialValuesMal.sykemelding?.syntSykemelding) { - initialValuesMal.sykemelding = getUpdatedSykemelding( + initialValuesMal.sykemelding.detaljertSykemelding = getUpdatedSykemelding( initialValuesMal.sykemelding.syntSykemelding, ) } @@ -430,10 +430,10 @@ const getUpdatedBankkonto = (bankkonto: any) => { const getUpdatedSykemelding = (syntSykemelding: any) => { let updatedSykemelding = initialValuesDetaljertSykemelding - updatedSykemelding.detaljertSykemelding.startDato = new Date() - updatedSykemelding.detaljertSykemelding.mottaker.orgNr = syntSykemelding.orgnummer - updatedSykemelding.detaljertSykemelding.perioder[0].fom = addDays(syntSykemelding.startDato, -7) - updatedSykemelding.detaljertSykemelding.perioder[0].tom = addDays(syntSykemelding.startDato, -1) + updatedSykemelding.startDato = new Date() + updatedSykemelding.mottaker.orgNr = syntSykemelding.orgnummer + updatedSykemelding.perioder[0].fom = addDays(syntSykemelding.startDato, -7) + updatedSykemelding.perioder[0].tom = addDays(syntSykemelding.startDato, -1) return updatedSykemelding } diff --git a/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/stegVelger/steg/steg1/paneler/Sykdom.tsx b/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/stegVelger/steg/steg1/paneler/Sykdom.tsx index 7031cf91ecd..6373982e826 100644 --- a/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/stegVelger/steg/steg1/paneler/Sykdom.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/stegVelger/steg/steg1/paneler/Sykdom.tsx @@ -1,7 +1,10 @@ import Panel from '@/components/ui/panel/Panel' import { Attributt, AttributtKategori } from '../Attributt' import { harValgtAttributt } from '@/components/ui/form/formUtils' -import { sykdomAttributt } from '@/components/fagsystem/sykdom/form/Form' +import { + nySykemeldingAttributt, + sykemeldingAttributt, +} from '@/components/fagsystem/sykdom/form/Form' import { useContext } from 'react' import { BestillingsveilederContext, @@ -9,7 +12,10 @@ import { } from '@/components/bestillingsveileder/BestillingsveilederContext' import { initialYrkesskade } from '@/components/fagsystem/yrkesskader/initialValues' import { yrkesskaderAttributt } from '@/components/fagsystem/yrkesskader/form/Form' -import { initialValuesDetaljertSykemelding } from '@/components/fagsystem/sykdom/form/initialValues' +import { + initialValuesDetaljertSykemelding, + initialValuesNySykemelding, +} from '@/components/fagsystem/sykdom/form/initialValues' export const SykdomPanel = ({ stateModifier, formValues }: any) => { const sm = stateModifier(SykdomPanel.initialValues) @@ -26,17 +32,30 @@ export const SykdomPanel = ({ stateModifier, formValues }: any) => { // @ts-ignore sm.batchAdd(harGyldigSykemeldingBestilling ? ['sykemelding'] : [])} + checkAttributeArray={() => sm.batchAdd(['nySykemelding'])} uncheckAttributeArray={sm.batchRemove} iconType="sykdom" - startOpen={harValgtAttributt(formValues, [sykdomAttributt, yrkesskaderAttributt])} + startOpen={harValgtAttributt(formValues, [ + sykemeldingAttributt, + nySykemeldingAttributt, + yrkesskaderAttributt, + ])} > + @@ -47,16 +66,26 @@ SykdomPanel.heading = 'Sykdom og skade' SykdomPanel.initialValues = ({ set, del, delMutate, has }: any) => ({ sykemelding: { - label: 'Har sykemelding', - checked: has('sykemelding'), + label: 'Har detaljert sykemelding', + checked: has('sykemelding.detaljertSykemelding'), add() { - set('sykemelding', initialValuesDetaljertSykemelding) + set('sykemelding.detaljertSykemelding', initialValuesDetaljertSykemelding) }, remove() { del('sykemelding') delMutate?.() }, }, + nySykemelding: { + label: 'Har ny sykemelding', + checked: has('sykemelding.nySykemelding'), + add() { + set('sykemelding.nySykemelding', initialValuesNySykemelding) + }, + remove() { + del('sykemelding') + }, + }, yrkesskader: { label: 'Har yrkesskader', checked: has('yrkesskader'), diff --git a/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/stegVelger/steg/steg3/Steg3.tsx b/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/stegVelger/steg/steg3/Steg3.tsx index 3872ee0925b..c0c01ccf9c5 100644 --- a/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/stegVelger/steg/steg3/Steg3.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/bestillingsveileder/stegVelger/steg/steg3/Steg3.tsx @@ -65,7 +65,7 @@ const Steg3 = ({ loadingBestilling }: { loadingBestilling: boolean }) => { formMethods.setValue('environments', alleredeValgtMiljoe()) } else if (erQ1EllerQ2MiljoeAvhengig(formMethods.getValues())) { formMethods.setValue('environments', ['q1', 'q2']) - } else if (formMethods.getValues()?.sykemelding) { + } else if (formMethods.getValues()?.sykemelding?.detaljertSykemelding) { formMethods.setValue('environments', ['q1']) } else if (!formMethods.getValues()?.environments) { formMethods.setValue('environments', []) diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/SykemeldingTypes.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/SykemeldingTypes.tsx index a05759a545a..acb50c15f62 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/SykemeldingTypes.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/SykemeldingTypes.tsx @@ -6,6 +6,7 @@ export interface SykemeldingForm { export type Sykemelding = { data: Array + ident: any loading: boolean bestillingIdListe: any tilgjengeligMiljoe: any diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/Form.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/Form.tsx index e107607b60c..42fc1774330 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/Form.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/Form.tsx @@ -6,12 +6,15 @@ import React, { useEffect } from 'react' import { useFormContext } from 'react-hook-form' import { DetaljertSykemelding } from '@/components/fagsystem/sykdom/form/partials/DetaljertSykemelding' import { useDollyFasteDataOrganisasjoner } from '@/utils/hooks/useDollyOrganisasjoner' +import { NySykemelding } from '@/components/fagsystem/sykdom/form/partials/NySykemelding' -export const sykdomAttributt = 'sykemelding' +export const sykemeldingAttributt = 'sykemelding.detaljertSykemelding' +export const nySykemeldingAttributt = 'sykemelding.nySykemelding' const SykdomForm = () => { const formMethods = useFormContext() - const detaljertSykemelding = formMethods.watch(`${sykdomAttributt}.detaljertSykemelding`) + const detaljertSykemelding = formMethods.watch(sykemeldingAttributt) + const nySykemelding = formMethods.watch(nySykemeldingAttributt) const { organisasjoner } = useDollyFasteDataOrganisasjoner(true) @@ -20,11 +23,8 @@ const SykdomForm = () => { const valgtOrg = organisasjoner?.find( (org) => org.orgnummer === detaljertSykemelding.mottaker.orgNr, ) - formMethods.setValue( - `${sykdomAttributt}.detaljertSykemelding.arbeidsgiver.navn`, - valgtOrg?.navn, - ) - formMethods.setValue(`${sykdomAttributt}.detaljertSykemelding.mottaker`, { + formMethods.setValue(`${sykemeldingAttributt}.arbeidsgiver.navn`, valgtOrg?.navn) + formMethods.setValue(`${sykemeldingAttributt}.mottaker`, { navn: valgtOrg?.navn || null, orgNr: valgtOrg?.orgnummer || null, adresse: { @@ -34,20 +34,24 @@ const SykdomForm = () => { postnummer: valgtOrg?.forretningsAdresse?.postnr || null, }, }) - formMethods.trigger(`${sykdomAttributt}.detaljertSykemelding`) + formMethods.trigger(sykemeldingAttributt) } }, [organisasjoner]) return ( // @ts-ignore - + - + {detaljertSykemelding && } + {nySykemelding && } ) diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/initialValues.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/initialValues.tsx index f0aefa69994..1e38a79df0c 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/initialValues.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/initialValues.tsx @@ -1,65 +1,72 @@ import { Diagnose } from '@/components/fagsystem/sykdom/SykemeldingTypes' -import { addDays } from 'date-fns' +import { addDays, addWeeks } from 'date-fns' import { getRandomValue } from '@/components/fagsystem/utils' import { SelectOptionsGyldigeDiagnoser } from '@/components/fagsystem/sykdom/form/partials/SelectOptionsDiagnoser' const randomDiagnose = getRandomValue(SelectOptionsGyldigeDiagnoser()) -export const initialValuesDetaljertSykemelding = { - detaljertSykemelding: { - arbeidsgiver: { - navn: '', - stillingsprosent: 100, - yrkesbetegnelse: '', - }, - biDiagnoser: [] as Array, - detaljer: { - arbeidsforEtterEndtPeriode: false, - beskrivHensynArbeidsplassen: '', - tiltakArbeidsplass: '', - tiltakNav: '', - }, - hovedDiagnose: { - diagnose: randomDiagnose?.diagnoseNavn || '', - diagnosekode: randomDiagnose?.value || '', - system: randomDiagnose ? '2.16.578.1.12.4.1.1.7170' : '', - }, - helsepersonell: { - etternavn: '', - fornavn: '', - hprId: '', - ident: '', - mellomnavn: '', - samhandlerType: '', +export const initialValuesNySykemelding = { + aktivitet: [ + { + fom: new Date(), + tom: addWeeks(new Date(), 2), }, - manglendeTilretteleggingPaaArbeidsplassen: false, - mottaker: { - navn: '', - orgNr: null, - adresse: { - by: '', - gate: '', - land: '', - postnummer: '', - }, + ], +} + +export const initialValuesDetaljertSykemelding = { + arbeidsgiver: { + navn: '', + stillingsprosent: 100, + yrkesbetegnelse: '', + }, + biDiagnoser: [] as Array, + detaljer: { + arbeidsforEtterEndtPeriode: false, + beskrivHensynArbeidsplassen: '', + tiltakArbeidsplass: '', + tiltakNav: '', + }, + hovedDiagnose: { + diagnose: randomDiagnose?.diagnoseNavn || '', + diagnosekode: randomDiagnose?.value || '', + system: randomDiagnose ? '2.16.578.1.12.4.1.1.7170' : '', + }, + helsepersonell: { + etternavn: '', + fornavn: '', + hprId: '', + ident: '', + mellomnavn: '', + samhandlerType: '', + }, + manglendeTilretteleggingPaaArbeidsplassen: false, + mottaker: { + navn: '', + orgNr: null, + adresse: { + by: '', + gate: '', + land: '', + postnummer: '', }, - perioder: [ - { - aktivitet: { - aktivitet: null as unknown as string, - behandlingsdager: 0, - grad: 50, - reisetilskudd: false, - }, - fom: addDays(new Date(), -7), - tom: addDays(new Date(), -1), + }, + perioder: [ + { + aktivitet: { + aktivitet: null as unknown as string, + behandlingsdager: 0, + grad: 50, + reisetilskudd: false, }, - ], - kontaktMedPasient: { - kontaktDato: null, - begrunnelseIkkeKontakt: 'Ikke behov for kontakt', + fom: addDays(new Date(), -7), + tom: addDays(new Date(), -1), }, - startDato: new Date(), - umiddelbarBistand: false, + ], + kontaktMedPasient: { + kontaktDato: null, + begrunnelseIkkeKontakt: 'Ikke behov for kontakt', }, + startDato: new Date(), + umiddelbarBistand: false, } diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/NySykemelding.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/NySykemelding.tsx new file mode 100644 index 00000000000..426bb543110 --- /dev/null +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/partials/NySykemelding.tsx @@ -0,0 +1,53 @@ +import { FormDatepicker } from '@/components/ui/form/inputs/datepicker/Datepicker' +import { FormDollyFieldArray } from '@/components/ui/form/fieldArray/DollyFieldArray' +import React from 'react' +import { addDays, addWeeks } from 'date-fns' +import { useFormContext } from 'react-hook-form' + +const initialValuesAktivitet = { + fom: new Date(), + tom: addWeeks(new Date(), 2), +} + +export const NySykemelding = () => { + const formMethods = useFormContext() + + return ( +
+ { + const aktiviteter = formMethods.getValues('sykemelding.nySykemelding.aktivitet') || [] + let lastEntryTom: Date = aktiviteter[aktiviteter?.length - 1]?.tom + ? new Date(aktiviteter[aktiviteter?.length - 1]?.tom) + : new Date() + if (lastEntryTom.getDay() === 5 || lastEntryTom.getDay() === 6) { + // Ny periode kan ikke starte på en lørdag eller søndag, kun påfølgende mandag + lastEntryTom = addDays(lastEntryTom, lastEntryTom.getDay() === 5 ? 2 : 1) + } + const newAktivitet = { + fom: addDays(lastEntryTom, 1), + tom: addWeeks(lastEntryTom, 2), + } + formMethods.setValue('sykemelding.nySykemelding.aktivitet', [ + ...aktiviteter, + newAktivitet, + ]) + }} + > + {(path: string) => ( + <> + + + + )} + +
+ ) +} diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/validation.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/validation.tsx index aa0f01021a6..04d3f046879 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/validation.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/form/validation.tsx @@ -39,10 +39,17 @@ export const validation = { sykemelding: ifPresent( '$sykemelding', Yup.object({ - syntSykemelding: ifPresent( - '$sykemelding.syntSykemelding', + nySykemelding: ifPresent( + '$sykemelding.nySykemelding', Yup.object({ - startDato: requiredDate, + aktivitet: Yup.array() + .min(1, 'Må ha minst én aktivitet') + .of( + Yup.object({ + fom: testDatoFom(requiredDate, 'tom'), + tom: testDatoTom(requiredDate, 'fom'), + }), + ), orgnummer: testHarArbeidsforhold(Yup.string().nullable()), }), ), diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx index 77854991acb..7a4bdfec22a 100644 --- a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/Visning.tsx @@ -10,6 +10,8 @@ import { MiljoTabs } from '@/components/ui/miljoTabs/MiljoTabs' import { useBestilteMiljoer } from '@/utils/hooks/useBestilling' import Loading from '@/components/ui/loading/Loading' import { DollyFieldArray } from '@/components/ui/form/fieldArray/DollyFieldArray' +import { useTsmSykemelding } from '@/utils/hooks/useSykemelding' +import { NySykemeldingVisning } from '@/components/fagsystem/sykdom/visning/partials/NySykemeldingVisning' export const sjekkManglerSykemeldingData = (sykemeldingData) => { return ( @@ -33,11 +35,13 @@ const VisningAvBestilling = ({ bestillinger }) => { const syntSykemelding = _.get(bestilling, 'data.sykemelding.syntSykemelding') const detaljertSykemelding = _.get(bestilling, 'data.sykemelding.detaljertSykemelding') - return syntSykemelding ? ( - - ) : detaljertSykemelding ? ( - - ) : null + if (syntSykemelding) { + return + } else if (detaljertSykemelding) { + return + } else { + return null + } } }) } @@ -79,31 +83,34 @@ const Visning = ({ data }) => { export const SykemeldingVisning = ({ data, + ident, loading, bestillingIdListe, tilgjengeligMiljoe, bestillinger, }: Sykemelding) => { const { bestilteMiljoer } = useBestilteMiljoer(bestillingIdListe, 'SYKEMELDING') + const { sykemeldinger, loading: nySykemeldingLoading } = useTsmSykemelding(ident?.ident) - if (loading) { + if (loading || nySykemeldingLoading) { return } - if (!data && !bestillinger) { + if (!data && !bestillinger && sykemeldinger?.length === 0) { return null } const manglerFagsystemData = - sjekkManglerSykemeldingData(data) && sjekkManglerSykemeldingBestilling(bestillinger) + sjekkManglerSykemeldingData(data) && + sjekkManglerSykemeldingBestilling(bestillinger) && + sykemeldinger?.length === 0 const miljoerMedData = data?.map((miljoData) => miljoData.data && miljoData.miljo) const errorMiljoer = bestilteMiljoer?.filter((miljo) => !miljoerMedData?.includes(miljo)) - const forsteMiljo = data?.find((miljoData) => miljoData?.data)?.miljo const mergeData = () => { - const mergeMiljo = [] + const mergeMiljo: Array<{ data: any[]; miljo: string }> = [] data?.forEach((item: any) => { const indexOfMiljo = mergeMiljo.findIndex((sykemelding) => sykemelding?.miljo === item?.miljo) if (indexOfMiljo >= 0) { @@ -117,30 +124,40 @@ export const SykemeldingVisning = ({ }) return mergeMiljo } - const mergetData = mergeData() + const mergetData = mergeData() const filteredData = tilgjengeligMiljoe && mergetData?.filter((item) => tilgjengeligMiljoe.includes(item.miljo)) + let render: React.ReactNode + + if (manglerFagsystemData) { + render = ( + + Fant ikke sykemelding-data på person + + ) + } else if (sjekkManglerSykemeldingData(data) && sykemeldinger?.length === 0) { + render = + } else if (sykemeldinger?.length > 0) { + render = + } else { + render = ( + + + + ) + } + return (
- {manglerFagsystemData ? ( - - Fant ikke sykemelding-data på person - - ) : sjekkManglerSykemeldingData(data) ? ( - - ) : ( - - - - )} + {render}
) } diff --git a/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/NySykemeldingVisning.tsx b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/NySykemeldingVisning.tsx new file mode 100644 index 00000000000..e9c09e986ee --- /dev/null +++ b/apps/dolly-frontend/src/main/js/src/components/fagsystem/sykdom/visning/partials/NySykemeldingVisning.tsx @@ -0,0 +1,37 @@ +import * as React from 'react' +import { formatDate } from '@/utils/DataFormatter' +import { TitleValue } from '@/components/ui/titleValue/TitleValue' +import { useTsmSykemelding } from '@/utils/hooks/useSykemelding' +import { DollyFieldArray } from '@/components/ui/form/fieldArray/DollyFieldArray' +import Loading from '@/components/ui/loading/Loading' + +export const NySykemeldingVisning = ({ ident }: any) => { + const { sykemeldinger, error, loading } = useTsmSykemelding(ident?.ident) + + const renderAktivitet = (sykemelding: any, idx: number) => ( + + {(aktivitet: any, idx: number) => ( +
+ + +
+ )} +
+ ) + + if (loading) { + return + } + if (error) { + return
Feil ved henting av sykemeldinger
+ } + + return ( + +

Perioder

+
+
{renderAktivitet(sykemeldinger?.[0], 0)}
+
+
+ ) +} diff --git a/apps/dolly-frontend/src/main/js/src/components/miljoVelger/MiljoeInfo.tsx b/apps/dolly-frontend/src/main/js/src/components/miljoVelger/MiljoeInfo.tsx index 84c11ce6629..81ca307bd0a 100644 --- a/apps/dolly-frontend/src/main/js/src/components/miljoVelger/MiljoeInfo.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/miljoVelger/MiljoeInfo.tsx @@ -18,7 +18,13 @@ export const MiljoeInfo = ({ bestillingsdata, dollyEnvironments }) => { const { instEnvironments, loading: loadingInst, error: errorInst } = useInstEnvironments() const { dokarkivEnvironments, loading: loadingDokarkiv } = useDokarkivEnvironments() const { instdata, arenaforvalter, pensjonforvalter, sykemelding, dokarkiv } = bestillingsdata - if (!instdata && !arenaforvalter && !pensjonforvalter && !sykemelding && !dokarkiv) { + if ( + !instdata && + !arenaforvalter && + !pensjonforvalter && + !sykemelding?.detaljertSykemelding && + !dokarkiv + ) { return null } @@ -89,7 +95,7 @@ export const MiljoeInfo = ({ bestillingsdata, dollyEnvironments }) => { )} - {sykemelding &&
  • Sykemelding: q1
  • } + {sykemelding?.detaljertSykemelding &&
  • Sykemelding: q1
  • } {pensjonforvalter && bestillingsdata?.environments?.includes('q4') && ( diff --git a/apps/dolly-frontend/src/main/js/src/components/ui/form/fieldArray/DollyFieldArray.tsx b/apps/dolly-frontend/src/main/js/src/components/ui/form/fieldArray/DollyFieldArray.tsx index 1bede74b4b8..a5a19cbe2fa 100644 --- a/apps/dolly-frontend/src/main/js/src/components/ui/form/fieldArray/DollyFieldArray.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/ui/form/fieldArray/DollyFieldArray.tsx @@ -221,14 +221,14 @@ export const FormDollyFieldArray = ({ title = null, header, newEntry, - hjelpetekst = null, + hjelpetekst = null as unknown as string, nested = false, children, disabled = false, canBeEmpty = true, tag = null, isOrganisasjon = false, - handleNewEntry = null, + handleNewEntry = null as any, handleRemoveEntry = null, maxEntries = null as unknown as number, whiteBackground = false, diff --git a/apps/dolly-frontend/src/main/js/src/components/ui/form/formUtils.tsx b/apps/dolly-frontend/src/main/js/src/components/ui/form/formUtils.tsx index 3d746b7942c..a00819c6b87 100644 --- a/apps/dolly-frontend/src/main/js/src/components/ui/form/formUtils.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/ui/form/formUtils.tsx @@ -4,6 +4,10 @@ import { isDate } from 'date-fns' import { useFormContext } from 'react-hook-form' import { sigrunstubPensjonsgivendeAttributt } from '@/components/fagsystem/sigrunstubPensjonsgivende/form/Form' import { sigrunstubSummertSkattegrunnlagAttributt } from '@/components/fagsystem/sigrunstubSummertSkattegrunnlag/form/Form' +import { + nySykemeldingAttributt, + sykemeldingAttributt, +} from '@/components/fagsystem/sykdom/form/Form' export const panelError = (attributtPath) => { const { @@ -98,7 +102,8 @@ const getValgteAttributter = (values) => { 'pensjonforvalter.uforetrygd', 'pensjonforvalter.afpOffentlig', 'arenaforvalter', - 'sykemelding', + sykemeldingAttributt, + nySykemeldingAttributt, 'yrkesskader', 'brregstub', 'instdata', diff --git a/apps/dolly-frontend/src/main/js/src/components/ui/form/inputs/datepicker/Datepicker.tsx b/apps/dolly-frontend/src/main/js/src/components/ui/form/inputs/datepicker/Datepicker.tsx index 7d58df60ac4..ca5a357aa67 100644 --- a/apps/dolly-frontend/src/main/js/src/components/ui/form/inputs/datepicker/Datepicker.tsx +++ b/apps/dolly-frontend/src/main/js/src/components/ui/form/inputs/datepicker/Datepicker.tsx @@ -45,6 +45,7 @@ export const DollyDatepicker = ({ fromDate: minDate, toDate: maxDate, disabled: excludeDates, + defaultSelected: convertInputToDate(existingValue)?.toDate?.() ?? undefined, }) useEffect(() => { diff --git a/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx b/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx index ecdbd3bd872..0bb5b3ff83a 100644 --- a/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx +++ b/apps/dolly-frontend/src/main/js/src/pages/gruppe/PersonVisning/PersonVisning.tsx @@ -579,6 +579,7 @@ export default ({ harArenaBestilling={harArenaBestilling(bestillingerFagsystemer)} /> { + const { data, isLoading, error } = useSWR>( + ['/testnav-sykemelding-proxy/tsm/api/sykmelding/ident', ident], + ([url, _ident]) => + fetcher(url, { + 'X-ident': ident, + }), + ) + + return { + sykemeldinger: data?.sykmeldinger || [], + loading: isLoading, + error: error, + } +} + export const useSykemeldingValidering = (values: any) => { const { data, error, trigger } = useSWRMutation>( '/testnav-sykemelding-api/api/v1/sykemeldinger/validate', diff --git a/apps/dolly-frontend/src/main/resources/application-local.yml b/apps/dolly-frontend/src/main/resources/application-local.yml index 3e249f169a6..beb4efde376 100644 --- a/apps/dolly-frontend/src/main/resources/application-local.yml +++ b/apps/dolly-frontend/src/main/resources/application-local.yml @@ -91,6 +91,8 @@ consumers: url: https://testnav-sykemelding-api-dev.intern.dev.nav.no testnav-arbeidssoekerregisteret-proxy: url: https://testnav-arbeidssoekerregisteret-proxy.intern.dev.nav.no + testnav-sykemelding-proxy: + url: https://testnav-sykemelding-proxy.intern.dev.nav.no testnav-api-oversikt-service: url: https://testnav-oversikt-service.intern.dev.nav.no testnav-nom-proxy: diff --git a/apps/dolly-frontend/src/main/resources/application.yml b/apps/dolly-frontend/src/main/resources/application.yml index 0c89e3d80db..ed3b44f6eb4 100644 --- a/apps/dolly-frontend/src/main/resources/application.yml +++ b/apps/dolly-frontend/src/main/resources/application.yml @@ -198,6 +198,11 @@ consumers: namespace: dolly url: http://testnav-arbeidsplassencv-proxy.dolly.svc.cluster.local cluster: dev-gcp + testnav-sykemelding-proxy: + name: testnav-sykemelding-proxy + namespace: dolly + url: http://testnav-arbeidsplassencv-proxy.dolly.svc.cluster.local + cluster: dev-gcp testnav-histark-proxy: name: testnav-histark-proxy namespace: dolly diff --git a/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/consumer/command/SyfosmreglerPostValidateCommand.java b/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/consumer/command/SyfosmreglerPostValidateCommand.java index cc0ba877c43..0cb7d5a08c6 100644 --- a/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/consumer/command/SyfosmreglerPostValidateCommand.java +++ b/apps/sykemelding-api/src/main/java/no/nav/registre/testnorge/sykemelding/consumer/command/SyfosmreglerPostValidateCommand.java @@ -16,7 +16,7 @@ @RequiredArgsConstructor public class SyfosmreglerPostValidateCommand implements Callable> { - private static final String SYFOSMREGLER_VALIDATE_URL = "/v1/rules/validate"; + private static final String SYFOSMREGLER_VALIDATE_URL = "/syfosmregler/v1/rules/validate"; private final WebClient webClient; private final ReceivedSykemeldingDTO receivedSykemelding; diff --git a/proxies/sykemelding-proxy/config.yml b/proxies/sykemelding-proxy/config.yml index 76b1e3db902..0ae7c75aac3 100644 --- a/proxies/sykemelding-proxy/config.yml +++ b/proxies/sykemelding-proxy/config.yml @@ -36,19 +36,19 @@ spec: rules: - application: team-dolly-lokal-app - application: dolly-frontend - - application: dolly-idporten - application: dolly-frontend-dev + - application: dolly-idporten - application: dolly-backend - application: dolly-backend-dev - application: testnav-sykemelding-api - application: testnav-sykemelding-api-dev - application: testnav-oversikt-frontend - - application: testnav-sykemelding-api-dev - - application: testnav-sykemelding-api outbound: rules: - application: syfosmregler namespace: teamsykmelding + - application: tsm-input-dolly + namespace: tsm - application: logging namespace: nais-system liveness: diff --git a/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/Consumers.java b/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/Consumers.java index ebbf535055a..c6138b51f2e 100644 --- a/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/Consumers.java +++ b/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/Consumers.java @@ -3,11 +3,10 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import no.nav.testnav.libs.securitycore.domain.ServerProperties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; -import no.nav.testnav.libs.securitycore.domain.ServerProperties; - import static lombok.AccessLevel.PACKAGE; @Configuration @@ -17,6 +16,7 @@ @Setter(PACKAGE) public class Consumers { - private ServerProperties sykemelding; + private ServerProperties syfosmregler; + private ServerProperties tsmInputDolly; } diff --git a/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/RouteLocatorConfig.java b/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/RouteLocatorConfig.java index 824d6bbc302..b6b6301b8d8 100644 --- a/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/RouteLocatorConfig.java +++ b/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/RouteLocatorConfig.java @@ -5,6 +5,7 @@ import no.nav.testnav.libs.reactivesecurity.config.SecureOAuth2ServerToServerConfiguration; import no.nav.testnav.libs.reactivesecurity.exchange.azuread.AzureTrygdeetatenTokenService; import no.nav.testnav.libs.securitycore.domain.AccessToken; +import no.nav.testnav.libs.securitycore.domain.ServerProperties; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; @@ -22,29 +23,31 @@ public class RouteLocatorConfig { @Bean public RouteLocator customRouteLocator( RouteLocatorBuilder builder, - Consumers consumers, - GatewayFilter authenticationFilter - ) { + AzureTrygdeetatenTokenService tokenService, + Consumers consumers) { + return builder .routes() .route(spec -> spec - .path("/**") - .and() - .not(not -> not.path("/internal/**")) - .filters(f -> f.filter(authenticationFilter)) - .uri(consumers.getSykemelding().getUrl())) + .path("/syfosmregler/**") + .filters(f -> f + .stripPrefix(1) + .filter(authFilter(tokenService, consumers.getSyfosmregler())) + ) + .uri(consumers.getSyfosmregler().getUrl())) + .route(spec -> spec + .path("/tsm/**") + .filters(f -> f + .stripPrefix(1) + .filter(authFilter(tokenService, consumers.getTsmInputDolly())) + ) + .uri(consumers.getTsmInputDolly().getUrl())) .build(); } - @Bean - GatewayFilter getAuthenticationFilter( - AzureTrygdeetatenTokenService tokenService, - Consumers consumers - ) { + private GatewayFilter authFilter(AzureTrygdeetatenTokenService tokenService, ServerProperties serverProperties) { return AddAuthenticationRequestGatewayFilterFactory - .bearerAuthenticationHeaderFilter(() -> tokenService - .exchange(consumers.getSykemelding()) - .map(AccessToken::getTokenValue)); + .bearerAuthenticationHeaderFilter(() -> + tokenService.exchange(serverProperties).map(AccessToken::getTokenValue)); } - -} +} \ No newline at end of file diff --git a/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/SykemeldingProxyApplicationStarter.java b/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/SykemeldingProxyApplicationStarter.java index 3268d54611a..e9243d5ba70 100644 --- a/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/SykemeldingProxyApplicationStarter.java +++ b/proxies/sykemelding-proxy/src/main/java/no/nav/testnav/proxies/sykemeldingproxy/SykemeldingProxyApplicationStarter.java @@ -14,4 +14,4 @@ public static void main(String[] args) { .initializers(new NaisEnvironmentApplicationContextInitializer()) .run(args); } -} +} \ No newline at end of file diff --git a/proxies/sykemelding-proxy/src/main/resources/application.yml b/proxies/sykemelding-proxy/src/main/resources/application.yml index 18452389118..4f41bbab17e 100644 --- a/proxies/sykemelding-proxy/src/main/resources/application.yml +++ b/proxies/sykemelding-proxy/src/main/resources/application.yml @@ -19,8 +19,13 @@ spring: response-timeout: 30s consumers: - sykemelding: + syfosmregler: name: syfosmregler namespace: teamsykmelding url: http://syfosmregler.teamsykmelding.svc.cluster.local cluster: dev-gcp + tsm-input-dolly: + name: tsm-input-dolly + namespace: tsm + url: http://tsm-input-dolly.tsm.svc.cluster.local + cluster: dev-gcp diff --git a/proxies/sykemelding-proxy/src/test/java/no/nav/testnav/proxies/sykemeldingproxy/RouteLocatorConfigTest.java b/proxies/sykemelding-proxy/src/test/java/no/nav/testnav/proxies/sykemeldingproxy/RouteLocatorConfigTest.java index 836e34afe61..0c2d47fd5fd 100644 --- a/proxies/sykemelding-proxy/src/test/java/no/nav/testnav/proxies/sykemeldingproxy/RouteLocatorConfigTest.java +++ b/proxies/sykemelding-proxy/src/test/java/no/nav/testnav/proxies/sykemeldingproxy/RouteLocatorConfigTest.java @@ -2,60 +2,83 @@ import no.nav.dolly.libs.test.DollyApplicationContextTest; import no.nav.dolly.libs.test.DollySpringBootTest; +import no.nav.testnav.libs.reactivesecurity.exchange.TokenExchange; +import no.nav.testnav.libs.reactivesecurity.exchange.azuread.AzureTrygdeetatenTokenService; +import no.nav.testnav.libs.securitycore.domain.AccessToken; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; -import org.springframework.boot.test.context.TestConfiguration; import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock; -import org.springframework.cloud.gateway.filter.GatewayFilter; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Primary; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import reactor.core.publisher.Mono; -import static com.github.tomakehurst.wiremock.client.WireMock.*; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.mockOAuth2Login; -@DollySpringBootTest( - properties = "consumers.sykemelding.url=http://localhost:${wiremock.server.port}" -) +@DollySpringBootTest() +@ActiveProfiles("test") @AutoConfigureWireMock(port = 0) -@AutoConfigureWebTestClient(timeout = "PT1M") +@AutoConfigureWebTestClient(timeout = "PT30S") class RouteLocatorConfigTest extends DollyApplicationContextTest { - @TestConfiguration - static class TestAuthenticationConfig { + @MockitoBean + AzureTrygdeetatenTokenService tokenService; - @Primary - @Bean - GatewayFilter getNoopAuthenticationFilter() { - return (exchange, chain) -> chain.filter(exchange); - - } + @MockitoBean + TokenExchange tokenExchange; + @BeforeEach + void setupMocks() { + when(tokenService.exchange(any())) + .thenReturn(Mono.just(new AccessToken("dummy-token"))); } @Test - void shouldRouteToStub() { - - stubFor( - get(urlEqualTo("/testing/route")) - .willReturn( - aResponse() - .withStatus(HttpStatus.OK.value()) - .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_VALUE) - .withBody("Some content") - ) - ); + void shouldRouteSyfosmreglerAndStripFirstPathSegment() { + stubFor(get(urlEqualTo("/api/v1/validate")) + .willReturn(aResponse() + .withStatus(200) + .withHeader("Content-Type", "application/json") + .withBody("{\"result\":\"valid\"}"))); webTestClient .mutateWith(mockOAuth2Login()) - .get().uri("/testing/route") + .get() + .uri("/syfosmregler/api/v1/validate") .exchange() .expectStatus().isOk() - .expectHeader().contentType(MediaType.TEXT_PLAIN_VALUE) - .expectBody(String.class).isEqualTo("Some content"); + .expectHeader().contentType(MediaType.APPLICATION_JSON) + .expectBody().json("{\"result\":\"valid\"}"); + verify(1, getRequestedFor(urlEqualTo("/api/v1/validate"))); } + @Test + void shouldRouteTsmAndStripPrefix() { + stubFor(get(urlEqualTo("/api/v1/sykmelding")) + .willReturn(aResponse() + .withStatus(200) + .withHeader("Content-Type", "application/json") + .withBody("{\"status\":\"ok\"}"))); + + webTestClient + .mutateWith(mockOAuth2Login()) + .get() + .uri("/tsm/api/v1/sykmelding") + .exchange() + .expectStatus().isOk() + .expectHeader().contentType(MediaType.APPLICATION_JSON) + .expectBody().json("{\"status\":\"ok\"}"); + + verify(1, getRequestedFor(urlEqualTo("/api/v1/sykmelding"))); + } } diff --git a/proxies/sykemelding-proxy/src/test/resources/application-test.yml b/proxies/sykemelding-proxy/src/test/resources/application-test.yml index e69de29bb2d..ca65b8c9e5e 100644 --- a/proxies/sykemelding-proxy/src/test/resources/application-test.yml +++ b/proxies/sykemelding-proxy/src/test/resources/application-test.yml @@ -0,0 +1,14 @@ +spring: + main: + allow-bean-definition-overriding: true + security: + oauth2: + resourceserver: + jwt: + jwk-set-uri: http://invalid-local/jwks + +consumers: + syfosmregler: + url: http://localhost:${wiremock.server.port} + tsm-input-dolly: + url: http://localhost:${wiremock.server.port}