Skip to content

Commit cee6db1

Browse files
authored
Merge branch 'master' into cs/feat-pkg-envparse
2 parents 8a8c458 + 77f5918 commit cee6db1

10 files changed

Lines changed: 239 additions & 41 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
.env*
22
vendor/
3+
tools/bin/
34
gotrue
45
gotrue-arm64
56
gotrue.exe

Makefile

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ RELEASE_ARCHIVES = \
3131
auth-$(VERSION)-amd64.tar.xz \
3232
auth-$(VERSION)-arm64.tar.xz
3333

34+
TOOL_BIN_DIR = tools/bin
35+
TOOL_TARGETS = \
36+
$(TOOL_BIN_DIR)/gosec \
37+
$(TOOL_BIN_DIR)/staticcheck \
38+
$(TOOL_BIN_DIR)/govulncheck
39+
3440

3541
help: ## Show this help.
3642
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
@@ -112,34 +118,35 @@ test: auth ## Run tests.
112118
vet: # Vet the code
113119
go vet $(CHECK_FILES)
114120

115-
sec: check-gosec # Check for security vulnerabilities
116-
gosec -quiet -exclude-generated -exclude=G117,G120,G704 $(CHECK_FILES)
117-
gosec -quiet -tests -exclude-generated -exclude=G101,G104,G117,G120,G704 $(CHECK_FILES)
118-
119-
check-gosec:
120-
@command -v gosec >/dev/null 2>&1 \
121-
|| go install github.com/securego/gosec/v2/cmd/gosec@latest
122-
123-
vulncheck: check-govulncheck # Check for known vulnerabilities
124-
govulncheck -format json $(CHECK_FILES) | go run ./hack/vulncheck-filter
125-
126-
check-govulncheck:
127-
@command -v govulncheck >/dev/null 2>&1 \
128-
|| go install golang.org/x/vuln/cmd/govulncheck@latest
129-
130-
unused: | check-staticcheck # Look for unused code
121+
.NOTPARALLEL: $(TOOL_TARGETS)
122+
$(TOOL_TARGETS):
123+
$(MAKE) -C tools
124+
125+
sec: | $(TOOL_BIN_DIR)/gosec # Check for security vulnerabilities
126+
$(TOOL_BIN_DIR)/gosec \
127+
-quiet \
128+
-exclude-generated \
129+
-exclude=G117,G120,G704 \
130+
$(CHECK_FILES)
131+
$(TOOL_BIN_DIR)/gosec \
132+
-quiet \
133+
-tests \
134+
-exclude-generated \
135+
-exclude=G101,G104,G117,G120,G704 \
136+
$(CHECK_FILES)
137+
138+
vulncheck: $(TOOL_BIN_DIR)/govulncheck # Check for known vulnerabilities
139+
$(TOOL_BIN_DIR)/govulncheck -format json $(CHECK_FILES) | go run ./hack/vulncheck-filter
140+
141+
unused: | $(TOOL_BIN_DIR)/staticcheck # Look for unused code
131142
@echo "Unused code:"
132-
staticcheck -checks U1000 $(CHECK_FILES)
143+
$(TOOL_BIN_DIR)/staticcheck -checks U1000 $(CHECK_FILES)
133144
@echo
134145
@echo "Code used only in _test.go (do move it in those files):"
135-
staticcheck -checks U1000 -tests=false $(CHECK_FILES)
136-
137-
static: | check-staticcheck
138-
staticcheck ./...
146+
$(TOOL_BIN_DIR)/staticcheck -checks U1000 -tests=false $(CHECK_FILES)
139147

140-
check-staticcheck:
141-
@command -v staticcheck >/dev/null 2>&1 \
142-
|| go install honnef.co/go/tools/cmd/staticcheck@latest
148+
static: | $(TOOL_BIN_DIR)/staticcheck
149+
$(TOOL_BIN_DIR)/staticcheck ./...
143150

144151
generate: | check-oapi-codegen
145152
go generate ./...

