03844a9a36
Allow plugins to opt out of automatic redirect following on a per-request basis. When set to true, the response returns the redirect status code and Location header directly instead of following to the final destination.
91 lines
2.6 KiB
Go
91 lines
2.6 KiB
Go
// Code generated by ndpgen. DO NOT EDIT.
|
|
//
|
|
// This file contains client wrappers for the HTTP host service.
|
|
// It is intended for use in Navidrome plugins built with TinyGo.
|
|
//
|
|
//go:build wasip1
|
|
|
|
package host
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
"github.com/navidrome/navidrome/plugins/pdk/go/pdk"
|
|
)
|
|
|
|
// HTTPRequest represents the HTTPRequest data structure.
|
|
// HTTPRequest represents an outbound HTTP request from a plugin.
|
|
type HTTPRequest struct {
|
|
Method string `json:"method"`
|
|
URL string `json:"url"`
|
|
Headers map[string]string `json:"headers"`
|
|
NoFollowRedirects bool `json:"noFollowRedirects"`
|
|
Body []byte `json:"body"`
|
|
TimeoutMs int32 `json:"timeoutMs"`
|
|
}
|
|
|
|
// HTTPResponse represents the HTTPResponse data structure.
|
|
// HTTPResponse represents the response from an outbound HTTP request.
|
|
type HTTPResponse struct {
|
|
StatusCode int32 `json:"statusCode"`
|
|
Headers map[string]string `json:"headers"`
|
|
Body []byte `json:"body"`
|
|
}
|
|
|
|
// http_send is the host function provided by Navidrome.
|
|
//
|
|
//go:wasmimport extism:host/user http_send
|
|
func http_send(uint64) uint64
|
|
|
|
type hTTPSendRequest struct {
|
|
Request HTTPRequest `json:"request"`
|
|
}
|
|
|
|
type hTTPSendResponse struct {
|
|
Result *HTTPResponse `json:"result,omitempty"`
|
|
Error string `json:"error,omitempty"`
|
|
}
|
|
|
|
// HTTPSend calls the http_send host function.
|
|
// Send executes an HTTP request and returns the response.
|
|
//
|
|
// Parameters:
|
|
// - request: The HTTP request to execute, including method, URL, headers, body, and timeout
|
|
//
|
|
// Returns the HTTP response with status code, headers, and body.
|
|
// Network errors, timeouts, and permission failures are returned as Go errors.
|
|
// Successful HTTP calls (including 4xx/5xx status codes) return a non-nil response with nil error.
|
|
func HTTPSend(request HTTPRequest) (*HTTPResponse, error) {
|
|
// Marshal request to JSON
|
|
req := hTTPSendRequest{
|
|
Request: request,
|
|
}
|
|
reqBytes, err := json.Marshal(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
reqMem := pdk.AllocateBytes(reqBytes)
|
|
defer reqMem.Free()
|
|
|
|
// Call the host function
|
|
responsePtr := http_send(reqMem.Offset())
|
|
|
|
// Read the response from memory
|
|
responseMem := pdk.FindMemory(responsePtr)
|
|
responseBytes := responseMem.ReadBytes()
|
|
|
|
// Parse the response
|
|
var response hTTPSendResponse
|
|
if err := json.Unmarshal(responseBytes, &response); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Convert Error field to Go error
|
|
if response.Error != "" {
|
|
return nil, errors.New(response.Error)
|
|
}
|
|
|
|
return response.Result, nil
|
|
}
|