@Nullable
  @Override
  public Session remove(@NonNull String sessionId) {
    var session = store.asMap().remove(sessionId);
    if (session == null || session.createdAt().plus(timeToLive).isBefore(Instant.now())) {
      return null;
    }
    return session;
  }
@Test
  void remove() {

    var ttl = Duration.ofMinutes(5);
    Cache<String, Session> cache =
        Caffeine.newBuilder()
            .expireAfter(new AfterCreatedExpiry(ttl.toNanos()))
            .maximumSize(1000)
            .build();
    var sut = new CaffeineSessionRepo(cache, ttl);

    var state = "myState";
    var nonce = UUID.randomUUID().toString();
    var redirectUri = URI.create("https://example.com/callback");
    var clientId = "app";

    var id = IdGenerator.generateID();

    var session =
        Session.create()
            .id(id)
            .state(state)
            .nonce(nonce)
            .redirectUri(redirectUri)
            .clientId(clientId)
            .build();
    sut.save(session);

    // when
    var got1 = sut.remove(id);
    var got2 = sut.remove(id);

    // then
    assertNotNull(got1);
    assertEquals(id, got1.id());
    assertEquals(state, got1.state());
    assertEquals(redirectUri, got1.redirectUri());
    assertEquals(clientId, got1.clientId());

    assertNull(got2);
  }