cmd/serve_cmd.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@ func serve(ctx context.Context) {
9393

9494
var err error
9595
defer func() {
96-
logFn := wrkLog.Info
97-
if err != nil {
98-
logFn = wrkLog.WithError(err).Error
96+
exitFn := wrkLog.Info
97+
if err != nil && !errors.Is(err, context.Canceled) {
98+
exitFn = wrkLog.WithError(err).Error
9999
}
100-
logFn("background apiworker is exiting")
100+
exitFn("background apiworker is exiting")
101101
}()
102102

103103
// Work exits when ctx is done as in-flight requests do not depend
@@ -125,7 +125,7 @@ func serve(ctx context.Context) {
125125
var err error
126126
defer func() {
127127
exitFn := le.Info
128-
if err != nil {
128+
if err != nil && !errors.Is(err, context.Canceled) {
129129
exitFn = le.WithError(err).Error
130130
}
131131
exitFn("config reloader is exiting")
@@ -162,9 +162,7 @@ func serve(ctx context.Context) {
162162
}
163163

164164
rl := reloader.NewReloader(rc, watchDir)
165-
if err = rl.Watch(ctx, fn); err != nil {
166-
log.WithError(err).Error("config reloader is exiting")
167-
}
165+
err = rl.Watch(ctx, fn)
168166
}()
169167
}
170168

internal/api/external.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func (a *API) ExternalProviderRedirect(w http.ResponseWriter, r *http.Request) e
2828
if err != nil {
2929
return err
3030
}
31-
http.Redirect(w, r, rurl, http.StatusFound)
31+
http.Redirect(w, r, rurl, http.StatusFound) // #nosec G710
3232
return nil
3333
}
3434

@@ -285,7 +285,7 @@ func (a *API) internalExternalProviderCallback(w http.ResponseWriter, r *http.Re
285285

286286
}
287287

288-
http.Redirect(w, r, rurl, http.StatusFound)
288+
http.Redirect(w, r, rurl, http.StatusFound) // #nosec G710
289289
return nil
290290
}
291291

@@ -819,7 +819,7 @@ func redirectErrors(handler apiHandler, w http.ResponseWriter, r *http.Request,
819819
// Add Supabase Auth identifier to help clients distinguish Supabase Auth redirects
820820
hq.Set("sb", "")
821821
u.Fragment = hq.Encode()
822-
http.Redirect(w, r, u.String(), http.StatusFound)
822+
http.Redirect(w, r, u.String(), http.StatusFound) // #nosec G710
823823
}
824824
}
825825

internal/api/identity.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func (a *API) LinkIdentity(w http.ResponseWriter, r *http.Request) error {
114114
"url": rurl,
115115
})
116116
}
117-
http.Redirect(w, r, rurl, http.StatusFound)
117+
http.Redirect(w, r, rurl, http.StatusFound) // #nosec G710
118118
return nil
119119
}
120120

internal/api/samlacs.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,8 @@ func (a *API) handleSamlAcs(w http.ResponseWriter, r *http.Request) error {
352352
if err != nil {
353353
return err
354354
}
355-
http.Redirect(w, r, redirectTo, http.StatusFound)
355+
356+
http.Redirect(w, r, redirectTo, http.StatusFound) // #nosec G710
356357
return nil
357358
}
358359

@@ -363,6 +364,7 @@ func (a *API) handleSamlAcs(w http.ResponseWriter, r *http.Request) error {
363364
})
364365
}
365366

367+
// #nosec G710
366368
http.Redirect(w, r, token.AsRedirectURL(redirectTo, url.Values{}), http.StatusFound)
367369

368370
return nil

internal/observability/metrics.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package observability
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"net"
78
"net/http"
@@ -69,17 +70,17 @@ func enablePrometheusMetrics(ctx context.Context, mc *conf.MetricsConfig) error
6970
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 5*time.Second)
7071
defer shutdownCancel()
7172

72-
if err := server.Shutdown(shutdownCtx); err != nil {
73+
if err := server.Shutdown(shutdownCtx); err != nil && !errors.Is(err, context.Canceled) {
7374
logrus.WithError(err).Errorf("prometheus server (%s) failed to gracefully shut down", addr)
7475
}
7576
}()
7677

7778
logrus.Infof("prometheus server listening on %s", addr)
7879

79-
if err := server.ListenAndServe(); err != nil {
80-
logrus.WithError(err).Errorf("prometheus server (%s) shut down", addr)
81-
} else {
80+
if err := server.ListenAndServe(); errors.Is(err, http.ErrServerClosed) {
8281
logrus.Info("prometheus metric exporter shut down")
82+
} else {
83+
logrus.WithError(err).Errorf("prometheus server (%s) shut down", addr)
8384
}
8485
}()
8586

tools/Makefile

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
BIN_DIR := $(CURDIR)/bin
2+
3+
all: \
4+
$(BIN_DIR)/gosec \
5+
$(BIN_DIR)/staticcheck \
6+
$(BIN_DIR)/govulncheck
7+
8+
$(BIN_DIR)/gosec: | $(BIN_DIR)
9+
GOBIN=$(BIN_DIR) go install github.com/securego/gosec/v2/cmd/gosec
10+
11+
$(BIN_DIR)/staticcheck: | $(BIN_DIR)
12+
GOBIN=$(BIN_DIR) go install honnef.co/go/tools/cmd/staticcheck
13+
14+
$(BIN_DIR)/govulncheck: | $(BIN_DIR)
15+
GOBIN=$(BIN_DIR) go install golang.org/x/vuln/cmd/govulncheck
16+
17+
$(BIN_DIR):
18+
mkdir -p $(@)

