Files
IRC-kosmi-relay/cmd/extract-queries/main.go
cottongin dd398c9a8c sync
2025-11-01 21:00:16 -04:00

75 lines
1.6 KiB
Go

package main
import (
"encoding/json"
"fmt"
"os"
"strings"
)
type HAR struct {
Log struct {
Entries []struct {
WebSocketMessages []struct {
Type string `json:"type"`
Data string `json:"data"`
} `json:"_webSocketMessages"`
} `json:"entries"`
} `json:"log"`
}
func main() {
if len(os.Args) < 2 {
fmt.Println("Usage: extract-queries <har-file>")
os.Exit(1)
}
data, err := os.ReadFile(os.Args[1])
if err != nil {
fmt.Printf("Failed to read file: %v\n", err)
os.Exit(1)
}
var har HAR
if err := json.Unmarshal(data, &har); err != nil {
fmt.Printf("Failed to parse HAR: %v\n", err)
os.Exit(1)
}
fmt.Println("=== WebSocket Messages ===\n")
for _, entry := range har.Log.Entries {
for i, msg := range entry.WebSocketMessages {
if msg.Type == "send" {
var payload map[string]interface{}
if err := json.Unmarshal([]byte(msg.Data), &payload); err != nil {
continue
}
msgType, _ := payload["type"].(string)
fmt.Printf("[%d] Type: %s\n", i, msgType)
if msgType == "subscribe" {
if p, ok := payload["payload"].(map[string]interface{}); ok {
if opName, ok := p["operationName"].(string); ok {
fmt.Printf(" Operation: %s\n", opName)
}
if query, ok := p["query"].(string); ok {
// Pretty print the query
query = strings.ReplaceAll(query, "\\n", "\n")
if len(query) > 500 {
fmt.Printf(" Query:\n%s\n [...truncated...]\n\n", query[:500])
} else {
fmt.Printf(" Query:\n%s\n\n", query)
}
}
}
} else {
fmt.Println()
}
}
}
}
}