Skip to content

Commit

Permalink
Investapi new version (#17)
Browse files Browse the repository at this point in the history
* Investapi new version
  • Loading branch information
evsamsonov authored Aug 22, 2024
1 parent be52f28 commit ebe52b2
Show file tree
Hide file tree
Showing 18 changed files with 769 additions and 1,431 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ jobs:
- name: golangci-lint
uses: golangci/golangci-lint-action@v2
with:
version: v1.54.2
version: v1.59.1
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@
# vendor/

.idea
.DS_Store
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ lint: ## Run golang lint using docker
-v ${GOPATH}/pkg/mod:/go/pkg/mod \
-v ${PWD}:/app \
-w /app \
golangci/golangci-lint:v1.54.2 \
golangci/golangci-lint:v1.59.1 \
golangci-lint run -v --modules-download-mode=readonly

test: ## Run tests
Expand All @@ -26,3 +26,6 @@ doc: ## Run doc server using docker
-w /go/src/github.com/evsamsonov/tinkoff-broker \
golang:latest \
bash -c "go install golang.org/x/tools/cmd/godoc@latest && /go/bin/godoc -http=:6060"

generate: ## Run go generate
go generate ./...
32 changes: 23 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ for creating automated trading robots.

## How to use

Create a new `Tinkoff` object using constructor `New`. Pass [full-access token](https://tinkoff.github.io/investAPI/token/),
user account identifier, [FIGI](https://tinkoff.github.io/investAPI/faq_identification/) of a trading instrument.
Create a new `Tinkoff` object using constructor `New`. Pass Tinkoff Client and user account identifier.

```go
package main
Expand All @@ -26,29 +25,44 @@ import (
"context"
"log"

tnkbroker "github.com/evsamsonov/tinkoff-broker"
"github.com/evsamsonov/trengin/v2"
"github.com/russianinvestments/invest-api-go-sdk/investgo"
"go.uber.org/zap"

tnkbroker "github.com/evsamsonov/tinkoff-broker/v2"
)

func main() {
ctx := context.Background()

tinkoffConfig := investgo.Config{
EndPoint: "invest-public-api.tinkoff.ru:443",
Token: "[tinkoff-token]",
AccountId: "[account-id]",
}
tinkoffClient, err := investgo.NewClient(ctx, tinkoffConfig, zap.NewNop().Sugar())
if err != nil {
log.Fatal("Failed to create tinkoff client", zap.Error(err))
}

tinkoffBroker, err := tnkbroker.New(
"tinkoff-token",
"123",
"BBG004730N88",
tinkoffClient,
"[account-id]",
// options...
)
if err != nil {
log.Fatal("Failed to create tinkoff broker")
}

tradingEngine := trengin.New(&Strategy{}, tinkoffBroker)
if err = tradingEngine.Run(context.Background()); err != nil {
log.Fatal("Trading engine crashed")
}
}

type Strategy struct{}
func (s *Strategy) Run(ctx context.Context, actions Actions) error { panic("implement me") }
func (s *Strategy) Run(ctx context.Context, actions trengin.Actions) error { panic("implement me") }

```

See more details in [trengin documentation](http://github.com/evsamsonov/trengin).
Expand All @@ -60,7 +74,6 @@ You can configure `Tinkoff` to use `Option`
| Methods | Returns Option which |
|-----------------------------------|----------------------------------------------------------------------------------|
| `WithLogger` | Sets logger. The default logger is no-op Logger. |
| `WithAppName` | Sets [x-app-name](https://tinkoff.github.io/investAPI/grpc/#appname). |
| `WithProtectiveSpread` | Sets protective spread in percent for executing orders. The default value is 1%. |
| `WithTradeStreamRetryTimeout` | Defines retry timeout on trade stream error. |
| `WithTradeStreamPingWaitDuration` | Defines duration how long we wait for ping before reconnection. |
Expand Down Expand Up @@ -97,4 +110,5 @@ doc Run doc server using docker
lint Run golang lint using docker
pre-push Run golang lint and test
test Run tests
generate Run go generate
```
44 changes: 44 additions & 0 deletions clients.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package tnkbroker

import (
"github.com/russianinvestments/invest-api-go-sdk/investgo"
pb "github.com/russianinvestments/invest-api-go-sdk/proto"
)

// nolint: lll
//
//go:generate docker run --rm -v ${PWD}:/app -w /app vektra/mockery --name ordersServiceClient --inpackage --case snake
type ordersServiceClient interface {
PostOrder(req *investgo.PostOrderRequest) (*investgo.PostOrderResponse, error)
GetOrderState(accountID, orderID string, priceType pb.PriceType) (*investgo.GetOrderStateResponse, error)
}

// nolint: lll
//
//go:generate docker run --rm -v ${PWD}:/app -w /app vektra/mockery --name stopOrdersServiceClient --inpackage --case snake
type stopOrdersServiceClient interface {
PostStopOrder(req *investgo.PostStopOrderRequest) (*investgo.PostStopOrderResponse, error)
CancelStopOrder(accountID, stopOrderID string) (*investgo.CancelStopOrderResponse, error)
GetStopOrders(accountID string) (*investgo.GetStopOrdersResponse, error)
}

// nolint: lll
//
//go:generate docker run --rm -v ${PWD}:/app -w /app vektra/mockery --name ordersStreamClient --inpackage --case snake
type ordersStreamClient interface {
TradesStream(accounts []string) (*investgo.TradesStream, error)
}

// nolint: lll
//
//go:generate docker run --rm -v ${PWD}:/app -w /app vektra/mockery --name marketDataServiceClient --inpackage --case snake
type marketDataServiceClient interface {
GetLastPrices(instrumentIds []string) (*investgo.GetLastPricesResponse, error)
}

// nolint: lll
//
//go:generate docker run --rm -v ${PWD}:/app -w /app vektra/mockery --name instrumentsServiceClient --inpackage --case snake
type instrumentsServiceClient interface {
InstrumentByFigi(id string) (*investgo.InstrumentResponse, error)
}
26 changes: 21 additions & 5 deletions cmd/tinkoff-checkup/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,20 @@ import (
"os"
"syscall"

tnkbroker "github.com/evsamsonov/tinkoff-broker"
"github.com/evsamsonov/trengin/v2"
"github.com/russianinvestments/invest-api-go-sdk/investgo"
"go.uber.org/zap"
"golang.org/x/sync/errgroup"
"golang.org/x/term"

tnkbroker "github.com/evsamsonov/tinkoff-broker/v2"
)

func main() {
if len(os.Args) < 3 {
fmt.Println(
"This command checks all methods of Tinkoff Broker.\n" +
"This command checks all methods of Tinkoff Broker.\n" +
"It opens position, changes conditional orders, closes position.",
)
fmt.Println("\nUsage: tinkoff-checkup [ACCOUNT_ID] [INSTRUMENT_FIGI] [-v]")
Expand Down Expand Up @@ -140,18 +143,31 @@ func NewTinkoffCheckuper(verbose bool) (*TinkoffCheckuper, error) {
}

func (t *TinkoffCheckuper) CheckUp(params CheckUpArgs) error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

g, ctx := errgroup.WithContext(ctx)

tinkoffConfig := investgo.Config{
EndPoint: "invest-public-api.tinkoff.ru:443",
Token: params.tinkoffToken,
AppName: "evsamsonov.gdealer",
AccountId: params.accountID,
}
tinkoffClient, err := investgo.NewClient(ctx, tinkoffConfig, t.logger.Sugar())
if err != nil {
return fmt.Errorf("create tinkoff client: %w", err)
}

tinkoffBroker, err := tnkbroker.New(
params.tinkoffToken,
tinkoffClient,
params.accountID,
tnkbroker.WithLogger(t.logger),
)
if err != nil {
return fmt.Errorf("create tinkoff broker: %w", err)
}

ctx, cancel := context.WithCancel(context.Background())
g, ctx := errgroup.WithContext(ctx)

g.Go(func() error {
defer cancel()
if err := tinkoffBroker.Run(ctx); err != nil {
Expand Down
40 changes: 23 additions & 17 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,29 +1,35 @@
module github.com/evsamsonov/tinkoff-broker
module github.com/evsamsonov/tinkoff-broker/v2

go 1.19
go 1.21

toolchain go1.22.5

require (
github.com/evsamsonov/trengin/v2 v2.0.2
github.com/google/uuid v1.3.1
github.com/stretchr/testify v1.8.4
github.com/tinkoff/invest-api-go-sdk v1.0.2
github.com/evsamsonov/trengin/v2 v2.2.0
github.com/google/uuid v1.6.0
github.com/russianinvestments/invest-api-go-sdk v1.23.1
github.com/stretchr/testify v1.9.0
github.com/undefinedlabs/go-mpatch v1.0.6
go.uber.org/zap v1.25.0
golang.org/x/sync v0.3.0
golang.org/x/term v0.12.0
google.golang.org/grpc v1.58.0
go.uber.org/zap v1.27.0
golang.org/x/sync v0.7.0
golang.org/x/term v0.22.0
)

require (
cloud.google.com/go/compute/metadata v0.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.5 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/stretchr/objx v0.5.2 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/net v0.12.0 // indirect
golang.org/x/sys v0.12.0 // indirect
golang.org/x/text v0.11.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect
google.golang.org/protobuf v1.31.0 // indirect
golang.org/x/net v0.25.0 // indirect
golang.org/x/oauth2 v0.20.0 // indirect
golang.org/x/sys v0.22.0 // indirect
golang.org/x/text v0.15.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect
google.golang.org/grpc v1.65.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
89 changes: 45 additions & 44 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,58 +1,59 @@
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/evsamsonov/trengin/v2 v2.0.2 h1:WWcL7QJVcbt78IXV1/aBQfRCcYAQFDCd6cB74mrV21o=
github.com/evsamsonov/trengin/v2 v2.0.2/go.mod h1:merjbl+KOokEz3PlhaDlQXoupTKgjF3kJxUMQVYRLCc=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/evsamsonov/trengin/v2 v2.2.0 h1:LMkjq7s+BpYbTnpv/O+EEA02tyzSTv8Sxpj4pszK+sA=
github.com/evsamsonov/trengin/v2 v2.2.0/go.mod h1:merjbl+KOokEz3PlhaDlQXoupTKgjF3kJxUMQVYRLCc=
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/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.5 h1:3IZOAnD058zZllQTZNBioTlrzrBG/IjpiZ133IEtusM=
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.5/go.mod h1:xbKERva94Pw2cPen0s79J3uXmGzbbpDYFBFDlZ4mV/w=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/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 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
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.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/tinkoff/invest-api-go-sdk v1.0.2 h1:N/NAc3ZIUP6xFtu9d1r2f7fgjr5pI5UQYkUn/XO5QLo=
github.com/tinkoff/invest-api-go-sdk v1.0.2/go.mod h1:yFp0cKksK9mtMixJWYmylx/V7I2YIgUAapsmqb3bLf0=
github.com/russianinvestments/invest-api-go-sdk v1.23.1 h1:iLWwYyzEKfH9ottN/v7Dvz/u4a8IU/iWDiGtmPNnk08=
github.com/russianinvestments/invest-api-go-sdk v1.23.1/go.mod h1:rOu2P3GMTQEkQxRpQfp+wK5k71c3SUDHIke3Ijr8cOU=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
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.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/undefinedlabs/go-mpatch v1.0.6 h1:h8q5ORH/GaOE1Se1DMhrOyljXZEhRcROO7agMqWXCOY=
github.com/undefinedlabs/go-mpatch v1.0.6/go.mod h1:TyJZDQ/5AgyN7FSLiBJ8RO9u2c6wbtRvK827b6AVqY4=
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c=
go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk=
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM=
google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o=
google.golang.org/grpc v1.58.0/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo=
golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw=
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Loading

0 comments on commit ebe52b2

Please sign in to comment.