package sign import ( "fmt" "github.com/dop251/goja" _ "embed" ) //go:embed sign.js var signJS []byte //go:embed a_bogus.js var abogusJS []byte func GenerateSignature(wssURL string) (string, error) { vm := goja.New() vm.Set("console", goja.Null()) if _, err := vm.RunString(string(signJS)); err != nil { return "", fmt.Errorf("run sign.js: %w", err) } fn := vm.Get("get_sign") if fn == nil || goja.IsUndefined(fn) { return "", fmt.Errorf("get_sign not found in sign.js") } result, err := fn.Export().(goja.Callable)(goja.Undefined(), vm.ToValue(wssURL)) if err != nil { return "", fmt.Errorf("call get_sign: %w", err) } return result.Export().(string), nil } func GetABogus(urlParams map[string]string, userAgent string) (string, error) { vm := goja.New() if _, err := vm.RunString(string(abogusJS)); err != nil { return "", fmt.Errorf("run a_bogus.js: %w", err) } fn := vm.Get("get_ab") if fn == nil || goja.IsUndefined(fn) { return "", fmt.Errorf("get_ab not found in a_bogus.js") } dpf := "" for k, v := range urlParams { if dpf != "" { dpf += "&" } dpf += k + "=" + v } result, err := fn.Export().(goja.Callable)(goja.Undefined(), vm.ToValue(dpf), vm.ToValue(userAgent)) if err != nil { return "", fmt.Errorf("call get_ab: %w", err) } return result.Export().(string), nil }