WitNote / internal /server /helpers.go
AUXteam's picture
Upload folder using huggingface_hub
6a7089a verified
package server
import (
"fmt"
"net/http"
"time"
"github.com/pinchtab/pinchtab/internal/orchestrator"
"github.com/pinchtab/pinchtab/internal/proxy"
"github.com/pinchtab/pinchtab/internal/web"
)
func CheckPinchTabRunning(port, token string) bool {
client := &http.Client{Timeout: 500 * time.Millisecond}
url := fmt.Sprintf("http://localhost:%s/health", port)
req, _ := http.NewRequest("GET", url, nil)
if token != "" {
req.Header.Set("Authorization", "Bearer "+token)
}
resp, err := client.Do(req)
if err != nil {
return false
}
defer func() {
_ = resp.Body.Close()
}()
return resp.StatusCode == 200
}
func RegisterDefaultProxyRoutes(mux *http.ServeMux, orch *orchestrator.Orchestrator) {
mux.HandleFunc("GET /tabs", func(w http.ResponseWriter, r *http.Request) {
target := orch.FirstRunningURL()
if target == "" {
web.JSON(w, 200, map[string]any{"tabs": []any{}})
return
}
proxy.HTTP(w, r, target+"/tabs")
})
proxyEndpoints := []string{
"GET /snapshot", "GET /screenshot", "GET /text",
"POST /navigate", "POST /action", "POST /actions", "POST /evaluate",
"POST /tab", "POST /tab/lock", "POST /tab/unlock",
"GET /cookies", "POST /cookies",
"GET /download", "POST /upload",
"GET /stealth/status", "POST /fingerprint/rotate",
"GET /screencast", "GET /screencast/tabs",
"POST /find", "POST /macro",
}
for _, ep := range proxyEndpoints {
endpoint := ep
mux.HandleFunc(endpoint, func(w http.ResponseWriter, r *http.Request) {
target := orch.FirstRunningURL()
if target == "" {
web.Error(w, 503, fmt.Errorf("no running instances — launch one from the Profiles tab"))
return
}
path := r.URL.Path
proxy.HTTP(w, r, target+path)
})
}
}
func MetricFloat(value any) float64 {
switch v := value.(type) {
case float64:
return v
case float32:
return float64(v)
case int:
return float64(v)
case int64:
return float64(v)
case uint64:
return float64(v)
default:
return 0
}
}
func MetricInt(value any) int {
switch v := value.(type) {
case int:
return v
case int64:
return int(v)
case float64:
return int(v)
case uint64:
return int(v)
default:
return 0
}
}