wsrelay

package
v6.3.0 Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2025 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// MessageTypeHTTPReq identifies an HTTP-style request envelope.
	MessageTypeHTTPReq = "http_request"
	// MessageTypeHTTPResp identifies a non-streaming HTTP response envelope.
	MessageTypeHTTPResp = "http_response"
	// MessageTypeStreamStart marks the beginning of a streaming response.
	MessageTypeStreamStart = "stream_start"
	// MessageTypeStreamChunk carries a streaming response chunk.
	MessageTypeStreamChunk = "stream_chunk"
	// MessageTypeStreamEnd marks the completion of a streaming response.
	MessageTypeStreamEnd = "stream_end"
	// MessageTypeError carries an error response.
	MessageTypeError = "error"
	// MessageTypePing represents ping messages from clients.
	MessageTypePing = "ping"
	// MessageTypePong represents pong responses back to clients.
	MessageTypePong = "pong"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type HTTPRequest

type HTTPRequest struct {
	Method  string
	URL     string
	Headers http.Header
	Body    []byte
}

HTTPRequest represents a proxied HTTP request delivered to websocket clients.

type HTTPResponse

type HTTPResponse struct {
	Status  int
	Headers http.Header
	Body    []byte
}

HTTPResponse captures the response relayed back from websocket clients.

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager exposes a websocket endpoint that proxies Gemini requests to connected clients.

func NewManager

func NewManager(opts Options) *Manager

NewManager builds a websocket relay manager with the supplied options.

func (*Manager) Handler

func (m *Manager) Handler() http.Handler

Handler exposes an http.Handler that upgrades connections to websocket sessions.

func (*Manager) NonStream

func (m *Manager) NonStream(ctx context.Context, provider string, req *HTTPRequest) (*HTTPResponse, error)

NonStream executes a non-streaming HTTP request using the websocket provider.

func (*Manager) Path

func (m *Manager) Path() string

Path returns the HTTP path the manager expects for websocket upgrades.

func (*Manager) Send

func (m *Manager) Send(ctx context.Context, provider string, msg Message) (<-chan Message, error)

Send forwards the message to the specific provider connection and returns a channel yielding response messages.

func (*Manager) Stop

func (m *Manager) Stop(_ context.Context) error

Stop gracefully closes all active websocket sessions.

func (*Manager) Stream

func (m *Manager) Stream(ctx context.Context, provider string, req *HTTPRequest) (<-chan StreamEvent, error)

Stream executes a streaming HTTP request and returns channel with stream events.

type Message

type Message struct {
	ID      string         `json:"id"`
	Type    string         `json:"type"`
	Payload map[string]any `json:"payload,omitempty"`
}

Message represents the JSON payload exchanged with websocket clients.

type Options

type Options struct {
	Path            string
	ProviderFactory func(*http.Request) (string, error)
	OnConnected     func(string)
	OnDisconnected  func(string, error)
	LogDebugf       func(string, ...any)
	LogInfof        func(string, ...any)
	LogWarnf        func(string, ...any)
}

Options configures a Manager instance.

type StreamEvent

type StreamEvent struct {
	Type    string
	Payload []byte
	Status  int
	Headers http.Header
	Err     error
}

StreamEvent represents a streaming response event from clients.

Jump to

Keyboard shortcuts

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