tools/go.mod

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
module github.com/supabase/auth/tools
2+
3+
go 1.25.8
4+
5+
tool (
6+
github.com/securego/gosec/v2/cmd/gosec
7+
golang.org/x/vuln/cmd/govulncheck
8+
honnef.co/go/tools/cmd/staticcheck
9+
)
10+
11+
require (
12+
cloud.google.com/go v0.121.2 // indirect
13+
cloud.google.com/go/auth v0.16.5 // indirect
14+
cloud.google.com/go/compute/metadata v0.9.0 // indirect
15+
github.com/BurntSushi/toml v1.6.0 // indirect
16+
github.com/anthropics/anthropic-sdk-go v1.38.0 // indirect
17+
github.com/bahlo/generic-list-go v0.2.0 // indirect
18+
github.com/buger/jsonparser v1.1.2 // indirect
19+
github.com/ccojocar/zxcvbn-go v1.0.4 // indirect
20+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
21+
github.com/felixge/httpsnoop v1.0.4 // indirect
22+
github.com/go-logr/logr v1.4.3 // indirect
23+
github.com/go-logr/stdr v1.2.2 // indirect
24+
github.com/google/go-cmp v0.7.0 // indirect
25+
github.com/google/s2a-go v0.1.9 // indirect
26+
github.com/google/uuid v1.6.0 // indirect
27+
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
28+
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
29+
github.com/gookit/color v1.6.0 // indirect
30+
github.com/gorilla/websocket v1.5.3 // indirect
31+
github.com/invopop/jsonschema v0.13.0 // indirect
32+
github.com/mailru/easyjson v0.7.7 // indirect
33+
github.com/openai/openai-go/v3 v3.32.0 // indirect
34+
github.com/securego/gosec/v2 v2.26.1 // indirect
35+
github.com/tidwall/gjson v1.18.0 // indirect
36+
github.com/tidwall/match v1.1.1 // indirect
37+
github.com/tidwall/pretty v1.2.1 // indirect
38+
github.com/tidwall/sjson v1.2.5 // indirect
39+
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
40+
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
41+
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
42+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
43+
go.opentelemetry.io/otel v1.41.0 // indirect
44+
go.opentelemetry.io/otel/metric v1.41.0 // indirect
45+
go.opentelemetry.io/otel/trace v1.41.0 // indirect
46+
go.yaml.in/yaml/v3 v3.0.4 // indirect
47+
golang.org/x/crypto v0.50.0 // indirect
48+
golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678 // indirect
49+
golang.org/x/mod v0.35.0 // indirect
50+
golang.org/x/net v0.53.0 // indirect
51+
golang.org/x/sync v0.20.0 // indirect
52+
golang.org/x/sys v0.43.0 // indirect
53+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
54+
golang.org/x/text v0.36.0 // indirect
55+
golang.org/x/tools v0.44.0 // indirect
56+
golang.org/x/vuln v1.1.4 // indirect
57+
google.golang.org/genai v1.54.0 // indirect
58+
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
59+
google.golang.org/grpc v1.79.3 // indirect
60+
google.golang.org/protobuf v1.36.10 // indirect
61+
gopkg.in/yaml.v3 v3.0.1 // indirect
62+
honnef.co/go/tools v0.6.1 // indirect
63+
)

