override fun searchWithThrottle()

in integrations/maven/src/main/kotlin/io/klibs/integration/maven/search/impl/SonatypeDiscoverSearchClient.kt [33:78]


    override fun searchWithThrottle(
        page: Int,
        query: Query,
        lastUpdatedSince: Instant
    ): MavenSearchResponse {
        val searchTerm = query.value

        val payloadObj = BrowseRequest(
            page = page,
            size = DEFAULT_PAGE_SIZE,
            searchTerm = searchTerm,
            sortField = "publishedDate",
            sortDirection = "desc",
            filter = emptyList()
        )

        val responseBody = try {
            rateLimiter.withRateLimitBlocking {
                val response = restClient.post()
                    .uri(properties.central.discoveryEndpoint)
                    .contentType(MediaType.APPLICATION_JSON)
                    .accept(MediaType.APPLICATION_JSON)
                    .body(payloadObj)
                    .retrieve()
                    .toEntity(String::class.java)
                if (!response.statusCode.is2xxSuccessful) {
                    throw IllegalStateException("Unexpected response ${response.statusCode.value()} from Sonatype discovery API: ${response.body}")
                }
                response.body ?: ""
            }
        } catch (e: Exception) {
            logger.error("Failed to query Sonatype Discovery API", e)
            throw e
        }

        val parsed = objectMapper.readValue(responseBody, BrowseResponse::class.java)
        val artifacts = parsed.components
            .mapNotNull { it.toArtifactData() }
            .filter { it.releasedAt?.isAfter(lastUpdatedSince) == true }

        return MavenSearchResponse(
            totalHits = -1,
            currentHits = artifacts.size,
            page = artifacts
        )
    }