mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-08-18 01:15:12 +02:00
One 'Executed by' line, first in the timeline
This commit is contained in:
@@ -202,12 +202,6 @@ impl PreparedSend {
|
||||
let _ = cancel_tx.send(true);
|
||||
});
|
||||
|
||||
// The first line of what the proxy adds to the timeline says what did the sending,
|
||||
// so a response's timeline is honest about the hop between the tab and the server.
|
||||
let _ = event_tx.try_send(HttpResponseEvent::Info(format!(
|
||||
"Executed by yaak-send-proxy {}",
|
||||
env!("CARGO_PKG_VERSION")
|
||||
)));
|
||||
if self.timeout_capped {
|
||||
let _ = event_tx.try_send(HttpResponseEvent::Info(format!(
|
||||
"Timeout set to {:?} (this proxy's ceiling)",
|
||||
|
||||
@@ -25,6 +25,24 @@ export function proxySendUrl(): string {
|
||||
return `${proxyBaseUrl()}/v1/http/send`;
|
||||
}
|
||||
|
||||
let identity: Promise<string> | null = null;
|
||||
|
||||
/**
|
||||
* Who does the sending, for the timeline: `yaak-send-proxy 0.1.0 at http://…`.
|
||||
* Asked of `/v1/health` once per page load; if the proxy can't be reached the
|
||||
* URL alone is the answer, and the send itself will say why shortly after.
|
||||
*/
|
||||
export function proxyIdentity(): Promise<string> {
|
||||
identity ??= fetch(`${proxyBaseUrl()}/v1/health`)
|
||||
.then((res) => res.json() as Promise<{ version?: string }>)
|
||||
.then((health) => `yaak-send-proxy ${health.version ?? ""} at ${proxyBaseUrl()}`.replace(" ", " "))
|
||||
.catch(() => {
|
||||
identity = null; // try again next send
|
||||
return `send proxy at ${proxyBaseUrl()}`;
|
||||
});
|
||||
return identity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Yield frames from an NDJSON stream as they arrive. A partial trailing line is
|
||||
* held until its newline comes; anything left when the stream ends is dropped,
|
||||
|
||||
@@ -33,7 +33,7 @@ import type {
|
||||
} from "@yaakapp-internal/models";
|
||||
import type { Frame, SendRequest } from "@yaakapp-internal/send-proxy";
|
||||
import type { WorkerConnection } from "./connection";
|
||||
import { proxyBaseUrl, proxySendUrl, readFrames } from "./proxy";
|
||||
import { proxyIdentity, proxySendUrl, readFrames } from "./proxy";
|
||||
|
||||
/* -------------------------------- shapes --------------------------------- */
|
||||
|
||||
@@ -103,12 +103,12 @@ async function runSend(
|
||||
});
|
||||
await response.patch({ url: prepared.request.url });
|
||||
|
||||
// The first line of the timeline says what did the sending and where. A
|
||||
// request through a proxy shows a different origin to the server than the
|
||||
// user's machine, and this is where that should be visible.
|
||||
const timeline = new TimelineWriter(db, response.id, response.workspaceId);
|
||||
timeline.push([{ type: "info", message: `Executed by ${await proxyIdentity()}` }]);
|
||||
timeline.push(prepared.settingEvents);
|
||||
// Where the bytes actually left from. A request through a proxy shows a
|
||||
// different origin to the server than the user's machine, and the timeline
|
||||
// is where that should be visible.
|
||||
timeline.push([{ type: "setting", name: "proxy", value: proxyBaseUrl() }]);
|
||||
|
||||
const body: SendRequest = {
|
||||
request: prepared.request,
|
||||
|
||||
Reference in New Issue
Block a user