tools/go.sum

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
cloud.google.com/go v0.121.2 h1:v2qQpN6Dx9x2NmwrqlesOt3Ys4ol5/lFZ6Mg1B7OJCg=
2+
cloud.google.com/go v0.121.2/go.mod h1:nRFlrHq39MNVWu+zESP2PosMWA0ryJw8KUBZ2iZpxbw=
3+
cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI=
4+
cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ=
5+
cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
6+
cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
7+
github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=
8+
github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
9+
github.com/anthropics/anthropic-sdk-go v1.38.0 h1:bA4DcK+91gorIX+5VTONnynyt9LRU4nnN6rRQ+j/NIg=
10+
github.com/anthropics/anthropic-sdk-go v1.38.0/go.mod h1:d288C1L+m74OYuYBvc4UFtR1Q8J0gC55oYDh2t+XxdI=
11+
github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
12+
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
13+
github.com/buger/jsonparser v1.1.2 h1:frqHqw7otoVbk5M8LlE/L7HTnIq2v9RX6EJ48i9AxJk=
14+
github.com/buger/jsonparser v1.1.2/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
15+
github.com/ccojocar/zxcvbn-go v1.0.4 h1:FWnCIRMXPj43ukfX000kvBZvV6raSxakYr1nzyNrUcc=
16+
github.com/ccojocar/zxcvbn-go v1.0.4/go.mod h1:3GxGX+rHmueTUMvm5ium7irpyjmm7ikxYFOSJB21Das=
17+
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
18+
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
19+
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
20+
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
21+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
22+
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
23+
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
24+
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
25+
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
26+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
27+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
28+
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
29+
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
30+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
31+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
32+
github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4=
33+
github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
34+
github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo=
35+
github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
36+
github.com/gookit/color v1.6.0 h1:JjJXBTk1ETNyqyilJhkTXJYYigHG24TM9Xa2M1xAhRA=
37+
github.com/gookit/color v1.6.0/go.mod h1:9ACFc7/1IpHGBW8RwuDm/0YEnhg3dwwXpoMsmtyHfjs=
38+
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
39+
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
40+
github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E=
41+
github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
42+
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
43+
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
44+
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
45+
github.com/openai/openai-go/v3 v3.32.0 h1:aHp/3wkX1W6jB8zTtf9xV0aK0qPFSVDqS7AHmlJ4hXs=
46+
github.com/openai/openai-go/v3 v3.32.0/go.mod h1:cdufnVK14cWcT9qA1rRtrXx4FTRsgbDPW7Ia7SS5cZo=
47+
github.com/securego/gosec/v2 v2.26.1 h1:gdkttGhQFVehqRJ8grKH4DrpqM/QlPKNHBnl8QgcEC4=
48+
github.com/securego/gosec/v2 v2.26.1/go.mod h1:57UW4p0uoP3kxoTkhoo3axLdVAi+OWrLg/Ax/kdqtPE=
49+
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
50+
github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
51+
github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
52+
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
53+
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
54+
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
55+
github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
56+
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
57+
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
58+
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
59+
github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
60+
github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
61+
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
62+
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
63+
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
64+
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
65+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
66+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
67+
go.opentelemetry.io/otel v1.41.0 h1:YlEwVsGAlCvczDILpUXpIpPSL/VPugt7zHThEMLce1c=
68+
go.opentelemetry.io/otel v1.41.0/go.mod h1:Yt4UwgEKeT05QbLwbyHXEwhnjxNO6D8L5PQP51/46dE=
69+
go.opentelemetry.io/otel/metric v1.41.0 h1:rFnDcs4gRzBcsO9tS8LCpgR0dxg4aaxWlJxCno7JlTQ=
70+
go.opentelemetry.io/otel/metric v1.41.0/go.mod h1:xPvCwd9pU0VN8tPZYzDZV/BMj9CM9vs00GuBjeKhJps=
71+
go.opentelemetry.io/otel/trace v1.41.0 h1:Vbk2co6bhj8L59ZJ6/xFTskY+tGAbOnCtQGVVa9TIN0=
72+
go.opentelemetry.io/otel/trace v1.41.0/go.mod h1:U1NU4ULCoxeDKc09yCWdWe+3QoyweJcISEVa1RBzOis=
73+
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
74+
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
75+
golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
76+
golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
77+
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
78+
golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678 h1:1P7xPZEwZMoBoz0Yze5Nx2/4pxj6nw9ZqHWXqP0iRgQ=
79+
golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
80+
golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
81+
golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
82+
golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
83+
golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
84+
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
85+
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
86+
golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
87+
golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
88+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa h1:efT73AJZfAAUV7SOip6pWGkwJDzIGiKBZGVzHYa+ve4=
89+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE=
90+
golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
91+
golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
92+
golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
93+
golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
94+
golang.org/x/vuln v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I=
95+
golang.org/x/vuln v1.1.4/go.mod h1:F+45wmU18ym/ca5PLTPLsSzr2KppzswxPP603ldA67s=
96+
google.golang.org/genai v1.54.0 h1:ZQCa70WMTJDI11FdqWCzGvZ5PanpcpfoO6jl/lrSnGU=
97+
google.golang.org/genai v1.54.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk=
98+
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
99+
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
100+
google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=
101+
google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
102+
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
103+
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
104+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
105+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
106+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
107+
honnef.co/go/tools v0.6.1 h1:R094WgE8K4JirYjBaOpz/AvTyUu/3wbmAoskKN/pxTI=
108+
honnef.co/go/tools v0.6.1/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4=

0 commit comments

Comments
 (0)