api-client/packages/hoppscotch-desktop/plugin-workspace/tauri-plugin-relay
Shreyas ecf7d2507a
feat(relay): control redirect follow (#5508)
Add per-domain toggle to disable automatic HTTP redirect following in
 the Native and Agent interceptors. When disabled, requests return the
 redirect response (status code, headers, body) without following the
 Location header.

 Previously HTTP redirects were always followed (on browser, can't do
 much about that, see
 https://fetch.spec.whatwg.org/#atomic-http-redirect-handling) without
 option to inspect the redirect response itself. This prevented
 developers from accessing redirect metadata needed when testing OAuth
 flows (PKCE where intermediate responses contain authorization tokens),
 authentication endpoints that return codes in Location headers with 302
 status, and debugging API redirect chains. But on the desktop app,
 redirects were just never followed, creating the opposite effect.

 The browser's fetch API applies atomic HTTP redirect handling per spec,
 making it impossible to intercept redirects and inspect their responses.
 The Native and Agent interceptors use curl and native HTTP clients
 respectively, both supporting redirect control, making this feature
 viable for these specific interceptors. (Proxyscotch tbd).
2025-10-27 17:41:58 +05:30
..
dist-js feat(relay): control redirect follow (#5508) 2025-10-27 17:41:58 +05:30
guest-js feat(relay): control redirect follow (#5508) 2025-10-27 17:41:58 +05:30
permissions feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
src feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
.envrc feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
.gitignore feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
build.rs feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
Cargo.lock feat(relay): control redirect follow (#5508) 2025-10-27 17:41:58 +05:30
Cargo.toml feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
devenv.lock feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
devenv.nix feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
devenv.yaml feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
LICENSE.md feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
package.json chore: security patch for the dependency chain (#5487) 2025-10-22 18:48:20 +05:30
pnpm-lock.yaml fix(desktop): rebase with appload mirror and hash (#5351) 2025-08-27 09:52:49 +05:30
README.md feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
rollup.config.js feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30
tsconfig.json feat: platform independent core and the new desktop app (#4684) 2025-02-28 00:01:25 +05:30

Tauri Plugin: Relay

A HTTP request-response relay plugin for Tauri apps, providing advanced request handling capabilities including custom headers, certificates, proxies, and local system integration.

GitHub License MIT Tauri 2.0 Rust

Features

  • 🦀 Blazingly fast!
  • HTTP client built on libcurl
  • Security with SSL/TLS certificate management
  • Proxy support
  • Multiple authentication methods (Basic, Bearer, Digest)
  • Content handling (JSON, Form Data, Binary)
  • Async request execution with cancellation support

Installation

Important

This plugin requires Tauri 2.0 or later.

Add the plugin to your project by installing directly from GitHub:

[dependencies]
tauri-plugin-relay = { git = "https://github.com/CuriousCorrelation/tauri-plugin-relay" }
"dependencies": {
  "@CuriousCorrelation/plugin-relay": "github:CuriousCorrelation/tauri-plugin-relay"
}

Quick Start

Rust

fn main() {
    tauri::Builder::default()
        .plugin(tauri_plugin_relay::init())
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

JavaScript/TypeScript

import { execute, cancel } from '@CuriousCorrelation/plugin-relay'

// Execute a request
const result = await execute({
  id: 1,
  url: "https://api.example.com/data",
  method: "POST",
  headers: {
    "Content-Type": ["application/json"]
  },
  content: {
    kind: "json",
    content: { hello: "world" }
  }
})

// Cancel a request
await cancel(1)

Content Types

The plugin supports multiple content types for requests:

Type Description
text Plain text content
json JSON data with automatic parsing
form Multipart form data with file support
binary Raw binary data with optional MIME type
urlencoded URL-encoded form data

Authentication

Built-in support for various authentication methods:

Method Description
basic Basic HTTP authentication
bearer Bearer token authentication
digest Digest authentication (MD5, SHA-256, SHA-512)

Security

The plugin provides extensive security options:

  • Client certificate support (PEM, PKCS#12)
  • Custom CA certificates
  • Certificate validation control
  • Host verification settings

Development

Requirements:

  • Rust 1.77.2 or later
  • Node.js 18 or later
  • pnpm
  • libcurl with SSL support

Error Handling

The plugin provides detailed error information for:

  • Network failures
  • Certificate issues
  • Timeout scenarios
  • Parse errors
  • Request cancellations

License

Code: (c) 2024 - CuriousCorrelation

MIT or MIT/Apache 2.0 where applicable.