This commit is contained in:
1-6
2023-07-25 09:41:56 +08:00
parent 172c244656
commit e5163b233a
23 changed files with 4729 additions and 312 deletions
+3 -1
View File
@@ -33,4 +33,6 @@ test
.sillyplus
test*
node_modules
plugins
plugins
bin
language
+28 -13
View File
@@ -53,6 +53,7 @@ type Factory struct {
msgChan chan MsgChan
demo *CustomSender
reply func(map[string]interface{}) string
action func(map[string]interface{}) string
lm chan bool
nm int64
isAdmin func(string) bool
@@ -354,6 +355,23 @@ func (f *Factory) SetReplyHandler(function func(map[string]interface{}) string)
}
}
func (f *Factory) SetActionHandler(function func(map[string]interface{}) string) {
f.action = func(m map[string]interface{}) string {
if f.uuid != "" {
mutex := GetMutex(f.uuid)
mutex.Lock()
defer mutex.Unlock()
}
defer func() {
err := recover()
if err != nil {
pluginConsole(f.uuid).Error("Sender(\""+f.botplt+"\").SetAction error:", err)
}
}()
return function(m)
}
}
// func (f *Factory) GetReplies() {
// }
@@ -535,7 +553,7 @@ func (f *Factory) SetIsAdmin(function func(string) bool) {
func (f *Factory) Sender2(options map[string]string) *CustomSender {
var demo = *f.demo
sender := &demo
sender.SetID()
// sender.SetID()
if options != nil {
fsp := &common.FakerSenderParams{}
if v, ok := options[CONETNT]; ok {
@@ -570,8 +588,8 @@ func (f *Factory) Sender() interface{} {
func (f *Factory) Receive(props map[string]interface{}) *CustomSender {
var demo = *f.demo
sender := &demo
sender.SetID()
console.Log("senderId", sender.GetID())
// sender.SetID()
// console.Log("senderId", sender.GetID())
emf := map[string]interface{}{}
for i := range props {
h := false
@@ -653,6 +671,9 @@ func (sender *CustomSender) GetBotID() string {
type PUSH string
func (sender *CustomSender) Action(options map[string]interface{}) (interface{}, error) {
if sender.f.action != nil {
return sender.f.action(options), nil
}
var platform = sender.f.botplt
var any *common.Function
var one *common.Function
@@ -692,6 +713,7 @@ func (sender *CustomSender) Action(options map[string]interface{}) (interface{},
vm.Set("action", proxy)
vm.Set("adapter", sender.f)
})
}
return result, err
}
@@ -918,16 +940,9 @@ func (sender *CustomSender) GetID() string {
return sender.id
}
var test = "4d6371a8-2778-11ee-a3c2-821680fbbf6b"
func (sender *CustomSender) SetID() {
if test != "" {
sender.id = test
test = ""
} else {
sender.id = utils.GenUUID()
}
func (sender *CustomSender) SetID() string {
sender.id = utils.GenUUID()
sender.CreatedAt = time.Now()
senders.Store(sender.id, sender)
return sender.id
}
+10 -1
View File
@@ -162,6 +162,14 @@ type BaseSender struct {
emf map[string]interface{}
id string
CreatedAt time.Time
plugin_id string
}
func (sender *BaseSender) SetPluginID(plugin_id string) {
sender.plugin_id = plugin_id
}
func (sender *BaseSender) GetPluginID() string {
return sender.plugin_id
}
func (sender *BaseSender) SetLevel(l int) {
@@ -379,10 +387,11 @@ func (sender *BaseSender) GetID() string {
return sender.id
}
func (sender *BaseSender) SetID() {
func (sender *BaseSender) SetID() string {
sender.id = utils.GenUUID()
sender.CreatedAt = time.Now()
senders.Store(sender.id, sender)
return sender.id
}
func (sender *BaseSender) GetTime() time.Time {
+3 -1
View File
@@ -3,9 +3,11 @@ package common
import "time"
type Sender interface {
SetPluginID(string)
GetPluginID() string
GetID() string
GetTime() time.Time
SetID()
SetID() string
GetUserID() string
GetChatID() string
GetBotID() string
+1 -1
View File
@@ -17,7 +17,7 @@ func init() {
}
s := grpc.NewServer()
srpc.RegisterSillyGirlServiceServer(s, &SillyGirlService{})
log.Printf("grpc server listening at %v", lis.Addr())
// log.Printf("grpc server listening at %v", lis.Addr())
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
+34 -10
View File
@@ -3,6 +3,7 @@ package core
import (
"context"
"encoding/json"
"errors"
"sync"
"time"
@@ -13,8 +14,13 @@ import (
func (sg *SillyGirlService) AdapterRegist(stream srpc.SillyGirlService_AdapterRegistServer) error {
var adapter *Factory
var echos sync.Map
// defer func() {
// fmt.Println("test defer")
// }()
for {
// fmt.Println("test for")
req, err := stream.Recv()
// fmt.Println("test fored", err)
if err != nil {
return err
}
@@ -41,6 +47,24 @@ func (sg *SillyGirlService) AdapterRegist(stream srpc.SillyGirlService_AdapterRe
}
return ""
})
adapter.action = func(m map[string]interface{}) string {
m["__type__"] = "action"
echo := utils.GenUUID()
ch := make(chan string)
echos.Store(echo, ch)
defer echos.Delete(echo)
m["echo"] = echo
stream.Send(&srpc.Default{
Value: string(utils.JsonMarshal(m)),
})
select {
case v := <-ch:
return v
case <-time.After(time.Second * 5):
}
return ""
}
// fmt.Println("test start")
} else {
echo := req.GetBotId()
message_id := req.GetPlatform()
@@ -63,7 +87,7 @@ func (sg *SillyGirlService) AdapterReceive(ctx context.Context, req *srpc.Adapte
adapter, err := GetAdapter(bot_id, platform)
if err == nil {
s := adapter.Receive(msgs)
return &srpc.Default{Value: s.GetID()}, nil
return &srpc.Default{Value: s.SetID()}, nil
}
return &srpc.Default{Value: ""}, err
}
@@ -73,17 +97,17 @@ func (sg *SillyGirlService) AdapterPush(ctx context.Context, req *srpc.AdapterRe
bot_id := req.GetBotId()
platform := req.GetPlatform()
json.Unmarshal([]byte(req.Value), &msgs)
adapter, err := GetAdapter(bot_id, platform)
adapter, err := GetAdapter(platform, bot_id)
if err == nil {
result := adapter.Push(msgs)
message_id := result["message_id"]
error := result["error"]
if error != "" {
return &srpc.Default{Value: ""}, err
errst := result["error"]
if errst != "" {
return &srpc.Default{Value: ""}, errors.New(errst)
}
return &srpc.Default{Value: message_id}, err
return &srpc.Default{Value: message_id}, nil
}
return &srpc.Default{Value: ""}, err
return &srpc.Default{Value: ""}, nil
}
func (sg *SillyGirlService) AdapterSender(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Default, error) {
@@ -91,10 +115,10 @@ func (sg *SillyGirlService) AdapterSender(ctx context.Context, req *srpc.Adapter
bot_id := req.GetBotId()
platform := req.GetPlatform()
json.Unmarshal([]byte(req.Value), &msgs)
adapter, err := GetAdapter(bot_id, platform)
adapter, err := GetAdapter(platform, bot_id)
if err == nil {
s := adapter.Sender2(msgs)
return &srpc.Default{Value: s.GetID()}, nil
return &srpc.Default{Value: s.SetID()}, nil
}
return &srpc.Default{Value: ""}, err
}
@@ -102,7 +126,7 @@ func (sg *SillyGirlService) AdapterSender(ctx context.Context, req *srpc.Adapter
func (sg *SillyGirlService) AdapterDestroy(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Empty, error) {
bot_id := req.GetBotId()
platform := req.GetPlatform()
adapter, err := GetAdapter(bot_id, platform)
adapter, err := GetAdapter(platform, bot_id)
if err == nil {
adapter.Destroy()
}
+55
View File
@@ -2,7 +2,11 @@ package core
import (
"context"
"errors"
"sync"
"time"
"github.com/cdle/sillyplus/core/storage"
"github.com/cdle/sillyplus/proto3/srpc"
"github.com/cdle/sillyplus/utils"
)
@@ -11,6 +15,57 @@ type SillyGirlService struct {
srpc.UnsafeSillyGirlServiceServer
}
func (sg *SillyGirlService) BucketWatch(stream srpc.SillyGirlService_BucketWatchServer) error {
var watcher func(old, new, key string) *storage.Final
var echos sync.Map
for {
req, err := stream.Recv()
if err != nil {
return err
}
if watcher == nil {
watcher = func(old, new, key string) *storage.Final {
echo := utils.GenUUID()
ch := make(chan *storage.Final)
echos.Store(echo, ch)
defer echos.Delete(echo)
stream.Send(&srpc.BucketWatchResponse{
Echo: echo,
Old: old,
Now: new,
Key: key,
})
select {
case v := <-ch:
return v
case <-time.After(time.Second * 5):
}
return nil
}
storage.Watch(MakeBucket(req.Name), req.Key, watcher, req.PluginId)
} else {
echo := req.Echo
v, ok := echos.Load(echo)
var fn *storage.Final
if req.Error != "VOID" {
fn = &storage.Final{
Now: req.Now,
Message: req.Message,
}
if req.Error != "" {
fn.Error = errors.New(req.Error)
}
}
if ok {
select {
case v.(chan *storage.Final) <- fn:
case <-time.After(time.Millisecond):
}
}
}
}
}
// Get implements BucketServiceServer.Get.
func (sg *SillyGirlService) BucketGet(ctx context.Context, req *srpc.BucketKeyRequest) (*srpc.Default, error) {
value := MakeBucket(req.Name).GetString(req.Key)
+67
View File
@@ -0,0 +1,67 @@
package core
import (
"io"
"net/http"
"os"
"runtime"
"github.com/cdle/sillyplus/utils"
)
type Language struct {
Name string // node
Version string // 20230725
Os string // linux
Arch string // amd64
Links []string // 下载链接
}
var languages = []Language{
{
Name: "node",
Version: "20230725",
Os: "linux",
Arch: "amd64",
Links: []string{"https://gitee.com/sillybot/binary/releases/download/20230725/node_linux_amd64"},
},
{
Name: "node",
Version: "20230725",
Os: "darwin",
Arch: "arm64",
Links: []string{"https://gitee.com/sillybot/binary/releases/download/20230725/node_darwin_arm64"},
},
}
func init() {
for _, item := range languages {
if !(item.Os == runtime.GOOS && item.Arch == runtime.GOARCH) {
continue
}
func() {
dir := utils.ExecPath + "/language/" + item.Name
data, _ := os.ReadFile(dir + "/version")
if string(data) == item.Version {
return
}
os.MkdirAll(utils.ExecPath+"/language/"+item.Name, 0755)
resp, err := http.Get(item.Links[0])
if err != nil {
return
}
defer resp.Body.Close()
f, err := os.OpenFile(dir+"/"+item.Name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755)
if err != nil {
return
}
defer f.Close()
_, err = io.Copy(f, resp.Body)
if err != nil {
return
}
os.WriteFile(dir+"/version", []byte(item.Version), 0755)
}()
}
}
+95 -16
View File
@@ -1,6 +1,7 @@
package core
import (
"bufio"
"crypto/sha1"
"fmt"
"io/ioutil"
@@ -8,6 +9,7 @@ import (
"os/exec"
"path/filepath"
"strings"
"sync"
"github.com/cdle/sillyplus/core/common"
"github.com/cdle/sillyplus/core/storage"
@@ -22,6 +24,8 @@ func init() {
go initNodePlugins()
}
var processes sync.Map
func initNodePlugins() {
root := utils.ExecPath + "/plugins"
plugins := []string{root}
@@ -40,7 +44,7 @@ func initNodePlugins() {
plugins = append(plugins, path)
}
case 2:
if (files[1] == "main.ts" || files[1] == "main.js") && !info.IsDir() {
if (files[1] == "main.js") && !info.IsDir() { //files[1] == "main.ts" ||
AddNodePlugin(path, files[0])
}
}
@@ -52,9 +56,7 @@ func initNodePlugins() {
return
}
defer watcher.Close()
// 要监控的文件夹路径
for _, dir := range plugins {
err = watcher.Add(dir)
if err != nil {
@@ -77,12 +79,14 @@ func initNodePlugins() {
switch len(files) {
case 1:
plugin_dir = true
fmt.Println("目录事件")
// fmt.Println("目录事件")
plugin_name = files[0]
case 2:
if files[1] == "main.ts" || files[1] == "main.js" {
plugin_index = true
fmt.Println("入口文件事件")
if files[1] == "main.js" {
plugin_index = true
}
// fmt.Println("入口文件事件")
}
plugin_name = files[0]
}
@@ -131,10 +135,10 @@ func RemNodePlugin(name string) error {
pluginLock.Lock()
defer pluginLock.Unlock()
key := nameUuid(name)
fmt.Println("rem", key, name)
// fmt.Println("rem", key, name)
for i := range Functions {
if Functions[i].UUID == key {
fmt.Println("pl", key)
// fmt.Println("pl", key)
DestroyAdapterByUUID(key)
Functions[i].Running = false
if len(Functions[i].CronIds) != 0 {
@@ -177,16 +181,91 @@ func AddNodePlugin(path, name string) error {
f.Suffix = ".ts"
f.Type = "typescript"
f.Handle = func(s common.Sender, f func(vm *goja.Runtime)) interface{} {
cmd := exec.Command("node", "/Users/a1-6/.nvm/versions/node/v18.16.1/lib/node_modules/ts-node/dist/bin.js", path)
cmd.Env = append(cmd.Env, "SENDER_ID="+s.GetID())
// 执行命令,并捕获其输出
output, err := cmd.Output()
s.SetPluginID(uuid)
plt := s.GetImType()
// , "/Users/a1-6/.nvm/versions/node/v18.16.1/lib/node_modules/ts-node/dist/bin.js",
cmd := exec.Command(utils.ExecPath+"/language/node/node", path)
// cmd := exec.Command(utils.ExecPath+"/language/node/node", path)
id := s.SetID()
cmd.Env = append(cmd.Env, "SENDER_ID="+id)
cmd.Env = append(cmd.Env, "PLUGIN_ID="+uuid)
// 获取标准输出和标准错误输出的管道
stdout, err := cmd.StdoutPipe()
if err != nil {
fmt.Println("命令执行失败:", err)
return nil
// fmt.Printf("获取标准输出管道失败:%v\n", err)
// os.Exit(1)
}
stderr, err := cmd.StderrPipe()
if err != nil {
// fmt.Printf("获取标准错误输出管道失败:%v\n", err)
// os.Exit(1)
}
err = cmd.Start()
if err != nil {
}
// file, err := os.Create("output.log")
// if err != nil {
// fmt.Printf("创建文件失败:%v\n", err)
// os.Exit(1)
// }
// defer file.Close()
var wg sync.WaitGroup
wg.Add(2)
// 处理标准输出
go func() {
defer wg.Done()
scanner := bufio.NewScanner(stdout)
for scanner.Scan() {
data := scanner.Text()
fmt.Println("log", data)
// if _, err := file.WriteString(data + "\n"); err != nil {
// fmt.Printf("写入文件失败:%v\n", err)
// }
}
}()
// 处理标准错误输出
go func() {
defer wg.Done()
scanner := bufio.NewScanner(stderr)
for scanner.Scan() {
data := scanner.Text()
fmt.Fprintln(os.Stderr, "err "+data)
// if _, err := file.WriteString(data + "\n"); err != nil {
// fmt.Printf("写入文件失败:%v\n", err)
// }
}
}()
processes.Store(cmd, s)
if (plt) != "*" {
senders.Store(id, s)
defer senders.Delete(id)
defer processes.Delete(cmd)
err = cmd.Wait()
if err != nil {
fmt.Println("命令执行失败:", err)
return nil
}
} else {
processes.Range(func(key, value any) bool {
p := key.(*exec.Cmd)
if p == cmd {
return true
}
s := value.(common.Sender)
if s.GetPluginID() == uuid {
p.Process.Kill()
}
return true
})
go func() {
defer processes.Delete(cmd)
err = cmd.Wait()
}()
}
// 输出命令的输出结果
fmt.Println(string(output))
return nil
}
for _, cb := range cbs {
+133 -53
View File
@@ -4,6 +4,9 @@ import (
"context"
"encoding/json"
"errors"
"fmt"
"io"
"strings"
"sync"
"time"
@@ -14,23 +17,30 @@ import (
var senders sync.Map
func init() {
//垃圾回收
go func() {
for {
time.Sleep(time.Minute)
senders.Range(func(key, value any) bool {
s := value.(common.Sender)
if s.GetTime().Add(time.Minute * 20).Before(time.Now()) {
senders.Delete(s.GetID())
}
return true
})
}
}()
}
// func init() {
// //垃圾回收
// go func() {
// for {
// time.Sleep(time.Minute)
// senders.Range(func(key, value any) bool {
// s := value.(common.Sender)
// if s.GetTime().Add(time.Minute * 20).Before(time.Now()) {
// senders.Delete(s.GetID())
// }
// return true
// })
// }
// }()
// }
func GetSender(uuid string) (common.Sender, error) {
if uuid == "" {
return &CustomSender{
f: &Factory{
botid: "*",
},
}, nil
}
v, ok := senders.Load(uuid)
if !ok {
return nil, errors.New("not found sender")
@@ -121,47 +131,96 @@ func (sg *SillyGirlService) SenderContinue(ctx context.Context, req *srpc.Sender
}
// todo
func (sg *SillyGirlService) SenderListen(ctx context.Context, req *srpc.SenderListenRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid)
if err != nil {
return nil, err
}
options := []interface{}{}
var carry = &Carry{
ListenPrivate: req.ListenPrivate,
ListenGroup: req.ListenGroup,
RequireAdmin: req.RequireAdmin,
AllowPlatforms: req.AllowPlatforms,
ProhibitPlatforms: req.ProhibitPlatforms,
AllowGroups: req.AllowGroups,
ProhibitGroups: req.ProhibitGroups,
AllowUsers: req.AllowUsers,
ProhibitUsers: req.ProhibitUsers,
UserID: s.GetUserID(),
ChatID: s.GetChatID(),
}
if req.Timeout != 0 {
options = append(options, time.Duration(req.Timeout)*time.Millisecond)
}
if len(req.Rules) != 0 {
for _, rule := range req.Rules {
_rs := formatRule(rule)
if len(_rs) != 0 {
carry.Function.Rules = append(carry.Function.Rules, _rs...)
} else {
carry.Function.Rules = append(carry.Function.Rules, rule)
func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderListenServer) error {
var carry *Carry
var echos sync.Map
var persistent bool
// defer fmt.Println("已关闭,", "===")
for {
req, err := stream.Recv()
// fmt.Println("carry", carry, err)
if err == io.EOF {
break // 如果流已经关闭,则退出循环
}
if err != nil {
return err
}
if carry != nil {
echo := req.GetUuid()
value := req.GetValue()
// fmt.Println("echo", echo, "value", value)
v, ok := echos.Load(echo)
if ok {
select {
case v.(chan string) <- value:
case <-time.After(time.Millisecond):
}
}
// if !persistent {
// return nil
// }
continue
}
s, err := GetSender(req.Uuid)
if err != nil {
return err
}
options := []interface{}{}
carry = &Carry{
ListenPrivate: req.ListenPrivate,
ListenGroup: req.ListenGroup,
RequireAdmin: req.RequireAdmin,
AllowPlatforms: req.AllowPlatforms,
ProhibitPlatforms: req.ProhibitPlatforms,
AllowGroups: req.AllowGroups,
ProhibitGroups: req.ProhibitGroups,
AllowUsers: req.AllowUsers,
ProhibitUsers: req.ProhibitUsers,
UserID: s.GetUserID(),
ChatID: s.GetChatID(),
UUID: req.PluginId,
}
if req.Timeout != 0 {
options = append(options, time.Duration(req.Timeout)*time.Millisecond)
}
if len(req.Rules) != 0 {
for _, rule := range req.Rules {
_rs := formatRule(rule)
if len(_rs) != 0 {
carry.Function.Rules = append(carry.Function.Rules, _rs...)
} else {
carry.Function.Rules = append(carry.Function.Rules, rule)
}
}
}
options = append(options, carry)
if req.Persistent {
persistent = req.Persistent
options = append(options, "persistent")
}
go s.Await(s, func(s common.Sender) interface{} {
id := s.SetID()
defer senders.Delete(id)
echo := utils.GenUUID()
ch := make(chan string)
echos.Store(echo, ch)
defer echos.Delete(echo)
stream.Send(&srpc.SenderListenResponse{Echo: echo, Uuid: id})
value := <-ch
if !persistent {
if strings.HasPrefix(value, "go_again_") {
value = strings.Replace(value, "go_again_", "", 1)
return GoAgain(value)
} else {
stream.Send(&srpc.SenderListenResponse{Echo: "END"})
}
} else {
value = strings.Replace(value, "go_again_", "", 1)
}
return value
}, options...)
}
options = append(options, carry)
id := ""
s.Await(s, func(s common.Sender) interface{} {
id = s.GetID()
return nil
}, options...)
return &srpc.Default{Value: id}, nil
return nil
}
func (sg *SillyGirlService) SenderEvent(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
@@ -181,6 +240,21 @@ func (sg *SillyGirlService) SenderReply(ctx context.Context, req *srpc.ReplyRequ
return &srpc.Default{Value: message_id}, err
}
func (sg *SillyGirlService) SenderParam(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid)
if err != nil {
return nil, err
}
value := ""
i := utils.Int(req.Content)
if fmt.Sprint(i) == req.Content {
value = s.Get(i - 1)
} else {
value = s.Get(req.Content)
}
return &srpc.Default{Value: value}, err
}
func (sg *SillyGirlService) SenderAction(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid)
if err != nil {
@@ -194,3 +268,9 @@ func (sg *SillyGirlService) SenderAction(ctx context.Context, req *srpc.ReplyReq
result, err := s.Action(params)
return &srpc.Default{Value: string(utils.JsonMarshal(result))}, err
}
func (sg *SillyGirlService) SenderDestroy(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Empty, error) {
// fmt.Println("删除", req.Uuid)
senders.Delete(req.Uuid)
return &srpc.Empty{}, nil
}
+17
View File
@@ -1,6 +1,7 @@
package core
import (
"context"
"encoding/base64"
"fmt"
"io/ioutil"
@@ -11,6 +12,7 @@ import (
"github.com/cdle/sillyplus/core/common"
"github.com/cdle/sillyplus/core/logs"
"github.com/cdle/sillyplus/proto3/srpc"
"github.com/cdle/sillyplus/utils"
"github.com/dop251/goja"
// "golang.org/x/image/webp"
@@ -47,6 +49,21 @@ type Console struct {
var console = &Console{}
var Logs = &Console{}
func (sg *SillyGirlService) Console(ctx context.Context, req *srpc.ConsoleRequest) (*srpc.Empty, error) {
log := &Console{
UUID: req.PluginId,
}
switch req.Type {
case "info", "log":
log.Info(req.Content)
case "error":
log.Error(req.Content)
case "debug":
log.Debug(req.Content)
}
return &srpc.Empty{}, nil
}
func pluginConsole(uuid string) *Console {
return &Console{
UUID: uuid,
+15 -5
View File
@@ -6,10 +6,12 @@
"": {
"dependencies": {
"@grpc/grpc-js": "^1.8.18",
"google-protobuf": "^3.21.2"
"google-protobuf": "^3.21.2",
"webpack-node-externals": "^3.0.0"
},
"devDependencies": {
"@types/google-protobuf": "^3.15.6"
"@types/google-protobuf": "^3.15.6",
"@types/node": "^20.4.4"
}
},
"node_modules/@grpc/grpc-js": {
@@ -108,9 +110,9 @@
"integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
},
"node_modules/@types/node": {
"version": "20.4.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.3.tgz",
"integrity": "sha512-Yu3+r4Mn/iY6Mf0aihncZQ1qOjOUrCiodbHHY1hds5O+7BbKp9t+Li7zLO13zO8j9L2C6euz8xsYQP0rjGvVXw=="
"version": "20.4.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.4.tgz",
"integrity": "sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew=="
},
"node_modules/ansi-regex": {
"version": "5.0.1",
@@ -267,6 +269,14 @@
"node": ">=8"
}
},
"node_modules/webpack-node-externals": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz",
"integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==",
"engines": {
"node": ">=6"
}
},
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+4 -2
View File
@@ -1,9 +1,11 @@
{
"dependencies": {
"@grpc/grpc-js": "^1.8.18",
"google-protobuf": "^3.21.2"
"google-protobuf": "^3.21.2",
"webpack-node-externals": "^3.0.0"
},
"devDependencies": {
"@types/google-protobuf": "^3.15.6"
"@types/google-protobuf": "^3.15.6",
"@types/node": "^20.4.4"
}
}
+645
View File
@@ -0,0 +1,645 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.sleep = exports.sender = exports.Bucket = exports.Adapter = void 0;
const srpc_1 = require("./srpc");
const grpc_1 = __importStar(require("@grpc/grpc-js"));
let client = new srpc_1.srpc.SillyGirlServiceClient("localhost:50051", grpc_1.credentials.createInsecure());
let senders = [];
let plugin_id = process.env?.PLUGIN_ID ?? "";
process.on("beforeExit", () => {
for (let sender of senders) {
sender.destructor();
}
});
class Sender {
uuid;
destoried = false;
constructor(uuid) {
this.uuid = uuid;
senders.push(this);
}
destructor() {
if (this.destoried)
return;
this.destoried = true;
client.SenderDestroy(new srpc_1.srpc.ReplyRequest({ uuid: sender.uuid }), (err, resp) => { });
}
async getUserId() {
return new Promise((resolve, reject) => {
client.SenderGetUserId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
}
});
});
}
async getUserName() {
return new Promise((resolve, reject) => {
client.SenderGetUserName(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
}
});
});
}
async getChatId() {
return new Promise((resolve, reject) => {
client.SenderGetChatId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
}
});
});
}
async getChatName() {
return new Promise((resolve, reject) => {
client.SenderGetChatName(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
}
});
});
}
async getMessageId() {
return new Promise((resolve, reject) => {
client.SenderGetMessageId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
}
});
});
}
async getPlatform() {
return new Promise((resolve, reject) => {
client.SenderGetPlatform(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
}
});
});
}
async getBotId() {
return new Promise((resolve, reject) => {
client.SenderGetBotId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
}
});
});
}
async getContent() {
return new Promise((resolve, reject) => {
client.SenderGetContent(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
}
});
});
}
async param(key) {
return new Promise((resolve, reject) => {
client.SenderParam(new srpc_1.srpc.ReplyRequest({
uuid: this.uuid,
content: `${key}`,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value ?? "");
}
});
});
}
async setContent(content) {
return new Promise((resolve, reject) => {
client.SenderSetContent(new srpc_1.srpc.SenderContentRequest({
uuid: this.uuid,
content,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(undefined);
}
});
});
}
async continue() {
return new Promise((resolve, reject) => {
client.SenderContinue(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(undefined);
}
});
});
}
async getAdapter() {
return new Adapter({
bot_id: await this.getBotId(),
platform: await this.getPlatform(),
});
}
async listen(options) {
return new Promise(async (resolve, reject) => {
let params = {
uuid: this.uuid,
rules: options?.rules,
timeout: options?.timeout,
listen_private: options?.listen_private,
listen_group: options?.listen_group,
allow_platforms: options?.allow_platforms,
prohibit_platforms: options?.prohibit_platforms,
allow_groups: options?.allow_groups,
prohibit_groups: options?.prohibit_groups,
allow_users: options?.allow_users,
prohibit_users: options?.prohibit_users,
persistent: options?.persistent,
plugin_id,
};
if (options?.handle && "*" == (await this.getPlatform())) {
params.persistent = true;
}
const call = client.SenderListen();
// let callback: any = options.replyHandler;
// console.log("===",this.uuid)
call.on("data", (response) => {
if (response.echo == "END") {
call.cancel();
return;
}
let s = new Sender(response.uuid);
if (options?.handle) {
// console.log(`options?.handle`, options.persistent)
let obj = options?.handle(s);
if (typeof obj == "string") {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: obj,
}));
}
else if (obj) {
obj
.then((v) => {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: v ?? "",
}));
})
.catch((e) => {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: "",
}));
});
}
else {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: "",
}));
}
// console.log(`options?.handle`, options.persistent)
}
else {
// console.log(`call.cancel()`, options?.persistent)
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: "",
}));
// console.log(`call.cancel()`, options?.persistent)
}
// console.log("response", JSON.stringify(response));
// call.cancel()
resolve(s);
});
call.on("error", (err) => {
reject(err);
// console.error(err);
});
// console.log("params", JSON.stringify(params));
call.write(new srpc_1.srpc.SenderListenRequest(params));
}
// client.SenderListen(new srpc.SenderListenRequest(params), (err, resp) => {
// if (err) {
// reject(err);
// } else {
// if (resp?.value) {
// let handle = options?.handle;
// let s = new Sender(resp.value);
// resolve(s);
// if (handle) {
// handle(s);
// }
// } else {
// reject(new Error("timeout"));
// }
// }
// });
// }
);
}
holdOn(str) {
return "go_again_" + str;
}
async reply(content) {
return new Promise((resolve, reject) => {
client.SenderReply(new srpc_1.srpc.ReplyRequest({
uuid: this.uuid,
content,
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
}
});
});
}
async action(options) {
return new Promise((resolve, reject) => {
client.SenderAction(new srpc_1.srpc.ReplyRequest({
uuid: this.uuid,
content: JSON.stringify(options),
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value);
}
});
});
}
async event() {
return;
}
}
class Bucket {
name;
constructor(name) {
this.name = name;
}
transform(v) {
if (!v) {
return undefined;
}
let result;
if (v.startsWith("f:")) {
result = parseFloat(v.replace("f:", ""));
return result;
}
if (v.startsWith("d:")) {
result = parseInt(v.replace("d:", ""));
return result;
}
if (v.startsWith("b:")) {
result = v.replace("b:", "") === "true";
return result;
}
if (v.startsWith("o:")) {
result = JSON.parse(v.replace("o:", ""));
return result;
}
return v;
}
reverseTransform(value) {
if (typeof value === "number" || typeof value === "boolean") {
return value.toString();
}
if (typeof value === "object" && value !== null) {
return "o:" + JSON.stringify(value);
}
if (value === undefined || value === null) {
return "";
}
if (typeof value === "string") {
if (!value) {
return "";
}
if (!isNaN(parseFloat(value))) {
return "f:" + parseFloat(value);
}
if (!isNaN(parseInt(value))) {
return "d:" + parseInt(value);
}
if (value === "true" || value === "false") {
return "b:" + (value === "true");
}
}
return value;
}
async get(key, defaultValue = undefined) {
return new Promise((resolve, reject) => {
client.BucketGet(new srpc_1.srpc.BucketKeyRequest({ name: this.name, key }), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(this.transform(resp?.value) || defaultValue);
}
});
});
}
async set(key, value) {
return new Promise((resolve, reject) => {
client.BucketSet(new srpc_1.srpc.BucketSetRequest({
name: this.name,
key,
value: this.reverseTransform(value),
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve({
message: resp?.message,
changed: resp?.changed,
});
}
});
});
}
async getAll() {
return new Promise((resolve, reject) => {
client.BucketGetAll(new srpc_1.srpc.BucketRequest({ name: this.name }), (err, resp) => {
if (err) {
reject(err);
}
else {
let values = {};
if (resp?.value) {
values = JSON.parse(resp?.value);
for (let key in values) {
values[key] = this.transform(values[key]);
}
}
resolve(values);
}
});
});
}
async delete() {
return new Promise((resolve, reject) => {
client.BucketDelete(new srpc_1.srpc.BucketRequest({ name: this.name }), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(undefined);
}
});
});
}
async keys() {
return new Promise((resolve, reject) => {
client.BucketKeys(new srpc_1.srpc.BucketRequest({ name: this.name }), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.keys);
}
});
});
}
async len() {
return new Promise((resolve, reject) => {
client.BucketLen(new srpc_1.srpc.BucketRequest({ name: this.name }), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.length);
}
});
});
}
async buckets() {
return new Promise((resolve, reject) => {
client.BucketBuckets(new srpc_1.srpc.Empty(), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.buckets);
}
});
});
}
watch(key, handle) {
const call = client.BucketWatch();
call.on("data", async (response) => {
let fin = handle(this.transform(response.old), this.transform(response.now), response.key);
fin = await fin;
let result = {
echo: response.echo,
};
if (!fin) {
result.error = "VOID";
}
else {
result.now = this.reverseTransform(fin.now);
result.message = fin.message;
result.error = fin.error;
}
call.write(new srpc_1.srpc.BucketWatchRequest(result));
});
call.on("error", (err) => {
// console.error(err);
});
call.write(new srpc_1.srpc.BucketWatchRequest({
name: this.name,
key: key,
plugin_id,
}));
}
async _name() {
return this.name;
}
}
exports.Bucket = Bucket;
class Adapter {
platform;
bot_id;
call;
constructor(options) {
this.platform = options.platform;
this.bot_id = options.bot_id;
if (options.replyHandler) {
const call = client.AdapterRegist();
let callback = options.replyHandler;
call.on("data", (response) => {
// console.log("start on data")
let message = JSON.parse(response.value);
const { echo, __type__ } = message;
delete message.__type__;
delete message.echo;
if (__type__ == "reply") {
call.write(new srpc_1.srpc.AdapterRegistRequest({
bot_id: echo,
platform: callback(message),
}));
}
if (__type__ == "action" && options.actionHandler) {
call.write(new srpc_1.srpc.AdapterRegistRequest({
bot_id: echo,
platform: options.actionHandler(message),
}));
}
// console.log("end on data")
});
call.on("error", (err) => {
console.error("adapter disc", err);
});
// console.log("before write")
call.write(new srpc_1.srpc.AdapterRegistRequest({
bot_id: options.bot_id,
platform: options.platform,
}));
// console.log("after write write")
this.call = call;
}
}
setActionHandler(func) {
// 将从服务端不断接收action消息,并处理
// 事件处理巨饼
}
async receive(message) {
//投递消息
return new Promise((resolve, reject) => {
client.AdapterReceive(new srpc_1.srpc.AdapterRequest({
platform: this.platform,
bot_id: this.bot_id,
value: JSON.stringify(message),
}), (err, resp) => {
if (err) {
reject(err);
}
else if (resp?.value) {
resolve(new Sender(resp.value));
}
});
});
}
async push(message) {
//推送消息
return new Promise((resolve, reject) => {
client.AdapterPush(new srpc_1.srpc.AdapterRequest({
platform: this.platform,
bot_id: this.bot_id,
value: JSON.stringify(message),
}), (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(resp?.value ?? "");
}
});
});
}
async destroy() {
this.call.cancel();
}
async sender(options) {
return new Promise((resolve, reject) => {
client.AdapterSender(new srpc_1.srpc.AdapterRequest({
platform: this.platform,
bot_id: this.bot_id,
value: JSON.stringify(options),
}), (err, resp) => {
if (err) {
reject(err);
}
else if (resp?.value) {
resolve(new Sender(resp.value));
}
});
});
}
}
exports.Adapter = Adapter;
let sender = new Sender(process.env?.SENDER_ID ?? "");
exports.sender = sender;
async function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
exports.sleep = sleep;
class Console {
error = (message, ...optionalParams) => {
};
info = (message, ...optionalParams) => { };
log = (message, ...optionalParams) => { };
debug = (message, ...optionalParams) => { };
}
+8 -14
View File
@@ -736,19 +736,13 @@ async function sleep(ms: number | undefined) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
let console = {
error: (message?: any, ...optionalParams: any[])=>{
class Console {
error = (message?: any, ...optionalParams: any[]) => {
},
info: (message?: any, ...optionalParams: any[])=>{
};
info = (message?: any, ...optionalParams: any[]) => {};
log = (message?: any, ...optionalParams: any[]) => {};
debug = (message?: any, ...optionalParams: any[]) => {};
}
},
log: (message?: any, ...optionalParams: any[])=>{
},
debug: (message?: any, ...optionalParams: any[])=>{
},
};
export { Adapter, Bucket, sender, sleep};
export { Adapter, Bucket, sender, sleep };
+912
View File
@@ -0,0 +1,912 @@
/// <reference types="node" />
/**
* Generated by the protoc-gen-ts. DO NOT EDIT!
* compiler version: 3.15.6
* source: srpc.proto
* git: https://github.com/thesayyn/protoc-gen-ts */
import * as pb_1 from "google-protobuf";
import * as grpc_1 from "@grpc/grpc-js";
export declare namespace srpc {
export class Empty extends pb_1.Message {
#private;
constructor(data?: any[] | {});
static fromObject(data: {}): Empty;
toObject(): {};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Empty;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): Empty;
}
export class Default extends pb_1.Message {
#private;
constructor(data?: any[] | {
value?: string;
});
get value(): string;
set value(value: string);
static fromObject(data: {
value?: string;
}): Default;
toObject(): {
value?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Default;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): Default;
}
export class BucketSetRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
name?: string;
key?: string;
value?: string;
});
get name(): string;
set name(value: string);
get key(): string;
set key(value: string);
get value(): string;
set value(value: string);
static fromObject(data: {
name?: string;
key?: string;
value?: string;
}): BucketSetRequest;
toObject(): {
name?: string | undefined;
key?: string | undefined;
value?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): BucketSetRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): BucketSetRequest;
}
export class BucketWatchRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
name?: string;
key?: string;
message?: string;
error?: string;
now?: string;
echo?: string;
plugin_id?: string;
});
get name(): string;
set name(value: string);
get key(): string;
set key(value: string);
get message(): string;
set message(value: string);
get error(): string;
set error(value: string);
get now(): string;
set now(value: string);
get echo(): string;
set echo(value: string);
get plugin_id(): string;
set plugin_id(value: string);
static fromObject(data: {
name?: string;
key?: string;
message?: string;
error?: string;
now?: string;
echo?: string;
plugin_id?: string;
}): BucketWatchRequest;
toObject(): {
name?: string | undefined;
key?: string | undefined;
message?: string | undefined;
error?: string | undefined;
now?: string | undefined;
echo?: string | undefined;
plugin_id?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): BucketWatchRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): BucketWatchRequest;
}
export class BucketWatchResponse extends pb_1.Message {
#private;
constructor(data?: any[] | {
echo?: string;
old?: string;
now?: string;
key?: string;
});
get echo(): string;
set echo(value: string);
get old(): string;
set old(value: string);
get now(): string;
set now(value: string);
get key(): string;
set key(value: string);
static fromObject(data: {
echo?: string;
old?: string;
now?: string;
key?: string;
}): BucketWatchResponse;
toObject(): {
echo?: string | undefined;
old?: string | undefined;
now?: string | undefined;
key?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): BucketWatchResponse;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): BucketWatchResponse;
}
export class BucketSetResponse extends pb_1.Message {
#private;
constructor(data?: any[] | {
changed?: boolean;
message?: string;
});
get changed(): boolean;
set changed(value: boolean);
get message(): string;
set message(value: string);
static fromObject(data: {
changed?: boolean;
message?: string;
}): BucketSetResponse;
toObject(): {
changed?: boolean | undefined;
message?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): BucketSetResponse;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): BucketSetResponse;
}
export class BucketKeyRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
name?: string;
key?: string;
});
get name(): string;
set name(value: string);
get key(): string;
set key(value: string);
static fromObject(data: {
name?: string;
key?: string;
}): BucketKeyRequest;
toObject(): {
name?: string | undefined;
key?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): BucketKeyRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): BucketKeyRequest;
}
export class BucketRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
name?: string;
});
get name(): string;
set name(value: string);
static fromObject(data: {
name?: string;
}): BucketRequest;
toObject(): {
name?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): BucketRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): BucketRequest;
}
export class BucketKeysResponse extends pb_1.Message {
#private;
constructor(data?: any[] | {
keys?: string[];
});
get keys(): string[];
set keys(value: string[]);
static fromObject(data: {
keys?: string[];
}): BucketKeysResponse;
toObject(): {
keys?: string[] | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): BucketKeysResponse;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): BucketKeysResponse;
}
export class LenResponse extends pb_1.Message {
#private;
constructor(data?: any[] | {
length?: number;
});
get length(): number;
set length(value: number);
static fromObject(data: {
length?: number;
}): LenResponse;
toObject(): {
length?: number | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): LenResponse;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): LenResponse;
}
export class BucketsResponse extends pb_1.Message {
#private;
constructor(data?: any[] | {
buckets?: string[];
});
get buckets(): string[];
set buckets(value: string[]);
static fromObject(data: {
buckets?: string[];
}): BucketsResponse;
toObject(): {
buckets?: string[] | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): BucketsResponse;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): BucketsResponse;
}
export class SenderRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
uuid?: string;
});
get uuid(): string;
set uuid(value: string);
static fromObject(data: {
uuid?: string;
}): SenderRequest;
toObject(): {
uuid?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): SenderRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): SenderRequest;
}
export class ReplyRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
uuid?: string;
content?: string;
});
get uuid(): string;
set uuid(value: string);
get content(): string;
set content(value: string);
static fromObject(data: {
uuid?: string;
content?: string;
}): ReplyRequest;
toObject(): {
uuid?: string | undefined;
content?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ReplyRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): ReplyRequest;
}
export class SenderContentRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
uuid?: string;
content?: string;
});
get uuid(): string;
set uuid(value: string);
get content(): string;
set content(value: string);
static fromObject(data: {
uuid?: string;
content?: string;
}): SenderContentRequest;
toObject(): {
uuid?: string | undefined;
content?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): SenderContentRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): SenderContentRequest;
}
export class SenderListenResponse extends pb_1.Message {
#private;
constructor(data?: any[] | {
echo?: string;
uuid?: string;
});
get echo(): string;
set echo(value: string);
get uuid(): string;
set uuid(value: string);
static fromObject(data: {
echo?: string;
uuid?: string;
}): SenderListenResponse;
toObject(): {
echo?: string | undefined;
uuid?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): SenderListenResponse;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): SenderListenResponse;
}
export class SenderListenRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
uuid?: string;
rules?: string[];
timeout?: number;
listen_group?: boolean;
listen_private?: boolean;
require_admin?: boolean;
allow_platforms?: string[];
prohibit_platforms?: string[];
allow_users?: string[];
prohibit_users?: string[];
allow_groups?: string[];
prohibit_groups?: string[];
persistent?: boolean;
value?: string;
plugin_id?: string;
});
get uuid(): string;
set uuid(value: string);
get rules(): string[];
set rules(value: string[]);
get timeout(): number;
set timeout(value: number);
get listen_group(): boolean;
set listen_group(value: boolean);
get listen_private(): boolean;
set listen_private(value: boolean);
get require_admin(): boolean;
set require_admin(value: boolean);
get allow_platforms(): string[];
set allow_platforms(value: string[]);
get prohibit_platforms(): string[];
set prohibit_platforms(value: string[]);
get allow_users(): string[];
set allow_users(value: string[]);
get prohibit_users(): string[];
set prohibit_users(value: string[]);
get allow_groups(): string[];
set allow_groups(value: string[]);
get prohibit_groups(): string[];
set prohibit_groups(value: string[]);
get persistent(): boolean;
set persistent(value: boolean);
get value(): string;
set value(value: string);
get plugin_id(): string;
set plugin_id(value: string);
static fromObject(data: {
uuid?: string;
rules?: string[];
timeout?: number;
listen_group?: boolean;
listen_private?: boolean;
require_admin?: boolean;
allow_platforms?: string[];
prohibit_platforms?: string[];
allow_users?: string[];
prohibit_users?: string[];
allow_groups?: string[];
prohibit_groups?: string[];
persistent?: boolean;
value?: string;
plugin_id?: string;
}): SenderListenRequest;
toObject(): {
uuid?: string | undefined;
rules?: string[] | undefined;
timeout?: number | undefined;
listen_group?: boolean | undefined;
listen_private?: boolean | undefined;
require_admin?: boolean | undefined;
allow_platforms?: string[] | undefined;
prohibit_platforms?: string[] | undefined;
allow_users?: string[] | undefined;
prohibit_users?: string[] | undefined;
allow_groups?: string[] | undefined;
prohibit_groups?: string[] | undefined;
persistent?: boolean | undefined;
value?: string | undefined;
plugin_id?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): SenderListenRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): SenderListenRequest;
}
export class AdapterRegistRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
platform?: string;
bot_id?: string;
});
get platform(): string;
set platform(value: string);
get bot_id(): string;
set bot_id(value: string);
static fromObject(data: {
platform?: string;
bot_id?: string;
}): AdapterRegistRequest;
toObject(): {
platform?: string | undefined;
bot_id?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): AdapterRegistRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): AdapterRegistRequest;
}
export class AdapterRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
platform?: string;
bot_id?: string;
value?: string;
});
get platform(): string;
set platform(value: string);
get bot_id(): string;
set bot_id(value: string);
get value(): string;
set value(value: string);
static fromObject(data: {
platform?: string;
bot_id?: string;
value?: string;
}): AdapterRequest;
toObject(): {
platform?: string | undefined;
bot_id?: string | undefined;
value?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): AdapterRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): AdapterRequest;
}
export class Any extends pb_1.Message {
#private;
constructor(data?: any[] | {
type_url?: string;
value?: Uint8Array;
});
get type_url(): string;
set type_url(value: string);
get value(): Uint8Array;
set value(value: Uint8Array);
static fromObject(data: {
type_url?: string;
value?: Uint8Array;
}): Any;
toObject(): {
type_url?: string | undefined;
value?: Uint8Array | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Any;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): Any;
}
export class ConsoleRequest extends pb_1.Message {
#private;
constructor(data?: any[] | {
type?: string;
content?: string;
plugin_id?: string;
});
get type(): string;
set type(value: string);
get content(): string;
set content(value: string);
get plugin_id(): string;
set plugin_id(value: string);
static fromObject(data: {
type?: string;
content?: string;
plugin_id?: string;
}): ConsoleRequest;
toObject(): {
type?: string | undefined;
content?: string | undefined;
plugin_id?: string | undefined;
};
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ConsoleRequest;
serializeBinary(): Uint8Array;
static deserializeBinary(bytes: Uint8Array): ConsoleRequest;
}
interface GrpcUnaryServiceInterface<P, R> {
(message: P, metadata: grpc_1.Metadata, options: grpc_1.CallOptions, callback: grpc_1.requestCallback<R>): grpc_1.ClientUnaryCall;
(message: P, metadata: grpc_1.Metadata, callback: grpc_1.requestCallback<R>): grpc_1.ClientUnaryCall;
(message: P, options: grpc_1.CallOptions, callback: grpc_1.requestCallback<R>): grpc_1.ClientUnaryCall;
(message: P, callback: grpc_1.requestCallback<R>): grpc_1.ClientUnaryCall;
}
interface GrpcChunkServiceInterface<P, R> {
(metadata: grpc_1.Metadata, options?: grpc_1.CallOptions): grpc_1.ClientDuplexStream<P, R>;
(options?: grpc_1.CallOptions): grpc_1.ClientDuplexStream<P, R>;
}
export abstract class UnimplementedSillyGirlServiceService {
static definition: {
BucketGet: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: BucketKeyRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => BucketKeyRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
BucketSet: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: BucketSetRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => BucketSetRequest;
responseSerialize: (message: BucketSetResponse) => Buffer;
responseDeserialize: (bytes: Buffer) => BucketSetResponse;
};
BucketDelete: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: BucketRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => BucketRequest;
responseSerialize: (message: Empty) => Buffer;
responseDeserialize: (bytes: Buffer) => Empty;
};
BucketKeys: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: BucketRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => BucketRequest;
responseSerialize: (message: BucketKeysResponse) => Buffer;
responseDeserialize: (bytes: Buffer) => BucketKeysResponse;
};
BucketLen: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: BucketRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => BucketRequest;
responseSerialize: (message: LenResponse) => Buffer;
responseDeserialize: (bytes: Buffer) => LenResponse;
};
BucketGetAll: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: BucketRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => BucketRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
BucketBuckets: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: Empty) => Buffer;
requestDeserialize: (bytes: Buffer) => Empty;
responseSerialize: (message: BucketsResponse) => Buffer;
responseDeserialize: (bytes: Buffer) => BucketsResponse;
};
BucketWatch: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: BucketWatchRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => BucketWatchRequest;
responseSerialize: (message: BucketWatchResponse) => Buffer;
responseDeserialize: (bytes: Buffer) => BucketWatchResponse;
};
SenderGetUserId: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderGetUserName: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderGetChatId: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderGetChatName: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderGetMessageId: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderGetPlatform: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderGetBotId: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderGetContent: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderSetContent: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderContentRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderContentRequest;
responseSerialize: (message: Empty) => Buffer;
responseDeserialize: (bytes: Buffer) => Empty;
};
SenderContinue: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderRequest;
responseSerialize: (message: Empty) => Buffer;
responseDeserialize: (bytes: Buffer) => Empty;
};
SenderListen: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderListenRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderListenRequest;
responseSerialize: (message: SenderListenResponse) => Buffer;
responseDeserialize: (bytes: Buffer) => SenderListenResponse;
};
SenderEvent: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: SenderRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => SenderRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderReply: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: ReplyRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => ReplyRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderParam: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: ReplyRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => ReplyRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderAction: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: ReplyRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => ReplyRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
SenderDestroy: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: ReplyRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => ReplyRequest;
responseSerialize: (message: Empty) => Buffer;
responseDeserialize: (bytes: Buffer) => Empty;
};
AdapterRegist: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: AdapterRegistRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => AdapterRegistRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
AdapterReceive: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: AdapterRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => AdapterRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
AdapterPush: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: AdapterRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => AdapterRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
AdapterDestroy: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: AdapterRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => AdapterRequest;
responseSerialize: (message: Empty) => Buffer;
responseDeserialize: (bytes: Buffer) => Empty;
};
AdapterSender: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: AdapterRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => AdapterRequest;
responseSerialize: (message: Default) => Buffer;
responseDeserialize: (bytes: Buffer) => Default;
};
Console: {
path: string;
requestStream: boolean;
responseStream: boolean;
requestSerialize: (message: ConsoleRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => ConsoleRequest;
responseSerialize: (message: Empty) => Buffer;
responseDeserialize: (bytes: Buffer) => Empty;
};
};
[method: string]: grpc_1.UntypedHandleCall;
abstract BucketGet(call: grpc_1.ServerUnaryCall<BucketKeyRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract BucketSet(call: grpc_1.ServerUnaryCall<BucketSetRequest, BucketSetResponse>, callback: grpc_1.sendUnaryData<BucketSetResponse>): void;
abstract BucketDelete(call: grpc_1.ServerUnaryCall<BucketRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract BucketKeys(call: grpc_1.ServerUnaryCall<BucketRequest, BucketKeysResponse>, callback: grpc_1.sendUnaryData<BucketKeysResponse>): void;
abstract BucketLen(call: grpc_1.ServerUnaryCall<BucketRequest, LenResponse>, callback: grpc_1.sendUnaryData<LenResponse>): void;
abstract BucketGetAll(call: grpc_1.ServerUnaryCall<BucketRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract BucketBuckets(call: grpc_1.ServerUnaryCall<Empty, BucketsResponse>, callback: grpc_1.sendUnaryData<BucketsResponse>): void;
abstract BucketWatch(call: grpc_1.ServerDuplexStream<BucketWatchRequest, BucketWatchResponse>): void;
abstract SenderGetUserId(call: grpc_1.ServerUnaryCall<SenderRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderGetUserName(call: grpc_1.ServerUnaryCall<SenderRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderGetChatId(call: grpc_1.ServerUnaryCall<SenderRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderGetChatName(call: grpc_1.ServerUnaryCall<SenderRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderGetMessageId(call: grpc_1.ServerUnaryCall<SenderRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderGetPlatform(call: grpc_1.ServerUnaryCall<SenderRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderGetBotId(call: grpc_1.ServerUnaryCall<SenderRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderGetContent(call: grpc_1.ServerUnaryCall<SenderRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderSetContent(call: grpc_1.ServerUnaryCall<SenderContentRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract SenderContinue(call: grpc_1.ServerUnaryCall<SenderRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract SenderListen(call: grpc_1.ServerDuplexStream<SenderListenRequest, SenderListenResponse>): void;
abstract SenderEvent(call: grpc_1.ServerUnaryCall<SenderRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderReply(call: grpc_1.ServerUnaryCall<ReplyRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderParam(call: grpc_1.ServerUnaryCall<ReplyRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderAction(call: grpc_1.ServerUnaryCall<ReplyRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderDestroy(call: grpc_1.ServerUnaryCall<ReplyRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract AdapterRegist(call: grpc_1.ServerDuplexStream<AdapterRegistRequest, Default>): void;
abstract AdapterReceive(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract AdapterPush(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract AdapterDestroy(call: grpc_1.ServerUnaryCall<AdapterRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract AdapterSender(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract Console(call: grpc_1.ServerUnaryCall<ConsoleRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
}
const SillyGirlServiceClient_base: grpc_1.ServiceClientConstructor;
export class SillyGirlServiceClient extends SillyGirlServiceClient_base {
constructor(address: string, credentials: grpc_1.ChannelCredentials, options?: Partial<grpc_1.ChannelOptions>);
BucketGet: GrpcUnaryServiceInterface<BucketKeyRequest, Default>;
BucketSet: GrpcUnaryServiceInterface<BucketSetRequest, BucketSetResponse>;
BucketDelete: GrpcUnaryServiceInterface<BucketRequest, Empty>;
BucketKeys: GrpcUnaryServiceInterface<BucketRequest, BucketKeysResponse>;
BucketLen: GrpcUnaryServiceInterface<BucketRequest, LenResponse>;
BucketGetAll: GrpcUnaryServiceInterface<BucketRequest, Default>;
BucketBuckets: GrpcUnaryServiceInterface<Empty, BucketsResponse>;
BucketWatch: GrpcChunkServiceInterface<BucketWatchRequest, BucketWatchResponse>;
SenderGetUserId: GrpcUnaryServiceInterface<SenderRequest, Default>;
SenderGetUserName: GrpcUnaryServiceInterface<SenderRequest, Default>;
SenderGetChatId: GrpcUnaryServiceInterface<SenderRequest, Default>;
SenderGetChatName: GrpcUnaryServiceInterface<SenderRequest, Default>;
SenderGetMessageId: GrpcUnaryServiceInterface<SenderRequest, Default>;
SenderGetPlatform: GrpcUnaryServiceInterface<SenderRequest, Default>;
SenderGetBotId: GrpcUnaryServiceInterface<SenderRequest, Default>;
SenderGetContent: GrpcUnaryServiceInterface<SenderRequest, Default>;
SenderSetContent: GrpcUnaryServiceInterface<SenderContentRequest, Empty>;
SenderContinue: GrpcUnaryServiceInterface<SenderRequest, Empty>;
SenderListen: GrpcChunkServiceInterface<SenderListenRequest, SenderListenResponse>;
SenderEvent: GrpcUnaryServiceInterface<SenderRequest, Default>;
SenderReply: GrpcUnaryServiceInterface<ReplyRequest, Default>;
SenderParam: GrpcUnaryServiceInterface<ReplyRequest, Default>;
SenderAction: GrpcUnaryServiceInterface<ReplyRequest, Default>;
SenderDestroy: GrpcUnaryServiceInterface<ReplyRequest, Empty>;
AdapterRegist: GrpcChunkServiceInterface<AdapterRegistRequest, Default>;
AdapterReceive: GrpcUnaryServiceInterface<AdapterRequest, Default>;
AdapterPush: GrpcUnaryServiceInterface<AdapterRequest, Default>;
AdapterDestroy: GrpcUnaryServiceInterface<AdapterRequest, Empty>;
AdapterSender: GrpcUnaryServiceInterface<AdapterRequest, Default>;
Console: GrpcUnaryServiceInterface<ConsoleRequest, Empty>;
}
export {};
}
+2306
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -114,7 +114,7 @@ message Any {
message ConsoleRequest {
string type = 1;
repeated Any logs = 2;
string content = 2;
string plugin_id = 3;
}
+17 -17
View File
@@ -2038,17 +2038,17 @@ export namespace srpc {
#one_of_decls: number[][] = [];
constructor(data?: any[] | {
type?: string;
logs?: Any[];
content?: string;
plugin_id?: string;
}) {
super();
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [2], this.#one_of_decls);
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
if (!Array.isArray(data) && typeof data == "object") {
if ("type" in data && data.type != undefined) {
this.type = data.type;
}
if ("logs" in data && data.logs != undefined) {
this.logs = data.logs;
if ("content" in data && data.content != undefined) {
this.content = data.content;
}
if ("plugin_id" in data && data.plugin_id != undefined) {
this.plugin_id = data.plugin_id;
@@ -2061,11 +2061,11 @@ export namespace srpc {
set type(value: string) {
pb_1.Message.setField(this, 1, value);
}
get logs() {
return pb_1.Message.getRepeatedWrapperField(this, Any, 2) as Any[];
get content() {
return pb_1.Message.getFieldWithDefault(this, 2, "") as string;
}
set logs(value: Any[]) {
pb_1.Message.setRepeatedWrapperField(this, 2, value);
set content(value: string) {
pb_1.Message.setField(this, 2, value);
}
get plugin_id() {
return pb_1.Message.getFieldWithDefault(this, 3, "") as string;
@@ -2075,15 +2075,15 @@ export namespace srpc {
}
static fromObject(data: {
type?: string;
logs?: ReturnType<typeof Any.prototype.toObject>[];
content?: string;
plugin_id?: string;
}): ConsoleRequest {
const message = new ConsoleRequest({});
if (data.type != null) {
message.type = data.type;
}
if (data.logs != null) {
message.logs = data.logs.map(item => Any.fromObject(item));
if (data.content != null) {
message.content = data.content;
}
if (data.plugin_id != null) {
message.plugin_id = data.plugin_id;
@@ -2093,14 +2093,14 @@ export namespace srpc {
toObject() {
const data: {
type?: string;
logs?: ReturnType<typeof Any.prototype.toObject>[];
content?: string;
plugin_id?: string;
} = {};
if (this.type != null) {
data.type = this.type;
}
if (this.logs != null) {
data.logs = this.logs.map((item: Any) => item.toObject());
if (this.content != null) {
data.content = this.content;
}
if (this.plugin_id != null) {
data.plugin_id = this.plugin_id;
@@ -2113,8 +2113,8 @@ export namespace srpc {
const writer = w || new pb_1.BinaryWriter();
if (this.type.length)
writer.writeString(1, this.type);
if (this.logs.length)
writer.writeRepeatedMessage(2, this.logs, (item: Any) => item.serialize(writer));
if (this.content.length)
writer.writeString(2, this.content);
if (this.plugin_id.length)
writer.writeString(3, this.plugin_id);
if (!w)
@@ -2130,7 +2130,7 @@ export namespace srpc {
message.type = reader.readString();
break;
case 2:
reader.readMessage(message.logs, () => pb_1.Message.addToRepeatedWrapperField(message, 2, Any.deserialize(reader), Any));
message.content = reader.readString();
break;
case 3:
message.plugin_id = reader.readString();
+176 -177
View File
@@ -1182,7 +1182,7 @@ type ConsoleRequest struct {
unknownFields protoimpl.UnknownFields
Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
Logs []*Any `protobuf:"bytes,2,rep,name=logs,proto3" json:"logs,omitempty"`
Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"`
PluginId string `protobuf:"bytes,3,opt,name=plugin_id,json=pluginId,proto3" json:"plugin_id,omitempty"`
}
@@ -1225,11 +1225,11 @@ func (x *ConsoleRequest) GetType() string {
return ""
}
func (x *ConsoleRequest) GetLogs() []*Any {
func (x *ConsoleRequest) GetContent() string {
if x != nil {
return x.Logs
return x.Content
}
return nil
return ""
}
func (x *ConsoleRequest) GetPluginId() string {
@@ -1347,119 +1347,119 @@ var file_srpc_proto_rawDesc = []byte{
0x41, 0x6e, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14,
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x22, 0x60, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x52,
0x61, 0x6c, 0x75, 0x65, 0x22, 0x5b, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x04, 0x6c, 0x6f,
0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e,
0x41, 0x6e, 0x79, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6c, 0x75,
0x67, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c,
0x75, 0x67, 0x69, 0x6e, 0x49, 0x64, 0x32, 0x96, 0x0d, 0x0a, 0x10, 0x53, 0x69, 0x6c, 0x6c, 0x79,
0x47, 0x69, 0x72, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x42,
0x75, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e,
0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12,
0x3c, 0x0a, 0x09, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x73,
0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b,
0x65, 0x74, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a,
0x0c, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x13, 0x2e,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12,
0x3b, 0x0a, 0x0a, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x13, 0x2e,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x18, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09,
0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x65, 0x6e, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63,
0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x12, 0x32, 0x0a, 0x0c, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x65, 0x74, 0x41, 0x6c,
0x6c, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65,
0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x0d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42,
0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d,
0x70, 0x74, 0x79, 0x1a, 0x15, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65,
0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x42, 0x75,
0x63, 0x6b, 0x65, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x18, 0x2e, 0x73, 0x72, 0x70, 0x63,
0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65,
0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01,
0x30, 0x01, 0x12, 0x35, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x55,
0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e,
0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70,
0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x0a, 0x11, 0x53, 0x65, 0x6e,
0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x13,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75,
0x6c, 0x74, 0x12, 0x35, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x43,
0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e,
0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70,
0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x0a, 0x11, 0x53, 0x65, 0x6e,
0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x13,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75,
0x6c, 0x74, 0x12, 0x38, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x4d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e,
0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x0a, 0x11,
0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x6d, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65,
0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x34, 0x0a, 0x0e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47,
0x65, 0x74, 0x42, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53,
0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73,
0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x36, 0x0a, 0x10, 0x53,
0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12,
0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61,
0x75, 0x6c, 0x74, 0x12, 0x3b, 0x0a, 0x10, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x65, 0x74,
0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53,
0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
0x12, 0x32, 0x0a, 0x0e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e,
0x75, 0x65, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45,
0x6d, 0x70, 0x74, 0x79, 0x12, 0x49, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x69,
0x73, 0x74, 0x65, 0x6e, 0x12, 0x19, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64,
0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x1a, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73,
0x74, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12,
0x31, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x13,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75,
0x6c, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c,
0x79, 0x12, 0x12, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x52, 0x65,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f,
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e,
0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69,
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49,
0x64, 0x32, 0x96, 0x0d, 0x0a, 0x10, 0x53, 0x69, 0x6c, 0x6c, 0x79, 0x47, 0x69, 0x72, 0x6c, 0x53,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
0x47, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65,
0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72,
0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x3c, 0x0a, 0x09, 0x42, 0x75,
0x63, 0x6b, 0x65, 0x74, 0x53, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42,
0x75, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x17, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x65, 0x74,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x0c, 0x42, 0x75, 0x63, 0x6b,
0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e,
0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x0a, 0x42, 0x75,
0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e,
0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x42, 0x75, 0x63, 0x6b, 0x65,
0x74, 0x4c, 0x65, 0x6e, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b,
0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x72, 0x70, 0x63,
0x2e, 0x4c, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0c,
0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x12, 0x13, 0x2e, 0x73,
0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x12, 0x33, 0x0a, 0x0d, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
0x73, 0x12, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x15,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x57,
0x61, 0x74, 0x63, 0x68, 0x12, 0x18, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b,
0x65, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x57, 0x61, 0x74, 0x63,
0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x35, 0x0a,
0x0f, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66,
0x61, 0x75, 0x6c, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x61,
0x72, 0x61, 0x6d, 0x12, 0x12, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79,
0x61, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65,
0x74, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63,
0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x35, 0x0a,
0x0f, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64,
0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66,
0x61, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65,
0x74, 0x43, 0x68, 0x61, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63,
0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x38, 0x0a,
0x12, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x49, 0x64, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65,
0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e,
0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x37, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x65,
0x72, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x13, 0x2e, 0x73,
0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x12, 0x34, 0x0a, 0x0e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x74,
0x49, 0x64, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44,
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x31, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72,
0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65,
0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70,
0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x30, 0x0a, 0x0d, 0x53, 0x65, 0x6e,
0x64, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x12, 0x12, 0x2e, 0x73, 0x72, 0x70,
0x63, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x0d, 0x41,
0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x2e, 0x73,
0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73,
0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e,
0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x28, 0x01, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x0e, 0x41,
0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x14, 0x2e,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x36, 0x0a, 0x10, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72,
0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70,
0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x3b,
0x0a, 0x10, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65,
0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72,
0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x0e, 0x53,
0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x12, 0x13, 0x2e,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12,
0x49, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x12,
0x19, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73,
0x74, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x72, 0x70,
0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x0b, 0x53, 0x65,
0x6e, 0x64, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x13, 0x2e, 0x73, 0x72, 0x70, 0x63,
0x2e, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x30, 0x0a,
0x0b, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x2e, 0x73,
0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12,
0x30, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
0x74, 0x12, 0x31, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x6f,
0x6e, 0x12, 0x12, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66,
0x61, 0x75, 0x6c, 0x74, 0x12, 0x30, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x44, 0x65,
0x73, 0x74, 0x72, 0x6f, 0x79, 0x12, 0x12, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x70,
0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x0d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65,
0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41,
0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75,
0x6c, 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x50, 0x75, 0x73,
0x68, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44,
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65,
0x72, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e,
0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x0d, 0x41,
0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x73,
0x6c, 0x74, 0x28, 0x01, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65,
0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e,
0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a,
0x0b, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x50, 0x75, 0x73, 0x68, 0x12, 0x14, 0x2e, 0x73,
0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
0x74, 0x12, 0x2c, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x2e, 0x73,
0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42,
0x07, 0x5a, 0x05, 0x73, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x74, 0x12, 0x33, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74,
0x72, 0x6f, 0x79, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74,
0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x0d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65,
0x72, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41,
0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x2c, 0x0a, 0x07,
0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x43,
0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x07, 0x5a, 0x05, 0x73, 0x72,
0x70, 0x63, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1498,72 +1498,71 @@ var file_srpc_proto_goTypes = []interface{}{
(*ConsoleRequest)(nil), // 19: srpc.ConsoleRequest
}
var file_srpc_proto_depIdxs = []int32{
18, // 0: srpc.ConsoleRequest.logs:type_name -> srpc.Any
6, // 1: srpc.SillyGirlService.BucketGet:input_type -> srpc.BucketKeyRequest
2, // 2: srpc.SillyGirlService.BucketSet:input_type -> srpc.BucketSetRequest
7, // 3: srpc.SillyGirlService.BucketDelete:input_type -> srpc.BucketRequest
7, // 4: srpc.SillyGirlService.BucketKeys:input_type -> srpc.BucketRequest
7, // 5: srpc.SillyGirlService.BucketLen:input_type -> srpc.BucketRequest
7, // 6: srpc.SillyGirlService.BucketGetAll:input_type -> srpc.BucketRequest
0, // 7: srpc.SillyGirlService.BucketBuckets:input_type -> srpc.Empty
3, // 8: srpc.SillyGirlService.BucketWatch:input_type -> srpc.BucketWatchRequest
11, // 9: srpc.SillyGirlService.SenderGetUserId:input_type -> srpc.SenderRequest
11, // 10: srpc.SillyGirlService.SenderGetUserName:input_type -> srpc.SenderRequest
11, // 11: srpc.SillyGirlService.SenderGetChatId:input_type -> srpc.SenderRequest
11, // 12: srpc.SillyGirlService.SenderGetChatName:input_type -> srpc.SenderRequest
11, // 13: srpc.SillyGirlService.SenderGetMessageId:input_type -> srpc.SenderRequest
11, // 14: srpc.SillyGirlService.SenderGetPlatform:input_type -> srpc.SenderRequest
11, // 15: srpc.SillyGirlService.SenderGetBotId:input_type -> srpc.SenderRequest
11, // 16: srpc.SillyGirlService.SenderGetContent:input_type -> srpc.SenderRequest
13, // 17: srpc.SillyGirlService.SenderSetContent:input_type -> srpc.SenderContentRequest
11, // 18: srpc.SillyGirlService.SenderContinue:input_type -> srpc.SenderRequest
15, // 19: srpc.SillyGirlService.SenderListen:input_type -> srpc.SenderListenRequest
11, // 20: srpc.SillyGirlService.SenderEvent:input_type -> srpc.SenderRequest
12, // 21: srpc.SillyGirlService.SenderReply:input_type -> srpc.ReplyRequest
12, // 22: srpc.SillyGirlService.SenderParam:input_type -> srpc.ReplyRequest
12, // 23: srpc.SillyGirlService.SenderAction:input_type -> srpc.ReplyRequest
12, // 24: srpc.SillyGirlService.SenderDestroy:input_type -> srpc.ReplyRequest
16, // 25: srpc.SillyGirlService.AdapterRegist:input_type -> srpc.AdapterRegistRequest
17, // 26: srpc.SillyGirlService.AdapterReceive:input_type -> srpc.AdapterRequest
17, // 27: srpc.SillyGirlService.AdapterPush:input_type -> srpc.AdapterRequest
17, // 28: srpc.SillyGirlService.AdapterDestroy:input_type -> srpc.AdapterRequest
17, // 29: srpc.SillyGirlService.AdapterSender:input_type -> srpc.AdapterRequest
19, // 30: srpc.SillyGirlService.Console:input_type -> srpc.ConsoleRequest
1, // 31: srpc.SillyGirlService.BucketGet:output_type -> srpc.Default
5, // 32: srpc.SillyGirlService.BucketSet:output_type -> srpc.BucketSetResponse
0, // 33: srpc.SillyGirlService.BucketDelete:output_type -> srpc.Empty
8, // 34: srpc.SillyGirlService.BucketKeys:output_type -> srpc.BucketKeysResponse
9, // 35: srpc.SillyGirlService.BucketLen:output_type -> srpc.LenResponse
1, // 36: srpc.SillyGirlService.BucketGetAll:output_type -> srpc.Default
10, // 37: srpc.SillyGirlService.BucketBuckets:output_type -> srpc.BucketsResponse
4, // 38: srpc.SillyGirlService.BucketWatch:output_type -> srpc.BucketWatchResponse
1, // 39: srpc.SillyGirlService.SenderGetUserId:output_type -> srpc.Default
1, // 40: srpc.SillyGirlService.SenderGetUserName:output_type -> srpc.Default
1, // 41: srpc.SillyGirlService.SenderGetChatId:output_type -> srpc.Default
1, // 42: srpc.SillyGirlService.SenderGetChatName:output_type -> srpc.Default
1, // 43: srpc.SillyGirlService.SenderGetMessageId:output_type -> srpc.Default
1, // 44: srpc.SillyGirlService.SenderGetPlatform:output_type -> srpc.Default
1, // 45: srpc.SillyGirlService.SenderGetBotId:output_type -> srpc.Default
1, // 46: srpc.SillyGirlService.SenderGetContent:output_type -> srpc.Default
0, // 47: srpc.SillyGirlService.SenderSetContent:output_type -> srpc.Empty
0, // 48: srpc.SillyGirlService.SenderContinue:output_type -> srpc.Empty
14, // 49: srpc.SillyGirlService.SenderListen:output_type -> srpc.SenderListenResponse
1, // 50: srpc.SillyGirlService.SenderEvent:output_type -> srpc.Default
1, // 51: srpc.SillyGirlService.SenderReply:output_type -> srpc.Default
1, // 52: srpc.SillyGirlService.SenderParam:output_type -> srpc.Default
1, // 53: srpc.SillyGirlService.SenderAction:output_type -> srpc.Default
0, // 54: srpc.SillyGirlService.SenderDestroy:output_type -> srpc.Empty
1, // 55: srpc.SillyGirlService.AdapterRegist:output_type -> srpc.Default
1, // 56: srpc.SillyGirlService.AdapterReceive:output_type -> srpc.Default
1, // 57: srpc.SillyGirlService.AdapterPush:output_type -> srpc.Default
0, // 58: srpc.SillyGirlService.AdapterDestroy:output_type -> srpc.Empty
1, // 59: srpc.SillyGirlService.AdapterSender:output_type -> srpc.Default
0, // 60: srpc.SillyGirlService.Console:output_type -> srpc.Empty
31, // [31:61] is the sub-list for method output_type
1, // [1:31] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
6, // 0: srpc.SillyGirlService.BucketGet:input_type -> srpc.BucketKeyRequest
2, // 1: srpc.SillyGirlService.BucketSet:input_type -> srpc.BucketSetRequest
7, // 2: srpc.SillyGirlService.BucketDelete:input_type -> srpc.BucketRequest
7, // 3: srpc.SillyGirlService.BucketKeys:input_type -> srpc.BucketRequest
7, // 4: srpc.SillyGirlService.BucketLen:input_type -> srpc.BucketRequest
7, // 5: srpc.SillyGirlService.BucketGetAll:input_type -> srpc.BucketRequest
0, // 6: srpc.SillyGirlService.BucketBuckets:input_type -> srpc.Empty
3, // 7: srpc.SillyGirlService.BucketWatch:input_type -> srpc.BucketWatchRequest
11, // 8: srpc.SillyGirlService.SenderGetUserId:input_type -> srpc.SenderRequest
11, // 9: srpc.SillyGirlService.SenderGetUserName:input_type -> srpc.SenderRequest
11, // 10: srpc.SillyGirlService.SenderGetChatId:input_type -> srpc.SenderRequest
11, // 11: srpc.SillyGirlService.SenderGetChatName:input_type -> srpc.SenderRequest
11, // 12: srpc.SillyGirlService.SenderGetMessageId:input_type -> srpc.SenderRequest
11, // 13: srpc.SillyGirlService.SenderGetPlatform:input_type -> srpc.SenderRequest
11, // 14: srpc.SillyGirlService.SenderGetBotId:input_type -> srpc.SenderRequest
11, // 15: srpc.SillyGirlService.SenderGetContent:input_type -> srpc.SenderRequest
13, // 16: srpc.SillyGirlService.SenderSetContent:input_type -> srpc.SenderContentRequest
11, // 17: srpc.SillyGirlService.SenderContinue:input_type -> srpc.SenderRequest
15, // 18: srpc.SillyGirlService.SenderListen:input_type -> srpc.SenderListenRequest
11, // 19: srpc.SillyGirlService.SenderEvent:input_type -> srpc.SenderRequest
12, // 20: srpc.SillyGirlService.SenderReply:input_type -> srpc.ReplyRequest
12, // 21: srpc.SillyGirlService.SenderParam:input_type -> srpc.ReplyRequest
12, // 22: srpc.SillyGirlService.SenderAction:input_type -> srpc.ReplyRequest
12, // 23: srpc.SillyGirlService.SenderDestroy:input_type -> srpc.ReplyRequest
16, // 24: srpc.SillyGirlService.AdapterRegist:input_type -> srpc.AdapterRegistRequest
17, // 25: srpc.SillyGirlService.AdapterReceive:input_type -> srpc.AdapterRequest
17, // 26: srpc.SillyGirlService.AdapterPush:input_type -> srpc.AdapterRequest
17, // 27: srpc.SillyGirlService.AdapterDestroy:input_type -> srpc.AdapterRequest
17, // 28: srpc.SillyGirlService.AdapterSender:input_type -> srpc.AdapterRequest
19, // 29: srpc.SillyGirlService.Console:input_type -> srpc.ConsoleRequest
1, // 30: srpc.SillyGirlService.BucketGet:output_type -> srpc.Default
5, // 31: srpc.SillyGirlService.BucketSet:output_type -> srpc.BucketSetResponse
0, // 32: srpc.SillyGirlService.BucketDelete:output_type -> srpc.Empty
8, // 33: srpc.SillyGirlService.BucketKeys:output_type -> srpc.BucketKeysResponse
9, // 34: srpc.SillyGirlService.BucketLen:output_type -> srpc.LenResponse
1, // 35: srpc.SillyGirlService.BucketGetAll:output_type -> srpc.Default
10, // 36: srpc.SillyGirlService.BucketBuckets:output_type -> srpc.BucketsResponse
4, // 37: srpc.SillyGirlService.BucketWatch:output_type -> srpc.BucketWatchResponse
1, // 38: srpc.SillyGirlService.SenderGetUserId:output_type -> srpc.Default
1, // 39: srpc.SillyGirlService.SenderGetUserName:output_type -> srpc.Default
1, // 40: srpc.SillyGirlService.SenderGetChatId:output_type -> srpc.Default
1, // 41: srpc.SillyGirlService.SenderGetChatName:output_type -> srpc.Default
1, // 42: srpc.SillyGirlService.SenderGetMessageId:output_type -> srpc.Default
1, // 43: srpc.SillyGirlService.SenderGetPlatform:output_type -> srpc.Default
1, // 44: srpc.SillyGirlService.SenderGetBotId:output_type -> srpc.Default
1, // 45: srpc.SillyGirlService.SenderGetContent:output_type -> srpc.Default
0, // 46: srpc.SillyGirlService.SenderSetContent:output_type -> srpc.Empty
0, // 47: srpc.SillyGirlService.SenderContinue:output_type -> srpc.Empty
14, // 48: srpc.SillyGirlService.SenderListen:output_type -> srpc.SenderListenResponse
1, // 49: srpc.SillyGirlService.SenderEvent:output_type -> srpc.Default
1, // 50: srpc.SillyGirlService.SenderReply:output_type -> srpc.Default
1, // 51: srpc.SillyGirlService.SenderParam:output_type -> srpc.Default
1, // 52: srpc.SillyGirlService.SenderAction:output_type -> srpc.Default
0, // 53: srpc.SillyGirlService.SenderDestroy:output_type -> srpc.Empty
1, // 54: srpc.SillyGirlService.AdapterRegist:output_type -> srpc.Default
1, // 55: srpc.SillyGirlService.AdapterReceive:output_type -> srpc.Default
1, // 56: srpc.SillyGirlService.AdapterPush:output_type -> srpc.Default
0, // 57: srpc.SillyGirlService.AdapterDestroy:output_type -> srpc.Empty
1, // 58: srpc.SillyGirlService.AdapterSender:output_type -> srpc.Default
0, // 59: srpc.SillyGirlService.Console:output_type -> srpc.Empty
30, // [30:60] is the sub-list for method output_type
0, // [0:30] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_srpc_proto_init() }
+109
View File
@@ -0,0 +1,109 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig to read more about this file */
/* Projects */
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
// "jsx": "preserve", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
/* Modules */
"module": "commonjs", /* Specify what module code is generated. */
// "rootDir": "./", /* Specify the root folder within your source files. */
// "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
// "resolveJsonModule": true, /* Enable importing .json files. */
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
/* JavaScript Support */
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
/* Emit */
"declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
// "outDir": "./", /* Specify an output folder for all emitted files. */
// "removeComments": true, /* Disable emitting comments. */
// "noEmit": true, /* Disable emitting files from a compilation. */
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
// "newLine": "crlf", /* Set the newline character for emitting files. */
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
/* Interop Constraints */
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
/* Type Checking */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
}
}
+25
View File
@@ -0,0 +1,25 @@
const fs = require('fs');
const path = require('path');
const vm = require('vm');
// 读取目录中的所有脚本文件
const dirPath = './scripts';
const scripts = fs.readdirSync(dirPath)
.filter(file => path.extname(file) === '.js')
.map(file => fs.readFileSync(path.join(dirPath, file), 'utf8'));
// 创建一个沙盒对象
const sandbox = {
console: console // 在沙盒中暴露 console 对象
};
const context = vm.createContext(sandbox);
// 预读取和运行所有脚本
scripts.forEach(script => {
const scriptObj = new vm.Script(script, {
filename: path.join(dirPath, 'script.js')
});
scriptObj.runInContext(context);
});
+65
View File
@@ -0,0 +1,65 @@
const path = require("path");
const nodeExternals = require("webpack-node-externals");
module.exports = {
entry: "./sillygirl.js",
output: {
path: path.resolve(__dirname, "dist"),
filename: "sillygirl.js",
library: { name: "sillygirl", type: "umd" },
// chunkFormat: "module",
},
// experiments: { outputModule: true },
target: "node",
mode: "production",
resolve: {
fallback: {
assert: false,
async_hooks: false,
buffer: false,
child_process: false,
cluster: false,
console: false,
constants: false,
crypto: false,
dgram: false,
dns: false,
domain: false,
events: false,
fs: false,
http: false,
http2: false,
https: false,
inspector: false,
module: false,
net: false,
os: false,
path: false,
perf_hooks: false,
process: false,
punycode: false,
querystring: false,
readline: false,
repl: false,
stream: false,
string_decoder: false,
timers: false,
tls: false,
trace_events: false,
tty: false,
url: false,
util: false,
v8: false,
vm: false,
zlib: false,
},
},
externalsPresets: { node: true },
externals: [
nodeExternals({
allowlist: [/grpc/, "google-protobuf"],
}),
],
};
// npx webpack --config webpack.config.js