From 54f8d3cfd6d06e24c6147525528e43ca15104d62 Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Wed, 27 Mar 2024 15:21:06 +0100 Subject: [PATCH 1/9] Allow providing the aws auth options as flags This is in preparation of storing these values in a remote config store for ease of configuration across call-sites. --- cmd/terraform_apply.go | 1 + cmd/terraform_plan.go | 109 +++++++++++++++++++++++------------------ 2 files changed, 63 insertions(+), 47 deletions(-) diff --git a/cmd/terraform_apply.go b/cmd/terraform_apply.go index 5df8b3d4..24cd9ab4 100644 --- a/cmd/terraform_apply.go +++ b/cmd/terraform_apply.go @@ -128,4 +128,5 @@ func init() { addAPIFlags(terraformApplyCmd) addChangeUuidFlags(terraformApplyCmd) + addTerraformBaseFlags(terraformApplyCmd) } diff --git a/cmd/terraform_plan.go b/cmd/terraform_plan.go index 1d3ad37a..ee29828c 100644 --- a/cmd/terraform_plan.go +++ b/cmd/terraform_plan.go @@ -134,62 +134,71 @@ func InitializeSources(ctx context.Context, oi OvermindInstance, token *oauth2.T } // TODO: store this in the api-server and skip questioning the user after the first time - aws_config := "aborted" - options := []huh.Option[string]{} - aws_profile := os.Getenv("AWS_PROFILE") - if aws_profile != "" { - options = append(options, - huh.NewOption(fmt.Sprintf("Use $AWS_PROFILE (currently: '%v')", aws_profile), "aws_profile"), - huh.NewOption("Use a different profile", "profile_input"), - ) - } else { - options = append(options, - huh.NewOption("Use the default settings", "defaults"), - huh.NewOption("Use an AWS SSO profile", "profile_input"), - ) - } - // TODO: what URL needs to get opened here? - // TODO: how to wait for a source to be configured? - // options = append(options, - // huh.NewOption("Run managed source (opens browser)", "managed"), - // ) - aws_config_select := huh.NewSelect[string](). - Title("Choose how to access your AWS account (read-only):"). - Options(options...). - Value(&aws_config). - WithAccessible(accessibleMode) - err = aws_config_select.Run() - // annoyingly, huh doesn't leave the form on screen - except in - // accessible mode, so this prints it again so the scrollback looks - // sensible - if !accessibleMode { - fmt.Println(aws_config_select.View()) - } - if err != nil { - return func() {}, err - } - - awsAuthConfig := awssource.AwsAuthConfig{ - // TODO: query regions - Regions: []string{"eu-west-1"}, - } - - switch aws_config { - case "profile_input": - aws_profile_input := huh.NewInput(). - Title("Input the name of the AWS profile to use:"). - Value(&aws_profile). + aws_config := viper.GetString("aws-config") + aws_profile := viper.GetString("aws-profile") + if aws_config == "" { + aws_config = "aborted" + options := []huh.Option[string]{} + if aws_profile == "" { + aws_profile = os.Getenv("AWS_PROFILE") + } + if aws_profile != "" { + options = append(options, + huh.NewOption(fmt.Sprintf("Use $AWS_PROFILE (currently: '%v')", aws_profile), "aws_profile"), + huh.NewOption("Use a different profile", "profile_input"), + ) + } else { + options = append(options, + huh.NewOption("Use the default settings", "defaults"), + huh.NewOption("Use an AWS auth profile", "profile_input"), + ) + } + // TODO: what URL needs to get opened here? + // TODO: how to wait for a source to be configured? + // options = append(options, + // huh.NewOption("Run managed source (opens browser)", "managed"), + // ) + aws_config_select := huh.NewSelect[string](). + Title("Choose how to access your AWS account (read-only):"). + Options(options...). + Value(&aws_config). WithAccessible(accessibleMode) - err = aws_profile_input.Run() + err = aws_config_select.Run() // annoyingly, huh doesn't leave the form on screen - except in // accessible mode, so this prints it again so the scrollback looks // sensible if !accessibleMode { - fmt.Println(aws_profile_input.View()) + fmt.Println(aws_config_select.View()) } if err != nil { return func() {}, err } + } + + awsAuthConfig := awssource.AwsAuthConfig{ + // TODO: ask user to select regions + Regions: []string{"eu-west-1"}, + } + + switch aws_config { + case "profile_input": + if aws_profile == "" { + aws_profile_input := huh.NewInput(). + Title("Input the name of the AWS profile to use:"). + Value(&aws_profile). + WithAccessible(accessibleMode) + err = aws_profile_input.Run() + // annoyingly, huh doesn't leave the form on screen - except in + // accessible mode, so this prints it again so the scrollback looks + // sensible + if !accessibleMode { + fmt.Println(aws_profile_input.View()) + } + if err != nil { + return func() {}, err + } + } + // reset the environment to the requested value awsAuthConfig.Strategy = "sso-profile" awsAuthConfig.Profile = aws_profile @@ -617,9 +626,15 @@ func mappedItemDiffsFromPlan(ctx context.Context, planJson []byte, fileName stri return plannedChangeGroupsVar.MappedItemDiffs(), nil } +func addTerraformBaseFlags(cmd *cobra.Command) { + cmd.PersistentFlags().String("aws-config", "", "The chosen AWS config method, best set through the initial wizard when running the CLI. Options: 'profile_input', 'aws_profile', 'defaults', 'managed'.") + cmd.PersistentFlags().String("aws-profile", "", "Set this to the name of the AWS profile to use.") +} + func init() { terraformCmd.AddCommand(terraformPlanCmd) addAPIFlags(terraformPlanCmd) addChangeUuidFlags(terraformPlanCmd) + addTerraformBaseFlags(terraformPlanCmd) } From 61b5e07e7460f38defc6d5809d54040d23fb571c Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Wed, 27 Mar 2024 15:57:04 +0100 Subject: [PATCH 2/9] Implement simple retrieval and storage of the terraform config in the service --- cmd/auth_client.go | 8 +++++++ cmd/terraform_plan.go | 50 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/cmd/auth_client.go b/cmd/auth_client.go index 764ef4c2..5c0db8ae 100644 --- a/cmd/auth_client.go +++ b/cmd/auth_client.go @@ -42,6 +42,14 @@ func AuthenticatedChangesClient(ctx context.Context, oi OvermindInstance) sdpcon return sdpconnect.NewChangesServiceClient(httpClient, oi.ApiUrl.String()) } +// AuthenticatedConfigClient Returns a bookmark client that uses the auth +// embedded in the context and otel instrumentation +func AuthenticatedConfigClient(ctx context.Context, oi OvermindInstance) sdpconnect.ConfigServiceClient { + httpClient := NewAuthenticatedClient(ctx, otelhttp.DefaultClient) + log.WithContext(ctx).WithField("apiUrl", oi.ApiUrl).Debug("Connecting to overmind config API") + return sdpconnect.NewConfigServiceClient(httpClient, oi.ApiUrl.String()) +} + // AuthenticatedManagementClient Returns a bookmark client that uses the auth // embedded in the context and otel instrumentation func AuthenticatedManagementClient(ctx context.Context, oi OvermindInstance) sdpconnect.ManagementServiceClient { diff --git a/cmd/terraform_plan.go b/cmd/terraform_plan.go index ee29828c..c9f4db31 100644 --- a/cmd/terraform_plan.go +++ b/cmd/terraform_plan.go @@ -1,9 +1,11 @@ package cmd import ( + "bytes" "context" "crypto/sha256" "encoding/json" + "errors" "fmt" "os" "os/exec" @@ -46,6 +48,11 @@ var terraformPlanCmd = &cobra.Command{ type OvermindCommandHandler func(ctx context.Context, args []string, oi OvermindInstance, token *oauth2.Token) error +type terraformStoredConfig struct { + Config string `json:"aws-config"` + Profile string `json:"aws-profile"` +} + func CmdWrapper(handler OvermindCommandHandler, requiredScopes []string) func(cmd *cobra.Command, args []string) { return func(cmd *cobra.Command, args []string) { sigs := make(chan os.Signal, 1) @@ -92,7 +99,48 @@ func CmdWrapper(handler OvermindCommandHandler, requiredScopes []string) func(cm _, cancel := context.WithTimeout(ctx, timeout) defer cancel() - return handler(ctx, args, oi, token) + configClient := AuthenticatedConfigClient(ctx, oi) + cfgValue, err := configClient.GetConfig(ctx, &connect.Request[sdp.GetConfigRequest]{ + Msg: &sdp.GetConfigRequest{ + Key: fmt.Sprintf("cli %v", cmd.CommandPath()), + }, + }) + if err != nil { + var cErr *connect.Error + if !errors.As(err, &cErr) || cErr.Code() != connect.CodeNotFound { + return fmt.Errorf("failed to get stored config: %w", err) + } + } + if cfgValue != nil { + viper.SetConfigType("json") + err = viper.MergeConfig(bytes.NewBuffer([]byte(cfgValue.Msg.GetValue()))) + if err != nil { + return fmt.Errorf("failed to merge stored config: %w", err) + } + } + err = handler(ctx, args, oi, token) + if err != nil { + return err + } + + jsonBuf, err := json.Marshal(terraformStoredConfig{ + Config: viper.GetString("aws-config"), + Profile: viper.GetString("aws-profile"), + }) + if err != nil { + return fmt.Errorf("failed to marshal config: %w", err) + } + _, err = configClient.SetConfig(ctx, &connect.Request[sdp.SetConfigRequest]{ + Msg: &sdp.SetConfigRequest{ + Key: fmt.Sprintf("cli %v", cmd.CommandPath()), + Value: string(jsonBuf), + }, + }) + if err != nil { + return fmt.Errorf("failed to marshal config: %w", err) + } + + return nil }() if err != nil { log.WithContext(ctx).WithError(err).Error("Error running command") From b950dfa7c5d0ad817f10234ee28ca4eb95792663 Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Mon, 8 Apr 2024 11:58:55 +0200 Subject: [PATCH 3/9] Remove unused function "tokenHasAllScopes" --- cmd/root.go | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index cd2f487e..4f632cdc 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -225,25 +225,6 @@ func readLocalToken(homeDir string, expectedScopes []string) (*oauth2.Token, []s return token, currentScopes, nil } -// Check whether or not a token has all of the required scopes. Returns a -// boolean and an error which will be populated if we couldn't read the token -func tokenHasAllScopes(token string, requiredScopes []string) (bool, error) { - claims, err := extractClaims(token) - - if err != nil { - return false, fmt.Errorf("error extracting claims from token: %w", err) - } - - // Check that the token has the right scopes - for _, scope := range requiredScopes { - if !claims.HasScope(scope) { - return false, nil - } - } - - return true, nil -} - // Gets a token using an API key func getAPIKeyToken(ctx context.Context, oi OvermindInstance, apiKey string) (*oauth2.Token, error) { log.WithContext(ctx).Debug("using provided token for authentication") From 000f90f5540196ce193eaa0be1fb4ea3c3635ce8 Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Mon, 8 Apr 2024 11:59:27 +0200 Subject: [PATCH 4/9] Request additional required scope "config:write" --- cmd/terraform_apply.go | 2 +- cmd/terraform_plan.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/terraform_apply.go b/cmd/terraform_apply.go index 24cd9ab4..943a2520 100644 --- a/cmd/terraform_apply.go +++ b/cmd/terraform_apply.go @@ -26,7 +26,7 @@ var terraformApplyCmd = &cobra.Command{ log.WithError(err).Fatal("could not bind `terraform apply` flags") } }, - Run: CmdWrapper(TerraformApply, []string{"changes:write", "request:receive"}), + Run: CmdWrapper(TerraformApply, []string{"changes:write", "config:write", "request:receive"}), } func TerraformApply(ctx context.Context, args []string, oi OvermindInstance, token *oauth2.Token) error { diff --git a/cmd/terraform_plan.go b/cmd/terraform_plan.go index c9f4db31..65be48ff 100644 --- a/cmd/terraform_plan.go +++ b/cmd/terraform_plan.go @@ -43,7 +43,7 @@ var terraformPlanCmd = &cobra.Command{ log.WithError(err).Fatal("could not bind `terraform plan` flags") } }, - Run: CmdWrapper(TerraformPlan, []string{"changes:write", "request:receive"}), + Run: CmdWrapper(TerraformPlan, []string{"changes:write", "config:write", "request:receive"}), } type OvermindCommandHandler func(ctx context.Context, args []string, oi OvermindInstance, token *oauth2.Token) error From 3e14045da677008624a4354165bbb11d9d3af8dc Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Mon, 8 Apr 2024 12:01:28 +0200 Subject: [PATCH 5/9] Convert nested-else into guard clause --- cmd/root.go | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 4f632cdc..3b2a2582 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -231,26 +231,26 @@ func getAPIKeyToken(ctx context.Context, oi OvermindInstance, apiKey string) (*o var token *oauth2.Token - if strings.HasPrefix(apiKey, "ovm_api_") { - // exchange api token for JWT - client := UnauthenticatedApiKeyClient(ctx, oi) - resp, err := client.ExchangeKeyForToken(ctx, &connect.Request[sdp.ExchangeKeyForTokenRequest]{ - Msg: &sdp.ExchangeKeyForTokenRequest{ - ApiKey: apiKey, - }, - }) - if err != nil { - return nil, fmt.Errorf("error authenticating the API token: %w", err) - } - log.WithContext(ctx).Debug("successfully authenticated") - token = &oauth2.Token{ - AccessToken: resp.Msg.GetAccessToken(), - TokenType: "Bearer", - } - } else { + if !strings.HasPrefix(apiKey, "ovm_api_") { return nil, errors.New("OVM_API_KEY does not match pattern 'ovm_api_*'") } + // exchange api token for JWT + client := UnauthenticatedApiKeyClient(ctx, oi) + resp, err := client.ExchangeKeyForToken(ctx, &connect.Request[sdp.ExchangeKeyForTokenRequest]{ + Msg: &sdp.ExchangeKeyForTokenRequest{ + ApiKey: apiKey, + }, + }) + if err != nil { + return nil, fmt.Errorf("error authenticating the API token: %w", err) + } + log.WithContext(ctx).Debug("successfully authenticated") + token = &oauth2.Token{ + AccessToken: resp.Msg.GetAccessToken(), + TokenType: "Bearer", + } + return token, nil } From db599e30dc549b7085dedaf08918f06b21babd93 Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Mon, 8 Apr 2024 12:22:08 +0200 Subject: [PATCH 6/9] Refactor HasScopesFlexible to receive a token directly This prepares the way to use the function more flexibly as part of the ensureToken mechanism. --- cmd/root.go | 30 ++++++++++++++++++------------ cmd/root_test.go | 17 ++++++++++++++++- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 3b2a2582..3d23440e 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -505,19 +505,20 @@ func ensureToken(ctx context.Context, oi OvermindInstance, requiredScopes []stri // Check that we actually got the claims we asked for. If you don't have // permission auth0 will just not assign those scopes rather than fail - claims, err := extractClaims(token.AccessToken) + ok, missing, err := HasScopesFlexible(token, requiredScopes) if err != nil { - return ctx, nil, fmt.Errorf("error extracting claims from token: %w", err) + return ctx, nil, fmt.Errorf("error checking token scopes: %w", err) } - - ok, missing := HasScopesFlexible(claims, requiredScopes) if !ok { return ctx, nil, fmt.Errorf("authenticated successfully, but you don't have the required permission: '%v'", missing) } - // Add the token to the context + // store the token for later use by sdp-go's auth client. Note that this + // loses access to the RefreshToken and could be done better by using an + // oauth2.TokenSource, but this would require more work on updating sdp-go + // that is currently not scheduled ctx = context.WithValue(ctx, sdp.UserTokenContextKey{}, token.AccessToken) - ctx = context.WithValue(ctx, sdp.AccountNameContextKey{}, claims.AccountName) + return ctx, token, nil } @@ -525,10 +526,15 @@ func ensureToken(ctx context.Context, oi OvermindInstance, requiredScopes []stri // accounts for when a user has write access but required read access, they // aren't the same but the user will have access anyway so this will pass // -// Returns a bool and the missing permission as a string of any -func HasScopesFlexible(claims *sdp.CustomClaims, requiredScopes []string) (bool, string) { - if claims == nil { - return false, "" +// Returns true if the token has the required scopes. Otherwise, false and the missing permission for displaying or logging +func HasScopesFlexible(token *oauth2.Token, requiredScopes []string) (bool, string, error) { + if token == nil { + return false, "", errors.New("HasScopesFlexible: token is nil") + } + + claims, err := extractClaims(token.AccessToken) + if err != nil { + return false, "", fmt.Errorf("error extracting claims from token: %w", err) } for _, scope := range requiredScopes { @@ -547,12 +553,12 @@ func HasScopesFlexible(claims *sdp.CustomClaims, requiredScopes []string) (bool, } if !hasWriteInstead { - return false, scope + return false, scope, nil } } } - return true, "" + return true, "", nil } // getChangeUuid returns the UUID of a change, as selected by --uuid or --change, or a state with the specified status and having --ticket-link diff --git a/cmd/root_test.go b/cmd/root_test.go index 51b3ccc5..e2fe9539 100644 --- a/cmd/root_test.go +++ b/cmd/root_test.go @@ -1,9 +1,13 @@ package cmd import ( + "encoding/base64" + "encoding/json" + "fmt" "testing" "github.com/overmindtech/sdp-go" + "golang.org/x/oauth2" ) func TestParseChangeUrl(t *testing.T) { @@ -32,6 +36,17 @@ func TestHasScopesFlexible(t *testing.T) { Scope: "changes:read users:write", AccountName: "test", } + claimBytes, err := json.Marshal(claims) + if err != nil { + t.Fatalf("unexpected fail marshalling claims: %v", err) + } + + fakeAccessToken := fmt.Sprintf(".%v.", base64.RawURLEncoding.EncodeToString(claimBytes)) + token := &oauth2.Token{ + AccessToken: fakeAccessToken, + TokenType: "", + RefreshToken: "", + } tests := []struct { Name string @@ -62,7 +77,7 @@ func TestHasScopesFlexible(t *testing.T) { for _, tc := range tests { t.Run(tc.Name, func(t *testing.T) { - if pass, _ := HasScopesFlexible(claims, tc.RequiredScopes); pass != tc.ShouldPass { + if pass, _, _ := HasScopesFlexible(token, tc.RequiredScopes); pass != tc.ShouldPass { t.Fatalf("expected: %v, got: %v", tc.ShouldPass, !tc.ShouldPass) } }) From 669859edeac18d0e737635a78c991560224f0beb Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Mon, 8 Apr 2024 12:26:35 +0200 Subject: [PATCH 7/9] Update getAPIKeyToken to use HasScopeFlexible for better reporting --- cmd/root.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 3d23440e..28a727e4 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -226,7 +226,7 @@ func readLocalToken(homeDir string, expectedScopes []string) (*oauth2.Token, []s } // Gets a token using an API key -func getAPIKeyToken(ctx context.Context, oi OvermindInstance, apiKey string) (*oauth2.Token, error) { +func getAPIKeyToken(ctx context.Context, oi OvermindInstance, apiKey string, requiredScopes []string) (*oauth2.Token, error) { log.WithContext(ctx).Debug("using provided token for authentication") var token *oauth2.Token @@ -245,12 +245,23 @@ func getAPIKeyToken(ctx context.Context, oi OvermindInstance, apiKey string) (*o if err != nil { return nil, fmt.Errorf("error authenticating the API token: %w", err) } - log.WithContext(ctx).Debug("successfully authenticated") + log.WithContext(ctx).Debug("successfully got a token from the API key") + token = &oauth2.Token{ AccessToken: resp.Msg.GetAccessToken(), TokenType: "Bearer", } + // Check that we actually got the claims we asked for. If you don't have + // permission auth0 will just not assign those scopes rather than fail + ok, missing, err := HasScopesFlexible(token, requiredScopes) + if err != nil { + return nil, fmt.Errorf("error checking token scopes: %w", err) + } + if !ok { + return nil, fmt.Errorf("authenticated successfully, but your API key is missing this permission: '%v'", missing) + } + return token, nil } @@ -495,7 +506,7 @@ func ensureToken(ctx context.Context, oi OvermindInstance, requiredScopes []stri // get a token from the api key if present if apiKey := viper.GetString("api-key"); apiKey != "" { - token, err = getAPIKeyToken(ctx, oi, apiKey) + token, err = getAPIKeyToken(ctx, oi, apiKey, requiredScopes) } else { token, err = getOauthToken(ctx, oi, requiredScopes) } From 8e66750393b42f8c18a4a1448ca539b94531b40b Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Mon, 8 Apr 2024 12:33:44 +0200 Subject: [PATCH 8/9] refactor readLocalToken to use HasScopesFlexible --- cmd/root.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 28a727e4..c8e76168 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -174,7 +174,7 @@ func extractClaims(token string) (*sdp.CustomClaims, error) { // its scopes, and an error if any. The scopes are returned even if they are // insufficient to allow cached tokens to be added to rather than constantly // replaced -func readLocalToken(homeDir string, expectedScopes []string) (*oauth2.Token, []string, error) { +func readLocalToken(homeDir string, requiredScopes []string) (*oauth2.Token, []string, error) { // Read in the token JSON file path := filepath.Join(homeDir, ".overmind", "token.json") @@ -203,22 +203,22 @@ func readLocalToken(homeDir string, expectedScopes []string) (*oauth2.Token, []s } claims, err := extractClaims(token.AccessToken) - if err != nil { return nil, nil, fmt.Errorf("error extracting claims from token: %w", err) } - if claims.Scope == "" { return nil, nil, errors.New("token does not have any scopes") } currentScopes := strings.Split(claims.Scope, " ") - // Check that the token has the right scopes - for _, scope := range expectedScopes { - if !claims.HasScope(scope) { - return nil, currentScopes, fmt.Errorf("token does not have required scope '%v'", scope) - } + // Check that we actually got the claims we asked for. + ok, missing, err := HasScopesFlexible(token, requiredScopes) + if err != nil { + return nil, currentScopes, fmt.Errorf("error checking token scopes: %w", err) + } + if !ok { + return nil, currentScopes, fmt.Errorf("local token is missing this permission: '%v'", missing) } log.Debugf("Using local token from %v", path) @@ -499,7 +499,9 @@ func getOauthToken(ctx context.Context, oi OvermindInstance, requiredScopes []st return m.token, nil } -// ensureToken +// ensureToken gets a token from the environment or from the user, and returns a +// context holding the token tthat can be used by sdp-go's helper functions to +// authenticate against the API func ensureToken(ctx context.Context, oi OvermindInstance, requiredScopes []string) (context.Context, *oauth2.Token, error) { var token *oauth2.Token var err error From 226408fe35466330a84da89b280f19020ce1c2ca Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Mon, 8 Apr 2024 12:41:51 +0200 Subject: [PATCH 9/9] go mod tidy --- go.mod | 9 ++--- go.sum | 124 +-------------------------------------------------------- 2 files changed, 5 insertions(+), 128 deletions(-) diff --git a/go.mod b/go.mod index 4d20d5c2..54f36631 100644 --- a/go.mod +++ b/go.mod @@ -4,9 +4,11 @@ go 1.22.2 require ( connectrpc.com/connect v1.16.0 + github.com/charmbracelet/bubbles v0.17.2-0.20240108170749-ec883029c8e6 + github.com/charmbracelet/bubbletea v0.25.0 github.com/charmbracelet/glamour v0.7.0 github.com/charmbracelet/huh v0.3.0 - github.com/charmbracelet/huh/spinner v0.0.0-20240209193029-45947515c4cf + github.com/charmbracelet/lipgloss v0.9.1 github.com/getsentry/sentry-go v0.27.0 github.com/google/uuid v1.6.0 github.com/hexops/gotextdiff v1.0.3 @@ -87,9 +89,6 @@ require ( github.com/aymerick/douceur v0.2.0 // indirect github.com/catppuccin/go v0.2.0 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect - github.com/charmbracelet/bubbles v0.17.2-0.20240108170749-ec883029c8e6 // indirect - github.com/charmbracelet/bubbletea v0.25.0 // indirect - github.com/charmbracelet/lipgloss v0.9.1 // indirect github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dlclark/regexp2 v1.4.0 // indirect @@ -125,7 +124,6 @@ require ( github.com/nats-io/nuid v1.0.1 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/openrdap/rdap v0.9.2-0.20240219192926-2210b535d40b // indirect - github.com/overmindtech/api-client v0.14.0 // indirect github.com/overmindtech/discovery v0.26.6 // indirect github.com/overmindtech/sdpcache v1.6.4 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect @@ -156,7 +154,6 @@ require ( golang.org/x/term v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.17.0 // indirect - google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917 // indirect google.golang.org/grpc v1.61.1 // indirect diff --git a/go.sum b/go.sum index 232fe326..6fc2bcc7 100644 --- a/go.sum +++ b/go.sum @@ -20,154 +20,80 @@ github.com/auth0/go-jwt-middleware/v2 v2.2.1 h1:pqxEIwlCztD0T9ZygGfOrw4NK/F9iotn github.com/auth0/go-jwt-middleware/v2 v2.2.1/go.mod h1:CSi0tuu0QrALbWdiQZwqFL8SbBhj4e2MJzkvNfjY0Us= github.com/aws/aws-sdk-go v1.50.15 h1:wEMnPfEQQFaoIJwuO18zq/vtG4Ft7NxQ3r9xlEi/8zg= github.com/aws/aws-sdk-go v1.50.15/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go-v2 v1.26.0 h1:/Ce4OCiM3EkpW7Y+xUnfAFpchU78K7/Ug01sZni9PgA= -github.com/aws/aws-sdk-go-v2 v1.26.0/go.mod h1:35hUlJVYd+M++iLI3ALmVwMOyRYMmRqUXpTtRGW+K9I= github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 h1:gTK2uhtAPtFcdRRJilZPx8uJLL2J85xK11nKtWL0wfU= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1/go.mod h1:sxpLb+nZk7tIfCWChfd+h4QwHNUR57d8hA1cleTkjJo= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg= -github.com/aws/aws-sdk-go-v2/config v1.27.9 h1:gRx/NwpNEFSk+yQlgmk1bmxxvQ5TyJ76CWXs9XScTqg= -github.com/aws/aws-sdk-go-v2/config v1.27.9/go.mod h1:dK1FQfpwpql83kbD873E9vz4FyAxuJtR22wzoXn3qq0= github.com/aws/aws-sdk-go-v2/config v1.27.10 h1:PS+65jThT0T/snC5WjyfHHyUgG+eBoupSDV+f838cro= github.com/aws/aws-sdk-go-v2/config v1.27.10/go.mod h1:BePM7Vo4OBpHreKRUMuDXX+/+JWP38FLkzl5m27/Jjs= -github.com/aws/aws-sdk-go-v2/credentials v1.17.9 h1:N8s0/7yW+h8qR8WaRlPQeJ6czVMNQVNtNdUqf6cItao= -github.com/aws/aws-sdk-go-v2/credentials v1.17.9/go.mod h1:446YhIdmSV0Jf/SLafGZalQo+xr2iw7/fzXGDPTU1yQ= github.com/aws/aws-sdk-go-v2/credentials v1.17.10 h1:qDZ3EA2lv1KangvQB6y258OssCHD0xvaGiEDkG4X/10= github.com/aws/aws-sdk-go-v2/credentials v1.17.10/go.mod h1:6t3sucOaYDwDssHQa0ojH1RpmVmF5/jArkye1b2FKMI= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.0 h1:af5YzcLf80tv4Em4jWVD75lpnOHSBkPUZxZfGkrI3HI= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.0/go.mod h1:nQ3how7DMnFMWiU1SpECohgC82fpn4cKZ875NDMmwtA= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.4 h1:0ScVK/4qZ8CIW0k8jOeFVsyS/sAiXpYxRBLolMkuLQM= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.4/go.mod h1:84KyjNZdHC6QZW08nfHI6yZgPd+qRgaWcYsyLUo3QY8= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.4 h1:sHmMWWX5E7guWEFQ9SVo6A3S4xpPrWnd77a6y4WM6PU= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.4/go.mod h1:WjpDrhWisWOIoS9n3nk67A3Ll1vfULJ9Kq6h29HTD48= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.4 h1:SIkD6T4zGQ+1YIit22wi37CGNkrE7mXV1vNA5VpI3TI= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.4/go.mod h1:XfeqbsG0HNedNs0GT+ju4Bs+pFAwsrlzcRdMvdNVf5s= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 h1:81KE7vaZzrl7yHBYHVEzYB8sypz11NMOZ40YlWvPxsU= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5/go.mod h1:LIt2rg7Mcgn09Ygbdh/RdIm0rQ+3BNkbP1gyVMFtRK0= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.40.4 h1:f4pkN5PVSqlGxD2gZvboz6SRaeoykgknflMPBVuhcGs= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.40.4/go.mod h1:NZBgGUf6LD2KS6Ns5xTK+cR1LK5hZwNkeOt8nDKXzMA= github.com/aws/aws-sdk-go-v2/service/autoscaling v1.40.5 h1:vhdJymxlWS2qftzLiuCjSswjXBRLGfzo/BEE9LDveBA= github.com/aws/aws-sdk-go-v2/service/autoscaling v1.40.5/go.mod h1:ZErgk/bPaaZIpj+lUWGlwI1A0UFhSIscgnCPzTLnb2s= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.35.3 h1:6CGEqYI+Pk54q7QzAntKHpjgsXHd5RdSqorunawd0dQ= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.35.3/go.mod h1:ewTOi8Y1rphZPKwdCtsAbDBvtWVXGgqhb7Z+7IPCmiE= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.35.4 h1:a4gfRHHCzvV0jEjOUdZOK0oJ4H21x5WT+E4ucWk4jeM= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.35.4/go.mod h1:Pphkts8iBnexoEpcMti5fUvN3/yoGRLtl2heOeppF70= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.36.3 h1:l3vM7tnmYWZBdyN1d2Q4gTCnDNbwKNtns4oCFt0zfQk= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.36.3/go.mod h1:xeAHc7vhdOYwpG2t4uXdnGhOvOIpJ8n+A5AHnCkk8iw= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.37.0 h1:sGGUnU/pUSzjrcCvQgN2pEc3aTQILyK2rRsWVY5CSt0= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.37.0/go.mod h1:U12sr6Lt14X96f16t+rR52+2BdqtydwN7DjEEHRMjO0= -github.com/aws/aws-sdk-go-v2/service/directconnect v1.24.3 h1:Ujy3b5gD2JGR+gFHx8bdbHgmHQbuV0WonOwpreu2mUI= -github.com/aws/aws-sdk-go-v2/service/directconnect v1.24.3/go.mod h1:xwCwRAtXy5HhOuhivIAymtijVrGYwuA9igG9+51Vk74= github.com/aws/aws-sdk-go-v2/service/directconnect v1.24.4 h1:9g0G4b/HG8Yw9YQQMUotq2QjvOYxX8kHxnAO6Yq7FuI= github.com/aws/aws-sdk-go-v2/service/directconnect v1.24.4/go.mod h1:+Y1uRuhFUQpU4/cV2zgdkk6SlE/oiZEDRP8ilynvDZk= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.0 h1:LtsNRZ6+ZYIbJcPiLHcefXeWkw2DZT9iJyXJJQvhvXw= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.0/go.mod h1:ua1eYOCxAAT0PUY3LAi9bUFuKJHC/iAksBLqR1Et7aU= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 h1:dZXY07Dm59TxAjJcUfNMJHLDI/gLMxTRZefn2jFAVsw= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1/go.mod h1:lVLqEtX+ezgtfalyJs7Peb0uv9dEpAQP5yuq2O26R44= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.155.0 h1:MuQr3lq2n/5lAdDcIYMANNpYNkFo6HDGq7S9+aRy9uc= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.155.0/go.mod h1:TeZ9dVQzGaLG+SBIgdLIDbJ6WmfFvksLeG3EHGnNfZM= github.com/aws/aws-sdk-go-v2/service/ec2 v1.156.0 h1:TFK9GeUINErClL2+A+GLYhjiChVdaXCgIUiCsS/UQrE= github.com/aws/aws-sdk-go-v2/service/ec2 v1.156.0/go.mod h1:xejKuuRDjz6z5OqyeLsz01MlOqqW7CqpAB4PabNvpu8= -github.com/aws/aws-sdk-go-v2/service/ecs v1.41.5 h1:KUB2aLoYzKGZIh2mybcwBqBy7FjwElilVFfoxp8OINE= -github.com/aws/aws-sdk-go-v2/service/ecs v1.41.5/go.mod h1:7b5ZXNyT7SjZhy+MOuXwL2XtsrFDl1bOL4Mqrgr5c3k= github.com/aws/aws-sdk-go-v2/service/ecs v1.41.7 h1:aFdgmJ8G385PVC9mp8b9roGGHU/XbrKEQTbzl6V0GbE= github.com/aws/aws-sdk-go-v2/service/ecs v1.41.7/go.mod h1:rcFIIrVk3NGCT3BV84HQM3ut+Dr1PO71UvvT8GeLAv4= -github.com/aws/aws-sdk-go-v2/service/efs v1.28.3 h1:gmpKWdqGbS1Ui6fV17YV02w2ObXvGCGcFqfW8oVle24= -github.com/aws/aws-sdk-go-v2/service/efs v1.28.3/go.mod h1:hbNFr+tpJXBR+eqC96RMCqm9pufClQV3h1ozEuJsjME= github.com/aws/aws-sdk-go-v2/service/efs v1.28.4 h1:5ZlmTA4xcIScsJs3vQBSISgrB5xX9J9AkgNbMaWYAPY= github.com/aws/aws-sdk-go-v2/service/efs v1.28.4/go.mod h1:nEGGhBibhqZeT7y9oTsQPhs8Jgc8ZKCzdrvcrLHoDZ4= -github.com/aws/aws-sdk-go-v2/service/eks v1.42.0 h1:9qScaF0c3arFYOuFBTIUEfUIVFYV+U7wv51Ls78MlwM= -github.com/aws/aws-sdk-go-v2/service/eks v1.42.0/go.mod h1:T2MBMUUCoSEvHuKPplubyQJbWNghbHhx3ToJpLoipDs= github.com/aws/aws-sdk-go-v2/service/eks v1.42.1 h1:q7MWjPP0uCmUvuGDFCvkbqRkqfH+Bq6di9RTd64S0YM= github.com/aws/aws-sdk-go-v2/service/eks v1.42.1/go.mod h1:UhKBrO0Ezz8iIg02a6u4irGKBKh0gTz3fF8LNdD2vDI= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.24.3 h1:pjgSJEvgJzv+e0frrqspeYdHz2JSW1KAGMXRe1FuQ1M= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.24.3/go.mod h1:dhRVzB/bmggoMEBhYXKZrTE+jqN34O4+webZSjGi12c= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.24.4 h1:V5YvSMQwZklktzYeOOhYdptx7rP650XP3RnxwNu1UEQ= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.24.4/go.mod h1:aYygRYqRxmLGrxRxAisgNarwo4x8bcJG14rh4r57VqE= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.30.4 h1:Lq2q/AWzFv5jHVoGJ2Hz1PkxwHYNdGzAB3lbw2g7IEU= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.30.4/go.mod h1:SNhjWOsnsHSveL4fDQL0sDiAIMVnKrvJTp9Z/MNspx0= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.30.5 h1:/x2u/TOx+n17U+gz98TOw1HKJom0EOqrhL4SjrHr0cQ= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.30.5/go.mod h1:e1McVqsud0JOERidvppLEHnuCdh/X6MRyL5L0LseAUk= -github.com/aws/aws-sdk-go-v2/service/iam v1.31.3 h1:cJn9Snros9WmDA7/qCCN7jSkowcu1CqnwhFpv4ipHEE= -github.com/aws/aws-sdk-go-v2/service/iam v1.31.3/go.mod h1:+nAQlxsBxPFf6GrL93lvCuv5PxSTX3GO0RYrURyzl/Q= github.com/aws/aws-sdk-go-v2/service/iam v1.31.4 h1:eVm30ZIDv//r6Aogat9I88b5YX1xASSLcEDqHYRPVl0= github.com/aws/aws-sdk-go-v2/service/iam v1.31.4/go.mod h1:aXWImQV0uTW35LM0A/T4wEg6R1/ReXUu4SM6/lUHYK0= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 h1:EyBZibRTVAs6ECHZOw5/wlylS9OcTzwyjeQMudmREjE= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1/go.mod h1:JKpmtYhhPs7D97NL/ltqz7yCkERFW5dOlHyVl66ZYF8= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.6 h1:NkHCgg0Ck86c5PTOzBZ0JRccI51suJDg5lgFtxBu1ek= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.6/go.mod h1:mjTpxjC8v4SeINTngrnKFgm2QUi+Jm+etTbCxh8W4uU= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 h1:ZMeFZ5yk+Ek+jNr1+uwCd2tG89t6oTS5yVWpa6yy2es= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7/go.mod h1:mxV05U+4JiHqIpGqqYXOHLPKUC6bDXC44bsUhNjOEwY= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.5 h1:4vkDuYdXXD2xLgWmNalqH3q4u/d1XnaBMBXdVdZXVp0= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.5/go.mod h1:Ko/RW/qUJyM1rdTzZa74uhE2I0t0VXH0ob/MLcc+q+w= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 h1:6tayEze2Y+hiL3kdnEUxSPsP+pJsUfwLSFspFl1ru9Q= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6/go.mod h1:qVNb/9IOVsLCZh0x2lnagrBwQ9fxajUpXS7OZfIsKn0= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.6 h1:b+E7zIUHMmcB4Dckjpkapoy47W6C9QBv/zoUP+Hn8Kc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.6/go.mod h1:S2fNV0rxrP78NhPbCZeQgY8H9jdDMeGtwcfZIRxzBqU= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.4 h1:uDj2K47EM1reAYU9jVlQ1M5YENI1u6a/TxJpf6AeOLA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.4/go.mod h1:XKCODf4RKHppc96c2EZBGV/oCUC7OClxAo2MEyg4pIk= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 h1:f9RyWNtS8oH7cZlbn+/JNPpjUk5+5fLd5lM9M0i49Ys= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5/go.mod h1:h5CoMZV2VF297/VLhRhO1WF+XYWOzXo+4HsObA4HjBQ= -github.com/aws/aws-sdk-go-v2/service/lambda v1.53.3 h1:KsKBuL+bIKhY7SMk+MXSBAj8PLHsTqlU2d0px98azyI= -github.com/aws/aws-sdk-go-v2/service/lambda v1.53.3/go.mod h1:trTURvQC8AJ41JYhFpVrZKY5tfzGgVUcSijVgfmgl8w= github.com/aws/aws-sdk-go-v2/service/lambda v1.54.0 h1:gazALVrZ7RIG6gJXut3c7NKtPgs9eQ8BFCA9uoliayk= github.com/aws/aws-sdk-go-v2/service/lambda v1.54.0/go.mod h1:rFAo+jemFgeqYzDbbCbz2QWQs1Fnk1meTUK9fWkED9M= -github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.38.4 h1:w9jz4rMbSVuRGaZo8fBGW5rA/tXlCJrbK27JONdOHxA= -github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.38.4/go.mod h1:ITYXkaMSeD0o5Uxz4xDLNjOR4ONgSNqtt7jKA0JW/2M= github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.38.5 h1:8EiDGCuiEaITcpvdBe6JuovuidK/ecLYdevUeUl7cf4= github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.38.5/go.mod h1:edcyq5BjExOF6LcUuIBb9J68eOTdBwG4zNigKay6gsM= -github.com/aws/aws-sdk-go-v2/service/networkmanager v1.25.3 h1:xWbGCchFSuAXk0FVcDVo+ucx03ir2zJguAF5MbSvpGs= -github.com/aws/aws-sdk-go-v2/service/networkmanager v1.25.3/go.mod h1:ht7XIrbMoLuULJa/juaT2AaVEitqr1ld+uIqsGSHZWs= github.com/aws/aws-sdk-go-v2/service/networkmanager v1.25.4 h1:5zZGVozt8lCpnekoLfo3PzCnuEHO8vs0bADC4PAECfs= github.com/aws/aws-sdk-go-v2/service/networkmanager v1.25.4/go.mod h1:Rftyeew4I3rCNOtfoZchQIMUAuv2nFCp9vn7jY+A+Yc= -github.com/aws/aws-sdk-go-v2/service/rds v1.76.0 h1:cQUdm2sU/71O1vCCV627GrQz5b9RmfuxViYDiLsAdZg= -github.com/aws/aws-sdk-go-v2/service/rds v1.76.0/go.mod h1:TsRoxafRyxgt1c1JWQXmxj/dCEwOkBapTwskET8vgFo= github.com/aws/aws-sdk-go-v2/service/rds v1.76.1 h1:6NeDO4UyHun2N5Lmkv2yW1sNblRLRjq3j6Azv7kUyuM= github.com/aws/aws-sdk-go-v2/service/rds v1.76.1/go.mod h1:Rw15qGaGWu3jO0dOz7JyvdOEjgae//YrJxVWLYGynvg= -github.com/aws/aws-sdk-go-v2/service/route53 v1.40.3 h1:wr5gulbwbb8PSRMWjCROoP0TIMccpF8x5A7hEk2SjpA= -github.com/aws/aws-sdk-go-v2/service/route53 v1.40.3/go.mod h1:/Gyl9xjGcjIVe80ar75YlmA8m6oFh0A4XfLciBmdS8s= github.com/aws/aws-sdk-go-v2/service/route53 v1.40.4 h1:ZZKiHm4cN8IDDZ2kh8DTk+YnYBjVsiFdwf5FwVs//IQ= github.com/aws/aws-sdk-go-v2/service/route53 v1.40.4/go.mod h1:RTfjFUctf+Zyq8e4rgLXmz43+0kIoIXbENvrFtilumI= -github.com/aws/aws-sdk-go-v2/service/s3 v1.53.0 h1:r3o2YsgW9zRcIP3Q0WCmttFVhTuugeKIvT5z9xDspc0= -github.com/aws/aws-sdk-go-v2/service/s3 v1.53.0/go.mod h1:w2E4f8PUfNtyjfL6Iu+mWI96FGttE03z3UdNcUEC4tA= github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 h1:6cnno47Me9bRykw9AEv9zkXE+5or7jz8TsskTTccbgc= github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1/go.mod h1:qmdkIIAC+GCLASF7R2whgNrJADz0QZPX+Seiw/i4S3o= -github.com/aws/aws-sdk-go-v2/service/sns v1.29.3 h1:R2MIMza/lZex1wIawXmo6S+suwFv/JcxOFSJPpsSVBY= -github.com/aws/aws-sdk-go-v2/service/sns v1.29.3/go.mod h1:tr9l7BHYU/SvlJAL9CH56XZNcOBb/d24j3RrXkzzaTA= github.com/aws/aws-sdk-go-v2/service/sns v1.29.4 h1:VhW/J21SPH9bNmk1IYdZtzqA6//N2PB5Py5RexNmLVg= github.com/aws/aws-sdk-go-v2/service/sns v1.29.4/go.mod h1:DojKGyWXa4p+e+C+GpG7qf02QaE68Nrg2v/UAXQhKhU= -github.com/aws/aws-sdk-go-v2/service/sqs v1.31.3 h1:AOQ5bXiVWqoEAv8Ag7zgJoDVhOz3lUrZyk1/M45/keU= -github.com/aws/aws-sdk-go-v2/service/sqs v1.31.3/go.mod h1:GCHwwK0RX9JVvLYzDDLHCvkD2lMihdqJSQ2kzkVbyhw= github.com/aws/aws-sdk-go-v2/service/sqs v1.31.4 h1:mE2ysZMEeQ3ulHWs4mmc4fZEhOfeY1o6QXAfDqjbSgw= github.com/aws/aws-sdk-go-v2/service/sqs v1.31.4/go.mod h1:lCN2yKnj+Sp9F6UzpoPPTir+tSaC9Jwf6LcmTqnXFZw= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.3 h1:mnbuWHOcM70/OFUlZZ5rcdfA8PflGXXiefU/O+1S3+8= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.3/go.mod h1:5HFu51Elk+4oRBZVxmHrSds5jFXmFj8C3w7DVF2gnrs= github.com/aws/aws-sdk-go-v2/service/sso v1.20.4 h1:WzFol5Cd+yDxPAdnzTA5LmpHYSWinhmSj4rQChV0ee8= github.com/aws/aws-sdk-go-v2/service/sso v1.20.4/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.3 h1:uLq0BKatTmDzWa/Nu4WO0M1AaQDaPpwTKAeByEc6WFM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.3/go.mod h1:b+qdhjnxj8GSR6t5YfphOffeoQSQ1KmpoVVuBn+PWxs= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.5 h1:J/PpTf/hllOjx8Xu9DMflff3FajfLxqM5+tepvVXmxg= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.5/go.mod h1:0ih0Z83YDH/QeQ6Ori2yGE2XvWYv/Xm+cZc01LC6oK0= github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU= github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw= -github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= -github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= @@ -186,8 +112,6 @@ github.com/charmbracelet/glamour v0.7.0 h1:2BtKGZ4iVJCDfMF229EzbeR1QRKLWztO9dMtj github.com/charmbracelet/glamour v0.7.0/go.mod h1:jUMh5MeihljJPQbJ/wf4ldw2+yBP59+ctV36jASy7ps= github.com/charmbracelet/huh v0.3.0 h1:CxPplWkgW2yUTDDG0Z4S5HH8SJOosWHd4LxCvi0XsKE= github.com/charmbracelet/huh v0.3.0/go.mod h1:fujUdKX8tC45CCSaRQdw789O6uaCRwx8l2NDyKfC4jA= -github.com/charmbracelet/huh/spinner v0.0.0-20240209193029-45947515c4cf h1:hzfl5rHblaVR/8zfAoCBuqsTcEp/Zvy1IVZBIebZelM= -github.com/charmbracelet/huh/spinner v0.0.0-20240209193029-45947515c4cf/go.mod h1:2l0nupcBRhdSZQqIiaV2hKwctrYbBbOr9Dn6Smox3f4= github.com/charmbracelet/lipgloss v0.9.1 h1:PNyd3jvaJbg4jRHKWXnCj1akQm4rh8dbEzN1p/u1KWg= github.com/charmbracelet/lipgloss v0.9.1/go.mod h1:1mPmG4cxScwUQALAAnacHaigiiHB9Pmr+v1VEawJl6I= github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= @@ -216,13 +140,10 @@ github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/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/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/go-cmp v0.5.5/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/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -287,8 +208,8 @@ github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= github.com/nats-io/jwt/v2 v2.5.5 h1:ROfXb50elFq5c9+1ztaUbdlrArNFl2+fQWP6B8HGEq4= github.com/nats-io/jwt/v2 v2.5.5/go.mod h1:ZdWS1nZa6WMZfFwwgpEaqBV8EPGVgOTDHN/wTbz0Y5A= -github.com/nats-io/nats-server/v2 v2.10.11 h1:yKUiLVincZISpo3A4YljJQ+HfLltGAgoNNJl99KL8I0= -github.com/nats-io/nats-server/v2 v2.10.11/go.mod h1:dXtOqVWzbMTEj+tUyC/itXjJhW37xh0tUBrTAlqAfx8= +github.com/nats-io/nats-server/v2 v2.10.12 h1:G6u+RDrHkw4bkwn7I911O5jqys7jJVRY6MwgndyUsnE= +github.com/nats-io/nats-server/v2 v2.10.12/go.mod h1:H1n6zXtYLFCgXcf/SF8QNTSIFuS8tyZQMN9NguUHdEs= github.com/nats-io/nats.go v1.34.0 h1:fnxnPCNiwIG5w08rlMcEKTUw4AV/nKyGCOJE8TdhSPk= github.com/nats-io/nats.go v1.34.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8= github.com/nats-io/nkeys v0.4.7 h1:RwNJbbIdYCoClSDNY7QVKZlyb/wfT6ugvFCiKy6vDvI= @@ -299,24 +220,14 @@ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/openrdap/rdap v0.9.2-0.20240219192926-2210b535d40b h1:sM/kMuT+cm9hsSaZGVkGgwKHpQN3Et5/DF9zX/02X6w= github.com/openrdap/rdap v0.9.2-0.20240219192926-2210b535d40b/go.mod h1:391Ww1JbjG4FHOlvQqCd6n25CCCPE64JzC5cCYPxhyM= -github.com/overmindtech/api-client v0.14.0 h1:zXyjJsIeawNqoWv7FqOjwcqgFpLrDYz7l9MWqh1G9ZQ= -github.com/overmindtech/api-client v0.14.0/go.mod h1:msdkTAQFlvDGOU4tQk2adk2P8j23uaMWkJ9YRX4wGWI= -github.com/overmindtech/aws-source v0.0.0-20240329013203-8e02171c6d61 h1:ydhl37ppA6SSJbSv2d51uZJ7dhAwwI3ZAyhvV+crKT4= -github.com/overmindtech/aws-source v0.0.0-20240329013203-8e02171c6d61/go.mod h1:lWngrGmpQc9ZtV8uHiC7tB+hdR/Yyg75cw5mQTDZWMk= github.com/overmindtech/aws-source v0.0.0-20240405002202-e9246468a057 h1:sOdf1e8jjXrfsCv78Gp6WGhUi/+ecD3oWRpF5Ww1/vY= github.com/overmindtech/aws-source v0.0.0-20240405002202-e9246468a057/go.mod h1:e9b7hqxI384St9vvcOKEgTTr/bH6JzLj/gBPv4iaTPs= -github.com/overmindtech/discovery v0.26.5 h1:XPphTWSptTutXkWT+ahjGyC+t4bZF7Aih0lZClxlruI= -github.com/overmindtech/discovery v0.26.5/go.mod h1:xzMs17h7QjkEV8o9zYqJaJROzsEiMA80cwYvGWHx/VM= github.com/overmindtech/discovery v0.26.6 h1:6bM1FVA7wrSqaPQrSQsGyhcAWtWLnvxpg9N2FDF9KLg= github.com/overmindtech/discovery v0.26.6/go.mod h1:69l113ABqPejHVXsPl3OL2am2Je+PhgSjyJwFJzE3Fw= -github.com/overmindtech/sdp-go v0.68.1 h1:z8eiyda25lnclHI88XV+LcxpWDWgh3SB3PTkDsEWEDs= -github.com/overmindtech/sdp-go v0.68.1/go.mod h1:6qyb6sGpSlaYXJzlT8r8JnBu6Y9mx/OsuuyOImXYdsg= github.com/overmindtech/sdp-go v0.69.0 h1:Bvp3n7E6HtOQcj0CG+atFjUG3EyCuc0glfQvkqsVgwo= github.com/overmindtech/sdp-go v0.69.0/go.mod h1:Kx73sbtgQoUQl2rgFE9RZDh8MR0O3GEVS61YVaFKKj4= github.com/overmindtech/sdpcache v1.6.4 h1:MJoYBDqDE3s8FrRzZ0RPgFiH39HWI/Mv2ImH1NdLT8k= github.com/overmindtech/sdpcache v1.6.4/go.mod h1:/F9XStVdntRJEQjlZ86BPuB1Y7VPo1PFcsCNiU1IoGE= -github.com/overmindtech/stdlib-source v0.0.0-20240329122950-2e598b0bb347 h1:XXLO27qX5lWk6/PEC5rr9YfbGsVrtQ5MCHmhb5+Mq1A= -github.com/overmindtech/stdlib-source v0.0.0-20240329122950-2e598b0bb347/go.mod h1:6y/rbXMfBHjJJ2NukVh6+ZdEpAFe6f6j1ePFh39YZCQ= github.com/overmindtech/stdlib-source v0.0.0-20240405003059-bb202167dc25 h1:nprUkCpmxjMUeO+HuBTHmKr2Eyis422z0yO6Pn6///g= github.com/overmindtech/stdlib-source v0.0.0-20240405003059-bb202167dc25/go.mod h1:GhxKrvOfQWR2xq9ClB8a+QXd5Pk8spJrfL3vQ0Mn+3g= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= @@ -381,7 +292,6 @@ github.com/xiam/to v0.0.0-20191116183551-8328998fc0ed/go.mod h1:cqbG7phSzrbdg3aj github.com/xiam/to v0.0.0-20200126224905-d60d31e03561 h1:SVoNK97S6JlaYlHcaC+79tg3JUlQABcc0dH2VQ4Y+9s= github.com/xiam/to v0.0.0-20200126224905-d60d31e03561/go.mod h1:cqbG7phSzrbdg3aj+Kn63bpVruzwDZi58CpxlZkjwzw= github.com/yuin/goldmark v1.3.7/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.5.4 h1:2uY/xC0roWy8IBEGLgB1ywIoEJFGmRrX21YQcvGZzjU= github.com/yuin/goldmark v1.5.4/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark-emoji v1.0.2 h1:c/RgTShNgHTtc6xdz2KKI74jJr6rWi7FPgnP9GAsO5s= @@ -412,59 +322,31 @@ 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= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -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.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= -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.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -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.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.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.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= 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-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.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -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= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 h1:YJ5pD9rF8o9Qtta0Cmy9rdBwkSjrTCT6XTiUQVOtIos= google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY= google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 h1:rcS6EyEaoCO52hQDupoSfrxI3R6C2Tq741is7X8OvnM= @@ -473,8 +355,6 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917 h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917/go.mod h1:xtjpI3tXFPP051KaWnhvxkiubL/6dJ18vLVf7q2pTOU= google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY= google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= -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.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=