Skip to content

Commit 8e9b714

Browse files
update data client
1 parent 881fd8c commit 8e9b714

16 files changed

Lines changed: 471 additions & 25 deletions

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ gen-internal:
9898
echo "ERROR: syfon repo not found at $(SYFON_DIR)"; \
9999
exit 1; \
100100
fi; \
101-
echo "--> Internal model generation is centralized in syfon"; \
102-
$(MAKE) -C "$(SYFON_DIR)" gen-internal
101+
echo "--> OpenAPI generation is centralized in syfon make gen"; \
102+
$(MAKE) -C "$(SYFON_DIR)" gen
103103

104104
## tidy: Cleans up module dependencies and formats go files
105105
tidy:

cmd/collaborator.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,62 @@ var collaboratorAddUserCmd = &cobra.Command{
150150
},
151151
}
152152

153+
var collaboratorBulkAddUserCmd = &cobra.Command{
154+
Use: "bulk-add [profile] [email] [resource_paths...]",
155+
Short: "Add a user to multiple project resources",
156+
Long: "Add a user to multiple project resources from a comma-delimited list. Resource paths may be /programs/<organization>/projects/<project> or organization/project.",
157+
Args: cobra.MinimumNArgs(3),
158+
Run: func(cmd *cobra.Command, args []string) {
159+
p := args[0]
160+
username := args[1]
161+
resourceList := strings.Join(args[2:], " ")
162+
163+
if !emailRegex.MatchString(strings.ToLower(username)) {
164+
fmt.Printf("Error: invalid email address '%s'\n", username)
165+
os.Exit(1)
166+
}
167+
168+
resources, err := requestor.ParseProjectResources(resourceList)
169+
if err != nil {
170+
fmt.Printf("Error parsing resource paths: %v\n", err)
171+
os.Exit(1)
172+
}
173+
174+
write, _ := cmd.Flags().GetBool("write")
175+
guppy, _ := cmd.Flags().GetBool("guppy")
176+
approve, _ := cmd.Flags().GetBool("approve")
177+
178+
client, closer := getRequestorClient(p)
179+
defer closer()
180+
181+
fmt.Printf("Creating collaborator requests for %d project resources...\n", len(resources))
182+
reqs, err := client.AddUserToResources(cmd.Context(), resources, username, write, guppy)
183+
if err != nil {
184+
fmt.Printf("Error adding user to resources: %v\n", err)
185+
os.Exit(1)
186+
}
187+
188+
if approve {
189+
fmt.Println("\nAuto-approving requests...")
190+
for _, r := range reqs {
191+
updatedReq, err := client.UpdateRequest(cmd.Context(), r.RequestID, "SIGNED")
192+
if err != nil {
193+
fmt.Printf("Error approving request %s: %v\n", r.RequestID, err)
194+
} else {
195+
fmt.Printf("Approved request %s:\n", updatedReq.RequestID)
196+
printRequest(*updatedReq)
197+
}
198+
}
199+
} else {
200+
fmt.Println("Created requests:")
201+
for _, r := range reqs {
202+
printRequest(r)
203+
}
204+
fmt.Printf("\nAn authorized user must approve these requests to add %s to %d project resources\n", username, len(resources))
205+
}
206+
},
207+
}
208+
153209
var collaboratorRemoveUserCmd = &cobra.Command{
154210
Use: "rm [profile] [email] [program] [project]",
155211
Short: "Remove a user from a project",
@@ -247,6 +303,7 @@ func init() {
247303
collaboratorsCmd.AddCommand(collaboratorListCmd)
248304
collaboratorsCmd.AddCommand(collaboratorPendingCmd)
249305
collaboratorsCmd.AddCommand(collaboratorAddUserCmd)
306+
collaboratorsCmd.AddCommand(collaboratorBulkAddUserCmd)
250307
collaboratorsCmd.AddCommand(collaboratorRemoveUserCmd)
251308
collaboratorsCmd.AddCommand(collaboratorApproveCmd)
252309
collaboratorsCmd.AddCommand(collaboratorUpdateCmd)
@@ -259,5 +316,9 @@ func init() {
259316
collaboratorAddUserCmd.Flags().BoolP("guppy", "g", false, "Grant guppy admin access")
260317
collaboratorAddUserCmd.Flags().BoolP("approve", "a", false, "Automatically approve the requests")
261318

319+
collaboratorBulkAddUserCmd.Flags().BoolP("write", "w", false, "Grant write access")
320+
collaboratorBulkAddUserCmd.Flags().BoolP("guppy", "g", false, "Grant guppy admin access")
321+
collaboratorBulkAddUserCmd.Flags().BoolP("approve", "a", false, "Automatically approve the requests")
322+
262323
collaboratorRemoveUserCmd.Flags().BoolP("approve", "a", false, "Automatically approve the revoke requests")
263324
}

cmd/download-multiple.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99

1010
"github.com/calypr/data-client/g3client"
1111
"github.com/calypr/data-client/logs"
12-
sydownload "github.com/calypr/syfon/client/xfer/download"
12+
sydownload "github.com/calypr/syfon/client/transfer/download"
1313
"github.com/spf13/cobra"
1414
)
1515

cmd/download-single.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66

77
"github.com/calypr/data-client/g3client"
88
"github.com/calypr/data-client/logs"
9-
sydownload "github.com/calypr/syfon/client/xfer/download"
9+
sydownload "github.com/calypr/syfon/client/transfer/download"
1010
"github.com/spf13/cobra"
1111
)
1212

