public ParResponse requestPushedUri(
      URI pushedAuthorizationRequestUri, ParBodyBuilder parBodyBuilder) {

    var headers =
        List.of(
            new Header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON),
            new Header(HttpHeaders.CONTENT_TYPE, UrlFormBodyBuilder.MEDIA_TYPE));

    var req = new Request(pushedAuthorizationRequestUri, "POST", headers, parBodyBuilder.build());

    var res = httpClient.call(req);
    if (res.status() != 201) {
      throw HttpExceptions.httpFailBadStatus(
          req.method(), pushedAuthorizationRequestUri, res.status());
    }

    return JsonCodec.readValue(res.body(), ParResponse.class);
  }
@Test
  void requestPushedUri_params(WireMockRuntimeInfo wm) {

    var response =
        """
        {"request_uri":"https://example.com/auth/login","expires_in": 600}
        """
            .getBytes(StandardCharsets.UTF_8);

    var path = "/auth/par";
    stubFor(post(path).willReturn(created().withBody(response)));

    var base = URI.create(wm.getHttpBaseUrl());

    var clientId = "test-client";
    var acrValues = "very-very-high";
    var codeChallenge = "myChallenge";
    var scopes = List.of("email", "openid");

    var body =
        ParBodyBuilder.create()
            .acrValues(acrValues)
            .codeChallenge(codeChallenge)
            .scopes(scopes)
            .clientId(clientId);

    // when
    client.requestPushedUri(base.resolve(path), body);

    // then
    verify(
        postRequestedFor(urlPathEqualTo(path))
            .withRequestBody(
                and(
                    containing("client_id=" + clientId),
                    containing("acr_values=" + acrValues),
                    containing("code_challenge=" + codeChallenge),
                    containing("scope=" + String.join("+", scopes)))));
  }