123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package sgutils
- import (
- "bytes"
- "compress/gzip"
- "io"
- "github.com/sagernet/sing-box/script/jsc"
- E "github.com/sagernet/sing/common/exceptions"
- "github.com/dop251/goja"
- )
- type SurgeUtils struct {
- vm *goja.Runtime
- }
- func Enable(runtime *goja.Runtime) {
- utils := &SurgeUtils{runtime}
- object := runtime.NewObject()
- object.Set("geoip", utils.js_stub)
- object.Set("ipasn", utils.js_stub)
- object.Set("ipaso", utils.js_stub)
- object.Set("ungzip", utils.js_ungzip)
- }
- func (u *SurgeUtils) js_stub(call goja.FunctionCall) goja.Value {
- panic(u.vm.NewGoError(E.New("not implemented")))
- }
- func (u *SurgeUtils) js_ungzip(call goja.FunctionCall) goja.Value {
- if len(call.Arguments) != 1 {
- panic(u.vm.NewGoError(E.New("invalid argument")))
- }
- binary := jsc.AssertBinary(u.vm, call.Argument(0), "binary", false)
- reader, err := gzip.NewReader(bytes.NewReader(binary))
- if err != nil {
- panic(u.vm.NewGoError(err))
- }
- binary, err = io.ReadAll(reader)
- if err != nil {
- panic(u.vm.NewGoError(err))
- }
- return jsc.NewUint8Array(u.vm, binary)
- }
|