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
)
}