conf/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import (
1111
"path"
1212
"strings"
1313

14-
syconf "github.com/calypr/syfon/client/conf"
1514
sycommon "github.com/calypr/syfon/client/common"
15+
syconf "github.com/calypr/syfon/client/config"
1616
"gopkg.in/ini.v1"
1717
)
1818

credentials/refresh.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package credentials
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log/slog"
7+
"strings"
8+
9+
"github.com/calypr/data-client/conf"
10+
"github.com/calypr/data-client/fence"
11+
"github.com/calypr/data-client/logs"
12+
"github.com/calypr/data-client/request"
13+
)
14+
15+
// EnsureValidCredential validates a profile credential and refreshes its
16+
// access token from the API key when the token has expired.
17+
func EnsureValidCredential(ctx context.Context, cred *conf.Credential, baseLogger *slog.Logger) error {
18+
manager := conf.NewConfigure(baseLogger)
19+
logger := logs.NewGen3Logger(baseLogger, "", cred.Profile)
20+
21+
valid, err := manager.IsCredentialValid(cred)
22+
if valid {
23+
return nil
24+
}
25+
if err == nil {
26+
return fmt.Errorf("invalid credential")
27+
}
28+
29+
if !strings.Contains(err.Error(), "access_token is invalid but api_key is valid") {
30+
return fmt.Errorf("invalid credential: %v", err)
31+
}
32+
33+
req := request.NewRequestInterface(logger, cred, manager)
34+
fClient := fence.NewFenceClient(req, cred, baseLogger)
35+
newToken, refreshErr := fClient.NewAccessToken(ctx)
36+
if refreshErr != nil {
37+
return fmt.Errorf("failed to refresh access token: %v (original error: %v)", refreshErr, err)
38+
}
39+
40+
cred.AccessToken = newToken
41+
if saveErr := manager.Save(cred); saveErr != nil {
42+
logger.Warn(fmt.Sprintf("failed to save refreshed token: %v", saveErr))
43+
}
44+
return nil
45+
}

g3client/client.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/calypr/data-client/request"
1313
"github.com/calypr/data-client/requestor"
1414
"github.com/calypr/data-client/sower"
15-
"github.com/calypr/syfon/client/credentials"
15+
syconfig "github.com/calypr/syfon/client/config"
1616
version "github.com/hashicorp/go-version"
1717
)
1818

