x
This commit is contained in:
+3
-1
@@ -31,4 +31,6 @@ core/dist
|
||||
.verysync
|
||||
test
|
||||
.sillyplus
|
||||
test*
|
||||
test*
|
||||
node_modules
|
||||
plugins
|
||||
+43
-9
@@ -532,17 +532,32 @@ func (f *Factory) SetIsAdmin(function func(string) bool) {
|
||||
}
|
||||
}
|
||||
|
||||
func (f *Factory) Sender2() *CustomSender {
|
||||
func (f *Factory) Sender2(options map[string]string) *CustomSender {
|
||||
var demo = *f.demo
|
||||
sender := &demo
|
||||
sender.SetID()
|
||||
if options != nil {
|
||||
fsp := &common.FakerSenderParams{}
|
||||
if v, ok := options[CONETNT]; ok {
|
||||
fsp.Content = v
|
||||
}
|
||||
if v, ok := options[USER_ID]; ok {
|
||||
fsp.UserID = v
|
||||
}
|
||||
if v, ok := options[CHAT_ID]; ok {
|
||||
fsp.ChatID = v
|
||||
}
|
||||
if v, ok := options[MESSAGE_ID]; ok {
|
||||
fsp.MessageID = v
|
||||
}
|
||||
sender.SetFsps(fsp)
|
||||
}
|
||||
return sender
|
||||
}
|
||||
|
||||
func (f *Factory) Sender() interface{} {
|
||||
var demo = *f.demo
|
||||
sender := &demo
|
||||
return &SenderJsIplm{
|
||||
Message: sender,
|
||||
Message: f.Sender2(nil),
|
||||
Vm: f.vm,
|
||||
Private: "private",
|
||||
Group: "group",
|
||||
@@ -552,10 +567,11 @@ func (f *Factory) Sender() interface{} {
|
||||
}
|
||||
}
|
||||
|
||||
func (f *Factory) Receive(wt interface{}) *CustomSender {
|
||||
func (f *Factory) Receive(props map[string]interface{}) *CustomSender {
|
||||
var demo = *f.demo
|
||||
sender := &demo
|
||||
props := wt.(map[string]interface{})
|
||||
sender.SetID()
|
||||
console.Log("senderId", sender.GetID())
|
||||
emf := map[string]interface{}{}
|
||||
for i := range props {
|
||||
h := false
|
||||
@@ -636,12 +652,12 @@ func (sender *CustomSender) GetBotID() string {
|
||||
|
||||
type PUSH string
|
||||
|
||||
func (sender *CustomSender) Action(options map[string]interface{}) (interface{}, string) {
|
||||
func (sender *CustomSender) Action(options map[string]interface{}) (interface{}, error) {
|
||||
var platform = sender.f.botplt
|
||||
var any *common.Function
|
||||
var one *common.Function
|
||||
var result interface{}
|
||||
var err = ""
|
||||
var err error
|
||||
for _, function := range Functions {
|
||||
if function.Reply != nil && function.Reply.Platform == platform {
|
||||
if len(function.Reply.BotsID) == 0 {
|
||||
@@ -668,7 +684,7 @@ func (sender *CustomSender) Action(options map[string]interface{}) (interface{},
|
||||
result = value
|
||||
}
|
||||
if property == "error" {
|
||||
err = value.String()
|
||||
err = errors.New(value.String())
|
||||
}
|
||||
return true
|
||||
},
|
||||
@@ -897,3 +913,21 @@ func (sender *CustomSender) IsAdmin() bool {
|
||||
}
|
||||
return sender.f.isAdmin(sender.GetUserID())
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
sender.CreatedAt = time.Now()
|
||||
senders.Store(sender.id, sender)
|
||||
}
|
||||
|
||||
+18
-3
@@ -160,6 +160,8 @@ type BaseSender struct {
|
||||
params []string
|
||||
level int
|
||||
emf map[string]interface{}
|
||||
id string
|
||||
CreatedAt time.Time
|
||||
}
|
||||
|
||||
func (sender *BaseSender) SetLevel(l int) {
|
||||
@@ -369,8 +371,22 @@ func (sender *BaseSender) Event() map[string]interface{} {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sender *BaseSender) Action(map[string]interface{}) (interface{}, string) {
|
||||
return nil, ""
|
||||
func (sender *BaseSender) Action(map[string]interface{}) (interface{}, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (sender *BaseSender) GetID() string {
|
||||
return sender.id
|
||||
}
|
||||
|
||||
func (sender *BaseSender) SetID() {
|
||||
sender.id = utils.GenUUID()
|
||||
sender.CreatedAt = time.Now()
|
||||
senders.Store(sender.id, sender)
|
||||
}
|
||||
|
||||
func (sender *BaseSender) GetTime() time.Time {
|
||||
return sender.CreatedAt
|
||||
}
|
||||
|
||||
func (sender *BaseSender) IsAtLast() bool {
|
||||
@@ -581,7 +597,6 @@ func (s *BaseSender) Await(message common.Sender, callback func(common.Sender) i
|
||||
c.Result <- result
|
||||
return s.GetContent()
|
||||
}
|
||||
|
||||
case error:
|
||||
if handleErr != nil {
|
||||
handleErr(s)
|
||||
|
||||
+3
-3
@@ -63,7 +63,7 @@ func initCarry() {
|
||||
q := value.(*Queue)
|
||||
for _, qm := range q.GetValues() {
|
||||
if qm.From != nil && qm.From.GetMessageID() == event["message_id"] {
|
||||
qm.To.Sender2().RecallMessage(qm.MessageID)
|
||||
qm.To.Sender2(nil).RecallMessage(qm.MessageID)
|
||||
}
|
||||
}
|
||||
return true
|
||||
@@ -434,7 +434,7 @@ func init() {
|
||||
functions := Functions
|
||||
for _, function := range functions {
|
||||
if function.UUID != "" {
|
||||
scripts[function.UUID] = function.Title + ".js"
|
||||
scripts[function.UUID] = function.Title + function.Suffix
|
||||
}
|
||||
}
|
||||
ctx.JSON(200, map[string]interface{}{
|
||||
@@ -496,7 +496,7 @@ func init() {
|
||||
functions := Functions
|
||||
for _, function := range functions {
|
||||
if function.UUID != "" && ((len(function.Rules) == 0 && !function.OnStart && !function.Module && len(function.Https) == 0 && function.Reply == nil) || function.Carry) {
|
||||
scripts[function.UUID] = function.Title + ".js"
|
||||
scripts[function.UUID] = function.Title + function.Suffix
|
||||
}
|
||||
}
|
||||
var user_names = []NicklabeL{}
|
||||
|
||||
@@ -19,6 +19,8 @@ type Function struct {
|
||||
Origin string `json:"-"`
|
||||
UUID string `json:"id"`
|
||||
Title string `json:"title"`
|
||||
Type string `json:"type"` //脚本类型
|
||||
Suffix string `json:"suffix"` //脚本后缀
|
||||
Description string `json:"description"`
|
||||
Public bool `json:"public"`
|
||||
Icon string `json:"icon"`
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
package common
|
||||
|
||||
import "time"
|
||||
|
||||
type Sender interface {
|
||||
GetID() string
|
||||
GetTime() time.Time
|
||||
SetID()
|
||||
GetUserID() string
|
||||
GetChatID() string
|
||||
GetBotID() string
|
||||
@@ -51,7 +56,7 @@ type Sender interface {
|
||||
SetLevel(int)
|
||||
GetLevel() int
|
||||
Event() map[string]interface{}
|
||||
Action(map[string]interface{}) (interface{}, string)
|
||||
Action(map[string]interface{}) (interface{}, error)
|
||||
}
|
||||
|
||||
type FakerSenderParams struct {
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net"
|
||||
|
||||
"github.com/cdle/sillyplus/proto3/srpc"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
// protoc --go_out=. -I. --go-grpc_out=. bucket.proto
|
||||
func init() {
|
||||
go func() {
|
||||
lis, err := net.Listen("tcp", ":50051")
|
||||
if err != nil {
|
||||
log.Fatalf("failed to listen: %v", err)
|
||||
}
|
||||
s := grpc.NewServer()
|
||||
srpc.RegisterSillyGirlServiceServer(s, &SillyGirlService{})
|
||||
log.Printf("grpc server listening at %v", lis.Addr())
|
||||
if err := s.Serve(lis); err != nil {
|
||||
log.Fatalf("failed to serve: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/cdle/sillyplus/proto3/srpc"
|
||||
"github.com/cdle/sillyplus/utils"
|
||||
)
|
||||
|
||||
func (sg *SillyGirlService) AdapterRegist(stream srpc.SillyGirlService_AdapterRegistServer) error {
|
||||
var adapter *Factory
|
||||
var echos sync.Map
|
||||
for {
|
||||
req, err := stream.Recv()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if adapter == nil {
|
||||
bot_id := req.GetBotId()
|
||||
platform := req.GetPlatform()
|
||||
adapter = &Factory{}
|
||||
defer adapter.Destroy()
|
||||
adapter.Init(platform, bot_id, nil)
|
||||
adapter.SetReplyHandler(func(m map[string]interface{}) string {
|
||||
m["__type__"] = "reply"
|
||||
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 ""
|
||||
})
|
||||
} else {
|
||||
echo := req.GetBotId()
|
||||
message_id := req.GetPlatform()
|
||||
v, ok := echos.Load(echo)
|
||||
if ok {
|
||||
select {
|
||||
case v.(chan string) <- message_id:
|
||||
case <-time.After(time.Millisecond):
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) AdapterReceive(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Default, error) {
|
||||
msgs := map[string]interface{}{}
|
||||
bot_id := req.GetBotId()
|
||||
platform := req.GetPlatform()
|
||||
json.Unmarshal([]byte(req.Value), &msgs)
|
||||
adapter, err := GetAdapter(bot_id, platform)
|
||||
if err == nil {
|
||||
s := adapter.Receive(msgs)
|
||||
return &srpc.Default{Value: s.GetID()}, nil
|
||||
}
|
||||
return &srpc.Default{Value: ""}, err
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) AdapterPush(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Default, error) {
|
||||
msgs := map[string]string{}
|
||||
bot_id := req.GetBotId()
|
||||
platform := req.GetPlatform()
|
||||
json.Unmarshal([]byte(req.Value), &msgs)
|
||||
adapter, err := GetAdapter(bot_id, platform)
|
||||
if err == nil {
|
||||
result := adapter.Push(msgs)
|
||||
message_id := result["message_id"]
|
||||
error := result["error"]
|
||||
if error != "" {
|
||||
return &srpc.Default{Value: ""}, err
|
||||
}
|
||||
return &srpc.Default{Value: message_id}, err
|
||||
}
|
||||
return &srpc.Default{Value: ""}, err
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) AdapterSender(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Default, error) {
|
||||
msgs := map[string]string{}
|
||||
bot_id := req.GetBotId()
|
||||
platform := req.GetPlatform()
|
||||
json.Unmarshal([]byte(req.Value), &msgs)
|
||||
adapter, err := GetAdapter(bot_id, platform)
|
||||
if err == nil {
|
||||
s := adapter.Sender2(msgs)
|
||||
return &srpc.Default{Value: s.GetID()}, nil
|
||||
}
|
||||
return &srpc.Default{Value: ""}, err
|
||||
}
|
||||
|
||||
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)
|
||||
if err == nil {
|
||||
adapter.Destroy()
|
||||
}
|
||||
return &srpc.Empty{}, err
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cdle/sillyplus/proto3/srpc"
|
||||
"github.com/cdle/sillyplus/utils"
|
||||
)
|
||||
|
||||
type SillyGirlService struct {
|
||||
srpc.UnsafeSillyGirlServiceServer
|
||||
}
|
||||
|
||||
// Get implements BucketServiceServer.Get.
|
||||
func (sg *SillyGirlService) BucketGet(ctx context.Context, req *srpc.BucketKeyRequest) (*srpc.Default, error) {
|
||||
value := MakeBucket(req.Name).GetString(req.Key)
|
||||
return &srpc.Default{Value: value}, nil
|
||||
}
|
||||
|
||||
// Set implements BucketServiceServer.Set.
|
||||
func (sg *SillyGirlService) BucketSet(ctx context.Context, req *srpc.BucketSetRequest) (*srpc.BucketSetResponse, error) {
|
||||
message, changed, err := MakeBucket(req.Name).Set(req.Key, req.Value)
|
||||
return &srpc.BucketSetResponse{Changed: changed, Message: message}, err
|
||||
}
|
||||
|
||||
// Delete implements BucketServiceServer.Delete.
|
||||
func (sg *SillyGirlService) BucketDelete(ctx context.Context, req *srpc.BucketRequest) (*srpc.Empty, error) {
|
||||
err := MakeBucket(req.Name).Delete()
|
||||
return &srpc.Empty{}, err
|
||||
}
|
||||
|
||||
// Keys implements BucketServiceServer.Keys.
|
||||
func (sg *SillyGirlService) BucketKeys(ctx context.Context, req *srpc.BucketRequest) (*srpc.BucketKeysResponse, error) {
|
||||
keys, err := MakeBucket(req.Name).Keys()
|
||||
return &srpc.BucketKeysResponse{Keys: keys}, err
|
||||
}
|
||||
|
||||
// Len implements BucketServiceServer.Len.
|
||||
func (sg *SillyGirlService) BucketLen(ctx context.Context, req *srpc.BucketRequest) (*srpc.LenResponse, error) {
|
||||
keys, err := MakeBucket(req.Name).Keys()
|
||||
return &srpc.LenResponse{Length: int32(len(keys))}, err
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) BucketGetAll(ctx context.Context, req *srpc.BucketRequest) (*srpc.Default, error) {
|
||||
var values = map[string]string{}
|
||||
MakeBucket(req.Name).Foreach(func(b1, b2 []byte) error {
|
||||
values[string(b1)] = string(b2)
|
||||
return nil
|
||||
})
|
||||
return &srpc.Default{Value: string(utils.JsonMarshal(values))}, nil
|
||||
}
|
||||
|
||||
// Buckets implements BucketServiceServer.Buckets.
|
||||
func (sg *SillyGirlService) BucketBuckets(ctx context.Context, req *srpc.Empty) (*srpc.BucketsResponse, error) {
|
||||
return &srpc.BucketsResponse{Buckets: MakeBucket("app").Buckets()}, nil
|
||||
}
|
||||
@@ -0,0 +1,197 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"crypto/sha1"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/cdle/sillyplus/core/common"
|
||||
"github.com/cdle/sillyplus/core/storage"
|
||||
"github.com/cdle/sillyplus/utils"
|
||||
"github.com/dop251/goja"
|
||||
"github.com/fsnotify/fsnotify"
|
||||
"github.com/google/uuid"
|
||||
cron "github.com/robfig/cron/v3"
|
||||
)
|
||||
|
||||
func init() {
|
||||
go initNodePlugins()
|
||||
}
|
||||
|
||||
func initNodePlugins() {
|
||||
root := utils.ExecPath + "/plugins"
|
||||
plugins := []string{root}
|
||||
os.Mkdir(root, 0755)
|
||||
filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
|
||||
if !strings.HasPrefix(path, "/Users/a1-6/Code/sillyplus/plugins/") {
|
||||
return nil
|
||||
}
|
||||
files := strings.Split(strings.Replace(path, root+"/", "", 1), "/")
|
||||
// var plugin_dir = false
|
||||
// var plugin_index = false
|
||||
switch len(files) {
|
||||
case 1:
|
||||
// plugin_dir = true
|
||||
if info.IsDir() {
|
||||
plugins = append(plugins, path)
|
||||
}
|
||||
case 2:
|
||||
if (files[1] == "main.ts" || files[1] == "main.js") && !info.IsDir() {
|
||||
AddNodePlugin(path, files[0])
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
watcher, err := fsnotify.NewWatcher()
|
||||
if err != nil {
|
||||
fmt.Println("创建监视器失败:", err)
|
||||
return
|
||||
}
|
||||
defer watcher.Close()
|
||||
|
||||
// 要监控的文件夹路径
|
||||
|
||||
for _, dir := range plugins {
|
||||
err = watcher.Add(dir)
|
||||
if err != nil {
|
||||
fmt.Println("添加监视目录失败:", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
for {
|
||||
select {
|
||||
case event, ok := <-watcher.Events:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// fmt.Println(event.Name, "op", event.Op.String())
|
||||
files := strings.Split(strings.Replace(event.Name, root+"/", "", 1), "/")
|
||||
var plugin_dir = false
|
||||
var plugin_index = false
|
||||
var plugin_name = ""
|
||||
switch len(files) {
|
||||
case 1:
|
||||
plugin_dir = true
|
||||
fmt.Println("目录事件")
|
||||
plugin_name = files[0]
|
||||
case 2:
|
||||
if files[1] == "main.ts" || files[1] == "main.js" {
|
||||
plugin_index = true
|
||||
fmt.Println("入口文件事件")
|
||||
}
|
||||
plugin_name = files[0]
|
||||
}
|
||||
switch event.Op.String() {
|
||||
case "CREATE":
|
||||
if plugin_dir {
|
||||
info, err := os.Stat(event.Name)
|
||||
// fmt.Println(err)
|
||||
if err == nil && info.IsDir() {
|
||||
watcher.Add(event.Name)
|
||||
// fmt.Println("增加插件目录", event.Name)
|
||||
} else {
|
||||
// fmt.Println("非插件目录", event.Name)
|
||||
}
|
||||
} else if plugin_index {
|
||||
// fmt.Println("增加插件", event.Name)
|
||||
AddNodePlugin(event.Name, plugin_name)
|
||||
}
|
||||
case "REMOVE", "RENAME", "REMOVE|RENAME":
|
||||
if plugin_dir {
|
||||
watcher.Remove(event.Name)
|
||||
// fmt.Println("移除插件目录", event.Name)
|
||||
// fmt.Println("移除插件", plugin_name)
|
||||
RemNodePlugin(plugin_name)
|
||||
} else if plugin_index {
|
||||
// fmt.Println("移除插件", plugin_name)
|
||||
RemNodePlugin(plugin_name)
|
||||
}
|
||||
case "WRITE":
|
||||
if plugin_index {
|
||||
RemNodePlugin(plugin_name)
|
||||
AddNodePlugin(event.Name, plugin_name)
|
||||
// fmt.Println("变更插件", event.Name, plugin_name)
|
||||
}
|
||||
}
|
||||
case err, ok := <-watcher.Errors:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
fmt.Println("错误:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func RemNodePlugin(name string) error {
|
||||
pluginLock.Lock()
|
||||
defer pluginLock.Unlock()
|
||||
key := nameUuid(name)
|
||||
fmt.Println("rem", key, name)
|
||||
for i := range Functions {
|
||||
if Functions[i].UUID == key {
|
||||
fmt.Println("pl", key)
|
||||
DestroyAdapterByUUID(key)
|
||||
Functions[i].Running = false
|
||||
if len(Functions[i].CronIds) != 0 {
|
||||
for _, id := range Functions[i].CronIds {
|
||||
CRON.Remove(cron.EntryID(id))
|
||||
}
|
||||
}
|
||||
Functions = append(Functions[:i], Functions[i+1:]...)
|
||||
CancelPluginCrons(key)
|
||||
CancelPluginWebs(key)
|
||||
CancelPluginlistening(key)
|
||||
CancelHttpListen(key)
|
||||
remStatic(key)
|
||||
storage.DisableHandle(key)
|
||||
break
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func nameUuid(name string) string {
|
||||
hash := sha1.Sum([]byte(name))
|
||||
return uuid.NewSHA1(uuid.Nil, hash[:]).String()
|
||||
}
|
||||
|
||||
func AddNodePlugin(path, name string) error {
|
||||
pluginLock.Lock()
|
||||
defer pluginLock.Unlock()
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
data, err := ioutil.ReadAll(file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
uuid := nameUuid(name)
|
||||
// fmt.Println("add,", uuid, name)
|
||||
f, cbs := pluginParse(string(data), uuid)
|
||||
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()
|
||||
if err != nil {
|
||||
fmt.Println("命令执行失败:", err)
|
||||
return nil
|
||||
}
|
||||
// 输出命令的输出结果
|
||||
fmt.Println(string(output))
|
||||
return nil
|
||||
}
|
||||
for _, cb := range cbs {
|
||||
cb()
|
||||
}
|
||||
AddCommand([]*common.Function{f})
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,196 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/cdle/sillyplus/core/common"
|
||||
"github.com/cdle/sillyplus/proto3/srpc"
|
||||
"github.com/cdle/sillyplus/utils"
|
||||
)
|
||||
|
||||
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 GetSender(uuid string) (common.Sender, error) {
|
||||
v, ok := senders.Load(uuid)
|
||||
if !ok {
|
||||
return nil, errors.New("not found sender")
|
||||
}
|
||||
return v.(common.Sender), nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderGetUserId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &srpc.Default{Value: s.GetChatID()}, nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderGetUserName(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &srpc.Default{Value: s.GetUserName()}, nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderGetChatId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &srpc.Default{Value: s.GetChatID()}, nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderGetChatName(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &srpc.Default{Value: s.GetChatName()}, nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderGetMessageId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &srpc.Default{Value: s.GetMessageID()}, nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderGetPlatform(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &srpc.Default{Value: s.GetImType()}, nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderGetBotId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &srpc.Default{Value: s.GetBotID()}, nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderGetContent(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &srpc.Default{Value: s.GetContent()}, nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderSetContent(ctx context.Context, req *srpc.SenderContentRequest) (*srpc.Empty, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
s.SetContent(req.Content)
|
||||
return &srpc.Empty{}, nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderContinue(ctx context.Context, req *srpc.SenderRequest) (*srpc.Empty, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
s.Continue()
|
||||
return &srpc.Empty{}, nil
|
||||
}
|
||||
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderEvent(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &srpc.Default{Value: string(utils.JsonMarshal(s.Event()))}, nil
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderReply(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
message_id, err := s.Reply(req.Content)
|
||||
return &srpc.Default{Value: message_id}, err
|
||||
}
|
||||
|
||||
func (sg *SillyGirlService) SenderAction(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var params = map[string]interface{}{}
|
||||
err = json.Unmarshal([]byte(req.Content), ¶ms)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := s.Action(params)
|
||||
return &srpc.Default{Value: string(utils.JsonMarshal(result))}, err
|
||||
}
|
||||
+115
-368
@@ -19,6 +19,8 @@ import (
|
||||
"github.com/robfig/cron/v3"
|
||||
)
|
||||
|
||||
var pluginLock = new(sync.Mutex)
|
||||
|
||||
type myFieldNameMapper struct{}
|
||||
|
||||
var mutexMap = make(map[string]*sync.Mutex)
|
||||
@@ -89,7 +91,9 @@ func initPlugins() {
|
||||
return nil
|
||||
})
|
||||
plugins.Foreach(func(key, data []byte) error {
|
||||
f, cbs, err := initPlugin(string(data), string(key))
|
||||
pluginLock.Lock()
|
||||
defer pluginLock.Unlock()
|
||||
f, cbs, err := initPlugin(string(data), string(key), "")
|
||||
if err != nil {
|
||||
console.Error("初始化插件%s错误: %v", key, err)
|
||||
}
|
||||
@@ -100,7 +104,7 @@ func initPlugins() {
|
||||
// os.WriteFile(fmt.Sprintf("%s/%s.js", pluginPath, f.Title), data, 0600)
|
||||
return nil
|
||||
})
|
||||
var pluginLock = new(sync.Mutex)
|
||||
|
||||
storage.Watch(plugins, nil, func(old, new, key string) (fin *storage.Final) {
|
||||
pluginLock.Lock()
|
||||
defer pluginLock.Unlock()
|
||||
@@ -110,7 +114,7 @@ func initPlugins() {
|
||||
continue
|
||||
}
|
||||
script := string(fetchScript(p.Address, key))
|
||||
if f, _, _ := initPlugin(script, p.UUID); f.CreateAt != "" {
|
||||
if f, _, _ := initPlugin(script, p.UUID, ""); f.CreateAt != "" {
|
||||
fin = &storage.Final{
|
||||
Now: script,
|
||||
}
|
||||
@@ -203,7 +207,7 @@ func initPlugins() {
|
||||
}
|
||||
new = su.script
|
||||
}
|
||||
f, cbs, err := initPlugin(new, key)
|
||||
f, cbs, err := initPlugin(new, key, "")
|
||||
if err != nil && new != "" {
|
||||
pluginConsole(key).Error(err)
|
||||
}
|
||||
@@ -227,13 +231,13 @@ func initPlugins() {
|
||||
if new != "" {
|
||||
AddCommand([]*common.Function{f})
|
||||
if old == "" {
|
||||
console.Log("已加载 %s.js", f.Title)
|
||||
console.Log("已加载 %s%s", f.Title, f.Suffix)
|
||||
} else if !f.OnStart {
|
||||
console.Log("已重载 %s.js", f.Title)
|
||||
console.Log("已重载 %s%s", f.Title, f.Suffix)
|
||||
}
|
||||
} else {
|
||||
of, _, _ := initPlugin(old, key)
|
||||
console.Log("已卸载 %s.js", of.Title)
|
||||
of, _, _ := initPlugin(old, key, "")
|
||||
console.Log("已卸载 %s%s", of.Title, of.Suffix)
|
||||
}
|
||||
apd = true
|
||||
break
|
||||
@@ -255,236 +259,12 @@ func initPlugins() {
|
||||
})
|
||||
}
|
||||
|
||||
func initPlugin(data string, uuid string) (*common.Function, []func(), error) {
|
||||
var cbs = []func(){}
|
||||
var err error
|
||||
var rules []string
|
||||
var imType *common.Filter
|
||||
var userId *common.Filter
|
||||
var groupId *common.Filter
|
||||
var cron = map[string]string{}
|
||||
var admin bool
|
||||
var disable bool
|
||||
var priority int
|
||||
var title string
|
||||
var public bool
|
||||
var description string
|
||||
var icon string
|
||||
var version string = "v1.0.0"
|
||||
var author string
|
||||
var create_at string
|
||||
var module bool
|
||||
var web bool
|
||||
var encrypt bool
|
||||
var onStart bool
|
||||
var origin = "自定义"
|
||||
var https = []*common.Http{}
|
||||
var message *common.Reply
|
||||
var FindAll bool
|
||||
var hasForm bool
|
||||
var carry bool
|
||||
var classes = []string{}
|
||||
ks := map[string]bool{}
|
||||
ress := regexp.MustCompile(
|
||||
`\*\s?@([\d\w+-]+)\s+([^\n]+?)\n`,
|
||||
).FindAllStringSubmatch(data, -1)
|
||||
for _, res := range ress {
|
||||
switch res[1] {
|
||||
case "rule", "match", "regex", "pattern":
|
||||
rule := strings.TrimSpace(res[2])
|
||||
rule = parseReply3(rule, func(s1, s2 string) {
|
||||
k := s1 + "." + s2
|
||||
if _, ok := ks[k]; !ok {
|
||||
cbs = append(cbs, func() {
|
||||
storage.Watch(MakeBucket(s1), s2, func(old, new, key string) *storage.Final {
|
||||
return &storage.Final{
|
||||
EndFunc: func() {
|
||||
plugins.Set(uuid, "reload")
|
||||
},
|
||||
}
|
||||
}, uuid)
|
||||
})
|
||||
ks[k] = true
|
||||
}
|
||||
})
|
||||
_rs := []string{}
|
||||
FR:
|
||||
ress := regexp.MustCompile(`\[([^\s\[\]]+)\]`).FindAllStringSubmatch(rule, -1)
|
||||
if len(ress) != 0 {
|
||||
res := ress[len(ress)-1]
|
||||
var inner = res[1]
|
||||
slice := strings.SplitN(inner, ":", 2)
|
||||
name := slice[0]
|
||||
ps := ""
|
||||
if len(slice) == 2 {
|
||||
ps = slice[1]
|
||||
}
|
||||
if strings.HasSuffix(name, "?") {
|
||||
name = strings.TrimRight(name, "?")
|
||||
rep := ""
|
||||
if ps == "" {
|
||||
rep = fmt.Sprintf("[%s]", name)
|
||||
} else {
|
||||
rep = fmt.Sprintf("[%s:%s]", name, ps)
|
||||
}
|
||||
for l := range _rs {
|
||||
_rs[l] = strings.Replace(_rs[l], res[0], rep, 1)
|
||||
}
|
||||
rule1 := strings.Replace(rule, res[0], rep, 1)
|
||||
if len(_rs) == 0 {
|
||||
_rs = append(_rs, rule1)
|
||||
}
|
||||
rule = strings.Replace(rule, res[0], "", 1)
|
||||
rule = regexp.MustCompile("\x20{2,}").ReplaceAllString(rule, " ")
|
||||
rule = strings.TrimSpace(rule)
|
||||
_rs = append(_rs, rule)
|
||||
goto FR
|
||||
}
|
||||
}
|
||||
if len(_rs) != 0 {
|
||||
rules = append(rules, _rs...)
|
||||
} else {
|
||||
rules = append(rules, rule)
|
||||
}
|
||||
case "class":
|
||||
classes = append(classes, regexp.MustCompile(`[\S]+`).FindAllString(res[2], -1)...)
|
||||
classes = utils.Unique(classes)
|
||||
case "platform", "imType", "platform+", "imType+":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
imType = &common.Filter{
|
||||
BlackMode: false,
|
||||
Items: item,
|
||||
}
|
||||
case "platform-", "imType-":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
imType = &common.Filter{
|
||||
BlackMode: true,
|
||||
Items: item,
|
||||
}
|
||||
case "userId", "userID", "uid", "userId+", "userID+", "uid+":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
userId = &common.Filter{
|
||||
BlackMode: false,
|
||||
Items: item,
|
||||
}
|
||||
case "userId-", "userID-", "uid-":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
userId = &common.Filter{
|
||||
BlackMode: true,
|
||||
Items: item,
|
||||
}
|
||||
case "groupId", "groupID", "groupCode", "chat_id", "chat_id+", "chatId", "chatID", "gid", "groupId+", "groupID+", "groupCode+", "chatId+", "chatID+", "gid+":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
groupId = &common.Filter{
|
||||
BlackMode: false,
|
||||
Items: item,
|
||||
}
|
||||
case "groupId-", "groupID-", "groupCode-", "chatId-", "chat_id-", "chatID-", "gid-":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
groupId = &common.Filter{
|
||||
BlackMode: true,
|
||||
Items: item,
|
||||
}
|
||||
|
||||
case "admin":
|
||||
admin = strings.TrimSpace(res[2]) == "true"
|
||||
case "disable":
|
||||
disable = strings.TrimSpace(res[2]) == "true"
|
||||
case "findall":
|
||||
FindAll = strings.TrimSpace(res[2]) == "true"
|
||||
case "priority":
|
||||
priority = utils.Int(strings.TrimSpace(res[2]))
|
||||
case "title", "name", "show":
|
||||
title = strings.TrimSpace(res[2])
|
||||
case "public":
|
||||
public = strings.TrimSpace(res[2]) == "true"
|
||||
case "description":
|
||||
description = strings.TrimSpace(res[2])
|
||||
case "icon":
|
||||
icon = strings.TrimSpace(res[2])
|
||||
case "version":
|
||||
version = strings.TrimSpace(res[2])
|
||||
case "author":
|
||||
author = strings.TrimSpace(res[2])
|
||||
case "http":
|
||||
ss := regexp.MustCompile(`[\S]+`).FindAllString(strings.TrimSpace(res[2]), -1)
|
||||
if len(ss) == 2 {
|
||||
https = append(https, &common.Http{
|
||||
Path: ss[1],
|
||||
Method: strings.ToUpper(ss[0]),
|
||||
})
|
||||
} else {
|
||||
console.Warn("http param is not 2")
|
||||
}
|
||||
case "message":
|
||||
ss := regexp.MustCompile(`[\S]+`).FindAllString(strings.TrimSpace(res[2]), -1)
|
||||
if len(ss) > 1 {
|
||||
if len(ss) == 2 && ss[1] == "*" {
|
||||
message = &common.Reply{
|
||||
Platform: ss[0],
|
||||
BotsID: []string{},
|
||||
}
|
||||
} else {
|
||||
message = &common.Reply{
|
||||
Platform: ss[0],
|
||||
BotsID: ss[1:],
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
console.Warn("message param is 0")
|
||||
}
|
||||
case "create_at":
|
||||
create_at = strings.TrimSpace(res[2])
|
||||
case "origin":
|
||||
origin = strings.TrimSpace(res[2])
|
||||
case "module":
|
||||
module = strings.TrimSpace(res[2]) == "true"
|
||||
case "web":
|
||||
web = strings.TrimSpace(res[2]) == "true"
|
||||
case "carry":
|
||||
carry = strings.TrimSpace(res[2]) == "true"
|
||||
case "encrypt":
|
||||
encrypt = strings.TrimSpace(res[2]) == "true"
|
||||
case "on_start":
|
||||
onStart = strings.TrimSpace(res[2]) == "true"
|
||||
case "form":
|
||||
hasForm = true
|
||||
case "paterner":
|
||||
paterner := strings.TrimSpace(res[2])
|
||||
go func() {
|
||||
time.Sleep(time.Second * 2)
|
||||
getPaterner(uuid, strings.TrimSpace(paterner))
|
||||
}()
|
||||
default:
|
||||
cron_ := strings.TrimSpace(res[2])
|
||||
cron_ = strings.ReplaceAll(cron_, `\/`, "/")
|
||||
if strings.HasPrefix(res[1], "cron") {
|
||||
cron[res[1]] = cron_
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func initPlugin(data string, uuid string, scriptType string) (*common.Function, []func(), error) {
|
||||
f, cbs := pluginParse(data, uuid)
|
||||
f.Suffix = ".js"
|
||||
f.Type = "goja"
|
||||
script := ""
|
||||
if encrypt {
|
||||
if f.Encrypt {
|
||||
script = DecryptPlugin(string(data))
|
||||
} else {
|
||||
script = string(data)
|
||||
@@ -494,152 +274,119 @@ func initPlugin(data string, uuid string) (*common.Function, []func(), error) {
|
||||
script = strings.ReplaceAll(script, "new Bucket", "Bucket")
|
||||
// script = regexp.MustCompile(`import\s+\{\s*([^\}]+)\s*\}\s*from\s*['"]([^'"]+)['"]\s*;`).ReplaceAllString(script, "const {$1} = require('$2');")
|
||||
// script = regexp.MustCompile(`import\s+\s*([^\}]+)\s*\s*from\s*['"]([^'"]+)['"]\s*;`).ReplaceAllString(script, "const $1 = require('$2');")
|
||||
if !hasForm {
|
||||
hasForm = strings.Contains(script, "Form(")
|
||||
}
|
||||
prg, err2 := goja.Compile(title+".js", script, false)
|
||||
var err error
|
||||
prg, err2 := goja.Compile(f.Title+".js", script, false)
|
||||
if err == nil && err2 != nil {
|
||||
err = err2
|
||||
}
|
||||
// if err == nil && len(rules) == 0 && cron != "" {
|
||||
// err = fmt.Errorf("无效的脚本%s", title)
|
||||
// }
|
||||
if web {
|
||||
onStart = true
|
||||
}
|
||||
// if icon == "" {
|
||||
// icon = "https://joeschmoe.io/api/v1/random?t=" + fmt.Sprint(time.Now().Nanosecond())
|
||||
// }
|
||||
var running func() bool
|
||||
|
||||
f := &common.Function{
|
||||
Handle: func(s common.Sender, set func(vm *goja.Runtime)) interface{} {
|
||||
if !debug {
|
||||
defer func() {
|
||||
err := recover()
|
||||
if err != nil {
|
||||
pluginConsole(uuid).Error(err)
|
||||
// s.Reply(fmt.Sprint(err))
|
||||
}
|
||||
}()
|
||||
}
|
||||
if err2 != nil {
|
||||
panic(err2)
|
||||
}
|
||||
loop := eventloop.NewEventLoop()
|
||||
loop.Run(func(vm *goja.Runtime) {
|
||||
SetPluginMethod(vm, uuid, onStart, running)
|
||||
ss := &SenderJsIplm{
|
||||
Message: s,
|
||||
Vm: vm,
|
||||
Private: "private",
|
||||
Group: "group",
|
||||
Routine: "routine",
|
||||
Persistent: "persistent",
|
||||
UUID: uuid,
|
||||
}
|
||||
vm.Set("msg", goja.Undefined())
|
||||
vm.Set("message", goja.Undefined())
|
||||
vm.Set("res", goja.Undefined())
|
||||
vm.Set("req", goja.Undefined())
|
||||
vm.Set("action", goja.Undefined())
|
||||
vm.Set("sender", ss)
|
||||
vm.Set("run", func(uuid string) bool { //执行子脚本
|
||||
fs := Functions
|
||||
for i := range fs {
|
||||
if fs[i].UUID == uuid {
|
||||
fs[i].Handle(s, nil)
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
})
|
||||
vm.Set("s", ss)
|
||||
vm.Set("InitAdapter", func(plt, botid string, params map[string]interface{}) *Factory {
|
||||
f := &Factory{
|
||||
uuid: uuid,
|
||||
vm: vm,
|
||||
}
|
||||
f.Init(plt, botid, params)
|
||||
return f
|
||||
})
|
||||
vm.Set("initAdapter", func(plt, botid string, params map[string]interface{}) *Factory {
|
||||
f := &Factory{
|
||||
uuid: uuid,
|
||||
vm: vm,
|
||||
}
|
||||
f.Init(plt, botid, params)
|
||||
return f
|
||||
})
|
||||
getAdapter := func(plt, botid string) map[string]interface{} {
|
||||
adapter, err := GetAdapter(plt, botid)
|
||||
errstr := ""
|
||||
if err != nil {
|
||||
errstr = err.Error()
|
||||
}
|
||||
return map[string]interface{}{
|
||||
"error": errstr,
|
||||
"adapter": adapter,
|
||||
}
|
||||
}
|
||||
vm.Set("GetAdapter", getAdapter)
|
||||
vm.Set("getAdapter", getAdapter)
|
||||
vm.Set("getAdapterBotsID", GetAdapterBotsID)
|
||||
vm.Set("getAdapterBotPlts", GetAdapterBotPlts)
|
||||
vm.Set("GetAdapterBotsID", GetAdapterBotsID)
|
||||
vm.Set("GetAdapterBotPlts", GetAdapterBotPlts)
|
||||
vm.Set("running", running)
|
||||
vm.Set("Running", running)
|
||||
vm.Set("uuid", func() string {
|
||||
return uuid
|
||||
})
|
||||
vm.Set("genUuid", func() string {
|
||||
return utils.GenUUID()
|
||||
})
|
||||
vm.Set("genUUID", func() string {
|
||||
return utils.GenUUID()
|
||||
})
|
||||
vm.Set("UUID", func() string {
|
||||
return uuid
|
||||
})
|
||||
if set != nil {
|
||||
set(vm)
|
||||
}
|
||||
_, err := vm.RunProgram(prg)
|
||||
f.Handle = func(s common.Sender, set func(vm *goja.Runtime)) interface{} {
|
||||
if !debug {
|
||||
defer func() {
|
||||
err := recover()
|
||||
if err != nil {
|
||||
pluginConsole(uuid).Error(strings.ReplaceAll(strings.ReplaceAll(err.Error(), "node_modules/", ""), "github.com/dop251/goja_nodejs/require", ""))
|
||||
pluginConsole(uuid).Error(err)
|
||||
// s.Reply(fmt.Sprint(err))
|
||||
}
|
||||
}()
|
||||
}
|
||||
if err2 != nil {
|
||||
panic(err2)
|
||||
}
|
||||
loop := eventloop.NewEventLoop()
|
||||
loop.Run(func(vm *goja.Runtime) {
|
||||
SetPluginMethod(vm, uuid, f.OnStart, running)
|
||||
ss := &SenderJsIplm{
|
||||
Message: s,
|
||||
Vm: vm,
|
||||
Private: "private",
|
||||
Group: "group",
|
||||
Routine: "routine",
|
||||
Persistent: "persistent",
|
||||
UUID: uuid,
|
||||
}
|
||||
vm.Set("msg", goja.Undefined())
|
||||
vm.Set("message", goja.Undefined())
|
||||
vm.Set("res", goja.Undefined())
|
||||
vm.Set("req", goja.Undefined())
|
||||
vm.Set("action", goja.Undefined())
|
||||
vm.Set("sender", ss)
|
||||
vm.Set("run", func(uuid string) bool { //执行子脚本
|
||||
fs := Functions
|
||||
for i := range fs {
|
||||
if fs[i].UUID == uuid {
|
||||
fs[i].Handle(s, nil)
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
})
|
||||
return nil
|
||||
},
|
||||
Rules: rules,
|
||||
ImType: imType,
|
||||
UserId: userId,
|
||||
GroupId: groupId,
|
||||
Cron: cron,
|
||||
Admin: admin,
|
||||
Priority: priority,
|
||||
Disable: disable,
|
||||
UUID: uuid,
|
||||
Title: title,
|
||||
Public: public,
|
||||
Description: description,
|
||||
Icon: icon,
|
||||
Version: version,
|
||||
Author: author,
|
||||
CreateAt: create_at,
|
||||
Module: module,
|
||||
Encrypt: encrypt,
|
||||
OnStart: onStart,
|
||||
Origin: origin,
|
||||
Running: onStart,
|
||||
Reply: message,
|
||||
Https: https,
|
||||
FindAll: FindAll,
|
||||
HasForm: hasForm,
|
||||
Carry: carry,
|
||||
Classes: classes,
|
||||
vm.Set("s", ss)
|
||||
vm.Set("InitAdapter", func(plt, botid string, params map[string]interface{}) *Factory {
|
||||
f := &Factory{
|
||||
uuid: uuid,
|
||||
vm: vm,
|
||||
}
|
||||
f.Init(plt, botid, params)
|
||||
return f
|
||||
})
|
||||
vm.Set("initAdapter", func(plt, botid string, params map[string]interface{}) *Factory {
|
||||
f := &Factory{
|
||||
uuid: uuid,
|
||||
vm: vm,
|
||||
}
|
||||
f.Init(plt, botid, params)
|
||||
return f
|
||||
})
|
||||
getAdapter := func(plt, botid string) map[string]interface{} {
|
||||
adapter, err := GetAdapter(plt, botid)
|
||||
errstr := ""
|
||||
if err != nil {
|
||||
errstr = err.Error()
|
||||
}
|
||||
return map[string]interface{}{
|
||||
"error": errstr,
|
||||
"adapter": adapter,
|
||||
}
|
||||
}
|
||||
vm.Set("GetAdapter", getAdapter)
|
||||
vm.Set("getAdapter", getAdapter)
|
||||
vm.Set("getAdapterBotsID", GetAdapterBotsID)
|
||||
vm.Set("getAdapterBotPlts", GetAdapterBotPlts)
|
||||
vm.Set("GetAdapterBotsID", GetAdapterBotsID)
|
||||
vm.Set("GetAdapterBotPlts", GetAdapterBotPlts)
|
||||
vm.Set("running", running)
|
||||
vm.Set("Running", running)
|
||||
vm.Set("uuid", func() string {
|
||||
return uuid
|
||||
})
|
||||
vm.Set("genUuid", func() string {
|
||||
return utils.GenUUID()
|
||||
})
|
||||
vm.Set("genUUID", func() string {
|
||||
return utils.GenUUID()
|
||||
})
|
||||
vm.Set("UUID", func() string {
|
||||
return uuid
|
||||
})
|
||||
if set != nil {
|
||||
set(vm)
|
||||
}
|
||||
_, err := vm.RunProgram(prg)
|
||||
if err != nil {
|
||||
pluginConsole(uuid).Error(strings.ReplaceAll(strings.ReplaceAll(err.Error(), "node_modules/", ""), "github.com/dop251/goja_nodejs/require", ""))
|
||||
}
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
running = func() bool {
|
||||
return f.Running
|
||||
}
|
||||
|
||||
+2
-2
@@ -23,10 +23,10 @@ var sleep = func(i int) {
|
||||
func GetScriptNameByUUID(uuid string) string {
|
||||
for _, f := range Functions {
|
||||
if f.UUID == uuid {
|
||||
return fmt.Sprintf("%s.js", f.Title)
|
||||
return fmt.Sprintf("%s%s", f.Title, f.Suffix)
|
||||
}
|
||||
}
|
||||
return "未知脚本.js"
|
||||
return "未知脚本"
|
||||
}
|
||||
|
||||
type SenderJsIplm struct {
|
||||
|
||||
@@ -0,0 +1,268 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/cdle/sillyplus/core/common"
|
||||
"github.com/cdle/sillyplus/core/storage"
|
||||
"github.com/cdle/sillyplus/utils"
|
||||
)
|
||||
|
||||
func pluginParse(script string, uuid string) (*common.Function, []func()) {
|
||||
var cbs = []func(){}
|
||||
var rules []string
|
||||
var imType *common.Filter
|
||||
var userId *common.Filter
|
||||
var groupId *common.Filter
|
||||
var cron = map[string]string{}
|
||||
var admin bool
|
||||
var disable bool
|
||||
var priority int
|
||||
var title string
|
||||
var public bool
|
||||
var description string
|
||||
var icon string
|
||||
var version string = "v1.0.0"
|
||||
var author string
|
||||
var create_at string
|
||||
var module bool
|
||||
var encrypt bool
|
||||
var onStart bool
|
||||
var origin = "自定义"
|
||||
var https = []*common.Http{}
|
||||
var message *common.Reply
|
||||
var FindAll bool
|
||||
var hasForm bool
|
||||
var carry bool
|
||||
var classes = []string{}
|
||||
ks := map[string]bool{}
|
||||
ress := regexp.MustCompile(
|
||||
`\*\s?@([\d\w+-]+)\s+([^\n]+?)\n`,
|
||||
).FindAllStringSubmatch(script, -1)
|
||||
for _, res := range ress {
|
||||
switch res[1] {
|
||||
case "rule", "match", "regex", "pattern":
|
||||
rule := strings.TrimSpace(res[2])
|
||||
rule = parseReply3(rule, func(s1, s2 string) {
|
||||
k := s1 + "." + s2
|
||||
if _, ok := ks[k]; !ok {
|
||||
cbs = append(cbs, func() {
|
||||
storage.Watch(MakeBucket(s1), s2, func(old, new, key string) *storage.Final {
|
||||
return &storage.Final{
|
||||
EndFunc: func() {
|
||||
plugins.Set(uuid, "reload")
|
||||
},
|
||||
}
|
||||
}, uuid)
|
||||
})
|
||||
ks[k] = true
|
||||
}
|
||||
})
|
||||
_rs := []string{}
|
||||
FR:
|
||||
ress := regexp.MustCompile(`\[([^\s\[\]]+)\]`).FindAllStringSubmatch(rule, -1)
|
||||
if len(ress) != 0 {
|
||||
res := ress[len(ress)-1]
|
||||
var inner = res[1]
|
||||
slice := strings.SplitN(inner, ":", 2)
|
||||
name := slice[0]
|
||||
ps := ""
|
||||
if len(slice) == 2 {
|
||||
ps = slice[1]
|
||||
}
|
||||
if strings.HasSuffix(name, "?") {
|
||||
name = strings.TrimRight(name, "?")
|
||||
rep := ""
|
||||
if ps == "" {
|
||||
rep = fmt.Sprintf("[%s]", name)
|
||||
} else {
|
||||
rep = fmt.Sprintf("[%s:%s]", name, ps)
|
||||
}
|
||||
for l := range _rs {
|
||||
_rs[l] = strings.Replace(_rs[l], res[0], rep, 1)
|
||||
}
|
||||
rule1 := strings.Replace(rule, res[0], rep, 1)
|
||||
if len(_rs) == 0 {
|
||||
_rs = append(_rs, rule1)
|
||||
}
|
||||
rule = strings.Replace(rule, res[0], "", 1)
|
||||
rule = regexp.MustCompile("\x20{2,}").ReplaceAllString(rule, " ")
|
||||
rule = strings.TrimSpace(rule)
|
||||
_rs = append(_rs, rule)
|
||||
goto FR
|
||||
}
|
||||
}
|
||||
if len(_rs) != 0 {
|
||||
rules = append(rules, _rs...)
|
||||
} else {
|
||||
rules = append(rules, rule)
|
||||
}
|
||||
case "class":
|
||||
classes = append(classes, regexp.MustCompile(`[\S]+`).FindAllString(res[2], -1)...)
|
||||
classes = utils.Unique(classes)
|
||||
case "platform", "imType", "platform+", "imType+":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
imType = &common.Filter{
|
||||
BlackMode: false,
|
||||
Items: item,
|
||||
}
|
||||
case "platform-", "imType-":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
imType = &common.Filter{
|
||||
BlackMode: true,
|
||||
Items: item,
|
||||
}
|
||||
case "userId", "userID", "uid", "userId+", "userID+", "uid+":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
userId = &common.Filter{
|
||||
BlackMode: false,
|
||||
Items: item,
|
||||
}
|
||||
case "userId-", "userID-", "uid-":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
userId = &common.Filter{
|
||||
BlackMode: true,
|
||||
Items: item,
|
||||
}
|
||||
case "groupId", "groupID", "groupCode", "chat_id", "chat_id+", "chatId", "chatID", "gid", "groupId+", "groupID+", "groupCode+", "chatId+", "chatID+", "gid+":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
groupId = &common.Filter{
|
||||
BlackMode: false,
|
||||
Items: item,
|
||||
}
|
||||
case "groupId-", "groupID-", "groupCode-", "chatId-", "chat_id-", "chatID-", "gid-":
|
||||
var item []string
|
||||
for _, i := range regexp.MustCompile(`[\d\w-]+`).FindAllString(res[2], -1) {
|
||||
item = append(item, strings.TrimSpace(i))
|
||||
}
|
||||
groupId = &common.Filter{
|
||||
BlackMode: true,
|
||||
Items: item,
|
||||
}
|
||||
|
||||
case "admin":
|
||||
admin = strings.TrimSpace(res[2]) == "true"
|
||||
case "disable":
|
||||
disable = strings.TrimSpace(res[2]) == "true"
|
||||
case "findall":
|
||||
FindAll = strings.TrimSpace(res[2]) == "true"
|
||||
case "priority":
|
||||
priority = utils.Int(strings.TrimSpace(res[2]))
|
||||
case "title", "name", "show":
|
||||
title = strings.TrimSpace(res[2])
|
||||
case "public":
|
||||
public = strings.TrimSpace(res[2]) == "true"
|
||||
case "description":
|
||||
description = strings.TrimSpace(res[2])
|
||||
case "icon":
|
||||
icon = strings.TrimSpace(res[2])
|
||||
case "version":
|
||||
version = strings.TrimSpace(res[2])
|
||||
case "author":
|
||||
author = strings.TrimSpace(res[2])
|
||||
case "http":
|
||||
ss := regexp.MustCompile(`[\S]+`).FindAllString(strings.TrimSpace(res[2]), -1)
|
||||
if len(ss) == 2 {
|
||||
https = append(https, &common.Http{
|
||||
Path: ss[1],
|
||||
Method: strings.ToUpper(ss[0]),
|
||||
})
|
||||
} else {
|
||||
console.Warn("http param is not 2")
|
||||
}
|
||||
case "message":
|
||||
ss := regexp.MustCompile(`[\S]+`).FindAllString(strings.TrimSpace(res[2]), -1)
|
||||
if len(ss) > 1 {
|
||||
if len(ss) == 2 && ss[1] == "*" {
|
||||
message = &common.Reply{
|
||||
Platform: ss[0],
|
||||
BotsID: []string{},
|
||||
}
|
||||
} else {
|
||||
message = &common.Reply{
|
||||
Platform: ss[0],
|
||||
BotsID: ss[1:],
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
console.Warn("message param is 0")
|
||||
}
|
||||
case "create_at":
|
||||
create_at = strings.TrimSpace(res[2])
|
||||
case "origin":
|
||||
origin = strings.TrimSpace(res[2])
|
||||
case "module":
|
||||
module = strings.TrimSpace(res[2]) == "true"
|
||||
case "carry":
|
||||
carry = strings.TrimSpace(res[2]) == "true"
|
||||
case "encrypt":
|
||||
encrypt = strings.TrimSpace(res[2]) == "true"
|
||||
case "on_start":
|
||||
onStart = strings.TrimSpace(res[2]) == "true"
|
||||
case "form":
|
||||
hasForm = true
|
||||
case "paterner":
|
||||
// paterner := strings.TrimSpace(res[2])
|
||||
// go func() {
|
||||
// time.Sleep(time.Second * 2)
|
||||
// getPaterner(uuid, strings.TrimSpace(paterner))
|
||||
// }()
|
||||
default:
|
||||
cron_ := strings.TrimSpace(res[2])
|
||||
cron_ = strings.ReplaceAll(cron_, `\/`, "/")
|
||||
if strings.HasPrefix(res[1], "cron") {
|
||||
cron[res[1]] = cron_
|
||||
}
|
||||
}
|
||||
}
|
||||
if !hasForm {
|
||||
hasForm = strings.Contains(script, "Form(")
|
||||
}
|
||||
return &common.Function{
|
||||
Rules: rules,
|
||||
ImType: imType,
|
||||
UserId: userId,
|
||||
GroupId: groupId,
|
||||
Cron: cron,
|
||||
Admin: admin,
|
||||
Priority: priority,
|
||||
Disable: disable,
|
||||
UUID: uuid,
|
||||
Title: title,
|
||||
Public: public,
|
||||
Description: description,
|
||||
Icon: icon,
|
||||
Version: version,
|
||||
Author: author,
|
||||
CreateAt: create_at,
|
||||
Module: module,
|
||||
Encrypt: encrypt,
|
||||
OnStart: onStart,
|
||||
Origin: origin,
|
||||
Running: onStart,
|
||||
Reply: message,
|
||||
Https: https,
|
||||
FindAll: FindAll,
|
||||
HasForm: hasForm,
|
||||
Carry: carry,
|
||||
Classes: classes,
|
||||
}, cbs
|
||||
}
|
||||
+2
-2
@@ -55,7 +55,7 @@ func RegistTasks(pt *Tasks) {
|
||||
for _, meta := range pt.Senders {
|
||||
adapter, _ := GetAdapter(meta.Platfrom, meta.BotID)
|
||||
if adapter != nil {
|
||||
sender := adapter.Sender2()
|
||||
sender := adapter.Sender2(nil)
|
||||
sender.SetFsps(&common.FakerSenderParams{
|
||||
Content: content,
|
||||
ChatID: meta.ChatID,
|
||||
@@ -324,7 +324,7 @@ func init() {
|
||||
functions := Functions
|
||||
for _, function := range functions {
|
||||
if function.UUID != "" {
|
||||
scripts[function.UUID] = function.Title + ".js"
|
||||
scripts[function.UUID] = function.Title + function.Suffix
|
||||
}
|
||||
}
|
||||
var user_names = []NicklabeL{}
|
||||
|
||||
@@ -17,6 +17,7 @@ require (
|
||||
github.com/dop251/goja v0.0.0-20230605162241-28ee0ee714f3
|
||||
github.com/dop251/goja_nodejs v0.0.0-20230602164024-804a84515562
|
||||
github.com/elastic/go-elasticsearch/v6 v6.8.10
|
||||
github.com/fsnotify/fsnotify v1.4.9
|
||||
github.com/gin-gonic/gin v1.9.1
|
||||
github.com/go-redis/redis/v8 v8.11.5
|
||||
github.com/goccy/go-json v0.10.2
|
||||
@@ -28,6 +29,7 @@ require (
|
||||
github.com/stretchr/testify v1.8.4
|
||||
go.mongodb.org/mongo-driver v1.11.7
|
||||
golang.org/x/net v0.11.0
|
||||
google.golang.org/grpc v1.41.0
|
||||
)
|
||||
|
||||
require (
|
||||
@@ -37,6 +39,7 @@ require (
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
|
||||
github.com/gofrs/uuid/v5 v5.0.0 // indirect
|
||||
github.com/golang/protobuf v1.5.3 // indirect
|
||||
github.com/golang/snappy v0.0.1 // indirect
|
||||
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect
|
||||
github.com/klauspost/compress v1.13.6 // indirect
|
||||
@@ -56,6 +59,7 @@ require (
|
||||
golang.org/x/mod v0.8.0 // indirect
|
||||
golang.org/x/sync v0.3.0 // indirect
|
||||
golang.org/x/tools v0.6.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
@@ -80,5 +84,5 @@ require (
|
||||
golang.org/x/crypto v0.10.0 // indirect
|
||||
golang.org/x/sys v0.9.0 // indirect
|
||||
golang.org/x/text v0.10.0 // indirect
|
||||
google.golang.org/protobuf v1.30.0 // indirect
|
||||
google.golang.org/protobuf v1.30.0
|
||||
)
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/Dreamacro/clash v1.17.0 h1:LWtp6KcnrCiujY58ufI8pylI+hbCBgSCsLI90EWhpi4=
|
||||
github.com/Dreamacro/clash v1.17.0/go.mod h1:PtcAft7sdsK325BD6uwm8wvhOkMV3TCeED6dfZ/lnfE=
|
||||
github.com/Dreamacro/protobytes v0.0.0-20230617041236-6500a9f4f158 h1:JFnwKplz9hj8ubqYjm8HkgZS1Rvz9yW+u/XCNNTxr0k=
|
||||
github.com/Dreamacro/protobytes v0.0.0-20230617041236-6500a9f4f158/go.mod h1:QvmEZ/h6KXszPOr2wUFl7Zn3hfFNYdfbXwPVDTyZs6k=
|
||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ=
|
||||
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg=
|
||||
github.com/beego/beego/v2 v2.1.0 h1:Lk0FtQGvDQCx5V5yEu4XwDsIgt+QOlNjt5emUa3/ZmA=
|
||||
@@ -13,6 +18,9 @@ github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx2
|
||||
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
|
||||
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
|
||||
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
|
||||
@@ -23,8 +31,13 @@ github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86c
|
||||
github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I=
|
||||
github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
|
||||
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
@@ -45,9 +58,18 @@ github.com/dop251/goja_nodejs v0.0.0-20230602164024-804a84515562 h1:0gomDSJiLLlp
|
||||
github.com/dop251/goja_nodejs v0.0.0-20230602164024-804a84515562/go.mod h1:X2TOTJ+Uamd454RFp7ig2tmP3hQg0Z2Qk8gbVQmU0mk=
|
||||
github.com/elastic/go-elasticsearch/v6 v6.8.10 h1:2lN0gJ93gMBXvkhwih5xquldszpm8FlUwqG5sPzr6a8=
|
||||
github.com/elastic/go-elasticsearch/v6 v6.8.10/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
|
||||
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
|
||||
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4=
|
||||
github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk=
|
||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||
@@ -77,9 +99,30 @@ github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M=
|
||||
github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||
@@ -87,10 +130,12 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/
|
||||
github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg=
|
||||
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs=
|
||||
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA=
|
||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
@@ -135,10 +180,12 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
|
||||
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
|
||||
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
||||
@@ -146,10 +193,12 @@ github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02 h1:v9ezJDHA1XGxVi
|
||||
github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02/go.mod h1:RF16/A3L0xSa0oSERcnhd8Pu3IXSDZSK2gmGIMsttFE=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
@@ -177,9 +226,11 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM
|
||||
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.mongodb.org/mongo-driver v1.11.7 h1:LIwYxASDLGUg/8wOhgOOZhX8tQa/9tgZPgzZoVqJvcs=
|
||||
go.mongodb.org/mongo-driver v1.11.7/go.mod h1:G9TgswdsWjX4tmDA5zfs2+6AEPpYJwqblyjsfuh8oXY=
|
||||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
||||
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||
@@ -193,22 +244,41 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM=
|
||||
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
|
||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU=
|
||||
golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@@ -217,11 +287,16 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
|
||||
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
@@ -240,6 +315,7 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
@@ -248,9 +324,15 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58=
|
||||
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
@@ -258,7 +340,35 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 h1:ysnBoUyeL/H6RCvNRhWHjKoDEmguI+mPU+qHgK8qv/w=
|
||||
google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
|
||||
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||
google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E=
|
||||
google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
|
||||
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
@@ -268,10 +378,14 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
protoc-gen-grpc --js_out=import_style=commonjs:. --grpc_out=. srpc.proto
|
||||
protoc-gen-grpc --ts_out=service=grpc-node:. --grpc_out=. srpc.proto
|
||||
|
||||
protoc --go_out=. -I. --go-grpc_out=. srpc.proto
|
||||
|
||||
protoc --plugin=protoc-gen-ts=$(which protoc-gen-ts) --js_out=import_style=commonjs,binary:./ --ts_out=./ srpc.proto
|
||||
|
||||
protoc --js_out=import_style=commonjs,binary:. --grpc_out=. srpc.proto
|
||||
|
||||
|
||||
//ok
|
||||
protoc --go_out=. -I. --go-grpc_out=. srpc.proto
|
||||
protoc-gen-grpc --ts_out=service=grpc-node:. --grpc_out=. srpc.proto
|
||||
Generated
+1111
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"@grpc/grpc-js": "^1.8.18",
|
||||
"@grpc/proto-loader": "^0.7.8",
|
||||
"google-protobuf": "^3.21.2",
|
||||
"grpc": "^1.24.11",
|
||||
"grpc-tools": "^1.12.4",
|
||||
"grpc-web": "^1.4.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/google-protobuf": "^3.15.6"
|
||||
}
|
||||
}
|
||||
Generated
+756
@@ -0,0 +1,756 @@
|
||||
lockfileVersion: '6.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
dependencies:
|
||||
'@grpc/proto-loader':
|
||||
specifier: ^0.7.8
|
||||
version: 0.7.8
|
||||
google-protobuf:
|
||||
specifier: ^3.21.2
|
||||
version: 3.21.2
|
||||
grpc:
|
||||
specifier: ^1.24.11
|
||||
version: 1.24.11
|
||||
grpc-tools:
|
||||
specifier: ^1.12.4
|
||||
version: 1.12.4
|
||||
|
||||
packages:
|
||||
|
||||
/@grpc/proto-loader@0.7.8:
|
||||
resolution: {integrity: sha512-GU12e2c8dmdXb7XUlOgYWZ2o2i+z9/VeACkxTA/zzAe2IjclC5PnVL0lpgjhrqfpDYHzM8B1TF6pqWegMYAzlA==}
|
||||
engines: {node: '>=6'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@types/long': 4.0.2
|
||||
lodash.camelcase: 4.3.0
|
||||
long: 4.0.0
|
||||
protobufjs: 7.2.4
|
||||
yargs: 17.7.2
|
||||
dev: false
|
||||
|
||||
/@mapbox/node-pre-gyp@1.0.11:
|
||||
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
detect-libc: 2.0.2
|
||||
https-proxy-agent: 5.0.1
|
||||
make-dir: 3.1.0
|
||||
node-fetch: 2.6.12
|
||||
nopt: 5.0.0
|
||||
npmlog: 5.0.1
|
||||
rimraf: 3.0.2
|
||||
semver: 7.5.4
|
||||
tar: 6.1.15
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@protobufjs/aspromise@1.1.2:
|
||||
resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
|
||||
dev: false
|
||||
|
||||
/@protobufjs/base64@1.1.2:
|
||||
resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
|
||||
dev: false
|
||||
|
||||
/@protobufjs/codegen@2.0.4:
|
||||
resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
|
||||
dev: false
|
||||
|
||||
/@protobufjs/eventemitter@1.1.0:
|
||||
resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
|
||||
dev: false
|
||||
|
||||
/@protobufjs/fetch@1.1.0:
|
||||
resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
|
||||
dependencies:
|
||||
'@protobufjs/aspromise': 1.1.2
|
||||
'@protobufjs/inquire': 1.1.0
|
||||
dev: false
|
||||
|
||||
/@protobufjs/float@1.0.2:
|
||||
resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
|
||||
dev: false
|
||||
|
||||
/@protobufjs/inquire@1.1.0:
|
||||
resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
|
||||
dev: false
|
||||
|
||||
/@protobufjs/path@1.1.2:
|
||||
resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
|
||||
dev: false
|
||||
|
||||
/@protobufjs/pool@1.1.0:
|
||||
resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
|
||||
dev: false
|
||||
|
||||
/@protobufjs/utf8@1.1.0:
|
||||
resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
|
||||
dev: false
|
||||
|
||||
/@types/bytebuffer@5.0.44:
|
||||
resolution: {integrity: sha512-k1qonHga/SfQT02NF633i+7tIfKd+cfC/8pjnedcfuXJNMWooss/FkCgRMSnLf2WorLjbuH4bfgAZEbtyHBDoQ==}
|
||||
dependencies:
|
||||
'@types/long': 3.0.32
|
||||
'@types/node': 20.4.2
|
||||
dev: false
|
||||
|
||||
/@types/long@3.0.32:
|
||||
resolution: {integrity: sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA==}
|
||||
dev: false
|
||||
|
||||
/@types/long@4.0.2:
|
||||
resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==}
|
||||
dev: false
|
||||
|
||||
/@types/node@20.4.2:
|
||||
resolution: {integrity: sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==}
|
||||
dev: false
|
||||
|
||||
/abbrev@1.1.1:
|
||||
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
|
||||
dev: false
|
||||
|
||||
/agent-base@6.0.2:
|
||||
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
|
||||
engines: {node: '>= 6.0.0'}
|
||||
dependencies:
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/ansi-regex@2.1.1:
|
||||
resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/ansi-regex@5.0.1:
|
||||
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/ansi-styles@4.3.0:
|
||||
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
color-convert: 2.0.1
|
||||
dev: false
|
||||
|
||||
/aproba@2.0.0:
|
||||
resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
|
||||
dev: false
|
||||
|
||||
/are-we-there-yet@2.0.0:
|
||||
resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
delegates: 1.0.0
|
||||
readable-stream: 3.6.2
|
||||
dev: false
|
||||
|
||||
/ascli@1.0.1:
|
||||
resolution: {integrity: sha512-JGQaNxpaCJz9Bd1JvVaFIHuWn9S+l3xhN17R0V/vmUDiGE0QngNMXhjlqpwqV+91plWz9Fg+Lt28Lj7p5vjs8A==}
|
||||
dependencies:
|
||||
colour: 0.7.1
|
||||
optjs: 3.2.2
|
||||
dev: false
|
||||
|
||||
/balanced-match@1.0.2:
|
||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||
dev: false
|
||||
|
||||
/brace-expansion@1.1.11:
|
||||
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
|
||||
dependencies:
|
||||
balanced-match: 1.0.2
|
||||
concat-map: 0.0.1
|
||||
dev: false
|
||||
|
||||
/bytebuffer@5.0.1:
|
||||
resolution: {integrity: sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ==}
|
||||
engines: {node: '>=0.8'}
|
||||
dependencies:
|
||||
long: 3.2.0
|
||||
dev: false
|
||||
|
||||
/camelcase@2.1.1:
|
||||
resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/chownr@2.0.0:
|
||||
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/cliui@3.2.0:
|
||||
resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
|
||||
dependencies:
|
||||
string-width: 1.0.2
|
||||
strip-ansi: 3.0.1
|
||||
wrap-ansi: 2.1.0
|
||||
dev: false
|
||||
|
||||
/cliui@8.0.1:
|
||||
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
wrap-ansi: 7.0.0
|
||||
dev: false
|
||||
|
||||
/code-point-at@1.1.0:
|
||||
resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/color-convert@2.0.1:
|
||||
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
|
||||
engines: {node: '>=7.0.0'}
|
||||
dependencies:
|
||||
color-name: 1.1.4
|
||||
dev: false
|
||||
|
||||
/color-name@1.1.4:
|
||||
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
||||
dev: false
|
||||
|
||||
/color-support@1.1.3:
|
||||
resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/colour@0.7.1:
|
||||
resolution: {integrity: sha512-Rel466v0EnmKPcsxHo91L4kgPs/6XF7Pu2LJNszq9lXYwi5CFWEeIiRaTX5ym7PPMdj4udDHkLSVC1//JVkZQg==}
|
||||
engines: {node: '>=0.8'}
|
||||
dev: false
|
||||
|
||||
/concat-map@0.0.1:
|
||||
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
|
||||
dev: false
|
||||
|
||||
/console-control-strings@1.1.0:
|
||||
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
|
||||
dev: false
|
||||
|
||||
/debug@4.3.4:
|
||||
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
|
||||
engines: {node: '>=6.0'}
|
||||
peerDependencies:
|
||||
supports-color: '*'
|
||||
peerDependenciesMeta:
|
||||
supports-color:
|
||||
optional: true
|
||||
dependencies:
|
||||
ms: 2.1.2
|
||||
dev: false
|
||||
|
||||
/decamelize@1.2.0:
|
||||
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/delegates@1.0.0:
|
||||
resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
|
||||
dev: false
|
||||
|
||||
/detect-libc@2.0.2:
|
||||
resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/emoji-regex@8.0.0:
|
||||
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
||||
dev: false
|
||||
|
||||
/escalade@3.1.1:
|
||||
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/fs-minipass@2.1.0:
|
||||
resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
|
||||
engines: {node: '>= 8'}
|
||||
dependencies:
|
||||
minipass: 3.3.6
|
||||
dev: false
|
||||
|
||||
/fs.realpath@1.0.0:
|
||||
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
|
||||
dev: false
|
||||
|
||||
/gauge@3.0.2:
|
||||
resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
aproba: 2.0.0
|
||||
color-support: 1.1.3
|
||||
console-control-strings: 1.1.0
|
||||
has-unicode: 2.0.1
|
||||
object-assign: 4.1.1
|
||||
signal-exit: 3.0.7
|
||||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
wide-align: 1.1.5
|
||||
dev: false
|
||||
|
||||
/get-caller-file@2.0.5:
|
||||
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
|
||||
engines: {node: 6.* || 8.* || >= 10.*}
|
||||
dev: false
|
||||
|
||||
/glob@7.2.3:
|
||||
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
||||
dependencies:
|
||||
fs.realpath: 1.0.0
|
||||
inflight: 1.0.6
|
||||
inherits: 2.0.4
|
||||
minimatch: 3.1.2
|
||||
once: 1.4.0
|
||||
path-is-absolute: 1.0.1
|
||||
dev: false
|
||||
|
||||
/google-protobuf@3.21.2:
|
||||
resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==}
|
||||
dev: false
|
||||
|
||||
/grpc-tools@1.12.4:
|
||||
resolution: {integrity: sha512-5+mLAJJma3BjnW/KQp6JBjUMgvu7Mu3dBvBPd1dcbNIb+qiR0817zDpgPjS7gRb+l/8EVNIa3cB02xI9JLToKg==}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@mapbox/node-pre-gyp': 1.0.11
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/grpc@1.24.11:
|
||||
resolution: {integrity: sha512-8/AQdFCzCeCDWW3SoaMNp6ccbRvTQEH1O1u1uFtt29eWsg5gSZCJ3m6fbkduEIh3smY7WAPP+LgVJ5n3nZRxcA==}
|
||||
engines: {node: '>=4'}
|
||||
deprecated: This library will not receive further updates other than security fixes. We recommend using @grpc/grpc-js instead.
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@mapbox/node-pre-gyp': 1.0.11
|
||||
'@types/bytebuffer': 5.0.44
|
||||
lodash.camelcase: 4.3.0
|
||||
lodash.clone: 4.5.0
|
||||
nan: 2.17.0
|
||||
protobufjs: 5.0.3
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/has-unicode@2.0.1:
|
||||
resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
|
||||
dev: false
|
||||
|
||||
/https-proxy-agent@5.0.1:
|
||||
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
agent-base: 6.0.2
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/inflight@1.0.6:
|
||||
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
|
||||
dependencies:
|
||||
once: 1.4.0
|
||||
wrappy: 1.0.2
|
||||
dev: false
|
||||
|
||||
/inherits@2.0.4:
|
||||
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
||||
dev: false
|
||||
|
||||
/invert-kv@1.0.0:
|
||||
resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/is-fullwidth-code-point@1.0.0:
|
||||
resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
number-is-nan: 1.0.1
|
||||
dev: false
|
||||
|
||||
/is-fullwidth-code-point@3.0.0:
|
||||
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/lcid@1.0.0:
|
||||
resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
invert-kv: 1.0.0
|
||||
dev: false
|
||||
|
||||
/lodash.camelcase@4.3.0:
|
||||
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
|
||||
dev: false
|
||||
|
||||
/lodash.clone@4.5.0:
|
||||
resolution: {integrity: sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==}
|
||||
dev: false
|
||||
|
||||
/long@3.2.0:
|
||||
resolution: {integrity: sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==}
|
||||
engines: {node: '>=0.6'}
|
||||
dev: false
|
||||
|
||||
/long@4.0.0:
|
||||
resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==}
|
||||
dev: false
|
||||
|
||||
/long@5.2.3:
|
||||
resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==}
|
||||
dev: false
|
||||
|
||||
/lru-cache@6.0.0:
|
||||
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
yallist: 4.0.0
|
||||
dev: false
|
||||
|
||||
/make-dir@3.1.0:
|
||||
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
semver: 6.3.1
|
||||
dev: false
|
||||
|
||||
/minimatch@3.1.2:
|
||||
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
|
||||
dependencies:
|
||||
brace-expansion: 1.1.11
|
||||
dev: false
|
||||
|
||||
/minipass@3.3.6:
|
||||
resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
yallist: 4.0.0
|
||||
dev: false
|
||||
|
||||
/minipass@5.0.0:
|
||||
resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/minizlib@2.1.2:
|
||||
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
|
||||
engines: {node: '>= 8'}
|
||||
dependencies:
|
||||
minipass: 3.3.6
|
||||
yallist: 4.0.0
|
||||
dev: false
|
||||
|
||||
/mkdirp@1.0.4:
|
||||
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/ms@2.1.2:
|
||||
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||
dev: false
|
||||
|
||||
/nan@2.17.0:
|
||||
resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==}
|
||||
dev: false
|
||||
|
||||
/node-fetch@2.6.12:
|
||||
resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==}
|
||||
engines: {node: 4.x || >=6.0.0}
|
||||
peerDependencies:
|
||||
encoding: ^0.1.0
|
||||
peerDependenciesMeta:
|
||||
encoding:
|
||||
optional: true
|
||||
dependencies:
|
||||
whatwg-url: 5.0.0
|
||||
dev: false
|
||||
|
||||
/nopt@5.0.0:
|
||||
resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
|
||||
engines: {node: '>=6'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
abbrev: 1.1.1
|
||||
dev: false
|
||||
|
||||
/npmlog@5.0.1:
|
||||
resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
|
||||
dependencies:
|
||||
are-we-there-yet: 2.0.0
|
||||
console-control-strings: 1.1.0
|
||||
gauge: 3.0.2
|
||||
set-blocking: 2.0.0
|
||||
dev: false
|
||||
|
||||
/number-is-nan@1.0.1:
|
||||
resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/object-assign@4.1.1:
|
||||
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/once@1.4.0:
|
||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||
dependencies:
|
||||
wrappy: 1.0.2
|
||||
dev: false
|
||||
|
||||
/optjs@3.2.2:
|
||||
resolution: {integrity: sha512-f8lTJm4LKirX+45xsFhuRNjA4f46QVLQKfGoNH7e2AEWS+24eM4XNH4pQ8Tw2LISCIvbST/wNcLdtgvgcqVaxA==}
|
||||
dev: false
|
||||
|
||||
/os-locale@1.4.0:
|
||||
resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
lcid: 1.0.0
|
||||
dev: false
|
||||
|
||||
/path-is-absolute@1.0.1:
|
||||
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/protobufjs@5.0.3:
|
||||
resolution: {integrity: sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==}
|
||||
engines: {node: '>=0.8'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
ascli: 1.0.1
|
||||
bytebuffer: 5.0.1
|
||||
glob: 7.2.3
|
||||
yargs: 3.32.0
|
||||
dev: false
|
||||
|
||||
/protobufjs@7.2.4:
|
||||
resolution: {integrity: sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@protobufjs/aspromise': 1.1.2
|
||||
'@protobufjs/base64': 1.1.2
|
||||
'@protobufjs/codegen': 2.0.4
|
||||
'@protobufjs/eventemitter': 1.1.0
|
||||
'@protobufjs/fetch': 1.1.0
|
||||
'@protobufjs/float': 1.0.2
|
||||
'@protobufjs/inquire': 1.1.0
|
||||
'@protobufjs/path': 1.1.2
|
||||
'@protobufjs/pool': 1.1.0
|
||||
'@protobufjs/utf8': 1.1.0
|
||||
'@types/node': 20.4.2
|
||||
long: 5.2.3
|
||||
dev: false
|
||||
|
||||
/readable-stream@3.6.2:
|
||||
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
inherits: 2.0.4
|
||||
string_decoder: 1.3.0
|
||||
util-deprecate: 1.0.2
|
||||
dev: false
|
||||
|
||||
/require-directory@2.1.1:
|
||||
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/rimraf@3.0.2:
|
||||
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
glob: 7.2.3
|
||||
dev: false
|
||||
|
||||
/safe-buffer@5.2.1:
|
||||
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
|
||||
dev: false
|
||||
|
||||
/semver@6.3.1:
|
||||
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/semver@7.5.4:
|
||||
resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
lru-cache: 6.0.0
|
||||
dev: false
|
||||
|
||||
/set-blocking@2.0.0:
|
||||
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
|
||||
dev: false
|
||||
|
||||
/signal-exit@3.0.7:
|
||||
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
|
||||
dev: false
|
||||
|
||||
/string-width@1.0.2:
|
||||
resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
code-point-at: 1.1.0
|
||||
is-fullwidth-code-point: 1.0.0
|
||||
strip-ansi: 3.0.1
|
||||
dev: false
|
||||
|
||||
/string-width@4.2.3:
|
||||
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
emoji-regex: 8.0.0
|
||||
is-fullwidth-code-point: 3.0.0
|
||||
strip-ansi: 6.0.1
|
||||
dev: false
|
||||
|
||||
/string_decoder@1.3.0:
|
||||
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
|
||||
dependencies:
|
||||
safe-buffer: 5.2.1
|
||||
dev: false
|
||||
|
||||
/strip-ansi@3.0.1:
|
||||
resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
ansi-regex: 2.1.1
|
||||
dev: false
|
||||
|
||||
/strip-ansi@6.0.1:
|
||||
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
ansi-regex: 5.0.1
|
||||
dev: false
|
||||
|
||||
/tar@6.1.15:
|
||||
resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
chownr: 2.0.0
|
||||
fs-minipass: 2.1.0
|
||||
minipass: 5.0.0
|
||||
minizlib: 2.1.2
|
||||
mkdirp: 1.0.4
|
||||
yallist: 4.0.0
|
||||
dev: false
|
||||
|
||||
/tr46@0.0.3:
|
||||
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
|
||||
dev: false
|
||||
|
||||
/util-deprecate@1.0.2:
|
||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
dev: false
|
||||
|
||||
/webidl-conversions@3.0.1:
|
||||
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
|
||||
dev: false
|
||||
|
||||
/whatwg-url@5.0.0:
|
||||
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
|
||||
dependencies:
|
||||
tr46: 0.0.3
|
||||
webidl-conversions: 3.0.1
|
||||
dev: false
|
||||
|
||||
/wide-align@1.1.5:
|
||||
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
|
||||
dependencies:
|
||||
string-width: 4.2.3
|
||||
dev: false
|
||||
|
||||
/window-size@0.1.4:
|
||||
resolution: {integrity: sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==}
|
||||
engines: {node: '>= 0.10.0'}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/wrap-ansi@2.1.0:
|
||||
resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
string-width: 1.0.2
|
||||
strip-ansi: 3.0.1
|
||||
dev: false
|
||||
|
||||
/wrap-ansi@7.0.0:
|
||||
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
ansi-styles: 4.3.0
|
||||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
dev: false
|
||||
|
||||
/wrappy@1.0.2:
|
||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||
dev: false
|
||||
|
||||
/y18n@3.2.2:
|
||||
resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==}
|
||||
dev: false
|
||||
|
||||
/y18n@5.0.8:
|
||||
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/yallist@4.0.0:
|
||||
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
||||
dev: false
|
||||
|
||||
/yargs-parser@21.1.1:
|
||||
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/yargs@17.7.2:
|
||||
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
cliui: 8.0.1
|
||||
escalade: 3.1.1
|
||||
get-caller-file: 2.0.5
|
||||
require-directory: 2.1.1
|
||||
string-width: 4.2.3
|
||||
y18n: 5.0.8
|
||||
yargs-parser: 21.1.1
|
||||
dev: false
|
||||
|
||||
/yargs@3.32.0:
|
||||
resolution: {integrity: sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg==}
|
||||
dependencies:
|
||||
camelcase: 2.1.1
|
||||
cliui: 3.2.0
|
||||
decamelize: 1.2.0
|
||||
os-locale: 1.4.0
|
||||
string-width: 1.0.2
|
||||
window-size: 0.1.4
|
||||
y18n: 3.2.2
|
||||
dev: false
|
||||
@@ -0,0 +1,547 @@
|
||||
"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;
|
||||
};
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
var _a, _b;
|
||||
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());
|
||||
class Sender {
|
||||
constructor(uuid) {
|
||||
this.uuid = uuid;
|
||||
}
|
||||
getUserId() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetUserId(new srpc_1.srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
getUserName() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetUserName(new srpc_1.srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
getChatId() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetChatId(new srpc_1.srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
getChatName() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetChatName(new srpc_1.srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
getMessageId() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetMessageId(new srpc_1.srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
getPlatform() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetPlatform(new srpc_1.srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
getBotId() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetBotId(new srpc_1.srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
getContent() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetContent(new srpc_1.srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
setContent(content) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
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);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
continue() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderContinue(new srpc_1.srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(undefined);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
getAdapter() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Adapter({
|
||||
bot_id: yield this.getBotId(),
|
||||
platform: yield this.getPlatform(),
|
||||
});
|
||||
});
|
||||
}
|
||||
listen(options) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
let params = {
|
||||
uuid: this.uuid,
|
||||
rules: options === null || options === void 0 ? void 0 : options.rules,
|
||||
timeout: options === null || options === void 0 ? void 0 : options.timeout,
|
||||
listen_private: options === null || options === void 0 ? void 0 : options.listen_private,
|
||||
listen_group: options === null || options === void 0 ? void 0 : options.listen_group,
|
||||
allow_platforms: options === null || options === void 0 ? void 0 : options.allow_platforms,
|
||||
prohibit_platforms: options === null || options === void 0 ? void 0 : options.prohibit_platforms,
|
||||
allow_groups: options === null || options === void 0 ? void 0 : options.allow_groups,
|
||||
prohibit_groups: options === null || options === void 0 ? void 0 : options.prohibit_groups,
|
||||
allow_users: options === null || options === void 0 ? void 0 : options.allow_users,
|
||||
prohibit_users: options === null || options === void 0 ? void 0 : options.prohibit_users,
|
||||
};
|
||||
client.SenderListen(new srpc_1.srpc.SenderListenRequest(params), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
if (resp === null || resp === void 0 ? void 0 : resp.value) {
|
||||
resolve(new Sender(resp.value));
|
||||
}
|
||||
else {
|
||||
reject(new Error("timeout"));
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
reply(content) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
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 === null || resp === void 0 ? void 0 : resp.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
action(options) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return;
|
||||
});
|
||||
}
|
||||
event() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return;
|
||||
});
|
||||
}
|
||||
}
|
||||
class Bucket {
|
||||
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 undefined;
|
||||
}
|
||||
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;
|
||||
}
|
||||
get(key, defaultValue = undefined) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
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 === null || resp === void 0 ? void 0 : resp.value) || defaultValue);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
set(key, value) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
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 === null || resp === void 0 ? void 0 : resp.message,
|
||||
changed: resp === null || resp === void 0 ? void 0 : resp.changed,
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
getAll() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
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 === null || resp === void 0 ? void 0 : resp.value) {
|
||||
values = JSON.parse(resp === null || resp === void 0 ? void 0 : resp.value);
|
||||
for (let key in values) {
|
||||
values[key] = this.transform(values[key]);
|
||||
}
|
||||
}
|
||||
resolve(values);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
delete() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketDelete(new srpc_1.srpc.BucketRequest({ name: this.name }), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(undefined);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
keys() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketKeys(new srpc_1.srpc.BucketRequest({ name: this.name }), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.keys);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
len() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketLen(new srpc_1.srpc.BucketRequest({ name: this.name }), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.length);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
buckets() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketBuckets(new srpc_1.srpc.Empty(), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
resolve(resp === null || resp === void 0 ? void 0 : resp.buckets);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
_name() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return this.name;
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.Bucket = Bucket;
|
||||
class Adapter {
|
||||
constructor(options) {
|
||||
this.platform = options.platform;
|
||||
this.bot_id = options.bot_id;
|
||||
const call = client.AdapterRegist();
|
||||
if (options.replyHandler) {
|
||||
let callback = options.replyHandler;
|
||||
call.on("data", (response) => {
|
||||
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),
|
||||
}));
|
||||
}
|
||||
});
|
||||
call.on("error", (err) => {
|
||||
// console.error(err);
|
||||
});
|
||||
call.write(new srpc_1.srpc.AdapterRegistRequest({
|
||||
bot_id: options.bot_id,
|
||||
platform: options.platform,
|
||||
}));
|
||||
this.call = call;
|
||||
}
|
||||
}
|
||||
setActionHandler(func) {
|
||||
// 将从服务端不断接收action消息,并处理
|
||||
// 事件处理巨饼
|
||||
}
|
||||
receive(message) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
//投递消息
|
||||
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 === null || resp === void 0 ? void 0 : resp.value) {
|
||||
resolve(new Sender(resp.value));
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
push(message) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
//推送消息
|
||||
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 if (resp === null || resp === void 0 ? void 0 : resp.value) {
|
||||
resolve(resp.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
destroy() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
this.call.cancel();
|
||||
});
|
||||
}
|
||||
sender(options) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.AdapterSender(new srpc_1.srpc.AdapterRequest({
|
||||
platform: this.platform,
|
||||
bot_id: this.bot_id,
|
||||
}), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
else if (resp === null || resp === void 0 ? void 0 : resp.value) {
|
||||
resolve(new Sender(resp.value));
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.Adapter = Adapter;
|
||||
let sender = new Sender((_b = (_a = process.env) === null || _a === void 0 ? void 0 : _a.SENDER_ID) !== null && _b !== void 0 ? _b : "4d6371a8-2778-11ee-a3c2-821680fbbf6b");
|
||||
exports.sender = sender;
|
||||
function sleep(ms) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return new Promise((resolve) => setTimeout(resolve, ms));
|
||||
});
|
||||
}
|
||||
exports.sleep = sleep;
|
||||
@@ -0,0 +1,549 @@
|
||||
import { srpc } from "./srpc";
|
||||
import * as grpc_1 from "@grpc/grpc-js";
|
||||
|
||||
let client = new srpc.SillyGirlServiceClient(
|
||||
"localhost:50051",
|
||||
grpc_1.credentials.createInsecure()
|
||||
);
|
||||
|
||||
class Sender {
|
||||
private uuid: string;
|
||||
constructor(uuid: string) {
|
||||
this.uuid = uuid;
|
||||
}
|
||||
async getUserId(): Promise<string | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetUserId(
|
||||
new srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.value);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async getUserName(): Promise<string | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetUserName(
|
||||
new srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.value);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async getChatId(): Promise<string | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetChatId(
|
||||
new srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.value);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async getChatName(): Promise<string | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetChatName(
|
||||
new srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.value);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async getMessageId(): Promise<string | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetMessageId(
|
||||
new srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.value);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async getPlatform(): Promise<string | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetPlatform(
|
||||
new srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.value);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async getBotId(): Promise<string | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetBotId(
|
||||
new srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.value);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async getContent(): Promise<string | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderGetContent(
|
||||
new srpc.SenderRequest({
|
||||
uuid: this.uuid,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.value);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async setContent(content: string): Promise<undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderSetContent(
|
||||
new srpc.SenderContentRequest({
|
||||
uuid: this.uuid,
|
||||
content,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(undefined);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async continue(): Promise<undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderContinue(
|
||||
new 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?: {
|
||||
rules?: string[]; // 匹配规则
|
||||
timeout?: number; // 超时,单位毫秒
|
||||
handle?: (s: Sender) => string | void; // 如果匹配成功,则进入消息处理逻辑。如果将 holdOn(content) 的结果作为返回值,会继续监听
|
||||
listen_private?: boolean; // 监听用户群内消息时,同时监听用户消息
|
||||
listen_group?: boolean; // 监听用户群内消息时,同时监听群员消息
|
||||
allow_platforms?: string[]; // 平台白名单
|
||||
prohibit_platforms?: string[]; // 平台黑名单
|
||||
allow_groups?: string[]; // 群聊白名单
|
||||
prohibit_groups?: string[]; // 群聊黑名单
|
||||
allow_users?: string[]; // 用户白名单
|
||||
prohibit_users?: string[]; // 群聊白名单
|
||||
}): Promise<Sender> {
|
||||
return new Promise((resolve, reject) => {
|
||||
let params: any = {
|
||||
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,
|
||||
};
|
||||
client.SenderListen(new srpc.SenderListenRequest(params), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
if (resp?.value) {
|
||||
resolve(new Sender(resp.value));
|
||||
} else {
|
||||
reject(new Error("timeout"));
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
async reply(content: string): Promise<string | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.SenderReply(
|
||||
new srpc.ReplyRequest({
|
||||
uuid: this.uuid,
|
||||
content,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.value);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async action(options: any): Promise<any | undefined> {
|
||||
return;
|
||||
}
|
||||
async event(): Promise<any | undefined> {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
class Bucket {
|
||||
name: string;
|
||||
|
||||
constructor(name: string) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
transform(v: string | undefined) {
|
||||
if (!v) {
|
||||
return undefined;
|
||||
}
|
||||
let result: number | boolean;
|
||||
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: any) {
|
||||
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 undefined;
|
||||
}
|
||||
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: string, defaultValue: any = undefined): Promise<any> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketGet(
|
||||
new srpc.BucketKeyRequest({ name: this.name, key }),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(this.transform(resp?.value) || defaultValue);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
async set(
|
||||
key: string,
|
||||
value: any
|
||||
): Promise<{ message?: string; changed?: boolean }> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketSet(
|
||||
new 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(): Promise<any> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketGetAll(
|
||||
new srpc.BucketRequest({ name: this.name }),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
let values: any = {};
|
||||
if (resp?.value) {
|
||||
values = JSON.parse(resp?.value);
|
||||
for (let key in values) {
|
||||
values[key] = this.transform(values[key]);
|
||||
}
|
||||
}
|
||||
resolve(values);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
async delete(): Promise<undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketDelete(
|
||||
new srpc.BucketRequest({ name: this.name }),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(undefined);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
async keys(): Promise<string[] | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketKeys(
|
||||
new srpc.BucketRequest({ name: this.name }),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.keys);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
async len(): Promise<number | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketLen(
|
||||
new srpc.BucketRequest({ name: this.name }),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.length);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
async buckets(): Promise<string[] | undefined> {
|
||||
return new Promise((resolve, reject) => {
|
||||
client.BucketBuckets(new srpc.Empty(), (err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(resp?.buckets);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async _name(): Promise<string> {
|
||||
return this.name;
|
||||
}
|
||||
}
|
||||
|
||||
interface Message {
|
||||
message_id?: string; // 消息ID
|
||||
user_id: string; // 用户ID
|
||||
chat_id?: string; // 聊天ID
|
||||
content: string; // 聊天内容
|
||||
user_name?: string; // 用户名
|
||||
chat_name?: string; // 群组名
|
||||
}
|
||||
|
||||
class Adapter {
|
||||
platform: string | undefined;
|
||||
bot_id: string | undefined;
|
||||
call: any
|
||||
constructor(options: {
|
||||
platform?: string;
|
||||
bot_id?: string;
|
||||
replyHandler?: (message: Message) => string | undefined;
|
||||
}) {
|
||||
this.platform = options.platform;
|
||||
this.bot_id = options.bot_id;
|
||||
const call = client.AdapterRegist();
|
||||
if (options.replyHandler) {
|
||||
let callback: any = options.replyHandler;
|
||||
call.on("data", (response) => {
|
||||
let message = JSON.parse(response.value);
|
||||
const { echo, __type__ } = message;
|
||||
delete(message.__type__)
|
||||
delete(message.echo)
|
||||
if (__type__ == "reply") {
|
||||
call.write(
|
||||
new srpc.AdapterRegistRequest({
|
||||
bot_id: echo,
|
||||
platform: callback(message),
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
||||
call.on("error", (err) => {
|
||||
// console.error(err);
|
||||
});
|
||||
call.write(
|
||||
new srpc.AdapterRegistRequest({
|
||||
bot_id: options.bot_id,
|
||||
platform: options.platform,
|
||||
})
|
||||
);
|
||||
this.call = call
|
||||
}
|
||||
}
|
||||
setActionHandler(func: (action: {}) => any): void {
|
||||
// 将从服务端不断接收action消息,并处理
|
||||
// 事件处理巨饼
|
||||
}
|
||||
async receive(message: Message): Promise<Sender> {
|
||||
//投递消息
|
||||
return new Promise<Sender>((resolve, reject) => {
|
||||
client.AdapterReceive(
|
||||
new 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: Message): Promise<string> {
|
||||
//推送消息
|
||||
return new Promise<string>((resolve, reject) => {
|
||||
client.AdapterPush(
|
||||
new 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(resp.value);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
async destroy(): Promise<void> {
|
||||
this.call.cancel()
|
||||
}
|
||||
async sender(options: any): Promise<Sender> {
|
||||
return new Promise<Sender>((resolve, reject) => {
|
||||
client.AdapterSender(
|
||||
new srpc.AdapterRequest({
|
||||
platform: this.platform,
|
||||
bot_id: this.bot_id,
|
||||
}),
|
||||
(err, resp) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else if (resp?.value) {
|
||||
resolve(new Sender(resp.value));
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
let sender = new Sender(
|
||||
process.env?.SENDER_ID ?? "4d6371a8-2778-11ee-a3c2-821680fbbf6b"
|
||||
);
|
||||
|
||||
async function sleep(ms: number | undefined) {
|
||||
return new Promise((resolve) => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
export { Adapter, Bucket, sender, sleep };
|
||||
+1659
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,112 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option go_package = "srpc/";
|
||||
|
||||
package srpc;
|
||||
|
||||
message Empty {}
|
||||
|
||||
message Default {
|
||||
string value = 1;
|
||||
}
|
||||
|
||||
message BucketSetRequest {
|
||||
string name = 1;
|
||||
string key = 2;
|
||||
string value = 3;
|
||||
}
|
||||
|
||||
message BucketSetResponse {
|
||||
bool changed = 1;
|
||||
string message = 2;
|
||||
}
|
||||
|
||||
message BucketKeyRequest {
|
||||
string name = 1;
|
||||
string key = 2;
|
||||
}
|
||||
|
||||
message BucketRequest {
|
||||
string name = 1;
|
||||
}
|
||||
|
||||
message BucketKeysResponse {
|
||||
repeated string keys = 1;
|
||||
}
|
||||
|
||||
message LenResponse {
|
||||
int32 length = 1;
|
||||
}
|
||||
|
||||
message BucketsResponse {
|
||||
repeated string buckets = 1;
|
||||
}
|
||||
|
||||
message SenderRequest {
|
||||
string uuid = 1;
|
||||
}
|
||||
|
||||
message ReplyRequest {
|
||||
string uuid = 1;
|
||||
string content = 2;
|
||||
}
|
||||
|
||||
message SenderContentRequest {
|
||||
string uuid = 1;
|
||||
string content = 2;
|
||||
}
|
||||
|
||||
message SenderListenRequest {
|
||||
string uuid = 1;
|
||||
repeated string rules = 2;
|
||||
int32 timeout = 3;
|
||||
bool listen_group = 4;
|
||||
bool listen_private = 5;
|
||||
bool require_admin = 6;
|
||||
repeated string allow_platforms = 7;
|
||||
repeated string prohibit_platforms = 8;
|
||||
repeated string allow_users = 9;
|
||||
repeated string prohibit_users = 10;
|
||||
repeated string allow_groups = 11;
|
||||
repeated string prohibit_groups = 12;
|
||||
}
|
||||
|
||||
message AdapterRegistRequest {
|
||||
string platform = 1;
|
||||
string bot_id = 2;
|
||||
}
|
||||
|
||||
message AdapterRequest {
|
||||
string platform = 1;
|
||||
string bot_id = 2;
|
||||
string value = 3;
|
||||
}
|
||||
|
||||
service SillyGirlService {
|
||||
rpc BucketGet(BucketKeyRequest) returns (Default);
|
||||
rpc BucketSet(BucketSetRequest) returns (BucketSetResponse);
|
||||
rpc BucketDelete(BucketRequest) returns (Empty);
|
||||
rpc BucketKeys(BucketRequest) returns (BucketKeysResponse);
|
||||
rpc BucketLen(BucketRequest) returns (LenResponse);
|
||||
rpc BucketGetAll(BucketRequest) returns (Default);
|
||||
rpc BucketBuckets(Empty) returns (BucketsResponse);
|
||||
rpc SenderGetUserId (SenderRequest) returns (Default);
|
||||
rpc SenderGetUserName (SenderRequest) returns (Default);
|
||||
rpc SenderGetChatId (SenderRequest) returns (Default);
|
||||
rpc SenderGetChatName (SenderRequest) returns (Default);
|
||||
rpc SenderGetMessageId (SenderRequest) returns (Default);
|
||||
rpc SenderGetPlatform (SenderRequest) returns (Default);
|
||||
rpc SenderGetBotId (SenderRequest) returns (Default);
|
||||
rpc SenderGetContent (SenderRequest) returns (Default);
|
||||
rpc SenderSetContent (SenderContentRequest) returns (Empty);
|
||||
rpc SenderContinue (SenderRequest) returns (Empty);
|
||||
rpc SenderListen (SenderListenRequest) returns (Default);
|
||||
rpc SenderEvent (SenderRequest) returns (Default);
|
||||
rpc SenderReply (ReplyRequest) returns (Default);
|
||||
rpc SenderAction (ReplyRequest) returns (Default);
|
||||
rpc AdapterRegist(stream AdapterRegistRequest) returns (stream Default);
|
||||
rpc AdapterReceive(AdapterRequest) returns (Default);
|
||||
rpc AdapterPush(AdapterRequest) returns (Default);
|
||||
rpc AdapterDestroy(AdapterRequest) returns (Empty);
|
||||
rpc AdapterSender(AdapterRequest) returns (Default);
|
||||
}
|
||||
+1819
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user