// 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"` 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 }