orama/core/pkg/rwagent/errors.go

58 lines
1.4 KiB
Go

package rwagent
import (
"errors"
"fmt"
)
// AgentError represents an error returned by the rootwallet agent API.
type AgentError struct {
Code string // e.g., "AGENT_LOCKED", "NOT_FOUND"
Message string
StatusCode int
}
func (e *AgentError) Error() string {
return fmt.Sprintf("rootwallet agent: %s (%s)", e.Message, e.Code)
}
// IsLocked returns true if the error indicates the agent is locked.
func IsLocked(err error) bool {
var ae *AgentError
if errors.As(err, &ae) {
return ae.Code == "AGENT_LOCKED"
}
return false
}
// IsNotRunning returns true if the error indicates the agent is not reachable.
func IsNotRunning(err error) bool {
var ae *AgentError
if errors.As(err, &ae) {
return ae.Code == "AGENT_NOT_RUNNING"
}
// Also check for connection errors
return errors.Is(err, ErrAgentNotRunning)
}
// IsNotFound returns true if the vault entry was not found.
func IsNotFound(err error) bool {
var ae *AgentError
if errors.As(err, &ae) {
return ae.Code == "NOT_FOUND"
}
return false
}
// IsApprovalDenied returns true if the user denied the app's access request.
func IsApprovalDenied(err error) bool {
var ae *AgentError
if errors.As(err, &ae) {
return ae.Code == "APPROVAL_DENIED" || ae.Code == "PERMISSION_DENIED"
}
return false
}
// ErrAgentNotRunning is returned when the agent socket is not reachable.
var ErrAgentNotRunning = fmt.Errorf("rootwallet agent is not running — start with: rw agent start && rw agent unlock")