summaryrefslogtreecommitdiff
path: root/cli/tools/registry/mod.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2024-07-18 00:37:31 +0100
committerGitHub <noreply@github.com>2024-07-18 01:37:31 +0200
commit7b33623b1d70803b43e511a58666a73dd0b2ed67 (patch)
tree2d900f2be67caebf6a886d6e06a340b095e636cc /cli/tools/registry/mod.rs
parentf4b9d8586215fc07c28998e5d896fefa876139b7 (diff)
Reland "refactor(fetch): reimplement fetch with hyper instead of reqwest" (#24593)
Originally landed in https://github.com/denoland/deno/commit/f6fd6619e708a515831f707438368d81b0c9aa56. Reverted in https://github.com/denoland/deno/pull/24574. This reland contains a fix that sends "Accept: */*" header for calls made from "FileFetcher". Absence of this header made downloading source code from JSR broken. This is tested by ensuring this header is present in the test server that servers JSR packages. --------- Co-authored-by: Sean McArthur <sean@seanmonstar.com>
Diffstat (limited to 'cli/tools/registry/mod.rs')
-rw-r--r--cli/tools/registry/mod.rs69
1 files changed, 43 insertions, 26 deletions
diff --git a/cli/tools/registry/mod.rs b/cli/tools/registry/mod.rs
index 8e4d97897..a22384a52 100644
--- a/cli/tools/registry/mod.rs
+++ b/cli/tools/registry/mod.rs
@@ -23,8 +23,8 @@ use deno_core::futures::StreamExt;
use deno_core::serde_json;
use deno_core::serde_json::json;
use deno_core::serde_json::Value;
-use deno_runtime::deno_fetch::reqwest;
use deno_terminal::colors;
+use http_body_util::BodyExt;
use lsp_types::Url;
use serde::Deserialize;
use serde::Serialize;
@@ -539,11 +539,13 @@ async fn get_auth_headers(
let challenge = BASE64_STANDARD.encode(sha2::Sha256::digest(&verifier));
let response = client
- .post(format!("{}authorizations", registry_url))
- .json(&serde_json::json!({
- "challenge": challenge,
- "permissions": permissions,
- }))
+ .post_json(
+ format!("{}authorizations", registry_url).parse()?,
+ &serde_json::json!({
+ "challenge": challenge,
+ "permissions": permissions,
+ }),
+ )?
.send()
.await
.context("Failed to create interactive authorization")?;
@@ -573,11 +575,13 @@ async fn get_auth_headers(
loop {
tokio::time::sleep(interval).await;
let response = client
- .post(format!("{}authorizations/exchange", registry_url))
- .json(&serde_json::json!({
- "exchangeToken": auth.exchange_token,
- "verifier": verifier,
- }))
+ .post_json(
+ format!("{}authorizations/exchange", registry_url).parse()?,
+ &serde_json::json!({
+ "exchangeToken": auth.exchange_token,
+ "verifier": verifier,
+ }),
+ )?
.send()
.await
.context("Failed to exchange authorization")?;
@@ -634,15 +638,20 @@ async fn get_auth_headers(
);
let response = client
- .get(url)
- .bearer_auth(&oidc_config.token)
+ .get(url.parse()?)?
+ .header(
+ http::header::AUTHORIZATION,
+ format!("Bearer {}", oidc_config.token).parse()?,
+ )
.send()
.await
.context("Failed to get OIDC token")?;
let status = response.status();
- let text = response.text().await.with_context(|| {
- format!("Failed to get OIDC token: status {}", status)
- })?;
+ let text = crate::http_util::body_to_string(response)
+ .await
+ .with_context(|| {
+ format!("Failed to get OIDC token: status {}", status)
+ })?;
if !status.is_success() {
bail!(
"Failed to get OIDC token: status {}, response: '{}'",
@@ -770,7 +779,7 @@ async fn ensure_scopes_and_packages_exist(
loop {
tokio::time::sleep(std::time::Duration::from_secs(3)).await;
- let response = client.get(&package_api_url).send().await?;
+ let response = client.get(package_api_url.parse()?)?.send().await?;
if response.status() == 200 {
let name = format!("@{}/{}", package.scope, package.package);
log::info!("Package {} created", colors::green(name));
@@ -894,11 +903,19 @@ async fn publish_package(
package.config
);
+ let body = http_body_util::Full::new(package.tarball.bytes.clone())
+ .map_err(|never| match never {})
+ .boxed();
let response = http_client
- .post(url)
- .header(reqwest::header::AUTHORIZATION, authorization)
- .header(reqwest::header::CONTENT_ENCODING, "gzip")
- .body(package.tarball.bytes.clone())
+ .post(url.parse()?, body)?
+ .header(
+ http::header::AUTHORIZATION,
+ authorization.parse().map_err(http::Error::from)?,
+ )
+ .header(
+ http::header::CONTENT_ENCODING,
+ "gzip".parse().map_err(http::Error::from)?,
+ )
.send()
.await?;
@@ -943,7 +960,7 @@ async fn publish_package(
while task.status != "success" && task.status != "failure" {
tokio::time::sleep(interval).await;
let resp = http_client
- .get(format!("{}publish_status/{}", registry_api_url, task.id))
+ .get(format!("{}publish_status/{}", registry_api_url, task.id).parse()?)?
.send()
.await
.with_context(|| {
@@ -992,7 +1009,8 @@ async fn publish_package(
package.scope, package.package, package.version
))?;
- let meta_bytes = http_client.get(meta_url).send().await?.bytes().await?;
+ let resp = http_client.get(meta_url)?.send().await?;
+ let meta_bytes = resp.collect().await?.to_bytes();
if std::env::var("DISABLE_JSR_MANIFEST_VERIFICATION_FOR_TESTING").is_err() {
verify_version_manifest(&meta_bytes, &package)?;
@@ -1023,9 +1041,8 @@ async fn publish_package(
registry_api_url, package.scope, package.package, package.version
);
http_client
- .post(provenance_url)
- .header(reqwest::header::AUTHORIZATION, authorization)
- .json(&json!({ "bundle": bundle }))
+ .post_json(provenance_url.parse()?, &json!({ "bundle": bundle }))?
+ .header(http::header::AUTHORIZATION, authorization.parse()?)
.send()
.await?;
}