public suspend fun searchPackages()

in http/client/src/commonMain/kotlin/org/jetbrains/packagesearch/api/v3/http/PackageSearchApiClient.kt [331:368]


    public suspend fun searchPackages(
        request: SearchPackagesRequest,
        requestBuilder: (HttpRequestBuilder.() -> Unit)? = null,
    ): List<ApiPackage> {

        val searchCache = searchCacheCollection.await()

        searchCache.find(selector = SearchCacheEntry::key.name, value = request)
            .firstOrNull()
            ?.takeIf { isOffline || !it.isExpired(cacheDuration) }
            ?.also { return it.value }

        // cache result not found or expired or not exhaustive enough

        return defaultRequest<_, List<ApiPackage>>(
            method = HttpMethod.Post,
            url = endpoints.searchPackages,
            body = request,
            requestBuilder = requestBuilder,
        ).also { newPackages ->
            searchCache.updateWhere(
                fieldSelector = SearchCacheEntry::key.name,
                fieldValue = request,
                upsert = true,
                update = SearchCacheEntry(request, newPackages)
            )
            val packagesCache = packagesCacheCollection.await()
            newPackages.forEach {
                packagesCache.updateWhere(
                    fieldSelector = PackageCacheEntry::key.name,
                    fieldValue = it.idHash,
                    upsert = true,
                    update = PackageCacheEntry(it.idHash, it)
                )
            }
        }

    }