File size: 1,313 Bytes
ac613eb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | package internal
import (
"io"
"regexp"
"sync"
"time"
fhttp "github.com/bogdanfinn/fhttp"
)
var (
feVersion string
versionLock sync.RWMutex
)
func GetFeVersion() string {
versionLock.RLock()
defer versionLock.RUnlock()
return feVersion
}
func fetchFeVersion() {
client, err := TLSHTTPClient(15 * time.Second)
if err != nil {
LogError("Failed to create tls client for fe version: %v", err)
return
}
req, err := fhttp.NewRequest("GET", "https://chat.z.ai/", nil)
if err != nil {
LogError("Failed to create fe version request: %v", err)
return
}
ApplyBrowserFingerprintHeaders(req.Header)
resp, err := client.Do(req)
if err != nil {
LogError("Failed to fetch fe version: %v", err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
LogError("Failed to read fe version response: %v", err)
return
}
re := regexp.MustCompile(`prod-fe-[\.\d]+`)
match := re.FindString(string(body))
if match != "" {
versionLock.Lock()
feVersion = match
versionLock.Unlock()
LogInfo("Updated fe version: %s", match)
}
}
func StartVersionUpdater() {
fetchFeVersion()
ticker := time.NewTicker(1 * time.Hour)
go func() {
for range ticker.C {
fetchFeVersion()
}
}()
}
|