From c926b08d5a273cbfd4fa12f4b9a9d6e97b6a86b7 Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Fri, 21 Mar 2025 10:53:47 -0700 Subject: [PATCH 01/10] poc example of using ttp protos to server/consume events over grpc --- exp/tools/ttp_poc/.gitignore | 19 + exp/tools/ttp_poc/README.md | 33 + exp/tools/ttp_poc/cli_tool/Makefile | 37 + exp/tools/ttp_poc/cli_tool/go/go.mod | 87 + exp/tools/ttp_poc/cli_tool/go/go.sum | 357 ++++ exp/tools/ttp_poc/cli_tool/go/main.go | 30 + .../ttp_poc/cli_tool/go/server/server.go | 137 ++ .../protos/event_service/event_service.proto | 17 + exp/tools/ttp_poc/consumer_app/Makefile | 43 + .../consumer_app/node/package-lock.json | 1820 +++++++++++++++++ .../ttp_poc/consumer_app/node/package.json | 27 + .../ttp_poc/consumer_app/node/src/client.ts | 42 + .../ttp_poc/consumer_app/node/src/index.ts | 41 + .../ttp_poc/consumer_app/node/tsconfig.json | 16 + exp/tools/ttp_poc/ttp_grpc.png | Bin 0 -> 269280 bytes 15 files changed, 2706 insertions(+) create mode 100644 exp/tools/ttp_poc/.gitignore create mode 100644 exp/tools/ttp_poc/README.md create mode 100644 exp/tools/ttp_poc/cli_tool/Makefile create mode 100644 exp/tools/ttp_poc/cli_tool/go/go.mod create mode 100644 exp/tools/ttp_poc/cli_tool/go/go.sum create mode 100644 exp/tools/ttp_poc/cli_tool/go/main.go create mode 100644 exp/tools/ttp_poc/cli_tool/go/server/server.go create mode 100644 exp/tools/ttp_poc/cli_tool/protos/event_service/event_service.proto create mode 100644 exp/tools/ttp_poc/consumer_app/Makefile create mode 100644 exp/tools/ttp_poc/consumer_app/node/package-lock.json create mode 100644 exp/tools/ttp_poc/consumer_app/node/package.json create mode 100644 exp/tools/ttp_poc/consumer_app/node/src/client.ts create mode 100644 exp/tools/ttp_poc/consumer_app/node/src/index.ts create mode 100644 exp/tools/ttp_poc/consumer_app/node/tsconfig.json create mode 100644 exp/tools/ttp_poc/ttp_grpc.png diff --git a/exp/tools/ttp_poc/.gitignore b/exp/tools/ttp_poc/.gitignore new file mode 100644 index 0000000000..37a452c057 --- /dev/null +++ b/exp/tools/ttp_poc/.gitignore @@ -0,0 +1,19 @@ +# Generated code directories +**/gen/ + +ttp_grpc_server + +# Vendored proto files +**/cli_tool/protos/ingest/ +**/consumer_app/protos/ + +# Node.js +**/node_modules/ +**/dist/ +.env + +.vscode/ +*.swp +*.swo + +.DS_Store \ No newline at end of file diff --git a/exp/tools/ttp_poc/README.md b/exp/tools/ttp_poc/README.md new file mode 100644 index 0000000000..a2c745095f --- /dev/null +++ b/exp/tools/ttp_poc/README.md @@ -0,0 +1,33 @@ +# TTP POC +example of Token transfer processor[TTP](https://github.com/stellar/go/pull/5609) as a GRPC server streaming events to a node js consumer. + +![TTP gRPC Diagram](./ttp_grpc.png) + +## in one terminal, run the TTP grpc server +# install protoc +# `brew install protobuf` +# Install protoc Go plugins globally, make sure your PATH includes GOPATH/bin or GOBIN +# `go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28` +# `go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2` + +start the TTP grpc server in one terminal or background it +``` +cd cli_tool +make build-server +RPC_ENDPOINT=https://soroban-testnet.stellar.org NETWORK_PASSPHRASE="Test SDF Network ; September 2015" ./ttp_grpc_server +``` + +## in another terminal, run an example consumer app +This example is in node, and it builds a grpc client from the protos to connect and consume events from the TTP grpc server +Make sure to have node >= 22 installed locally on host +``` +cd consumer_app +make build-node +cd node +# run the ts directly +npm start -- +# or run the compiled js +node dist/index.js +``` + + diff --git a/exp/tools/ttp_poc/cli_tool/Makefile b/exp/tools/ttp_poc/cli_tool/Makefile new file mode 100644 index 0000000000..16291fa6a5 --- /dev/null +++ b/exp/tools/ttp_poc/cli_tool/Makefile @@ -0,0 +1,37 @@ +.PHONY: all init gen-proto build-server +.SILENT: + +all: build-server + +# Initialize Go module and install dependencies +init: + rm -rf go/gen > /dev/null 2>&1 + mkdir -p go/gen > /dev/null 2>&1 + rm -rf protos/ingest/processors/token_transfer > /dev/null 2>&1 + mkdir -p protos/ingest/processors/token_transfer > /dev/null 2>&1 + rm -rf protos/ingest/asset > /dev/null 2>&1 + mkdir -p protos/ingest/asset > /dev/null 2>&1 + + curl -s -o protos/ingest/processors/token_transfer/token_transfer_event.proto https://raw.githubusercontent.com/stellar/go/karthik/ttp-classic-operations/protos/ingest/processors/token_transfer/token_transfer_event.proto + curl -s -o protos/ingest/asset/asset.proto https://raw.githubusercontent.com/stellar/go/karthik/ttp-classic-operations/protos/ingest/asset/asset.proto + echo "✓ Init completed" + + +gen-proto: init + # Generate Go code from proto files + protoc \ + --proto_path=./protos \ + --go_out=go/gen \ + --go_opt=Mingest/processors/token_transfer/token_transfer_event.proto=github.com/stellar/go/ingest/processors/token_transfer \ + --go_opt=Mingest/asset/asset.proto=github.com/stellar/go/ingest/asset \ + --go_opt=paths=source_relative \ + --go-grpc_out=go/gen \ + --go-grpc_opt=Mingest/processors/token_transfer/token_transfer_event.proto=github.com/stellar/go/ingest/processors/token_transfer \ + --go-grpc_opt=Mingest/asset/asset.proto=cgithub.com/stellar/go/ingest/asset \ + --go-grpc_opt=paths=source_relative \ + event_service/event_service.proto > /dev/null 2>&1 + echo "✓ Proto generation completed" + +build-server: gen-proto + cd go && go build -o ../ttp_grpc_server main.go + echo "✓ Server build completed" \ No newline at end of file diff --git a/exp/tools/ttp_poc/cli_tool/go/go.mod b/exp/tools/ttp_poc/cli_tool/go/go.mod new file mode 100644 index 0000000000..d5c7049b76 --- /dev/null +++ b/exp/tools/ttp_poc/cli_tool/go/go.mod @@ -0,0 +1,87 @@ +module cli_tool + +go 1.23 + +toolchain go1.23.7 + +require ( + // this is pulling the ttp processor and protos from a branch version of monorepo + // https://github.com/stellar/go/pull/5609 + github.com/stellar/go v0.0.0-20250318012248-2e759c007f3d + github.com/stellar/stellar-rpc v0.9.6-0.20250130160539-be7702aa01ba + google.golang.org/grpc v1.71.0 + google.golang.org/protobuf v1.36.5 +) + +require ( + cloud.google.com/go v0.114.0 // indirect + cloud.google.com/go/auth v0.5.1 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect + cloud.google.com/go/compute/metadata v0.6.0 // indirect + cloud.google.com/go/iam v1.1.8 // indirect + cloud.google.com/go/storage v1.42.0 // indirect + github.com/Masterminds/squirrel v1.5.4 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/aws/aws-sdk-go v1.45.27 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/creachadair/jrpc2 v1.2.0 // indirect + github.com/creachadair/mds v0.13.4 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/djherbis/fscache v0.10.1 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-errors/errors v1.5.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/gax-go/v2 v2.12.4 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jmoiron/sqlx v1.3.5 // indirect + github.com/klauspost/compress v1.17.6 // indirect + github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect + github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/segmentio/go-loggly v0.5.1-0.20171222203950-eb91657e62b2 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/stellar/go-xdr v0.0.0-20231122183749-b53fb00bcac2 // indirect + github.com/stretchr/objx v0.5.2 // indirect + github.com/stretchr/testify v1.10.0 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.34.0 // indirect + go.opentelemetry.io/otel/metric v1.34.0 // indirect + go.opentelemetry.io/otel/trace v1.34.0 // indirect + golang.org/x/crypto v0.32.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.34.0 // indirect + golang.org/x/oauth2 v0.25.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.29.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + google.golang.org/api v0.183.0 // indirect + google.golang.org/genproto v0.0.0-20240528184218-531527333157 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect + gopkg.in/djherbis/atime.v1 v1.0.0 // indirect + gopkg.in/djherbis/stream.v1 v1.3.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/exp/tools/ttp_poc/cli_tool/go/go.sum b/exp/tools/ttp_poc/cli_tool/go/go.sum new file mode 100644 index 0000000000..e3fb5ce257 --- /dev/null +++ b/exp/tools/ttp_poc/cli_tool/go/go.sum @@ -0,0 +1,357 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.114.0 h1:OIPFAdfrFDFO2ve2U7r/H5SwSbBzEdrBdE7xkgwc+kY= +cloud.google.com/go v0.114.0/go.mod h1:ZV9La5YYxctro1HTPug5lXH/GefROyW8PPD4T8n9J8E= +cloud.google.com/go/auth v0.5.1 h1:0QNO7VThG54LUzKiQxv8C6x1YX7lUrzlAa1nVLF8CIw= +cloud.google.com/go/auth v0.5.1/go.mod h1:vbZT8GjzDf3AVqCcQmqeeM32U9HBFc32vVVAbwDsa6s= +cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= +cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= +cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= +cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= +cloud.google.com/go/iam v1.1.8 h1:r7umDwhj+BQyz0ScZMp4QrGXjSTI3ZINnpgU2nlB/K0= +cloud.google.com/go/iam v1.1.8/go.mod h1:GvE6lyMmfxXauzNq8NbgJbeVQNspG+tcdL/W8QO1+zE= +cloud.google.com/go/longrunning v0.5.7 h1:WLbHekDbjK1fVFD3ibpFFVoyizlLRl73I7YKuAKilhU= +cloud.google.com/go/longrunning v0.5.7/go.mod h1:8GClkudohy1Fxm3owmBGid8W0pSgodEMwEAztp38Xng= +cloud.google.com/go/pubsub v1.38.0 h1:J1OT7h51ifATIedjqk/uBNPh+1hkvUaH4VKbz4UuAsc= +cloud.google.com/go/pubsub v1.38.0/go.mod h1:IPMJSWSus/cu57UyR01Jqa/bNOQA+XnPF6Z4dKW4fAA= +cloud.google.com/go/storage v1.42.0 h1:4QtGpplCVt1wz6g5o1ifXd656P5z+yNgzdw1tVfp0cU= +cloud.google.com/go/storage v1.42.0/go.mod h1:HjMXRFq65pGKFn6hxj6x3HCyR41uSB72Z0SO/Vn6JFQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM= +github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f h1:zvClvFQwU++UpIUBGC8YmDlfhUrweEy1R1Fj1gu5iIM= +github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/aws/aws-sdk-go v1.45.27 h1:b+zOTPkAG4i2RvqPdHxkJZafmhhVaVHBp4r41Tu4I6U= +github.com/aws/aws-sdk-go v1.45.27/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/creachadair/jrpc2 v1.2.0 h1:SXr0OgnwM0X18P+HccJP0uT3KGSDk/BCSRlJBvE2bMY= +github.com/creachadair/jrpc2 v1.2.0/go.mod h1:66uKSdr6tR5ZeNvkIjDSbbVUtOv0UhjS/vcd8ECP7Iw= +github.com/creachadair/mds v0.13.4 h1:RgU0MhiVqkzp6/xtNWhK6Pw7tDeaVuGFtA0UA2RBYvY= +github.com/creachadair/mds v0.13.4/go.mod h1:4vrFYUzTXMJpMBU+OA292I6IUxKWCCfZkgXg+/kBZMo= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/djherbis/fscache v0.10.1 h1:hDv+RGyvD+UDKyRYuLoVNbuRTnf2SrA2K3VyR1br9lk= +github.com/djherbis/fscache v0.10.1/go.mod h1:yyPYtkNnnPXsW+81lAcQS6yab3G2CRfnPLotBvtbf0c= +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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/structs v1.0.0 h1:BrX964Rv5uQ3wwS+KRUAJCBBw5PQmgJfJ6v4yly5QwU= +github.com/fatih/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fsouza/fake-gcs-server v1.49.2 h1:fukDqzEQM50QkA0jAbl6cLqeDu3maQjwZBuys759TR4= +github.com/fsouza/fake-gcs-server v1.49.2/go.mod h1:17SYzJEXRcaAA5ATwwvgBkSIqIy7r1icnGM0y/y4foY= +github.com/gavv/monotime v0.0.0-20161010190848-47d58efa6955 h1:gmtGRvSexPU4B1T/yYo0sLOKzER1YT+b4kPxPpm0Ty4= +github.com/gavv/monotime v0.0.0-20161010190848-47d58efa6955/go.mod h1:vmp8DIyckQMXOPl0AQVHt+7n5h7Gb7hS6CUydiV8QeA= +github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= +github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +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.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.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +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.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v0.0.0-20160401233042-9235644dd9e5 h1:oERTZ1buOUYlpmKaqlO5fYmz8cZ1rYu5DieJzF4ZVmU= +github.com/google/go-querystring v0.0.0-20160401233042-9235644dd9e5/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= +github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg= +github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.12.4 h1:9gWcmF85Wvq4ryPFvGFaOgPIs1AQX0d0bcbGw4Z96qg= +github.com/googleapis/gax-go/v2 v2.12.4/go.mod h1:KYEYLorsnIGDi/rPC8b5TdlB9kbKoFubselGIoBMCwI= +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/guregu/null v4.0.0+incompatible h1:4zw0ckM7ECd6FNNddc3Fu4aty9nTlpkkzH7dPn4/4Gw= +github.com/guregu/null v4.0.0+incompatible/go.mod h1:ePGpQaN9cw0tj45IR5E5ehMvsFlLlQZAkkOXZurJ3NM= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= +github.com/jarcoal/httpmock v0.0.0-20161210151336-4442edb3db31 h1:Aw95BEvxJ3K6o9GGv5ppCd1P8hkeIeEJ30FO+OhOJpM= +github.com/jarcoal/httpmock v0.0.0-20161210151336-4442edb3db31/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= +github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= +github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI= +github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= +github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= +github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= +github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= +github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/moul/http2curl v0.0.0-20161031194548-4e24498b31db h1:eZgFHVkk9uOTaOQLC6tgjkzdp7Ays8eEVecBcfHZlJQ= +github.com/moul/http2curl v0.0.0-20161031194548-4e24498b31db/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/xattr v0.4.9 h1:5883YPCtkSd8LFbs13nXplj9g9tlrwoJRjgpgMu1/fE= +github.com/pkg/xattr v0.4.9/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/segmentio/go-loggly v0.5.1-0.20171222203950-eb91657e62b2 h1:S4OC0+OBKz6mJnzuHioeEat74PuQ4Sgvbf8eus695sc= +github.com/segmentio/go-loggly v0.5.1-0.20171222203950-eb91657e62b2/go.mod h1:8zLRYR5npGjaOXgPSKat5+oOh+UHd8OdbS18iqX9F6Y= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stellar/go v0.0.0-20250318012248-2e759c007f3d h1:rEMznQdKgKLYULtnUf0+nDNShfblOxyHgc8QszDseEM= +github.com/stellar/go v0.0.0-20250318012248-2e759c007f3d/go.mod h1:pIh0xYFVnaMP9fLnjFT7URY9Zhwy5wuc6tQkYybKkUY= +github.com/stellar/go-xdr v0.0.0-20231122183749-b53fb00bcac2 h1:OzCVd0SV5qE3ZcDeSFCmOWLZfEWZ3Oe8KtmSOYKEVWE= +github.com/stellar/go-xdr v0.0.0-20231122183749-b53fb00bcac2/go.mod h1:yoxyU/M8nl9LKeWIoBrbDPQ7Cy+4jxRcWcOayZ4BMps= +github.com/stellar/stellar-rpc v0.9.6-0.20250130160539-be7702aa01ba h1:fCKETMnEBI2CDo2cUDoZsJUpTnpK5H2aDFoCfozyzIM= +github.com/stellar/stellar-rpc v0.9.6-0.20250130160539-be7702aa01ba/go.mod h1:V5NPV4kvf2VGU8iRm8l6cAP3kWA/9B2NGKRkrbKBmpA= +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/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +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= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.34.0 h1:d3AAQJ2DRcxJYHm7OXNXtXt2as1vMDfxeIcFvhmGGm4= +github.com/valyala/fasthttp v1.34.0/go.mod h1:epZA5N+7pY6ZaEKRmstzOuYJx9HI8DI1oaCGZpdH4h0= +github.com/xdrpp/goxdr v0.1.1 h1:E1B2c6E8eYhOVyd7yEpOyopzTPirUeF6mVOfXfGyJyc= +github.com/xdrpp/goxdr v0.1.1/go.mod h1:dXo1scL/l6s7iME1gxHWo2XCppbHEKZS7m/KyYWkNzA= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/yalp/jsonpath v0.0.0-20150812003900-31a79c7593bb h1:06WAhQa+mYv7BiOk13B/ywyTlkoE/S7uu6TBKU6FHnE= +github.com/yalp/jsonpath v0.0.0-20150812003900-31a79c7593bb/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= +github.com/yudai/gojsondiff v0.0.0-20170107030110-7b1b7adf999d h1:yJIizrfO599ot2kQ6Af1enICnwBD3XoxgX3MrMwot2M= +github.com/yudai/gojsondiff v0.0.0-20170107030110-7b1b7adf999d/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20150405163532-d1c525dea8ce h1:888GrqRxabUce7lj4OaoShPxodm3kXOMpSa85wdYzfY= +github.com/yudai/golcs v0.0.0-20150405163532-d1c525dea8ce/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= +go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= +go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= +go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= +go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= +go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= +go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= +go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= +go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= +go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +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/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +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-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-20201110031124-69a78807bb2b/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-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= +golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +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-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +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-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-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +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.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +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.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/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-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +google.golang.org/api v0.183.0 h1:PNMeRDwo1pJdgNcFQ9GstuLe/noWKIc89pRWRLMvLwE= +google.golang.org/api v0.183.0/go.mod h1:q43adC5/pHoSZTx5h2mSmdF7NcyfW9JuDyIOJAgS9ZQ= +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-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20240528184218-531527333157 h1:u7WMYrIrVvs0TF5yaKwKNbcJyySYf+HAIFXxWltJOXE= +google.golang.org/genproto v0.0.0-20240528184218-531527333157/go.mod h1:ubQlAQnzejB8uZzszhrTCU2Fyp6Vi7ZE5nn0c3W8+qQ= +google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 h1:GVIKPyP/kLIyVOgOnTwFOrvQaQUzOzGMCxgFUOEmm24= +google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422/go.mod h1:b6h1vNKhxaSoEI+5jc3PJUCustfli/mRab7295pY7rw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= +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.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= +google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +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.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/djherbis/atime.v1 v1.0.0 h1:eMRqB/JrLKocla2PBPKgQYg/p5UG4L6AUAs92aP7F60= +gopkg.in/djherbis/atime.v1 v1.0.0/go.mod h1:hQIUStKmJfvf7xdh/wtK84qe+DsTV5LnA9lzxxtPpJ8= +gopkg.in/djherbis/stream.v1 v1.3.1 h1:uGfmsOY1qqMjQQphhRBSGLyA9qumJ56exkRu9ASTjCw= +gopkg.in/djherbis/stream.v1 v1.3.1/go.mod h1:aEV8CBVRmSpLamVJfM903Npic1IKmb2qS30VAZ+sssg= +gopkg.in/gavv/httpexpect.v1 v1.0.0-20170111145843-40724cf1e4a0 h1:r5ptJ1tBxVAeqw4CrYWhXIMr0SybY3CDHuIbCg5CFVw= +gopkg.in/gavv/httpexpect.v1 v1.0.0-20170111145843-40724cf1e4a0/go.mod h1:WtiW9ZA1LdaWqtQRo1VbIL/v4XZ8NDta+O/kSpGgVek= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.8/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.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= diff --git a/exp/tools/ttp_poc/cli_tool/go/main.go b/exp/tools/ttp_poc/cli_tool/go/main.go new file mode 100644 index 0000000000..5880b6bd19 --- /dev/null +++ b/exp/tools/ttp_poc/cli_tool/go/main.go @@ -0,0 +1,30 @@ +package main + +import ( + "cli_tool/gen/event_service" + "cli_tool/server" + "log" + "net" + "os" + + "google.golang.org/grpc" +) + +func main() { + lis, err := net.Listen("tcp", ":50051") + if err != nil { + log.Fatalf("failed to listen: %v", err) + } + + s := grpc.NewServer() + eventServer, err := server.NewEventServer(os.Getenv("RPC_ENDPOINT"), os.Getenv("NETWORK_PASSPHRASE")) + if err != nil { + log.Fatalf("failed to create event server: %v", err) + } + event_service.RegisterEventServiceServer(s, eventServer) + + log.Printf("server listening at %v", lis.Addr()) + if err := s.Serve(lis); err != nil { + log.Fatalf("failed to serve: %v", err) + } +} diff --git a/exp/tools/ttp_poc/cli_tool/go/server/server.go b/exp/tools/ttp_poc/cli_tool/go/server/server.go new file mode 100644 index 0000000000..a4543e9388 --- /dev/null +++ b/exp/tools/ttp_poc/cli_tool/go/server/server.go @@ -0,0 +1,137 @@ +package server + +import ( + "cli_tool/gen/event_service" + "log" + "time" + + "github.com/stellar/go/ingest/processors/token_transfer" + "github.com/stellar/go/xdr" + "github.com/stellar/stellar-rpc/client" + "github.com/stellar/stellar-rpc/protocol" +) + +type EventServer struct { + event_service.UnimplementedEventServiceServer + rpcClient *client.Client + processor *token_transfer.EventsProcessor +} + +func NewEventServer(rpcEndpoint string, passphrase string) (*EventServer, error) { + rpcClient := client.NewClient(rpcEndpoint, nil) + processor := token_transfer.NewEventsProcessor(passphrase) + return &EventServer{ + rpcClient: rpcClient, + processor: processor, + }, nil +} + +// GetEvents implements the gRPC GetEvents method +func (s *EventServer) GetTTPEvents(req *event_service.GetEventsRequest, stream event_service.EventService_GetTTPEventsServer) error { + ctx := stream.Context() + + // Create initial GetLedgers request + getLedgersReq := protocol.GetLedgersRequest{ + StartLedger: uint32(req.StartLedger), + } + + // If EndLedger < StartLedger, do infinite long polling + if req.EndLedger < req.StartLedger { + getLedgersReq.Pagination = &protocol.LedgerPaginationOptions{ + Limit: 2, + } + for { + // Check if context is cancelled + select { + case <-ctx.Done(): + err := ctx.Err() + log.Printf("Context cancelled in GetTTPEvents: %v", err) + return err + default: + } + + // Get ledgers from RPC + resp, err := s.rpcClient.GetLedgers(ctx, getLedgersReq) + if err != nil { + log.Printf("Error getting ledgers from RPC: %v", err) + return err + } + + if len(resp.Ledgers) == 0 { + // No new ledgers, wait a bit before polling again + time.Sleep(5 * time.Second) + continue + } + + // Process each ledger + for _, ledgerInfo := range resp.Ledgers { + // Convert LedgerMetadata to xdr.LedgerCloseMeta + var ledgerMeta xdr.LedgerCloseMeta + if err := xdr.SafeUnmarshalBase64(ledgerInfo.LedgerMetadata, &ledgerMeta); err != nil { + log.Printf("Error unmarshaling ledger metadata: %v: %v", ledgerInfo.LedgerMetadata, err) + return err + } + + // Get events from ledger using the token_transfer processor + events, err := s.processor.EventsFromLedger(ledgerMeta) + if err != nil { + log.Printf("Error processing events from ledger %d: %v", ledgerInfo.Sequence, err) + return err + } + + // Stream each event + for i := range events { + if err := stream.Send(events[i]); err != nil { + log.Printf("Error sending event to stream: %v", err) + return err + } + } + } + + // Update cursor for next request + getLedgersReq.Pagination.Cursor = resp.Cursor + } + } else { + // For finite range, we'll let the RPC server handle pagination + // since we know the end ledger + getLedgersReq.StartLedger = uint32(req.EndLedger) + getLedgersReq.Pagination = &protocol.LedgerPaginationOptions{ + Limit: uint(req.EndLedger - req.StartLedger), + } + + // Get ledgers from RPC + resp, err := s.rpcClient.GetLedgers(ctx, getLedgersReq) + if err != nil { + log.Printf("Error getting ledgers from RPC: %v", err) + return err + } + + // Process each ledger + for _, ledgerInfo := range resp.Ledgers { + // Convert LedgerMetadata to xdr.LedgerCloseMeta + var ledgerMeta xdr.LedgerCloseMeta + + if err := xdr.SafeUnmarshalBase64(ledgerInfo.LedgerMetadata, &ledgerMeta); err != nil { + log.Printf("Error unmarshaling ledger metadata: %v: %v", ledgerInfo.LedgerMetadata, err) + return err + } + + // Get events from ledger using the token_transfer processor + events, err := s.processor.EventsFromLedger(ledgerMeta) + if err != nil { + log.Printf("Error processing events from ledger %d: %v", ledgerInfo.Sequence, err) + return err + } + + // Stream each event + for i := range events { + if err := stream.Send(events[i]); err != nil { + log.Printf("Error sending event to stream: %v", err) + return err + } + } + } + } + + return nil +} diff --git a/exp/tools/ttp_poc/cli_tool/protos/event_service/event_service.proto b/exp/tools/ttp_poc/cli_tool/protos/event_service/event_service.proto new file mode 100644 index 0000000000..7d2745e724 --- /dev/null +++ b/exp/tools/ttp_poc/cli_tool/protos/event_service/event_service.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package token_transfer_service; + +import "ingest/processors/token_transfer/token_transfer_event.proto"; + +option go_package = "cli_tool/gen/go/event_service"; + +service EventService { + // GetEvents returns a stream of token transfer events + rpc GetTTPEvents(GetEventsRequest) returns (stream token_transfer.TokenTransferEvent) {} +} + +message GetEventsRequest { + uint32 start_ledger = 1; + uint32 end_ledger = 2; +} \ No newline at end of file diff --git a/exp/tools/ttp_poc/consumer_app/Makefile b/exp/tools/ttp_poc/consumer_app/Makefile new file mode 100644 index 0000000000..91f058a809 --- /dev/null +++ b/exp/tools/ttp_poc/consumer_app/Makefile @@ -0,0 +1,43 @@ +.PHONY: all init gen-proto build-node +.SILENT: + +# install protoc +# brew install protobuf +# Install protoc plugins for language specific code generation +# this is using node, the example project installed the grpc/proto plugins +# locally into the package.json already. + +all: build-node + +# Initialize Go module and install dependencies +init: + rm -rf node/gen > /dev/null 2>&1 + mkdir -p node/gen > /dev/null 2>&1 + rm -rf protos/event_service > /dev/null 2>&1 + mkdir -p protos/event_service > /dev/null 2>&1 + rm -rf protos/ingest/processors/token_transfer > /dev/null 2>&1 + mkdir -p protos/ingest/processors/token_transfer > /dev/null 2>&1 + rm -rf protos/ingest/asset > /dev/null 2>&1 + mkdir -p protos/ingest/asset > /dev/null 2>&1 + + curl -s -o protos/ingest/processors/token_transfer/token_transfer_event.proto https://raw.githubusercontent.com/stellar/go/karthik/ttp-classic-operations/protos/ingest/processors/token_transfer/token_transfer_event.proto + curl -s -o protos/ingest/asset/asset.proto https://raw.githubusercontent.com/stellar/go/karthik/ttp-classic-operations/protos/ingest/asset/asset.proto + cp ../cli_tool/protos/event_service/event_service.proto protos/event_service/event_service.proto > /dev/null 2>&1 + cd ./node; npm install > /dev/null 2>&1 + echo "✓ Init completed" + +gen-proto: init + # Generate Node code from proto files + protoc \ + --plugin=protoc-gen-ts=./node/node_modules/.bin/protoc-gen-ts \ + --proto_path=./protos \ + --ts_out=grpc_js:./node/gen \ + --ts_opt=esModuleInterop=true \ + event_service/event_service.proto \ + ingest/processors/token_transfer/token_transfer_event.proto \ + ingest/asset/asset.proto > /dev/null 2>&1 + echo "✓ Proto generation completed" + +build-node: gen-proto + cd node && npm run build > /dev/null 2>&1 + echo "✓ Node build completed" \ No newline at end of file diff --git a/exp/tools/ttp_poc/consumer_app/node/package-lock.json b/exp/tools/ttp_poc/consumer_app/node/package-lock.json new file mode 100644 index 0000000000..6e7524ec08 --- /dev/null +++ b/exp/tools/ttp_poc/consumer_app/node/package-lock.json @@ -0,0 +1,1820 @@ +{ + "name": "node", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "node", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@grpc/grpc-js": "^1.13.0", + "@grpc/proto-loader": "^0.7.13", + "google-protobuf": "^3.21.4", + "protoc-gen-ts": "^0.8.7" + }, + "devDependencies": { + "@types/google-protobuf": "^3.15.12", + "@types/node": "^22.13.10", + "ts-node": "^10.9.2", + "ts-node-dev": "^2.0.0", + "typescript": "^5.8.2" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.0.tgz", + "integrity": "sha512-pMuxInZjUnUkgMT2QLZclRqwk2ykJbIU05aZgPgJYXEpN9+2I7z7aNwcjWZSycRPl232FfhPszyBFJyOxTHNog==", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/google-protobuf": { + "version": "3.15.12", + "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.15.12.tgz", + "integrity": "sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", + "dev": true + }, + "node_modules/@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dev": true, + "dependencies": { + "xtend": "^4.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/google-protobuf": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", + "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": 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": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protoc-gen-ts": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/protoc-gen-ts/-/protoc-gen-ts-0.8.7.tgz", + "integrity": "sha512-jr4VJey2J9LVYCV7EVyVe53g1VMw28cCmYJhBe5e3YX5wiyiDwgxWxeDf9oTqAe4P1bN/YGAkW2jhlH8LohwiQ==", + "license": "MIT", + "bin": { + "protoc-gen-ts": "protoc-gen-ts.js" + }, + "funding": { + "type": "individual", + "url": "https://www.buymeacoffee.com/thesayyn" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", + "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.1", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^10.4.0", + "tsconfig": "^7.0.0" + }, + "bin": { + "ts-node-dev": "lib/bin.js", + "tsnd": "lib/bin.js" + }, + "engines": { + "node": ">=0.8.0" + }, + "peerDependencies": { + "node-notifier": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "dependencies": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "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.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@grpc/grpc-js": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.0.tgz", + "integrity": "sha512-pMuxInZjUnUkgMT2QLZclRqwk2ykJbIU05aZgPgJYXEpN9+2I7z7aNwcjWZSycRPl232FfhPszyBFJyOxTHNog==", + "requires": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + } + }, + "@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "requires": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==" + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "@types/google-protobuf": { + "version": "3.15.12", + "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.15.12.tgz", + "integrity": "sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ==", + "dev": true + }, + "@types/node": { + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "requires": { + "undici-types": "~6.20.0" + } + }, + "@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", + "dev": true + }, + "@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true + }, + "acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "requires": { + "acorn": "^8.11.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "google-protobuf": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", + "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==" + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==" + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "requires": { + "@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": ">=13.7.0", + "long": "^5.0.0" + } + }, + "protoc-gen-ts": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/protoc-gen-ts/-/protoc-gen-ts-0.8.7.tgz", + "integrity": "sha512-jr4VJey2J9LVYCV7EVyVe53g1VMw28cCmYJhBe5e3YX5wiyiDwgxWxeDf9oTqAe4P1bN/YGAkW2jhlH8LohwiQ==" + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "requires": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "ts-node-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", + "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", + "dev": true, + "requires": { + "chokidar": "^3.5.1", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^10.4.0", + "tsconfig": "^7.0.0" + } + }, + "tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "requires": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true + }, + "undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "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.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/exp/tools/ttp_poc/consumer_app/node/package.json b/exp/tools/ttp_poc/consumer_app/node/package.json new file mode 100644 index 0000000000..8122a8ce50 --- /dev/null +++ b/exp/tools/ttp_poc/consumer_app/node/package.json @@ -0,0 +1,27 @@ +{ + "name": "node", + "version": "1.0.0", + "description": "Node.js gRPC client for event service", + "main": "dist/index.js", + "scripts": { + "build": "tsc", + "start": "ts-node src/index.ts", + "dev": "ts-node-dev --respawn src/index.ts" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@grpc/grpc-js": "^1.13.0", + "@grpc/proto-loader": "^0.7.13", + "google-protobuf": "^3.21.4", + "protoc-gen-ts": "^0.8.7" + }, + "devDependencies": { + "@types/google-protobuf": "^3.15.12", + "@types/node": "^22.13.10", + "ts-node": "^10.9.2", + "ts-node-dev": "^2.0.0", + "typescript": "^5.8.2" + } +} diff --git a/exp/tools/ttp_poc/consumer_app/node/src/client.ts b/exp/tools/ttp_poc/consumer_app/node/src/client.ts new file mode 100644 index 0000000000..9a5df68a48 --- /dev/null +++ b/exp/tools/ttp_poc/consumer_app/node/src/client.ts @@ -0,0 +1,42 @@ +import * as grpc from '@grpc/grpc-js'; +import { token_transfer_service } from '../gen/event_service/event_service'; +import { token_transfer } from '../gen/ingest/processors/token_transfer/token_transfer_event'; + +// Create a gRPC client +export class EventServiceClient { + private client: token_transfer_service.EventServiceClient; + + constructor(serverAddress: string = 'localhost:50051') { + this.client = new token_transfer_service.EventServiceClient( + serverAddress, + grpc.credentials.createInsecure() + ); + } + + // Get events stream + getTTPEvents( + startLedger: number, + endLedger: number, + onEvent: (event: token_transfer.TokenTransferEvent) => void + ): void { + const request = new token_transfer_service.GetEventsRequest({ + start_ledger: startLedger, + end_ledger: endLedger + }); + const stream = this.client.GetTTPEvents(request); + + stream.on('data', (event) => { + onEvent(event); + }); + + stream.on('error', (error) => { + console.error('Error in getTTPEvents stream:', error); + throw error; + }); + + // Block until stream ends + stream.on('end', () => { + return; + }); + } +} \ No newline at end of file diff --git a/exp/tools/ttp_poc/consumer_app/node/src/index.ts b/exp/tools/ttp_poc/consumer_app/node/src/index.ts new file mode 100644 index 0000000000..35be454db3 --- /dev/null +++ b/exp/tools/ttp_poc/consumer_app/node/src/index.ts @@ -0,0 +1,41 @@ +import { EventServiceClient } from './client'; + +async function main() { + // an example of how to get a streamTTP events for a specific range of ledgers + // from a GRPC serviceusing the protobufs generated code from github.comstellar/go/protos + // + const args = process.argv.slice(2); + if (args.length !== 2) { + console.error('Usage: node index.ts '); + process.exit(1); + } + + const startLedger = parseInt(args[0]); + // if the end ledger is less than the start ledger, the server will stream indefinitely + const endLedger = parseInt(args[1]); + + if (isNaN(startLedger) || isNaN(endLedger)) { + console.error('Error: startLedger and endLedger must be numbers'); + process.exit(1); + } + + const client = new EventServiceClient(); + + try { + client.getTTPEvents( + startLedger, + endLedger, + (event) => { + // Handle each ttp event as it arrives + console.log('Received TTP event:'); + console.log(JSON.stringify(event.toObject(), null, 2)); + console.log('-------------------'); + } + ); + + } catch (error) { + console.error('Error getting TTP events:', error); + } +} + +main(); \ No newline at end of file diff --git a/exp/tools/ttp_poc/consumer_app/node/tsconfig.json b/exp/tools/ttp_poc/consumer_app/node/tsconfig.json new file mode 100644 index 0000000000..b2d34d1520 --- /dev/null +++ b/exp/tools/ttp_poc/consumer_app/node/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "lib": ["es2020"], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "outDir": "./dist", + "rootDir": ".", + "declaration": true + }, + "include": ["src/**/*", "gen/**/*"], + "exclude": ["node_modules", "dist"] +} \ No newline at end of file diff --git a/exp/tools/ttp_poc/ttp_grpc.png b/exp/tools/ttp_poc/ttp_grpc.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a9f14ea4f2507bbdc1a8b2c84c79fc160659b8 GIT binary patch literal 269280 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 jd|YP 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 literal 0 HcmV?d00001 From 749760b56d75b9fad118ab219662711dedf93d13 Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Fri, 21 Mar 2025 10:54:56 -0700 Subject: [PATCH 02/10] updated readme --- exp/tools/ttp_poc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exp/tools/ttp_poc/README.md b/exp/tools/ttp_poc/README.md index a2c745095f..1bc1e09650 100644 --- a/exp/tools/ttp_poc/README.md +++ b/exp/tools/ttp_poc/README.md @@ -1,5 +1,5 @@ # TTP POC -example of Token transfer processor[TTP](https://github.com/stellar/go/pull/5609) as a GRPC server streaming events to a node js consumer. +example of Token transfer processor[TTP](https://github.com/stellar/go/pull/5609) as a GRPC server which streams events to a node js application as the grpc consumer. ![TTP gRPC Diagram](./ttp_grpc.png) From 33e5bafe8e129f4401c8b7e3d303747dcb9250e6 Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Fri, 21 Mar 2025 11:41:48 -0700 Subject: [PATCH 03/10] updated comments --- exp/tools/ttp_poc/consumer_app/node/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exp/tools/ttp_poc/consumer_app/node/src/index.ts b/exp/tools/ttp_poc/consumer_app/node/src/index.ts index 35be454db3..fe7c697132 100644 --- a/exp/tools/ttp_poc/consumer_app/node/src/index.ts +++ b/exp/tools/ttp_poc/consumer_app/node/src/index.ts @@ -26,7 +26,8 @@ async function main() { startLedger, endLedger, (event) => { - // Handle each ttp event as it arrives + // Do cool Stuff with TTP events! + // ideally something more intresting than logging to console.. console.log('Received TTP event:'); console.log(JSON.stringify(event.toObject(), null, 2)); console.log('-------------------'); From b101cc31993180a788e2f361a80753e736d57e57 Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Fri, 21 Mar 2025 13:24:06 -0700 Subject: [PATCH 04/10] updated readme link to TTP --- exp/tools/ttp_poc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exp/tools/ttp_poc/README.md b/exp/tools/ttp_poc/README.md index 1bc1e09650..394e673672 100644 --- a/exp/tools/ttp_poc/README.md +++ b/exp/tools/ttp_poc/README.md @@ -1,5 +1,5 @@ # TTP POC -example of Token transfer processor[TTP](https://github.com/stellar/go/pull/5609) as a GRPC server which streams events to a node js application as the grpc consumer. +example of Token transfer Processor[TTP](../../../ingest/processors/token_transfer/token_transfer_processor.go) as a GRPC server which streams events to a node js application as the grpc consumer. ![TTP gRPC Diagram](./ttp_grpc.png) From ca161b8b43d409d72062c5a9d82670d04c4ce1f2 Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Fri, 21 Mar 2025 13:37:58 -0700 Subject: [PATCH 05/10] readme content --- exp/tools/ttp_poc/README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/exp/tools/ttp_poc/README.md b/exp/tools/ttp_poc/README.md index 394e673672..f499bd67a3 100644 --- a/exp/tools/ttp_poc/README.md +++ b/exp/tools/ttp_poc/README.md @@ -1,16 +1,20 @@ # TTP POC -example of Token transfer Processor[TTP](../../../ingest/processors/token_transfer/token_transfer_processor.go) as a GRPC server which streams events to a node js application as the grpc consumer. +example of Token transfer Processor [TTP](../../../ingest/processors/token_transfer/token_transfer_processor.go) as a GRPC server which streams events to a node js application as the grpc consumer. ![TTP gRPC Diagram](./ttp_grpc.png) ## in one terminal, run the TTP grpc server -# install protoc -# `brew install protobuf` -# Install protoc Go plugins globally, make sure your PATH includes GOPATH/bin or GOBIN -# `go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28` -# `go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2` -start the TTP grpc server in one terminal or background it +install protoc +- on mac, `brew install protobuf` + + +Install protoc Go plugins globally, make sure your PATH includes GOPATH/bin or GOBIN +- `go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28` +- `go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2` + + +build and run the server ``` cd cli_tool make build-server From d95574c1d477d1ea7bead8d5fceae1fc2fc43469 Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Sat, 22 Mar 2025 19:16:48 -0700 Subject: [PATCH 06/10] update go mod --- exp/tools/ttp_poc/cli_tool/go/go.mod | 5 ++--- exp/tools/ttp_poc/cli_tool/go/go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/exp/tools/ttp_poc/cli_tool/go/go.mod b/exp/tools/ttp_poc/cli_tool/go/go.mod index d5c7049b76..0c5e5683b7 100644 --- a/exp/tools/ttp_poc/cli_tool/go/go.mod +++ b/exp/tools/ttp_poc/cli_tool/go/go.mod @@ -5,9 +5,7 @@ go 1.23 toolchain go1.23.7 require ( - // this is pulling the ttp processor and protos from a branch version of monorepo - // https://github.com/stellar/go/pull/5609 - github.com/stellar/go v0.0.0-20250318012248-2e759c007f3d + github.com/stellar/go v0.0.0-20250322075617-5ccaef04a539 github.com/stellar/stellar-rpc v0.9.6-0.20250130160539-be7702aa01ba google.golang.org/grpc v1.71.0 google.golang.org/protobuf v1.36.5 @@ -36,6 +34,7 @@ require ( github.com/go-logr/stdr v1.2.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect diff --git a/exp/tools/ttp_poc/cli_tool/go/go.sum b/exp/tools/ttp_poc/cli_tool/go/go.sum index e3fb5ce257..a7dd97db60 100644 --- a/exp/tools/ttp_poc/cli_tool/go/go.sum +++ b/exp/tools/ttp_poc/cli_tool/go/go.sum @@ -92,8 +92,8 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw 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.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-querystring v0.0.0-20160401233042-9235644dd9e5 h1:oERTZ1buOUYlpmKaqlO5fYmz8cZ1rYu5DieJzF4ZVmU= github.com/google/go-querystring v0.0.0-20160401233042-9235644dd9e5/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= @@ -179,8 +179,8 @@ github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/stellar/go v0.0.0-20250318012248-2e759c007f3d h1:rEMznQdKgKLYULtnUf0+nDNShfblOxyHgc8QszDseEM= -github.com/stellar/go v0.0.0-20250318012248-2e759c007f3d/go.mod h1:pIh0xYFVnaMP9fLnjFT7URY9Zhwy5wuc6tQkYybKkUY= +github.com/stellar/go v0.0.0-20250322075617-5ccaef04a539 h1:RphWUdeWcQQlkX+kx8hhj7H+m8ae1YJJwrpp0Du2TiE= +github.com/stellar/go v0.0.0-20250322075617-5ccaef04a539/go.mod h1:wE/ZDmjys55VprPR5qx5Ojx0cUi3f7MJ+dc5gzM+03k= github.com/stellar/go-xdr v0.0.0-20231122183749-b53fb00bcac2 h1:OzCVd0SV5qE3ZcDeSFCmOWLZfEWZ3Oe8KtmSOYKEVWE= github.com/stellar/go-xdr v0.0.0-20231122183749-b53fb00bcac2/go.mod h1:yoxyU/M8nl9LKeWIoBrbDPQ7Cy+4jxRcWcOayZ4BMps= github.com/stellar/stellar-rpc v0.9.6-0.20250130160539-be7702aa01ba h1:fCKETMnEBI2CDo2cUDoZsJUpTnpK5H2aDFoCfozyzIM= From 79a2a5c24643a983ef552e789f0d41d47f6dea3a Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Tue, 25 Mar 2025 13:23:03 -0700 Subject: [PATCH 07/10] use master for protos ref --- exp/tools/ttp_poc/cli_tool/Makefile | 6 ++++-- exp/tools/ttp_poc/consumer_app/Makefile | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/exp/tools/ttp_poc/cli_tool/Makefile b/exp/tools/ttp_poc/cli_tool/Makefile index 16291fa6a5..a09a789f97 100644 --- a/exp/tools/ttp_poc/cli_tool/Makefile +++ b/exp/tools/ttp_poc/cli_tool/Makefile @@ -1,6 +1,8 @@ .PHONY: all init gen-proto build-server .SILENT: +PROTOS_BASE_URL := https://raw.githubusercontent.com/stellar/go/master/protos + all: build-server # Initialize Go module and install dependencies @@ -12,8 +14,8 @@ init: rm -rf protos/ingest/asset > /dev/null 2>&1 mkdir -p protos/ingest/asset > /dev/null 2>&1 - curl -s -o protos/ingest/processors/token_transfer/token_transfer_event.proto https://raw.githubusercontent.com/stellar/go/karthik/ttp-classic-operations/protos/ingest/processors/token_transfer/token_transfer_event.proto - curl -s -o protos/ingest/asset/asset.proto https://raw.githubusercontent.com/stellar/go/karthik/ttp-classic-operations/protos/ingest/asset/asset.proto + curl -s -o protos/ingest/processors/token_transfer/token_transfer_event.proto $(PROTOS_BASE_URL)/ingest/processors/token_transfer/token_transfer_event.proto + curl -s -o protos/ingest/asset/asset.proto $(PROTOS_BASE_URL)/ingest/asset/asset.proto echo "✓ Init completed" diff --git a/exp/tools/ttp_poc/consumer_app/Makefile b/exp/tools/ttp_poc/consumer_app/Makefile index 91f058a809..c498c0ad56 100644 --- a/exp/tools/ttp_poc/consumer_app/Makefile +++ b/exp/tools/ttp_poc/consumer_app/Makefile @@ -1,6 +1,8 @@ .PHONY: all init gen-proto build-node .SILENT: +PROTOS_BASE_URL := https://raw.githubusercontent.com/stellar/go/master/protos + # install protoc # brew install protobuf # Install protoc plugins for language specific code generation @@ -20,8 +22,8 @@ init: rm -rf protos/ingest/asset > /dev/null 2>&1 mkdir -p protos/ingest/asset > /dev/null 2>&1 - curl -s -o protos/ingest/processors/token_transfer/token_transfer_event.proto https://raw.githubusercontent.com/stellar/go/karthik/ttp-classic-operations/protos/ingest/processors/token_transfer/token_transfer_event.proto - curl -s -o protos/ingest/asset/asset.proto https://raw.githubusercontent.com/stellar/go/karthik/ttp-classic-operations/protos/ingest/asset/asset.proto + curl -s -o protos/ingest/processors/token_transfer/token_transfer_event.proto $(PROTOS_BASE_URL)/ingest/processors/token_transfer/token_transfer_event.proto + curl -s -o protos/ingest/asset/asset.proto $(PROTOS_BASE_URL)/ingest/asset/asset.proto cp ../cli_tool/protos/event_service/event_service.proto protos/event_service/event_service.proto > /dev/null 2>&1 cd ./node; npm install > /dev/null 2>&1 echo "✓ Init completed" From f677336b5569f66848fcbbc6ccfbfe9f926f93eb Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Wed, 26 Mar 2025 12:31:33 -0700 Subject: [PATCH 08/10] fixed unbounded streaming of events, for endLedger=0 --- .../ttp_poc/cli_tool/go/server/server.go | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/exp/tools/ttp_poc/cli_tool/go/server/server.go b/exp/tools/ttp_poc/cli_tool/go/server/server.go index a4543e9388..edbf705916 100644 --- a/exp/tools/ttp_poc/cli_tool/go/server/server.go +++ b/exp/tools/ttp_poc/cli_tool/go/server/server.go @@ -36,9 +36,11 @@ func (s *EventServer) GetTTPEvents(req *event_service.GetEventsRequest, stream e } // If EndLedger < StartLedger, do infinite long polling + // this is naive, inefficient long polling approach + // with every request getting max of one ledger back if req.EndLedger < req.StartLedger { getLedgersReq.Pagination = &protocol.LedgerPaginationOptions{ - Limit: 2, + Limit: 1, } for { // Check if context is cancelled @@ -58,11 +60,12 @@ func (s *EventServer) GetTTPEvents(req *event_service.GetEventsRequest, stream e } if len(resp.Ledgers) == 0 { - // No new ledgers, wait a bit before polling again + // No ledgers, wait a bit before polling again time.Sleep(5 * time.Second) continue } + lastSeq := 0 // Process each ledger for _, ledgerInfo := range resp.Ledgers { // Convert LedgerMetadata to xdr.LedgerCloseMeta @@ -71,6 +74,7 @@ func (s *EventServer) GetTTPEvents(req *event_service.GetEventsRequest, stream e log.Printf("Error unmarshaling ledger metadata: %v: %v", ledgerInfo.LedgerMetadata, err) return err } + lastSeq = int(ledgerMeta.LedgerSequence()) // Get events from ledger using the token_transfer processor events, err := s.processor.EventsFromLedger(ledgerMeta) @@ -81,19 +85,27 @@ func (s *EventServer) GetTTPEvents(req *event_service.GetEventsRequest, stream e // Stream each event for i := range events { - if err := stream.Send(events[i]); err != nil { + ttpEvent := events[i] + if err := stream.Send(ttpEvent); err != nil { log.Printf("Error sending event to stream: %v", err) return err } } } + // naive approach to enable our example long polling + // cursor to stay at least one ledger back from latest ledger on rpc + if lastSeq >= (int(resp.LatestLedger) - 1) { + time.Sleep(7 * time.Second) + } + // Update cursor for next request getLedgersReq.Pagination.Cursor = resp.Cursor + getLedgersReq.StartLedger = 0 } } else { - // For finite range, we'll let the RPC server handle pagination - // since we know the end ledger + // For finite range, we'll do naievly simple for example sake + // to make this a single request. getLedgersReq.StartLedger = uint32(req.EndLedger) getLedgersReq.Pagination = &protocol.LedgerPaginationOptions{ Limit: uint(req.EndLedger - req.StartLedger), @@ -110,7 +122,7 @@ func (s *EventServer) GetTTPEvents(req *event_service.GetEventsRequest, stream e for _, ledgerInfo := range resp.Ledgers { // Convert LedgerMetadata to xdr.LedgerCloseMeta var ledgerMeta xdr.LedgerCloseMeta - + if err := xdr.SafeUnmarshalBase64(ledgerInfo.LedgerMetadata, &ledgerMeta); err != nil { log.Printf("Error unmarshaling ledger metadata: %v: %v", ledgerInfo.LedgerMetadata, err) return err From d6a3f9963e6d07fd26e894978eeedd04cac93474 Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Wed, 26 Mar 2025 16:31:05 -0700 Subject: [PATCH 09/10] let error output from makefile steps to console --- exp/tools/ttp_poc/README.md | 2 +- exp/tools/ttp_poc/cli_tool/Makefile | 3 +++ exp/tools/ttp_poc/consumer_app/Makefile | 13 ++++++++----- .../ttp_poc/consumer_app/node/package-lock.json | 3 +++ exp/tools/ttp_poc/consumer_app/node/package.json | 3 +++ 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/exp/tools/ttp_poc/README.md b/exp/tools/ttp_poc/README.md index f499bd67a3..281700ca2b 100644 --- a/exp/tools/ttp_poc/README.md +++ b/exp/tools/ttp_poc/README.md @@ -23,7 +23,7 @@ RPC_ENDPOINT=https://soroban-testnet.stellar.org NETWORK_PASSPHRASE="Test SDF Ne ## in another terminal, run an example consumer app This example is in node, and it builds a grpc client from the protos to connect and consume events from the TTP grpc server -Make sure to have node >= 22 installed locally on host +Make sure to have **Node >= 22** installed locally on host ``` cd consumer_app make build-node diff --git a/exp/tools/ttp_poc/cli_tool/Makefile b/exp/tools/ttp_poc/cli_tool/Makefile index a09a789f97..12609bc4e3 100644 --- a/exp/tools/ttp_poc/cli_tool/Makefile +++ b/exp/tools/ttp_poc/cli_tool/Makefile @@ -7,6 +7,7 @@ all: build-server # Initialize Go module and install dependencies init: + set -e rm -rf go/gen > /dev/null 2>&1 mkdir -p go/gen > /dev/null 2>&1 rm -rf protos/ingest/processors/token_transfer > /dev/null 2>&1 @@ -21,6 +22,7 @@ init: gen-proto: init # Generate Go code from proto files + set -e protoc \ --proto_path=./protos \ --go_out=go/gen \ @@ -35,5 +37,6 @@ gen-proto: init echo "✓ Proto generation completed" build-server: gen-proto + set -e cd go && go build -o ../ttp_grpc_server main.go echo "✓ Server build completed" \ No newline at end of file diff --git a/exp/tools/ttp_poc/consumer_app/Makefile b/exp/tools/ttp_poc/consumer_app/Makefile index c498c0ad56..1de18d01da 100644 --- a/exp/tools/ttp_poc/consumer_app/Makefile +++ b/exp/tools/ttp_poc/consumer_app/Makefile @@ -7,12 +7,13 @@ PROTOS_BASE_URL := https://raw.githubusercontent.com/stellar/go/master/protos # brew install protobuf # Install protoc plugins for language specific code generation # this is using node, the example project installed the grpc/proto plugins -# locally into the package.json already. +# locally using the package.json already. all: build-node -# Initialize Go module and install dependencies -init: +init: + set -e + rm -rf node/node_modules > /dev/null 2>&1 rm -rf node/gen > /dev/null 2>&1 mkdir -p node/gen > /dev/null 2>&1 rm -rf protos/event_service > /dev/null 2>&1 @@ -25,11 +26,12 @@ init: curl -s -o protos/ingest/processors/token_transfer/token_transfer_event.proto $(PROTOS_BASE_URL)/ingest/processors/token_transfer/token_transfer_event.proto curl -s -o protos/ingest/asset/asset.proto $(PROTOS_BASE_URL)/ingest/asset/asset.proto cp ../cli_tool/protos/event_service/event_service.proto protos/event_service/event_service.proto > /dev/null 2>&1 - cd ./node; npm install > /dev/null 2>&1 + cd ./node; npm install > /dev/null echo "✓ Init completed" gen-proto: init # Generate Node code from proto files + set -e protoc \ --plugin=protoc-gen-ts=./node/node_modules/.bin/protoc-gen-ts \ --proto_path=./protos \ @@ -37,9 +39,10 @@ gen-proto: init --ts_opt=esModuleInterop=true \ event_service/event_service.proto \ ingest/processors/token_transfer/token_transfer_event.proto \ - ingest/asset/asset.proto > /dev/null 2>&1 + ingest/asset/asset.proto > /dev/null echo "✓ Proto generation completed" build-node: gen-proto + set -e cd node && npm run build > /dev/null 2>&1 echo "✓ Node build completed" \ No newline at end of file diff --git a/exp/tools/ttp_poc/consumer_app/node/package-lock.json b/exp/tools/ttp_poc/consumer_app/node/package-lock.json index 6e7524ec08..e5b931fa78 100644 --- a/exp/tools/ttp_poc/consumer_app/node/package-lock.json +++ b/exp/tools/ttp_poc/consumer_app/node/package-lock.json @@ -20,6 +20,9 @@ "ts-node": "^10.9.2", "ts-node-dev": "^2.0.0", "typescript": "^5.8.2" + }, + "engines": { + "node": ">=22.0.0" } }, "node_modules/@cspotcode/source-map-support": { diff --git a/exp/tools/ttp_poc/consumer_app/node/package.json b/exp/tools/ttp_poc/consumer_app/node/package.json index 8122a8ce50..42a006238e 100644 --- a/exp/tools/ttp_poc/consumer_app/node/package.json +++ b/exp/tools/ttp_poc/consumer_app/node/package.json @@ -3,6 +3,9 @@ "version": "1.0.0", "description": "Node.js gRPC client for event service", "main": "dist/index.js", + "engines": { + "node": ">=22.0.0" + }, "scripts": { "build": "tsc", "start": "ts-node src/index.ts", From b92fa98f5863fd2991f78e48e3daee78bc5a8041 Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Fri, 28 Mar 2025 11:16:09 -0700 Subject: [PATCH 10/10] smaller rpc long polling routine for leaner example --- .../ttp_poc/cli_tool/go/server/server.go | 129 ++++++------------ 1 file changed, 45 insertions(+), 84 deletions(-) diff --git a/exp/tools/ttp_poc/cli_tool/go/server/server.go b/exp/tools/ttp_poc/cli_tool/go/server/server.go index edbf705916..76e2bd8a9f 100644 --- a/exp/tools/ttp_poc/cli_tool/go/server/server.go +++ b/exp/tools/ttp_poc/cli_tool/go/server/server.go @@ -26,124 +26,85 @@ func NewEventServer(rpcEndpoint string, passphrase string) (*EventServer, error) }, nil } -// GetEvents implements the gRPC GetEvents method func (s *EventServer) GetTTPEvents(req *event_service.GetEventsRequest, stream event_service.EventService_GetTTPEventsServer) error { ctx := stream.Context() - // Create initial GetLedgers request + // Create initial RPC GetLedgers request getLedgersReq := protocol.GetLedgersRequest{ StartLedger: uint32(req.StartLedger), + Pagination: &protocol.LedgerPaginationOptions{Limit: 1}, } - // If EndLedger < StartLedger, do infinite long polling - // this is naive, inefficient long polling approach - // with every request getting max of one ledger back - if req.EndLedger < req.StartLedger { - getLedgersReq.Pagination = &protocol.LedgerPaginationOptions{ - Limit: 1, - } - for { - // Check if context is cancelled - select { - case <-ctx.Done(): - err := ctx.Err() - log.Printf("Context cancelled in GetTTPEvents: %v", err) - return err - default: - } - - // Get ledgers from RPC - resp, err := s.rpcClient.GetLedgers(ctx, getLedgersReq) - if err != nil { - log.Printf("Error getting ledgers from RPC: %v", err) - return err - } - - if len(resp.Ledgers) == 0 { - // No ledgers, wait a bit before polling again - time.Sleep(5 * time.Second) - continue - } - - lastSeq := 0 - // Process each ledger - for _, ledgerInfo := range resp.Ledgers { - // Convert LedgerMetadata to xdr.LedgerCloseMeta - var ledgerMeta xdr.LedgerCloseMeta - if err := xdr.SafeUnmarshalBase64(ledgerInfo.LedgerMetadata, &ledgerMeta); err != nil { - log.Printf("Error unmarshaling ledger metadata: %v: %v", ledgerInfo.LedgerMetadata, err) - return err - } - lastSeq = int(ledgerMeta.LedgerSequence()) - - // Get events from ledger using the token_transfer processor - events, err := s.processor.EventsFromLedger(ledgerMeta) - if err != nil { - log.Printf("Error processing events from ledger %d: %v", ledgerInfo.Sequence, err) - return err - } - - // Stream each event - for i := range events { - ttpEvent := events[i] - if err := stream.Send(ttpEvent); err != nil { - log.Printf("Error sending event to stream: %v", err) - return err - } - } - } - - // naive approach to enable our example long polling - // cursor to stay at least one ledger back from latest ledger on rpc - if lastSeq >= (int(resp.LatestLedger) - 1) { - time.Sleep(7 * time.Second) - } - - // Update cursor for next request - getLedgersReq.Pagination.Cursor = resp.Cursor - getLedgersReq.StartLedger = 0 - } - } else { - // For finite range, we'll do naievly simple for example sake - // to make this a single request. - getLedgersReq.StartLedger = uint32(req.EndLedger) - getLedgersReq.Pagination = &protocol.LedgerPaginationOptions{ - Limit: uint(req.EndLedger - req.StartLedger), + // this example code acquires ledger metadata from an RPC server instance + // other sources of ledger metadata could be used as alternatives + // such as ledgerbackend's from the Ingest SDK for GCS buckets or Captive core. + + // this routine does a naive, inefficient long polling approach against the RPC + // with every RPC request getting a response with page size of just one ledger + for { + // Check if context is cancelled + select { + case <-ctx.Done(): + err := ctx.Err() + log.Printf("Context cancelled in GetTTPEvents: %v", err) + return err + default: } // Get ledgers from RPC resp, err := s.rpcClient.GetLedgers(ctx, getLedgersReq) if err != nil { - log.Printf("Error getting ledgers from RPC: %v", err) + log.Printf("Error getting ledgers from RPC: %+v", err) return err } + if len(resp.Ledgers) == 0 { + // No ledgers, wait a bit before polling again + time.Sleep(5 * time.Second) + continue + } + + lastSeq := uint32(0) // Process each ledger for _, ledgerInfo := range resp.Ledgers { - // Convert LedgerMetadata to xdr.LedgerCloseMeta + // Convert LedgerMetadata in base64 encoding from RPC to xdr.LedgerCloseMeta var ledgerMeta xdr.LedgerCloseMeta - if err := xdr.SafeUnmarshalBase64(ledgerInfo.LedgerMetadata, &ledgerMeta); err != nil { log.Printf("Error unmarshaling ledger metadata: %v: %v", ledgerInfo.LedgerMetadata, err) return err } + lastSeq = ledgerMeta.LedgerSequence() - // Get events from ledger using the token_transfer processor + // Get events from ledger metadata using the token_transfer processor events, err := s.processor.EventsFromLedger(ledgerMeta) if err != nil { log.Printf("Error processing events from ledger %d: %v", ledgerInfo.Sequence, err) return err } - // Stream each event + // Stream each token transfer event for i := range events { - if err := stream.Send(events[i]); err != nil { + ttpEvent := events[i] + if err := stream.Send(ttpEvent); err != nil { log.Printf("Error sending event to stream: %v", err) return err } } } - } - return nil + // if this was bounded range request, we're done now. + if req.EndLedger > 0 && lastSeq >= req.EndLedger { + return nil + } + + // naive approach for unbounded ledger retrieval with long polling + // pause to stay at least one ledger back from latest ledger on rpc + if lastSeq >= resp.LatestLedger-1 { + time.Sleep(7 * time.Second) + } + + // Update cursor for next request + getLedgersReq.Pagination.Cursor = resp.Cursor + getLedgersReq.StartLedger = 0 + } }