@@ -21,7 +21,7 @@ import (
2121
type Gen3Interface interface {
2222
request.RequestInterface
2323
Logger() *logs.Gen3Logger
24-
Credentials() credentials.Manager
24+
Credentials() syconfig.CredentialManager
2525
SyfonClient() SyfonClientInterface
2626
FenceClient() fence.FenceInterface
2727
RequestorClient() requestor.RequestorInterface
@@ -85,7 +85,7 @@ type Gen3Client struct {
8585
request.RequestInterface
8686

8787
credential *conf.Credential
88-
creds credentials.Manager
88+
creds syconfig.CredentialManager
8989
logger *logs.Gen3Logger
9090

9191
requestedClients []ClientType
@@ -195,7 +195,7 @@ func (c *gen3Credentials) Export(ctx context.Context, cred *conf.Credential) err
195195
return c.client.exportCredential(ctx, cred)
196196
}
197197

198-
func (g *Gen3Client) Credentials() credentials.Manager {
198+
func (g *Gen3Client) Credentials() syconfig.CredentialManager {
199199
if g.creds == nil {
200200
g.creds = &gen3Credentials{client: g}
201201
}

g3client/syfon_adapter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
"github.com/calypr/syfon/apigen/client/metricsapi"
2020
sylogs "github.com/calypr/syfon/client/logs"
2121
syrequest "github.com/calypr/syfon/client/request"
22-
"github.com/calypr/syfon/client/syfonclient"
22+
syfonclient "github.com/calypr/syfon/client/services"
2323
)
2424

2525
// SyfonClientInterface groups the syfon service interfaces that data-client needs.

go.mod

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ module github.com/calypr/data-client
33
go 1.26.2
44

55
require (
6-
github.com/calypr/syfon/apigen v0.2.4
7-
github.com/calypr/syfon/client v0.2.4
6+
github.com/calypr/syfon/apigen v0.2.6-0.20260503003649-cda722e27216
7+
github.com/calypr/syfon/client v0.2.7-0.20260503003649-cda722e27216
88
github.com/golang-jwt/jwt/v5 v5.3.1
99
github.com/hashicorp/go-retryablehttp v0.7.8
1010
github.com/hashicorp/go-version v1.9.0
@@ -17,18 +17,33 @@ require (
1717
require (
1818
github.com/VividCortex/ewma v1.2.0 // indirect
1919
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect
20+
github.com/andybalholm/brotli v1.2.0 // indirect
2021
github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
22+
github.com/calypr/syfon v0.2.8-0.20260503003649-cda722e27216 // indirect
2123
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
24+
github.com/gofiber/fiber/v3 v3.1.0 // indirect
25+
github.com/gofiber/schema v1.7.0 // indirect
26+
github.com/gofiber/utils/v2 v2.0.2 // indirect
2227
github.com/google/uuid v1.6.0 // indirect
2328
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
2429
github.com/inconshreveable/mousetrap v1.1.0 // indirect
30+
github.com/klauspost/compress v1.18.5 // indirect
2531
github.com/kr/pretty v0.3.1 // indirect
32+
github.com/mattn/go-colorable v0.1.14 // indirect
33+
github.com/mattn/go-isatty v0.0.21 // indirect
2634
github.com/mattn/go-runewidth v0.0.23 // indirect
2735
github.com/oapi-codegen/runtime v1.4.0 // indirect
36+
github.com/philhofer/fwd v1.2.0 // indirect
2837
github.com/rogpeppe/go-internal v1.14.1 // indirect
2938
github.com/spf13/pflag v1.0.10 // indirect
39+
github.com/tinylib/msgp v1.6.3 // indirect
40+
github.com/valyala/bytebufferpool v1.0.0 // indirect
41+
github.com/valyala/fasthttp v1.69.0 // indirect
3042
github.com/vbauerster/mpb/v8 v8.12.0 // indirect
43+
golang.org/x/crypto v0.50.0 // indirect
44+
golang.org/x/net v0.53.0 // indirect
3145
golang.org/x/sync v0.20.0 // indirect
3246
golang.org/x/sys v0.43.0 // indirect
47+
golang.org/x/text v0.36.0 // indirect
3348
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
3449
)

go.sum

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1o
33
github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4=
44
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8=
55
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo=
6+
github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ=
7+
github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
68
github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ=
79
github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk=
810
github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w=
9-
github.com/calypr/syfon/apigen v0.2.3 h1:32Wk60IN18Ir8aTjo2UfMpB/yeOfF2XItiqk6/33Kkk=
10-
github.com/calypr/syfon/apigen v0.2.3/go.mod h1:9JNwTgR57yKJlWqZpdqP+/l4zCNzH1EIFrW+e20PyMQ=
11-
github.com/calypr/syfon/apigen v0.2.4 h1:LMK7IChGjDZ/7u7mTlVQTW4BR+TnF+4we/qLouk/S6Q=
12-
github.com/calypr/syfon/apigen v0.2.4/go.mod h1:9JNwTgR57yKJlWqZpdqP+/l4zCNzH1EIFrW+e20PyMQ=
13-
github.com/calypr/syfon/client v0.2.3 h1:5vIwLgAoEZd9/LjxmyjPfjJkfOpop4Y2ZFgjPoaCmis=
14-
github.com/calypr/syfon/client v0.2.3/go.mod h1:Yb0nHJER/8BWUwiBNY3idqQQO087do9gS9kXn1+UOik=
15-
github.com/calypr/syfon/client v0.2.4 h1:9wOleoF86lGoE7/CLhMLmkdUrBVLbuKRiBHrGILZdmE=
16-
github.com/calypr/syfon/client v0.2.4/go.mod h1:44Xfegl+Ti5FQB/KJHq3cJP8hEUa7L0P059iqAVW2kg=
11+
github.com/calypr/syfon v0.2.8-0.20260503003649-cda722e27216 h1:f/fr9r4N3yKARlX+RPiZmg6fJG3xuSLpeTvk6as6AxM=
12+
github.com/calypr/syfon v0.2.8-0.20260503003649-cda722e27216/go.mod h1:m2jd8Snb+Gjc32AcOTdioZVjLmhsAXw7F4uzHQTGBtg=
13+
github.com/calypr/syfon/apigen v0.2.6-0.20260503003649-cda722e27216 h1:MuPHiYQXGX7frvN3EQZ4ZM5RjRZ1eGVY0D4iXCNAj0s=
14+
github.com/calypr/syfon/apigen v0.2.6-0.20260503003649-cda722e27216/go.mod h1:9JNwTgR57yKJlWqZpdqP+/l4zCNzH1EIFrW+e20PyMQ=
15+
github.com/calypr/syfon/client v0.2.7-0.20260503003649-cda722e27216 h1:1LFo3dMc4ZQHml9zQsBE5/k2ZEcHT4EpqxL+Hr/ROjo=
16+
github.com/calypr/syfon/client v0.2.7-0.20260503003649-cda722e27216/go.mod h1:DQSqNkxl9V3w08BiMconcJh3xtc+/Je7Xeo7qRH7wto=
1717
github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk=
1818
github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
1919
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
@@ -24,6 +24,14 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
2424
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2525
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
2626
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
27+
github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
28+
github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
29+
github.com/gofiber/fiber/v3 v3.1.0 h1:1p4I820pIa+FGxfwWuQZ5rAyX0WlGZbGT6Hnuxt6hKY=
30+
github.com/gofiber/fiber/v3 v3.1.0/go.mod h1:n2nYQovvL9z3Too/FGOfgtERjW3GQcAUqgfoezGBZdU=
31+
github.com/gofiber/schema v1.7.0 h1:yNM+FNRZjyYEli9Ey0AXRBrAY9jTnb+kmGs3lJGPvKg=
32+
github.com/gofiber/schema v1.7.0/go.mod h1:A/X5Ffyru4p9eBdp99qu+nzviHzQiZ7odLT+TwxWhbk=
33+
github.com/gofiber/utils/v2 v2.0.2 h1:ShRRssz0F3AhTlAQcuEj54OEDtWF7+HJDwEi/aa6QLI=
34+
github.com/gofiber/utils/v2 v2.0.2/go.mod h1:+9Ub4NqQ+IaJoTliq5LfdmOJAA/Hzwf4pXOxOa3RrJ0=
2735
github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
2836
github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
2937
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
@@ -39,6 +47,8 @@ github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09
3947
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
4048
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
4149
github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE=
50+
github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE=
51+
github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
4252
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
4353
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
4454
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@@ -54,6 +64,8 @@ github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3Ry
5464
github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
5565
github.com/oapi-codegen/runtime v1.4.0 h1:KLOSFOp7UzkbS7Cs1ms6NBEKYr0WmH2wZG0KKbd2er4=
5666
github.com/oapi-codegen/runtime v1.4.0/go.mod h1:5sw5fxCDmnOzKNYmkVNF8d34kyUeejJEY8HNT2WaPec=
67+
github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM=
68+
github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM=
5769
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
5870
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5971
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
@@ -62,6 +74,8 @@ github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/f
6274
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
6375
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
6476
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
77+
github.com/shamaton/msgpack/v3 v3.1.0 h1:jsk0vEAqVvvS9+fTZ5/EcQ9tz860c9pWxJ4Iwecz8gU=
78+
github.com/shamaton/msgpack/v3 v3.1.0/go.mod h1:DcQG8jrdrQCIxr3HlMYkiXdMhK+KfN2CitkyzsQV4uc=
6579
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
6680
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
6781
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
@@ -78,15 +92,31 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
7892
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
7993
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
8094
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
95+
github.com/tinylib/msgp v1.6.3 h1:bCSxiTz386UTgyT1i0MSCvdbWjVW+8sG3PjkGsZQt4s=
96+
github.com/tinylib/msgp v1.6.3/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA=
97+
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
98+
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
99+
github.com/valyala/fasthttp v1.69.0 h1:fNLLESD2SooWeh2cidsuFtOcrEi4uB4m1mPrkJMZyVI=
100+
github.com/valyala/fasthttp v1.69.0/go.mod h1:4wA4PfAraPlAsJ5jMSqCE2ug5tqUPwKXxVj8oNECGcw=
81101
github.com/vbauerster/mpb/v8 v8.12.0 h1:+gneY3ifzc88tKDzOtfG8k8gfngCx615S2ZmFM4liWg=
82102
github.com/vbauerster/mpb/v8 v8.12.0/go.mod h1:V02YIuMVo301Y1VE9VtZlD8s84OMsk+EKN6mwvf/588=
103+
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
104+
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
105+
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
106+
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
83107
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
84108
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
85109
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
110+
golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
111+
golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
112+
golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
113+
golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
86114
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
87115
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
88116
golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
89117
golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
118+
golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
119+
golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
90120
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
91121
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
92122
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

0 commit comments

Comments
 (0)