httputil

package
v0.3.26 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 15, 2026 License: MIT Imports: 9 Imported by: 0

Documentation

Overview

Package httputil provides shared HTTP helper utilities used across multiple HTTP-facing packages (server, proxy, etc.).

Index

Constants

View Source
const GitHubUserAgent = "awmg/1.0"

GitHubUserAgent is the User-Agent header value sent on all GitHub API requests.

Variables

This section is empty.

Functions

func ApplyGitHubAPIHeaders added in v0.3.1

func ApplyGitHubAPIHeaders(req *http.Request, authHeader string)

ApplyGitHubAPIHeaders sets the standard GitHub API request headers on req. authHeader should be the full Authorization header value (e.g. "token xyz" or "Bearer xyz"). When authHeader is empty no Authorization header is set, which is appropriate when the caller has already decided that no auth is available.

func ComputeRetryAfter added in v0.3.26

func ComputeRetryAfter(resetAt time.Time) int

ComputeRetryAfter returns the number of seconds a client should wait before retrying after a rate-limit response. It accepts the parsed reset time from ParseRateLimitResetHeader. When resetAt is in the future the delay is clamped to [1, 3600] seconds. When resetAt is zero or already in the past a default of 60 seconds is returned.

func DoGitHubGET added in v0.3.17

func DoGitHubGET(ctx context.Context, apiBaseURL, path, authHeader string) (*http.Response, error)

DoGitHubGET sends an authenticated GET request to the GitHub API and returns the response. apiBaseURL is the API root (e.g. "https://api.github.com"), path is the request path (e.g. "/repos/owner/repo"), and authHeader is the full Authorization header value (e.g. "token xyz"). The caller is responsible for closing the response body. Request duration is bounded by whichever happens first: ctx cancellation/deadline or the helper client timeout.

func IsTransientHTTPError added in v0.2.25

func IsTransientHTTPError(statusCode int) bool

IsTransientHTTPError returns true for status codes that indicate a temporary server-side condition (rate-limiting or transient failure) worth retrying.

func ParseRateLimitResetHeader added in v0.2.20

func ParseRateLimitResetHeader(value string) time.Time

ParseRateLimitResetHeader parses the Unix-timestamp value of the X-RateLimit-Reset HTTP header into a time.Time. Returns zero time when the header value is absent or malformed.

See also: parseRateLimitResetFromText in server/rate_limit.go, which parses the same timing information from MCP tool result text bodies instead of HTTP headers.

func WriteErrorResponse added in v0.3.2

func WriteErrorResponse(w http.ResponseWriter, statusCode int, code, message string)

WriteErrorResponse writes a JSON error response with a consistent {"error": code, "message": message} shape. Both the server and proxy packages should use this helper so that API consumers always receive the same error shape.

func WriteJSONResponse

func WriteJSONResponse(w http.ResponseWriter, statusCode int, body interface{})

WriteJSONResponse sets the Content-Type header, writes the status code, and encodes body as JSON. It centralises the three-line pattern used across HTTP handlers.

func WriteReflectResponse added in v0.3.25

func WriteReflectResponse(w http.ResponseWriter, difcComponents difc.DIFCComponents)

WriteReflectResponse writes the DIFC label snapshot JSON response for /reflect endpoints. Both the server and the proxy expose /reflect; sharing this helper ensures the output format evolves consistently as difc.BuildReflectResponse changes.

func WriteSimpleHealthResponse added in v0.3.25

func WriteSimpleHealthResponse(w http.ResponseWriter)

WriteSimpleHealthResponse writes a minimal {"status":"ok"} JSON health response. This is the standard health response shape for endpoints that do not have access to detailed server status (e.g. the proxy), keeping them consistent with each other.

Types

type BaseResponseWriter added in v0.3.14

type BaseResponseWriter struct {
	http.ResponseWriter
	// StatusCode holds the captured HTTP status code. It is set by WriteHeader
	// and, if still zero when Write is first called, defaults to http.StatusOK.
	// Only the first call to WriteHeader or Write sets StatusCode, matching
	// net/http semantics where only the first status sent is effective.
	StatusCode int
	// contains filtered or unexported fields
}

BaseResponseWriter wraps http.ResponseWriter and captures the HTTP response status code. It implements Write (with implicit-200 capture), WriteHeader, and Unwrap so that http.ResponseController callers can access optional interfaces (e.g. http.Flusher, http.Hijacker) on the underlying writer.

Embed BaseResponseWriter in package-specific types to avoid duplicating this status-capture boilerplate.

func (*BaseResponseWriter) Unwrap added in v0.3.14

Unwrap returns the underlying http.ResponseWriter so that callers using http.ResponseController can discover optional interfaces such as http.Flusher or http.Hijacker on the real writer.

func (*BaseResponseWriter) Write added in v0.3.14

func (w *BaseResponseWriter) Write(b []byte) (int, error)

Write captures an implicit 200 status on first call when no prior WriteHeader was issued, then delegates to the underlying writer.

func (*BaseResponseWriter) WriteHeader added in v0.3.14

func (w *BaseResponseWriter) WriteHeader(code int)

WriteHeader captures the status code on first call and forwards it to the underlying writer. Subsequent calls are forwarded but do not update StatusCode, matching net/http semantics where only the first WriteHeader is effective.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL