1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package surge
- import (
- "bytes"
- "compress/gzip"
- "io"
- "github.com/sagernet/sing-box/script/jsc"
- E "github.com/sagernet/sing/common/exceptions"
- "github.com/dop251/goja"
- )
- type Utils struct {
- class jsc.Class[*Module, *Utils]
- }
- func createUtils(module *Module) jsc.Class[*Module, *Utils] {
- class := jsc.NewClass[*Module, *Utils](module)
- class.DefineMethod("geoip", (*Utils).stub)
- class.DefineMethod("ipasn", (*Utils).stub)
- class.DefineMethod("ipaso", (*Utils).stub)
- class.DefineMethod("ungzip", (*Utils).ungzip)
- class.DefineMethod("toString", (*Utils).toString)
- return class
- }
- func (u *Utils) stub(call goja.FunctionCall) any {
- return nil
- }
- func (u *Utils) ungzip(call goja.FunctionCall) any {
- if len(call.Arguments) != 1 {
- panic(u.class.Runtime().NewGoError(E.New("invalid argument")))
- }
- binary := jsc.AssertBinary(u.class.Runtime(), call.Argument(0), "binary", false)
- reader, err := gzip.NewReader(bytes.NewReader(binary))
- if err != nil {
- panic(u.class.Runtime().NewGoError(err))
- }
- binary, err = io.ReadAll(reader)
- if err != nil {
- panic(u.class.Runtime().NewGoError(err))
- }
- return jsc.NewUint8Array(u.class.Runtime(), binary)
- }
- func (u *Utils) toString(call goja.FunctionCall) any {
- return "[sing-box Surge utils]"
- }
|