diff --git a/cmd/access.go b/cmd/access.go index f2916f51..51d367a3 100644 --- a/cmd/access.go +++ b/cmd/access.go @@ -116,13 +116,13 @@ func changeAccess(c *cli.Context, manager *user.Manager, username string, topic return err } if permission.IsReadWrite() { - fmt.Fprintf(c.App.ErrWriter, "granted read-write access to topic %s\n\n", topic) + fmt.Fprintf(c.App.Writer, "granted read-write access to topic %s\n\n", topic) } else if permission.IsRead() { - fmt.Fprintf(c.App.ErrWriter, "granted read-only access to topic %s\n\n", topic) + fmt.Fprintf(c.App.Writer, "granted read-only access to topic %s\n\n", topic) } else if permission.IsWrite() { - fmt.Fprintf(c.App.ErrWriter, "granted write-only access to topic %s\n\n", topic) + fmt.Fprintf(c.App.Writer, "granted write-only access to topic %s\n\n", topic) } else { - fmt.Fprintf(c.App.ErrWriter, "revoked all access to topic %s\n\n", topic) + fmt.Fprintf(c.App.Writer, "revoked all access to topic %s\n\n", topic) } return showUserAccess(c, manager, username) } @@ -140,7 +140,7 @@ func resetAllAccess(c *cli.Context, manager *user.Manager) error { if err := manager.ResetAccess("", ""); err != nil { return err } - fmt.Fprintln(c.App.ErrWriter, "reset access for all users") + fmt.Fprintln(c.App.Writer, "reset access for all users") return nil } @@ -148,7 +148,7 @@ func resetUserAccess(c *cli.Context, manager *user.Manager, username string) err if err := manager.ResetAccess(username, ""); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "reset access for user %s\n\n", username) + fmt.Fprintf(c.App.Writer, "reset access for user %s\n\n", username) return showUserAccess(c, manager, username) } @@ -156,7 +156,7 @@ func resetUserTopicAccess(c *cli.Context, manager *user.Manager, username string if err := manager.ResetAccess(username, topic); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "reset access for user %s and topic %s\n\n", username, topic) + fmt.Fprintf(c.App.Writer, "reset access for user %s and topic %s\n\n", username, topic) return showUserAccess(c, manager, username) } @@ -199,9 +199,9 @@ func showUsers(c *cli.Context, manager *user.Manager, users []*user.User) error if u.Provisioned { provisioned = ", server config" } - fmt.Fprintf(c.App.ErrWriter, "user %s (role: %s, tier: %s%s)\n", u.Name, u.Role, tier, provisioned) + fmt.Fprintf(c.App.Writer, "user %s (role: %s, tier: %s%s)\n", u.Name, u.Role, tier, provisioned) if u.Role == user.RoleAdmin { - fmt.Fprintf(c.App.ErrWriter, "- read-write access to all topics (admin role)\n") + fmt.Fprintf(c.App.Writer, "- read-write access to all topics (admin role)\n") } else if len(grants) > 0 { for _, grant := range grants { grantProvisioned := "" @@ -209,28 +209,28 @@ func showUsers(c *cli.Context, manager *user.Manager, users []*user.User) error grantProvisioned = " (server config)" } if grant.Permission.IsReadWrite() { - fmt.Fprintf(c.App.ErrWriter, "- read-write access to topic %s%s\n", grant.TopicPattern, grantProvisioned) + fmt.Fprintf(c.App.Writer, "- read-write access to topic %s%s\n", grant.TopicPattern, grantProvisioned) } else if grant.Permission.IsRead() { - fmt.Fprintf(c.App.ErrWriter, "- read-only access to topic %s%s\n", grant.TopicPattern, grantProvisioned) + fmt.Fprintf(c.App.Writer, "- read-only access to topic %s%s\n", grant.TopicPattern, grantProvisioned) } else if grant.Permission.IsWrite() { - fmt.Fprintf(c.App.ErrWriter, "- write-only access to topic %s%s\n", grant.TopicPattern, grantProvisioned) + fmt.Fprintf(c.App.Writer, "- write-only access to topic %s%s\n", grant.TopicPattern, grantProvisioned) } else { - fmt.Fprintf(c.App.ErrWriter, "- no access to topic %s%s\n", grant.TopicPattern, grantProvisioned) + fmt.Fprintf(c.App.Writer, "- no access to topic %s%s\n", grant.TopicPattern, grantProvisioned) } } } else { - fmt.Fprintf(c.App.ErrWriter, "- no topic-specific permissions\n") + fmt.Fprintf(c.App.Writer, "- no topic-specific permissions\n") } if u.Name == user.Everyone { access := manager.DefaultAccess() if access.IsReadWrite() { - fmt.Fprintln(c.App.ErrWriter, "- read-write access to all (other) topics (server config)") + fmt.Fprintln(c.App.Writer, "- read-write access to all (other) topics (server config)") } else if access.IsRead() { - fmt.Fprintln(c.App.ErrWriter, "- read-only access to all (other) topics (server config)") + fmt.Fprintln(c.App.Writer, "- read-only access to all (other) topics (server config)") } else if access.IsWrite() { - fmt.Fprintln(c.App.ErrWriter, "- write-only access to all (other) topics (server config)") + fmt.Fprintln(c.App.Writer, "- write-only access to all (other) topics (server config)") } else { - fmt.Fprintln(c.App.ErrWriter, "- no access to any (other) topics (server config)") + fmt.Fprintln(c.App.Writer, "- no access to any (other) topics (server config)") } } } diff --git a/cmd/tier.go b/cmd/tier.go index 3b45eaa7..de34576e 100644 --- a/cmd/tier.go +++ b/cmd/tier.go @@ -182,7 +182,7 @@ func execTierAdd(c *cli.Context) error { } if tier, _ := manager.Tier(code); tier != nil { if c.Bool("ignore-exists") { - fmt.Fprintf(c.App.ErrWriter, "tier %s already exists (exited successfully)\n", code) + fmt.Fprintf(c.App.Writer, "tier %s already exists (exited successfully)\n", code) return nil } return fmt.Errorf("tier %s already exists", code) @@ -234,7 +234,7 @@ func execTierAdd(c *cli.Context) error { if err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "tier added\n\n") + fmt.Fprintf(c.App.Writer, "tier added\n\n") printTier(c, tier) return nil } @@ -315,7 +315,7 @@ func execTierChange(c *cli.Context) error { if err := manager.UpdateTier(tier); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "tier updated\n\n") + fmt.Fprintf(c.App.Writer, "tier updated\n\n") printTier(c, tier) return nil } @@ -335,7 +335,7 @@ func execTierDel(c *cli.Context) error { if err := manager.RemoveTier(code); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "tier %s removed\n", code) + fmt.Fprintf(c.App.Writer, "tier %s removed\n", code) return nil } @@ -359,16 +359,16 @@ func printTier(c *cli.Context, tier *user.Tier) { if tier.StripeMonthlyPriceID != "" && tier.StripeYearlyPriceID != "" { prices = fmt.Sprintf("%s / %s", tier.StripeMonthlyPriceID, tier.StripeYearlyPriceID) } - fmt.Fprintf(c.App.ErrWriter, "tier %s (id: %s)\n", tier.Code, tier.ID) - fmt.Fprintf(c.App.ErrWriter, "- Name: %s\n", tier.Name) - fmt.Fprintf(c.App.ErrWriter, "- Message limit: %d\n", tier.MessageLimit) - fmt.Fprintf(c.App.ErrWriter, "- Message expiry duration: %s (%d seconds)\n", tier.MessageExpiryDuration.String(), int64(tier.MessageExpiryDuration.Seconds())) - fmt.Fprintf(c.App.ErrWriter, "- Email limit: %d\n", tier.EmailLimit) - fmt.Fprintf(c.App.ErrWriter, "- Phone call limit: %d\n", tier.CallLimit) - fmt.Fprintf(c.App.ErrWriter, "- Reservation limit: %d\n", tier.ReservationLimit) - fmt.Fprintf(c.App.ErrWriter, "- Attachment file size limit: %s\n", util.FormatSizeHuman(tier.AttachmentFileSizeLimit)) - fmt.Fprintf(c.App.ErrWriter, "- Attachment total size limit: %s\n", util.FormatSizeHuman(tier.AttachmentTotalSizeLimit)) - fmt.Fprintf(c.App.ErrWriter, "- Attachment expiry duration: %s (%d seconds)\n", tier.AttachmentExpiryDuration.String(), int64(tier.AttachmentExpiryDuration.Seconds())) - fmt.Fprintf(c.App.ErrWriter, "- Attachment daily bandwidth limit: %s\n", util.FormatSizeHuman(tier.AttachmentBandwidthLimit)) - fmt.Fprintf(c.App.ErrWriter, "- Stripe prices (monthly/yearly): %s\n", prices) + fmt.Fprintf(c.App.Writer, "tier %s (id: %s)\n", tier.Code, tier.ID) + fmt.Fprintf(c.App.Writer, "- Name: %s\n", tier.Name) + fmt.Fprintf(c.App.Writer, "- Message limit: %d\n", tier.MessageLimit) + fmt.Fprintf(c.App.Writer, "- Message expiry duration: %s (%d seconds)\n", tier.MessageExpiryDuration.String(), int64(tier.MessageExpiryDuration.Seconds())) + fmt.Fprintf(c.App.Writer, "- Email limit: %d\n", tier.EmailLimit) + fmt.Fprintf(c.App.Writer, "- Phone call limit: %d\n", tier.CallLimit) + fmt.Fprintf(c.App.Writer, "- Reservation limit: %d\n", tier.ReservationLimit) + fmt.Fprintf(c.App.Writer, "- Attachment file size limit: %s\n", util.FormatSizeHuman(tier.AttachmentFileSizeLimit)) + fmt.Fprintf(c.App.Writer, "- Attachment total size limit: %s\n", util.FormatSizeHuman(tier.AttachmentTotalSizeLimit)) + fmt.Fprintf(c.App.Writer, "- Attachment expiry duration: %s (%d seconds)\n", tier.AttachmentExpiryDuration.String(), int64(tier.AttachmentExpiryDuration.Seconds())) + fmt.Fprintf(c.App.Writer, "- Attachment daily bandwidth limit: %s\n", util.FormatSizeHuman(tier.AttachmentBandwidthLimit)) + fmt.Fprintf(c.App.Writer, "- Stripe prices (monthly/yearly): %s\n", prices) } diff --git a/cmd/token.go b/cmd/token.go index 614d47e2..b0393b88 100644 --- a/cmd/token.go +++ b/cmd/token.go @@ -131,9 +131,9 @@ func execTokenAdd(c *cli.Context) error { return err } if expires.Unix() == 0 { - fmt.Fprintf(c.App.ErrWriter, "token %s created for user %s, never expires\n", token.Value, u.Name) + fmt.Fprintf(c.App.Writer, "token %s created for user %s, never expires\n", token.Value, u.Name) } else { - fmt.Fprintf(c.App.ErrWriter, "token %s created for user %s, expires %v\n", token.Value, u.Name, expires.Format(time.UnixDate)) + fmt.Fprintf(c.App.Writer, "token %s created for user %s, expires %v\n", token.Value, u.Name, expires.Format(time.UnixDate)) } return nil } @@ -158,7 +158,7 @@ func execTokenDel(c *cli.Context) error { if err := manager.RemoveToken(u.ID, token); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "token %s for user %s removed\n", token, username) + fmt.Fprintf(c.App.Writer, "token %s for user %s removed\n", token, username) return nil } @@ -192,13 +192,13 @@ func execTokenList(c *cli.Context) error { if err != nil { return err } else if len(tokens) == 0 && username != "" { - fmt.Fprintf(c.App.ErrWriter, "user %s has no access tokens\n", username) + fmt.Fprintf(c.App.Writer, "user %s has no access tokens\n", username) return nil } else if len(tokens) == 0 { continue } usersWithTokens++ - fmt.Fprintf(c.App.ErrWriter, "user %s\n", u.Name) + fmt.Fprintf(c.App.Writer, "user %s\n", u.Name) for _, t := range tokens { var label, expires, provisioned string if t.Label != "" { @@ -212,11 +212,11 @@ func execTokenList(c *cli.Context) error { if t.Provisioned { provisioned = " (server config)" } - fmt.Fprintf(c.App.ErrWriter, "- %s%s, %s, accessed from %s at %s%s\n", t.Value, label, expires, t.LastOrigin.String(), t.LastAccess.Format(time.RFC822), provisioned) + fmt.Fprintf(c.App.Writer, "- %s%s, %s, accessed from %s at %s%s\n", t.Value, label, expires, t.LastOrigin.String(), t.LastAccess.Format(time.RFC822), provisioned) } } if usersWithTokens == 0 { - fmt.Fprintf(c.App.ErrWriter, "no users with tokens\n") + fmt.Fprintf(c.App.Writer, "no users with tokens\n") } return nil } diff --git a/cmd/user.go b/cmd/user.go index ef29cb8e..666473dd 100644 --- a/cmd/user.go +++ b/cmd/user.go @@ -211,7 +211,7 @@ func execUserAdd(c *cli.Context) error { } if user, _ := manager.User(username); user != nil { if c.Bool("ignore-exists") { - fmt.Fprintf(c.App.ErrWriter, "user %s already exists (exited successfully)\n", username) + fmt.Fprintf(c.App.Writer, "user %s already exists (exited successfully)\n", username) return nil } return fmt.Errorf("user %s already exists", username) @@ -226,7 +226,7 @@ func execUserAdd(c *cli.Context) error { if err := manager.AddUser(username, password, role, hashed); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "user %s added with role %s\n", username, role) + fmt.Fprintf(c.App.Writer, "user %s added with role %s\n", username, role) return nil } @@ -247,7 +247,7 @@ func execUserDel(c *cli.Context) error { if err := manager.RemoveUser(username); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "user %s removed\n", username) + fmt.Fprintf(c.App.Writer, "user %s removed\n", username) return nil } @@ -279,7 +279,7 @@ func execUserChangePass(c *cli.Context) error { if err := manager.ChangePassword(username, password, hashed); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "changed password for user %s\n", username) + fmt.Fprintf(c.App.Writer, "changed password for user %s\n", username) return nil } @@ -301,7 +301,7 @@ func execUserChangeRole(c *cli.Context) error { if err := manager.ChangeRole(username, role); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "changed role for user %s to %s\n", username, role) + fmt.Fprintf(c.App.Writer, "changed role for user %s to %s\n", username, role) return nil } @@ -339,12 +339,12 @@ func execUserChangeTier(c *cli.Context) error { if err := manager.ResetTier(username); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "removed tier from user %s\n", username) + fmt.Fprintf(c.App.Writer, "removed tier from user %s\n", username) } else { if err := manager.ChangeTier(username, tier); err != nil { return err } - fmt.Fprintf(c.App.ErrWriter, "changed tier for user %s to %s\n", username, tier) + fmt.Fprintf(c.App.Writer, "changed tier for user %s to %s\n", username, tier) } return nil } diff --git a/cmd/webpush.go b/cmd/webpush.go index 249f91c8..fdcf4ff1 100644 --- a/cmd/webpush.go +++ b/cmd/webpush.go @@ -53,9 +53,9 @@ web-push-private-key: %s if err != nil { return err } - _, err = fmt.Fprintf(c.App.ErrWriter, "Web Push keys written to %s.\n", outputFile) + _, err = fmt.Fprintf(c.App.Writer, "Web Push keys written to %s.\n", outputFile) } else { - _, err = fmt.Fprintf(c.App.ErrWriter, `Web Push keys generated. Add the following lines to your config file: + _, err = fmt.Fprintf(c.App.Writer, `Web Push keys generated. Add the following lines to your config file: web-push-public-key: %s web-push-private-key: %s diff --git a/go.sum b/go.sum index 3ad46168..003dd999 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,6 @@ cloud.google.com/go/auth v0.16.3 h1:kabzoQ9/bobUmnseYnBO6qQG7q4a/CffFRlJSxv2wCc= cloud.google.com/go/auth v0.16.3/go.mod h1:NucRGjaXfzP1ltpcQ7On/VTZ0H4kWB5Jy+Y9Dnm76fA= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= -cloud.google.com/go/compute v1.41.0 h1:S+HvMIzBUAFK/73wxkrA4/GwvM7R9d+egGZvih4kp+M= -cloud.google.com/go/compute v1.41.0/go.mod h1:P1doTJnlwurJDzIQFMp4mgU+vyCe9HU2NWTlqTfq3MY= cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= cloud.google.com/go/firestore v1.18.0 h1:cuydCaLS7Vl2SatAeivXyhbhDEIR8BDmtn4egDhIn2s= @@ -20,8 +18,6 @@ cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFs cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= -cloud.google.com/go/storage v1.55.0 h1:NESjdAToN9u1tmhVqhXCaCwYBuvEhZLLv0gBr+2znf0= -cloud.google.com/go/storage v1.55.0/go.mod h1:ztSmTTwzsdXe5syLVS0YsbFxXuvEmEyZj7v7zChEmuY= cloud.google.com/go/storage v1.56.0 h1:iixmq2Fse2tqxMbWhLWC9HfBj1qdxqAmiK8/eqtsLxI= cloud.google.com/go/storage v1.56.0/go.mod h1:Tpuj6t4NweCLzlNbw9Z9iwxEkrSem20AetIeH/shgVU= cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= @@ -85,8 +81,6 @@ github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang-jwt/jwt/v5 v5.2.3 h1:kkGXqQOBSDDWRhWNXTFpqGSCMyh/PLnqUvMGJPDJDs0= -github.com/golang-jwt/jwt/v5 v5.2.3/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= @@ -118,8 +112,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A= -github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v1.14.30 h1:bVreufq3EAIG1Quvws73du3/QgdeZ3myglJlrzSYYCY= github.com/mattn/go-sqlite3 v1.14.30/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= @@ -269,27 +261,16 @@ golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58 golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.242.0 h1:7Lnb1nfnpvbkCiZek6IXKdJ0MFuAZNAJKQfA1ws62xg= -google.golang.org/api v0.242.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50= google.golang.org/api v0.244.0 h1:lpkP8wVibSKr++NCD36XzTk/IzeKJ3klj7vbj+XU5pE= google.golang.org/api v0.244.0/go.mod h1:dMVhVcylamkirHdzEBAIQWUCgqY885ivNeZYd7VAVr8= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine/v2 v2.0.6 h1:LvPZLGuchSBslPBp+LAhihBeGSiRh1myRoYK4NtuBIw= google.golang.org/appengine/v2 v2.0.6/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7Z1JKf3J3wLI= -google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 h1:Nt6z9UHqSlIdIGJdz6KhTIs2VRx/iOsA5iE8bmQNcxs= -google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79/go.mod h1:kTmlBHMPqR5uCZPBvwa2B18mvubkjyY3CRLI0c6fj0s= google.golang.org/genproto v0.0.0-20250728155136-f173205681a0 h1:btBcgujH2+KIWEfz0s7Cdtt9R7hpwM4SAEXAdXf/ddw= google.golang.org/genproto v0.0.0-20250728155136-f173205681a0/go.mod h1:Q4yZQ3kmmIyg6HsMjCGx2vQ8gzN+dntaPmFWz6Zj0fo= -google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79 h1:iOye66xuaAK0WnkPuhQPUFy8eJcmwUXqGGP3om6IxX8= -google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79/go.mod h1:HKJDgKsFUnv5VAGeQjz8kxcgDP0HoE0iZNp0OdZNlhE= google.golang.org/genproto/googleapis/api v0.0.0-20250728155136-f173205681a0 h1:0UOBWO4dC+e51ui0NFKSPbkHHiQ4TmrEfEZMLDyRmY8= google.golang.org/genproto/googleapis/api v0.0.0-20250728155136-f173205681a0/go.mod h1:8ytArBbtOy2xfht+y2fqKd5DRDJRUQhqbyEnQ4bDChs= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79 h1:1ZwqphdOdWYXsUHgMpU/101nCtf/kSp9hOrcvFsnl10= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0 h1:MAKi5q709QWfnkkpNQ0M12hYJ1+e8qYVDyowc4U1XZM= google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= -google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok= -google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc= google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=