Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
44 lines
1.0 KiB
Go
44 lines
1.0 KiB
Go
package implementationhost
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
market "github.com/tutti-os/tutti/packages/connector/daemon/core"
|
|
"github.com/tutti-os/tutti/packages/connector/runtime/mcp"
|
|
)
|
|
|
|
const (
|
|
mcpAuthorizationRequiredCode = -33001
|
|
mcpAuthorizationExpiredCode = -33002
|
|
)
|
|
|
|
func wrapRemoteMCPAuthorizationError(err error) error {
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
var domain *market.DomainError
|
|
if errors.As(err, &domain) && domain.Code == market.ErrorCodeAuthorizationFailed {
|
|
return err
|
|
}
|
|
if !remoteMCPAuthorizationRequired(err) {
|
|
return err
|
|
}
|
|
return market.NewDomainError(
|
|
market.ErrorCodeAuthorizationFailed,
|
|
"connector authorization is required",
|
|
false,
|
|
err,
|
|
)
|
|
}
|
|
|
|
func remoteMCPAuthorizationRequired(err error) bool {
|
|
var rpcErr *mcp.RPCError
|
|
if errors.As(err, &rpcErr) &&
|
|
(rpcErr.Code == mcpAuthorizationRequiredCode || rpcErr.Code == mcpAuthorizationExpiredCode) {
|
|
return true
|
|
}
|
|
var httpErr *mcp.ModernHTTPError
|
|
return errors.As(err, &httpErr) && httpErr.StatusCode == http.StatusPreconditionRequired
|
|
}
|