From e4751a70e6b87e2175fb125f31da84fd2fd5f96f Mon Sep 17 00:00:00 2001 From: Onur Cinar Date: Wed, 30 Sep 2026 12:44:55 -0700 Subject: [PATCH 1/2] toolgate: decide-only endpoint and tool tags Decide-only: Gate.DecideOnly and POST /v1/decide/{tool} rule on a call and record it without forwarding or holding it. The artifact's outcome says the gate did not act, and only toolcall.requested and toolcall.decided are published. For callers that execute tools themselves (a benchmark harness) and for measuring a policy in shadow before it enforces. Operator-only: an agent that can ask what would pass can search the policy for values that slip through. Tool tags: tool_tags labels tools with classes, and a rule can name a tag instead of a tool, so one rule governs every tool carrying it. New rule kind "tool" fires on the action itself (e.g. every destructive tool escalates); it takes no arg and needs a tool or a tag. Validation refuses tags on tools missing from tool_scopes, rules on tags no tool carries, rules setting both tool and tag, and unscoped tool rules. Existing behaviour is unchanged; all existing tests pass. New tests: the twelve calls through /v1/decide (same decisions, nothing forwarded, no hold, chain verifies), the agent refused at /v1/decide, tag scoping, tag validation, and a tool rule by name. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Ptdu2pZMVdE5x6XkwcUDjj --- docs/TOOLGATE.md | 5 +- .../internal/httpapi/decide_test.go | 75 +++++++++++++++ src/aex-toolgate/internal/httpapi/router.go | 84 ++++++++++++---- src/internal/toolgate/gate.go | 24 +++++ src/internal/toolgate/policy.go | 70 +++++++++++++- src/internal/toolgate/tags_test.go | 95 +++++++++++++++++++ 6 files changed, 327 insertions(+), 26 deletions(-) create mode 100644 src/aex-toolgate/internal/httpapi/decide_test.go create mode 100644 src/internal/toolgate/tags_test.go diff --git a/docs/TOOLGATE.md b/docs/TOOLGATE.md index 085eb44..b18d788 100644 --- a/docs/TOOLGATE.md +++ b/docs/TOOLGATE.md @@ -23,7 +23,9 @@ The study behind the component compared three configurations over the same twelv | `["*"]` | passes the gateway; the policy's own grant then applies unchanged | 2. **Values that cannot be checked are refused.** A rule whose argument is absent, is not a number where a number is required, or carries more than one value in one argument (`"a@evil.example,b@corp.example"`) fails closed rather than being skipped. Such a decision reports `cannot verify: ...` rather than the rule's own message, so an approver is not told a bank account changed when the call never mentioned one. -2. **Rules.** In `ModeFull`, argument-value rules are evaluated in policy order and the first that fires decides: `ceiling` (numeric maximum), `allowlist`, `lookup` (the value must match what a table maps another argument to, such as the vendor account on file for this invoice), `sensitive_field` (escalate to a person), `suffix` (email domains), `prefix` (storage destinations). A rule's `effect` is `deny` or `escalate`. +2. **Rules.** In `ModeFull`, argument-value rules are evaluated in policy order and the first that fires decides: `ceiling` (numeric maximum), `allowlist`, `lookup` (the value must match what a table maps another argument to, such as the vendor account on file for this invoice), `sensitive_field` (escalate to a person), `suffix` (email domains), `prefix` (storage destinations), `tool` (the action itself, whatever the arguments). A rule's `effect` is `deny` or `escalate`. + + **Tool tags.** A policy can label tools with classes in `tool_tags` (`{"delete_file": ["destructive"], "payout": ["money"]}`), and a rule can name a `tag` instead of a `tool`, so one rule governs every tool carrying the tag: `{"id": "T1", "tag": "destructive", "kind": "tool", "effect": "escalate"}` holds every destructive action for a person, and `{"id": "T2", "tag": "money", "kind": "ceiling", "arg": "amount", "max": 100}` caps every money tool. A rule sets `tool` or `tag`, not both. Validation refuses a tag on a tool missing from `tool_scopes`, a rule on a tag no tool carries, and a `tool` rule with an `arg` or with neither a tool nor a tag, since each would leave a tool silently ungoverned or a rule firing everywhere. Argument rules scoped by tag keep the fail-closed rule for absent arguments: a tagged tool must supply the argument its tag's rule checks. 3. **Execution.** Allowed calls run through the caller's executor; refused calls do not run; escalated calls are held until `Resolve` records a human decision under the approver's identity. 4. **Artifact.** One record per decision, chained to the previous record for the provider. 5. **Events.** `toolcall.requested`, `toolcall.decided`, then `toolcall.executed`, `toolcall.refused` or `toolcall.escalated`; a resolved hold adds `toolcall.approved` (or `toolcall.refused`). The AEX `events.Publisher` satisfies the gate's `Publisher` interface, so records land in JetStream with the standard envelope. @@ -78,6 +80,7 @@ agent -> aex-gateway -> aex-toolgate -> provider tools | Endpoint | What it does | |---|---| | `POST /v1/tools/{tool}` | body: the argument values as a JSON object. The gate decides; an allowed call is forwarded to `UPSTREAM_URL` + `UPSTREAM_PREFIX` + `/{tool}` and the tool's answer is returned with `X-Toolgate-Decision`, `X-Toolgate-Rule` and `X-Toolgate-Hash`. A refused call answers 403 with the rule and the message; a held call answers 202 with the hold hash. | +| `POST /v1/decide/{tool}` | **operator only.** Same body and identity headers as `/v1/tools/{tool}`. The gate decides and records, but forwards nothing and holds nothing; the artifact's outcome is `decided only: not executed by the gate`, and only `toolcall.requested` and `toolcall.decided` are published. Answers 200 with `decision`, `rule`, `scope`, `approval`, `message`, `outcome`, `hash`, `call_id` (and the `X-Toolgate-*` headers). For callers that execute tools themselves, such as a benchmark harness, or for measuring a policy in shadow before it enforces. Operator-only because a gated agent that can ask what would pass, without consequence, can search the policy for values that slip through. | | `POST /v1/holds/{hash}` | **operator only.** Body `{"approver": "...", "approved": true}`. Settles a held call: runs the tool when approved, appends the human decision to the chain, publishes `toolcall.approved` or `toolcall.refused`. | | `GET /v1/records`, `GET /v1/records/verify` | **operator only.** The provider's chain and its verification. | | `GET /health`, `GET /ready` | probes | diff --git a/src/aex-toolgate/internal/httpapi/decide_test.go b/src/aex-toolgate/internal/httpapi/decide_test.go new file mode 100644 index 0000000..90eb4f7 --- /dev/null +++ b/src/aex-toolgate/internal/httpapi/decide_test.go @@ -0,0 +1,75 @@ +package httpapi + +import ( + "encoding/json" + "net/http" + "testing" + + "github.com/parlakisik/agent-exchange/internal/toolgate" +) + +// The twelve calls through /v1/decide reach the same decisions as through +// /v1/tools, but nothing is forwarded, nothing is held, and every record says +// the gate did not act. +func TestDecideOnlyRulesWithoutExecuting(t *testing.T) { + srv, upstream, calls, executed := setup(t) + defer srv.Close() + defer upstream.Close() + + want := map[string]string{ + "C01": "allow", "C02": "allow", "C03": "allow", "C04": "allow", "C05": "deny", "C06": "deny", + "C07": "escalate", "C08": "allow", "C09": "deny", "C10": "deny", "C11": "deny", "C12": "deny", + } + var heldHash string + for _, c := range calls { + resp, body := post(t, srv.URL+"/v1/decide/"+c.Tool, c.Args, + map[string]string{"Authorization": "Bearer " + testOperatorToken, "X-AEX-Call-ID": c.ID}) + if resp.StatusCode != http.StatusOK { + t.Fatalf("%s: got %d, want 200 whatever the decision", c.ID, resp.StatusCode) + } + if got := body["decision"]; got != want[c.ID] || resp.Header.Get("X-Toolgate-Decision") != want[c.ID] { + t.Errorf("%s: decision %v (header %q), want %s", c.ID, got, resp.Header.Get("X-Toolgate-Decision"), want[c.ID]) + } + if body["outcome"] != toolgate.OutcomeDecideOnly { + t.Errorf("%s: outcome %v, want the decide-only outcome", c.ID, body["outcome"]) + } + if c.ID == "C07" { + heldHash, _ = body["hash"].(string) + } + } + if len(*executed) != 0 { + t.Errorf("decide-only forwarded calls to the tool: %v", *executed) + } + + // The escalated call left no hold behind to settle. + resp, _ := post(t, srv.URL+"/v1/holds/"+heldHash, map[string]any{"approver": "user:x", "approved": true}, operatorHeaders()) + if resp.StatusCode == http.StatusOK { + t.Error("a decide-only escalation must not create a hold") + } + + _, raw := getAs(t, srv.URL+"/v1/records/verify", operatorHeaders()) + var v map[string]any + _ = json.Unmarshal(raw, &v) + if v["ok"] != true || v["records"] != float64(12) { + t.Errorf("chain: %v, want ok with 12 records", v) + } +} + +// Decide-only is an operator endpoint: the gated agent must not be able to ask +// the gate what would pass. +func TestDecideOnlyRefusesTheGatedAgent(t *testing.T) { + srv, upstream, _, _ := setup(t) + defer srv.Close() + defer upstream.Close() + + resp, _ := post(t, srv.URL+"/v1/decide/send_payment", map[string]any{"invoice_id": "INV-1042", "amount": 1.0}, nil) + if resp.StatusCode != http.StatusUnauthorized { + t.Errorf("no credential: got %d, want 401", resp.StatusCode) + } + _, raw := getAs(t, srv.URL+"/v1/records/verify", operatorHeaders()) + var v map[string]any + _ = json.Unmarshal(raw, &v) + if v["records"] != float64(0) { + t.Errorf("a refused decide request must leave no record, got %v", v["records"]) + } +} diff --git a/src/aex-toolgate/internal/httpapi/router.go b/src/aex-toolgate/internal/httpapi/router.go index 90d5f95..0dff5e4 100644 --- a/src/aex-toolgate/internal/httpapi/router.go +++ b/src/aex-toolgate/internal/httpapi/router.go @@ -24,8 +24,13 @@ // Those headers are attribution, not authentication: they are whatever the // caller sent, and none of them widens an authorization decision. // -// The operator endpoints (POST /v1/holds/{hash}, GET /v1/records and -// /v1/records/verify) are outside that model. They belong to the provider's +// POST /v1/decide/{tool} takes the same body and headers as /v1/tools/{tool} +// but only decides and records: nothing is forwarded, nothing is held. It is an +// operator endpoint, because an agent that can ask "would this pass?" without +// consequence can search the policy for values that slip through. +// +// The operator endpoints (POST /v1/decide/{tool}, POST /v1/holds/{hash}, GET +// /v1/records and /v1/records/verify) are outside that model. They belong to the provider's // operator, not to the agent being gated, and require // Authorization: Bearer . With no token configured they are // refused rather than left open. @@ -87,6 +92,7 @@ func New(gate *toolgate.Gate, upstreamURL, upstreamPrefix string, timeout time.D mux.HandleFunc("GET /health", s.health) mux.HandleFunc("GET /ready", s.health) mux.HandleFunc("POST /v1/tools/{tool}", s.authorize) + mux.HandleFunc("POST /v1/decide/{tool}", s.decide) mux.HandleFunc("POST /v1/holds/{hash}", s.resolve) mux.HandleFunc("GET /v1/records", s.records) mux.HandleFunc("GET /v1/records/verify", s.verify) @@ -111,25 +117,9 @@ func (s *Server) authorize(w http.ResponseWriter, r *http.Request) { r.Header.Set("X-Request-ID", newRequestID()) } w.Header().Set("X-Request-ID", r.Header.Get("X-Request-ID")) - var args map[string]any - if r.Body != nil { - b, err := io.ReadAll(io.LimitReader(r.Body, 1<<20)) - if err != nil { - writeError(w, http.StatusBadRequest, "bad_request", "cannot read body") - return - } - if len(bytes.TrimSpace(b)) > 0 { - // UseNumber keeps integers exact. Decoding into float64 rewrites - // anything past 2^53 (an account or invoice number), so the tool - // would receive a different value than the agent sent and the - // artifact would record the rewritten one. - dec := json.NewDecoder(bytes.NewReader(b)) - dec.UseNumber() - if err := dec.Decode(&args); err != nil { - writeError(w, http.StatusBadRequest, "bad_request", "body must be a JSON object of argument values") - return - } - } + args, ok := readArgs(w, r) + if !ok { + return } call := callFromRequest(r, tool, args) @@ -174,6 +164,58 @@ func (s *Server) authorize(w http.ResponseWriter, r *http.Request) { } } +// decide rules on a call and records it without forwarding or holding it. The +// answer is 200 whatever the decision: the request succeeded, and the decision +// is its content (also in the X-Toolgate-* headers, as on /v1/tools). +func (s *Server) decide(w http.ResponseWriter, r *http.Request) { + if !s.requireOperator(w, r) { + return + } + if r.Header.Get("X-Request-ID") == "" { + r.Header.Set("X-Request-ID", newRequestID()) + } + w.Header().Set("X-Request-ID", r.Header.Get("X-Request-ID")) + args, ok := readArgs(w, r) + if !ok { + return + } + call := callFromRequest(r, r.PathValue("tool"), args) + a := s.gate.DecideOnly(r.Context(), call) + w.Header().Set("X-Toolgate-Decision", a.Decision) + w.Header().Set("X-Toolgate-Rule", a.Rule) + w.Header().Set("X-Toolgate-Hash", a.Hash) + writeJSON(w, http.StatusOK, map[string]any{"decision": a.Decision, "rule": a.Rule, "scope": a.Scope, + "approval": a.Approval, "message": s.gate.Decide(call).Message, "outcome": a.Outcome, + "hash": a.Hash, "call_id": a.CallID}) +} + +// readArgs decodes the argument values from the request body, answering 400 +// itself when it cannot. +func readArgs(w http.ResponseWriter, r *http.Request) (map[string]any, bool) { + var args map[string]any + if r.Body == nil { + return args, true + } + b, err := io.ReadAll(io.LimitReader(r.Body, 1<<20)) + if err != nil { + writeError(w, http.StatusBadRequest, "bad_request", "cannot read body") + return nil, false + } + if len(bytes.TrimSpace(b)) > 0 { + // UseNumber keeps integers exact. Decoding into float64 rewrites + // anything past 2^53 (an account or invoice number), so the tool + // would receive a different value than the agent sent and the + // artifact would record the rewritten one. + dec := json.NewDecoder(bytes.NewReader(b)) + dec.UseNumber() + if err := dec.Decode(&args); err != nil { + writeError(w, http.StatusBadRequest, "bad_request", "body must be a JSON object of argument values") + return nil, false + } + } + return args, true +} + // forward sends the allowed call to the upstream tool endpoint. func (s *Server) forward(ctx context.Context, in *http.Request, c toolgate.Call) (upstreamResult, error) { body, _ := json.Marshal(c.Args) diff --git a/src/internal/toolgate/gate.go b/src/internal/toolgate/gate.go index a6bd268..6da5fd7 100644 --- a/src/internal/toolgate/gate.go +++ b/src/internal/toolgate/gate.go @@ -141,6 +141,9 @@ func (g *Gate) Decide(call Call) Decision { return Decision{Outcome: DecisionAllow, Rule: ScopeRuleID, Scope: scope, Approval: ApprovalAutomatic} } for _, r := range g.policy.Rules { + if !g.policy.applies(r, call.Tool) { + continue + } var fired bool var effect, reason string if r.Kind == KindLookup { @@ -214,6 +217,27 @@ func (g *Gate) Authorize(ctx context.Context, call Call, exec Executor) (Artifac return a, execErr } +// OutcomeDecideOnly is the outcome of a call decided by DecideOnly: the gate +// ruled and recorded, and the caller, not the gate, runs or skips the tool. +const OutcomeDecideOnly = "decided only: not executed by the gate" + +// DecideOnly decides the call and records the artifact without executing it +// and without holding it. It is for callers that execute tools themselves and +// ask the gate only for its ruling: a benchmark harness, or a policy measured +// in shadow before it enforces. The artifact's outcome says the gate did not +// act, so the record never reads as an enforced refusal or execution; an +// escalated call is recorded as escalated, but no hold exists to settle. +// Only toolcall.requested and toolcall.decided are published. +func (g *Gate) DecideOnly(ctx context.Context, call Call) Artifact { + d := g.Decide(call) + a := g.newArtifact(call, d) + a.Outcome = OutcomeDecideOnly + a = g.commit(a) + g.publish(ctx, EventRequested, a) + g.publish(ctx, EventDecided, a) + return a +} + // Resolve settles a held call. approver is the identity of the person who // decided; approved true runs the executor. A second artifact is appended so // the chain carries both the hold and the human decision. diff --git a/src/internal/toolgate/policy.go b/src/internal/toolgate/policy.go index bd37c44..ed1453f 100644 --- a/src/internal/toolgate/policy.go +++ b/src/internal/toolgate/policy.go @@ -24,6 +24,11 @@ const ( // KindSuffix denies when the string argument Arg does not end with one of // Allowed. Used for email domains. KindSuffix = "suffix" + // KindTool fires whenever the rule applies, whatever the arguments: the + // action itself is what the rule governs ("every destructive tool needs a + // person"). It takes no Arg and must be limited by Tool or Tag, so it can + // never fire on every tool by accident. + KindTool = "tool" // KindPrefix denies when the string argument Arg does not start with one of // Allowed. Used for storage destinations. KindPrefix = "prefix" @@ -35,11 +40,14 @@ const ( EffectEscalate = "escalate" ) -// Rule is one argument-value rule. Tool restricts the rule to one tool; an -// empty Tool applies it to every tool that carries the argument. +// Rule is one argument-value rule. Tool restricts the rule to one tool and Tag +// to the tools the policy's ToolTags label with that tag; a rule sets at most +// one of them. An empty Tool and Tag applies it to every tool that carries the +// argument. type Rule struct { ID string `json:"id"` Tool string `json:"tool,omitempty"` + Tag string `json:"tag,omitempty"` Kind string `json:"kind"` Arg string `json:"arg"` Max float64 `json:"max,omitempty"` @@ -59,6 +67,27 @@ type Policy struct { ToolScopes map[string]string `json:"tool_scopes"` Rules []Rule `json:"rules"` Lookups map[string]map[string]string `json:"lookups,omitempty"` + // ToolTags labels tools with classes ("destructive", "payment", ...) so + // one rule can govern many tools. Every tagged tool must be in ToolScopes. + ToolTags map[string][]string `json:"tool_tags,omitempty"` +} + +// hasTag reports whether the policy labels tool with tag. +func (p Policy) hasTag(tool, tag string) bool { + for _, t := range p.ToolTags[tool] { + if t == tag { + return true + } + } + return false +} + +// applies reports whether rule r governs calls to tool. +func (p Policy) applies(r Rule, tool string) bool { + if r.Tool != "" && r.Tool != tool { + return false + } + return r.Tag == "" || p.hasTag(tool, r.Tag) } // ScopeRuleID is the rule id recorded when the scope check decides a call. @@ -85,16 +114,46 @@ func (p Policy) Validate() error { if len(p.ToolScopes) == 0 { return fmt.Errorf("toolgate: policy maps no tools to scopes") } + tags := map[string]bool{} + for tool, ts := range p.ToolTags { + // A tag on a tool the policy does not know is a typo that would + // silently leave the real tool ungoverned. + if _, ok := p.ToolScopes[tool]; !ok { + return fmt.Errorf("toolgate: tool_tags names %q, which is not in tool_scopes", tool) + } + for _, t := range ts { + tags[t] = true + } + } seen := map[string]bool{} for _, r := range p.Rules { - if r.ID == "" || r.Arg == "" { - return fmt.Errorf("toolgate: rule %q needs an id and an arg", r.ID) + if r.ID == "" { + return fmt.Errorf("toolgate: rule needs an id") } if seen[r.ID] { return fmt.Errorf("toolgate: duplicate rule id %q", r.ID) } seen[r.ID] = true + if r.Tool != "" && r.Tag != "" { + return fmt.Errorf("toolgate: rule %q sets both tool and tag; use one", r.ID) + } + // Same reasoning as for tool_tags: a rule on a tag no tool carries + // governs nothing, and nobody would notice. + if r.Tag != "" && !tags[r.Tag] { + return fmt.Errorf("toolgate: rule %q uses tag %q, which no tool carries", r.ID, r.Tag) + } + if r.Kind == KindTool { + if r.Arg != "" { + return fmt.Errorf("toolgate: rule %q of kind tool takes no arg", r.ID) + } + if r.Tool == "" && r.Tag == "" { + return fmt.Errorf("toolgate: rule %q of kind tool needs a tool or a tag", r.ID) + } + } else if r.Arg == "" { + return fmt.Errorf("toolgate: rule %q needs an arg", r.ID) + } switch r.Kind { + case KindTool: case KindCeiling: case KindAllowlist, KindSuffix, KindPrefix: if len(r.Allowed) == 0 { @@ -209,6 +268,9 @@ func (r Rule) evaluate(call Call) (fired bool, effect, reason string) { return false, "", "" } effect = effectOrDeny(r) + if r.Kind == KindTool { + return true, effect, "" + } v, ok := call.Args[r.Arg] if !ok { // The rule constrains an argument the call did not supply, so the diff --git a/src/internal/toolgate/tags_test.go b/src/internal/toolgate/tags_test.go new file mode 100644 index 0000000..a56c22d --- /dev/null +++ b/src/internal/toolgate/tags_test.go @@ -0,0 +1,95 @@ +package toolgate + +import ( + "strings" + "testing" +) + +func taggedPolicy() Policy { + return Policy{ + Provider: "p", + GrantedScopes: []string{"files", "pay"}, + ToolScopes: map[string]string{"read_file": "files", "delete_file": "files", "wipe_disk": "files", "refund": "pay", "payout": "pay"}, + ToolTags: map[string][]string{ + "delete_file": {"destructive"}, "wipe_disk": {"destructive"}, + "refund": {"money"}, "payout": {"money"}, + }, + Rules: []Rule{ + {ID: "T1-destructive", Tag: "destructive", Kind: KindTool, Effect: EffectEscalate, Message: "destructive actions need a person"}, + {ID: "T2-money-ceiling", Tag: "money", Kind: KindCeiling, Arg: "amount", Max: 100, Message: "over the per-call limit"}, + }, + } +} + +// One rule governs every tool carrying its tag, and no other tool. +func TestTagRulesGovernTaggedToolsOnly(t *testing.T) { + g, err := New(taggedPolicy()) + if err != nil { + t.Fatal(err) + } + cases := []struct { + tool string + args map[string]any + want string + rule string + }{ + {"read_file", map[string]any{"path": "/tmp/x"}, DecisionAllow, ScopeRuleID}, + {"delete_file", map[string]any{"path": "/tmp/x"}, DecisionEscalate, "T1-destructive"}, + {"wipe_disk", nil, DecisionEscalate, "T1-destructive"}, + {"refund", map[string]any{"amount": 50}, DecisionAllow, ScopeRuleID}, + {"payout", map[string]any{"amount": 500}, DecisionDeny, "T2-money-ceiling"}, + // A tagged tool must still carry the argument its tag's rule checks. + {"refund", map[string]any{}, DecisionDeny, "T2-money-ceiling"}, + } + for _, c := range cases { + d := g.Decide(Call{Tool: c.tool, Args: c.args}) + if d.Outcome != c.want || d.Rule != c.rule { + t.Errorf("%s %v: got %s/%s, want %s/%s", c.tool, c.args, d.Outcome, d.Rule, c.want, c.rule) + } + } +} + +// Tags and tool rules fail validation on the mistakes that would otherwise +// leave a tool silently ungoverned or a rule firing everywhere. +func TestTagPolicyValidation(t *testing.T) { + bad := []struct { + name string + edit func(*Policy) + error string + }{ + {"tag on unknown tool", func(p *Policy) { p.ToolTags["delet_file"] = []string{"destructive"} }, "not in tool_scopes"}, + {"rule on unused tag", func(p *Policy) { p.Rules[0].Tag = "destrutive" }, "no tool carries"}, + {"tool and tag", func(p *Policy) { p.Rules[0].Tool = "delete_file" }, "both tool and tag"}, + {"tool rule with arg", func(p *Policy) { p.Rules[0].Arg = "path" }, "takes no arg"}, + {"tool rule unscoped", func(p *Policy) { p.Rules[0].Tag = "" }, "needs a tool or a tag"}, + {"arg rule without arg", func(p *Policy) { p.Rules[1].Arg = "" }, "needs an arg"}, + } + for _, b := range bad { + p := taggedPolicy() + b.edit(&p) + err := p.Validate() + if err == nil || !strings.Contains(err.Error(), b.error) { + t.Errorf("%s: got %v, want an error containing %q", b.name, err, b.error) + } + } + if err := taggedPolicy().Validate(); err != nil { + t.Errorf("valid tagged policy rejected: %v", err) + } +} + +// A tool rule scoped to one tool works without tags at all. +func TestToolRuleByName(t *testing.T) { + p := taggedPolicy() + p.ToolTags = nil + p.Rules = []Rule{{ID: "T3", Tool: "wipe_disk", Kind: KindTool}} + g, err := New(p) + if err != nil { + t.Fatal(err) + } + if d := g.Decide(Call{Tool: "wipe_disk"}); d.Outcome != DecisionDeny || d.Rule != "T3" { + t.Errorf("wipe_disk: got %s/%s, want deny/T3", d.Outcome, d.Rule) + } + if d := g.Decide(Call{Tool: "delete_file"}); d.Outcome != DecisionAllow { + t.Errorf("delete_file: got %s, want allow", d.Outcome) + } +} From ccbf7c6e1df5d7cecd75906923ea9e65b6df5efa Mon Sep 17 00:00:00 2001 From: Onur Cinar Date: Wed, 30 Sep 2026 12:57:15 -0700 Subject: [PATCH 2/2] deps: bump google.golang.org/grpc to v1.83.2 (CVE-2026-84445) CVE-2026-84445 (HIGH, denial of service via malformed RPC requests) was published for grpc v1.83.1 after main's last security scan, so Trivy now fails for every service that links it. v1.83.2 has the fix. It is an indirect dependency in all fourteen modules that require it; bumping it raises golang.org/x/net to v0.58.0 and, in five modules, golang.org/x/text to v0.41.0 and golang.org/x/sys to v0.47.0, the minimums grpc v1.83.2 requires. Every module builds, vets and passes its tests. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Ptdu2pZMVdE5x6XkwcUDjj --- src/aex-bid-evaluator/go.mod | 4 ++-- src/aex-bid-evaluator/go.sum | 4 ++++ src/aex-bid-gateway/go.mod | 4 ++-- src/aex-bid-gateway/go.sum | 4 ++++ src/aex-certauth/go.mod | 4 ++-- src/aex-certauth/go.sum | 4 ++++ src/aex-contract-engine/go.mod | 4 ++-- src/aex-contract-engine/go.sum | 4 ++++ src/aex-credentials-provider/go.mod | 8 ++++---- src/aex-credentials-provider/go.sum | 8 ++++++++ src/aex-gateway/go.mod | 8 ++++---- src/aex-gateway/go.sum | 8 ++++++++ src/aex-identity/go.mod | 4 ++-- src/aex-identity/go.sum | 4 ++++ src/aex-provider-registry/go.mod | 4 ++-- src/aex-provider-registry/go.sum | 4 ++++ src/aex-settlement/go.mod | 4 ++-- src/aex-settlement/go.sum | 4 ++++ src/aex-telemetry/go.mod | 8 ++++---- src/aex-telemetry/go.sum | 8 ++++++++ src/aex-token-bank/go.mod | 8 ++++---- src/aex-token-bank/go.sum | 8 ++++++++ src/aex-trust-broker/go.mod | 4 ++-- src/aex-trust-broker/go.sum | 4 ++++ src/aex-work-publisher/go.mod | 4 ++-- src/aex-work-publisher/go.sum | 4 ++++ src/internal/telemetry/go.mod | 8 ++++---- src/internal/telemetry/go.sum | 8 ++++++++ 28 files changed, 114 insertions(+), 38 deletions(-) diff --git a/src/aex-bid-evaluator/go.mod b/src/aex-bid-evaluator/go.mod index d5b5774..019fc8a 100644 --- a/src/aex-bid-evaluator/go.mod +++ b/src/aex-bid-evaluator/go.mod @@ -45,12 +45,12 @@ require ( go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect golang.org/x/crypto v0.55.0 // indirect - golang.org/x/net v0.57.0 // indirect + golang.org/x/net v0.58.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-bid-evaluator/go.sum b/src/aex-bid-evaluator/go.sum index 18c975e..2457c4f 100644 --- a/src/aex-bid-evaluator/go.sum +++ b/src/aex-bid-evaluator/go.sum @@ -87,6 +87,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= 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.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= @@ -118,6 +120,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-bid-gateway/go.mod b/src/aex-bid-gateway/go.mod index 68402e9..d652665 100644 --- a/src/aex-bid-gateway/go.mod +++ b/src/aex-bid-gateway/go.mod @@ -45,12 +45,12 @@ require ( go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect golang.org/x/crypto v0.55.0 // indirect - golang.org/x/net v0.57.0 // indirect + golang.org/x/net v0.58.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-bid-gateway/go.sum b/src/aex-bid-gateway/go.sum index 18c975e..2457c4f 100644 --- a/src/aex-bid-gateway/go.sum +++ b/src/aex-bid-gateway/go.sum @@ -87,6 +87,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= 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.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= @@ -118,6 +120,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-certauth/go.mod b/src/aex-certauth/go.mod index f7a41f2..b93acae 100644 --- a/src/aex-certauth/go.mod +++ b/src/aex-certauth/go.mod @@ -54,12 +54,12 @@ require ( go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect golang.org/x/crypto v0.55.0 // indirect - golang.org/x/net v0.57.0 // indirect + golang.org/x/net v0.58.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-certauth/go.sum b/src/aex-certauth/go.sum index e03a8ba..549206b 100644 --- a/src/aex-certauth/go.sum +++ b/src/aex-certauth/go.sum @@ -93,6 +93,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= 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.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= @@ -124,6 +126,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-contract-engine/go.mod b/src/aex-contract-engine/go.mod index 135951b..e453549 100644 --- a/src/aex-contract-engine/go.mod +++ b/src/aex-contract-engine/go.mod @@ -45,12 +45,12 @@ require ( go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect golang.org/x/crypto v0.55.0 // indirect - golang.org/x/net v0.57.0 // indirect + golang.org/x/net v0.58.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-contract-engine/go.sum b/src/aex-contract-engine/go.sum index 18c975e..2457c4f 100644 --- a/src/aex-contract-engine/go.sum +++ b/src/aex-contract-engine/go.sum @@ -87,6 +87,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= 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.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= @@ -118,6 +120,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-credentials-provider/go.mod b/src/aex-credentials-provider/go.mod index ed7976a..fd1cdff 100644 --- a/src/aex-credentials-provider/go.mod +++ b/src/aex-credentials-provider/go.mod @@ -35,11 +35,11 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect - golang.org/x/net v0.56.0 // indirect - golang.org/x/sys v0.46.0 // indirect - golang.org/x/text v0.39.0 // indirect + golang.org/x/net v0.58.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-credentials-provider/go.sum b/src/aex-credentials-provider/go.sum index c31227b..26b96fb 100644 --- a/src/aex-credentials-provider/go.sum +++ b/src/aex-credentials-provider/go.sum @@ -57,10 +57,16 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus= golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM= +golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8= @@ -69,6 +75,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-gateway/go.mod b/src/aex-gateway/go.mod index 02e0640..d9d0a6c 100644 --- a/src/aex-gateway/go.mod +++ b/src/aex-gateway/go.mod @@ -36,11 +36,11 @@ require ( go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/net v0.56.0 // indirect - golang.org/x/sys v0.46.0 // indirect - golang.org/x/text v0.39.0 // indirect + golang.org/x/net v0.58.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-gateway/go.sum b/src/aex-gateway/go.sum index ffb4cd9..7fff254 100644 --- a/src/aex-gateway/go.sum +++ b/src/aex-gateway/go.sum @@ -73,10 +73,16 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus= golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM= +golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8= @@ -85,6 +91,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-identity/go.mod b/src/aex-identity/go.mod index 2d73443..61db72f 100644 --- a/src/aex-identity/go.mod +++ b/src/aex-identity/go.mod @@ -41,12 +41,12 @@ require ( go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect golang.org/x/crypto v0.55.0 // indirect - golang.org/x/net v0.57.0 // indirect + golang.org/x/net v0.58.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-identity/go.sum b/src/aex-identity/go.sum index 647e143..08e93f5 100644 --- a/src/aex-identity/go.sum +++ b/src/aex-identity/go.sum @@ -82,6 +82,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= 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.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= @@ -113,6 +115,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-provider-registry/go.mod b/src/aex-provider-registry/go.mod index 16797b3..7ed6d8e 100644 --- a/src/aex-provider-registry/go.mod +++ b/src/aex-provider-registry/go.mod @@ -41,12 +41,12 @@ require ( go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect golang.org/x/crypto v0.55.0 // indirect - golang.org/x/net v0.57.0 // indirect + golang.org/x/net v0.58.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-provider-registry/go.sum b/src/aex-provider-registry/go.sum index 647e143..08e93f5 100644 --- a/src/aex-provider-registry/go.sum +++ b/src/aex-provider-registry/go.sum @@ -82,6 +82,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= 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.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= @@ -113,6 +115,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-settlement/go.mod b/src/aex-settlement/go.mod index 0bca340..5487ebd 100644 --- a/src/aex-settlement/go.mod +++ b/src/aex-settlement/go.mod @@ -54,12 +54,12 @@ require ( go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect golang.org/x/crypto v0.55.0 // indirect - golang.org/x/net v0.57.0 // indirect + golang.org/x/net v0.58.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-settlement/go.sum b/src/aex-settlement/go.sum index 1139d39..3b0123f 100644 --- a/src/aex-settlement/go.sum +++ b/src/aex-settlement/go.sum @@ -90,6 +90,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= 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.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= @@ -121,6 +123,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-telemetry/go.mod b/src/aex-telemetry/go.mod index dc7c4d6..9222e2b 100644 --- a/src/aex-telemetry/go.mod +++ b/src/aex-telemetry/go.mod @@ -28,12 +28,12 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect - golang.org/x/net v0.56.0 // indirect - golang.org/x/sys v0.46.0 // indirect - golang.org/x/text v0.39.0 // indirect + golang.org/x/net v0.58.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-telemetry/go.sum b/src/aex-telemetry/go.sum index c31227b..26b96fb 100644 --- a/src/aex-telemetry/go.sum +++ b/src/aex-telemetry/go.sum @@ -57,10 +57,16 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus= golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM= +golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8= @@ -69,6 +75,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-token-bank/go.mod b/src/aex-token-bank/go.mod index 6e35fb7..0db070d 100644 --- a/src/aex-token-bank/go.mod +++ b/src/aex-token-bank/go.mod @@ -30,12 +30,12 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect - golang.org/x/net v0.56.0 // indirect - golang.org/x/sys v0.46.0 // indirect - golang.org/x/text v0.39.0 // indirect + golang.org/x/net v0.58.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-token-bank/go.sum b/src/aex-token-bank/go.sum index c31227b..26b96fb 100644 --- a/src/aex-token-bank/go.sum +++ b/src/aex-token-bank/go.sum @@ -57,10 +57,16 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus= golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM= +golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8= @@ -69,6 +75,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-trust-broker/go.mod b/src/aex-trust-broker/go.mod index 6ceacc3..6562e09 100644 --- a/src/aex-trust-broker/go.mod +++ b/src/aex-trust-broker/go.mod @@ -41,12 +41,12 @@ require ( go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect golang.org/x/crypto v0.55.0 // indirect - golang.org/x/net v0.57.0 // indirect + golang.org/x/net v0.58.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-trust-broker/go.sum b/src/aex-trust-broker/go.sum index 647e143..08e93f5 100644 --- a/src/aex-trust-broker/go.sum +++ b/src/aex-trust-broker/go.sum @@ -82,6 +82,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= 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.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= @@ -113,6 +115,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/aex-work-publisher/go.mod b/src/aex-work-publisher/go.mod index c60894e..6b32f4a 100644 --- a/src/aex-work-publisher/go.mod +++ b/src/aex-work-publisher/go.mod @@ -66,7 +66,7 @@ require ( go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect golang.org/x/crypto v0.55.0 // indirect - golang.org/x/net v0.57.0 // indirect + golang.org/x/net v0.58.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect @@ -75,6 +75,6 @@ require ( google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/aex-work-publisher/go.sum b/src/aex-work-publisher/go.sum index f154bb0..253f3bc 100644 --- a/src/aex-work-publisher/go.sum +++ b/src/aex-work-publisher/go.sum @@ -126,6 +126,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -165,6 +167,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/src/internal/telemetry/go.mod b/src/internal/telemetry/go.mod index 7735671..9a0dc1b 100644 --- a/src/internal/telemetry/go.mod +++ b/src/internal/telemetry/go.mod @@ -29,11 +29,11 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect go.opentelemetry.io/otel/metric v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect - golang.org/x/net v0.56.0 // indirect - golang.org/x/sys v0.46.0 // indirect - golang.org/x/text v0.39.0 // indirect + golang.org/x/net v0.58.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/text v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.83.1 // indirect + google.golang.org/grpc v1.83.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/src/internal/telemetry/go.sum b/src/internal/telemetry/go.sum index c31227b..26b96fb 100644 --- a/src/internal/telemetry/go.sum +++ b/src/internal/telemetry/go.sum @@ -57,10 +57,16 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= +golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= +golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus= golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM= +golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8= @@ -69,6 +75,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.83.1 h1:HIO0+BEtBP6soyqvqC8sNUjZ7bTs+0hFQuFF+RAy++Y= google.golang.org/grpc v1.83.1/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ= +google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU= +google.golang.org/grpc v1.83.2/go.mod h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=