// Code generated by hostgen. DO NOT EDIT. // // This file contains client wrappers for the WebSocket host service. // It is intended for use in Navidrome plugins built with TinyGo. // //go:build wasip1 package main import ( "encoding/json" "errors" "github.com/extism/go-pdk" ) // websocket_connect is the host function provided by Navidrome. // //go:wasmimport extism:host/user websocket_connect func websocket_connect(uint64) uint64 // websocket_sendtext is the host function provided by Navidrome. // //go:wasmimport extism:host/user websocket_sendtext func websocket_sendtext(uint64) uint64 // websocket_sendbinary is the host function provided by Navidrome. // //go:wasmimport extism:host/user websocket_sendbinary func websocket_sendbinary(uint64) uint64 // websocket_closeconnection is the host function provided by Navidrome. // //go:wasmimport extism:host/user websocket_closeconnection func websocket_closeconnection(uint64) uint64 // WebSocketConnectRequest is the request type for WebSocket.Connect. type WebSocketConnectRequest struct { Url string `json:"url"` Headers map[string]string `json:"headers"` ConnectionID string `json:"connectionID"` } // WebSocketConnectResponse is the response type for WebSocket.Connect. type WebSocketConnectResponse struct { NewConnectionID string `json:"newConnectionID,omitempty"` Error string `json:"error,omitempty"` } // WebSocketSendTextRequest is the request type for WebSocket.SendText. type WebSocketSendTextRequest struct { ConnectionID string `json:"connectionID"` Message string `json:"message"` } // WebSocketSendTextResponse is the response type for WebSocket.SendText. type WebSocketSendTextResponse struct { Error string `json:"error,omitempty"` } // WebSocketSendBinaryRequest is the request type for WebSocket.SendBinary. type WebSocketSendBinaryRequest struct { ConnectionID string `json:"connectionID"` Data []byte `json:"data"` } // WebSocketSendBinaryResponse is the response type for WebSocket.SendBinary. type WebSocketSendBinaryResponse struct { Error string `json:"error,omitempty"` } // WebSocketCloseConnectionRequest is the request type for WebSocket.CloseConnection. type WebSocketCloseConnectionRequest struct { ConnectionID string `json:"connectionID"` Code int32 `json:"code"` Reason string `json:"reason"` } // WebSocketCloseConnectionResponse is the response type for WebSocket.CloseConnection. type WebSocketCloseConnectionResponse struct { Error string `json:"error,omitempty"` } // WebSocketConnect calls the websocket_connect host function. // Connect establishes a WebSocket connection to the specified URL. // // Plugins that use this function must also implement the WebSocketCallback capability // to receive incoming messages and connection events. // // Parameters: // - url: The WebSocket URL to connect to (ws:// or wss://) // - headers: Optional HTTP headers to include in the handshake request // - connectionID: Optional unique identifier for the connection. If empty, one will be generated // // Returns the connection ID that can be used to send messages or close the connection, // or an error if the connection fails. func WebSocketConnect(url string, headers map[string]string, connectionID string) (*WebSocketConnectResponse, error) { // Marshal request to JSON req := WebSocketConnectRequest{ Url: url, Headers: headers, ConnectionID: connectionID, } reqBytes, err := json.Marshal(req) if err != nil { return nil, err } reqMem := pdk.AllocateBytes(reqBytes) defer reqMem.Free() // Call the host function responsePtr := websocket_connect(reqMem.Offset()) // Read the response from memory responseMem := pdk.FindMemory(responsePtr) responseBytes := responseMem.ReadBytes() // Parse the response var response WebSocketConnectResponse 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, nil } // WebSocketSendText calls the websocket_sendtext host function. // SendText sends a text message over an established WebSocket connection. // // Parameters: // - connectionID: The connection identifier returned by Connect // - message: The text message to send // // Returns an error if the connection is not found or if sending fails. func WebSocketSendText(connectionID string, message string) (*WebSocketSendTextResponse, error) { // Marshal request to JSON req := WebSocketSendTextRequest{ ConnectionID: connectionID, Message: message, } reqBytes, err := json.Marshal(req) if err != nil { return nil, err } reqMem := pdk.AllocateBytes(reqBytes) defer reqMem.Free() // Call the host function responsePtr := websocket_sendtext(reqMem.Offset()) // Read the response from memory responseMem := pdk.FindMemory(responsePtr) responseBytes := responseMem.ReadBytes() // Parse the response var response WebSocketSendTextResponse 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, nil } // WebSocketSendBinary calls the websocket_sendbinary host function. // SendBinary sends binary data over an established WebSocket connection. // // Parameters: // - connectionID: The connection identifier returned by Connect // - data: The binary data to send // // Returns an error if the connection is not found or if sending fails. func WebSocketSendBinary(connectionID string, data []byte) (*WebSocketSendBinaryResponse, error) { // Marshal request to JSON req := WebSocketSendBinaryRequest{ ConnectionID: connectionID, Data: data, } reqBytes, err := json.Marshal(req) if err != nil { return nil, err } reqMem := pdk.AllocateBytes(reqBytes) defer reqMem.Free() // Call the host function responsePtr := websocket_sendbinary(reqMem.Offset()) // Read the response from memory responseMem := pdk.FindMemory(responsePtr) responseBytes := responseMem.ReadBytes() // Parse the response var response WebSocketSendBinaryResponse 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, nil } // WebSocketCloseConnection calls the websocket_closeconnection host function. // CloseConnection gracefully closes a WebSocket connection. // // Parameters: // - connectionID: The connection identifier returned by Connect // - code: WebSocket close status code (e.g., 1000 for normal closure) // - reason: Optional human-readable reason for closing // // Returns an error if the connection is not found or if closing fails. func WebSocketCloseConnection(connectionID string, code int32, reason string) (*WebSocketCloseConnectionResponse, error) { // Marshal request to JSON req := WebSocketCloseConnectionRequest{ ConnectionID: connectionID, Code: code, Reason: reason, } reqBytes, err := json.Marshal(req) if err != nil { return nil, err } reqMem := pdk.AllocateBytes(reqBytes) defer reqMem.Free() // Call the host function responsePtr := websocket_closeconnection(reqMem.Offset()) // Read the response from memory responseMem := pdk.FindMemory(responsePtr) responseBytes := responseMem.ReadBytes() // Parse the response var response WebSocketCloseConnectionResponse 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, nil }