mirror of
https://github.com/open-policy-agent/opa.git
synced 2026-08-12 19:32:48 -06:00
0911080ea6
Bumps the dependencies group with 8 updates in the / directory: | Package | From | To | | --- | --- | --- | | [github.com/fsnotify/fsnotify](https://github.com/fsnotify/fsnotify) | `1.9.0` | `1.10.1` | | [github.com/huandu/go-sqlbuilder](https://github.com/huandu/go-sqlbuilder) | `1.40.2` | `1.41.0` | | [github.com/lestrrat-go/jwx/v3](https://github.com/lestrrat-go/jwx) | `3.1.0` | `3.1.1` | | [github.com/olekukonko/tablewriter](https://github.com/olekukonko/tablewriter) | `1.1.0` | `1.1.4` | | [github.com/vektah/gqlparser/v2](https://github.com/vektah/gqlparser) | `2.5.32` | `2.5.33` | | [golang.org/x/net](https://github.com/golang/net) | `0.53.0` | `0.54.0` | | [google.golang.org/grpc](https://github.com/grpc/grpc-go) | `1.80.0` | `1.81.0` | | gopkg.in/ini.v1 | `1.67.1` | `1.67.2` | Bumps the dependencies group with 11 updates in the /e2e directory: | Package | From | To | | --- | --- | --- | | [github.com/fsnotify/fsnotify](https://github.com/fsnotify/fsnotify) | `1.9.0` | `1.10.1` | | [github.com/huandu/go-sqlbuilder](https://github.com/huandu/go-sqlbuilder) | `1.40.2` | `1.41.0` | | [github.com/lestrrat-go/jwx/v3](https://github.com/lestrrat-go/jwx) | `3.1.0` | `3.1.1` | | [github.com/olekukonko/tablewriter](https://github.com/olekukonko/tablewriter) | `1.1.0` | `1.1.4` | | [github.com/vektah/gqlparser/v2](https://github.com/vektah/gqlparser) | `2.5.32` | `2.5.33` | | [golang.org/x/net](https://github.com/golang/net) | `0.53.0` | `0.54.0` | | [google.golang.org/grpc](https://github.com/grpc/grpc-go) | `1.80.0` | `1.81.0` | | gopkg.in/ini.v1 | `1.67.1` | `1.67.2` | | [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql) | `1.9.3` | `1.10.0` | | [github.com/microsoft/go-mssqldb](https://github.com/microsoft/go-mssqldb) | `1.9.8` | `1.10.0` | | [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | `1.49.1` | `1.50.1` | Updates `github.com/fsnotify/fsnotify` from 1.9.0 to 1.10.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/fsnotify/fsnotify/releases">github.com/fsnotify/fsnotify's releases</a>.</em></p> <blockquote> <h2>v1.10.1</h2> <h3>Changes and fixes</h3> <ul> <li> <p>inotify: don't remove sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/754">#754</a>)</p> </li> <li> <p>inotify, windows: don't rename sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/755">#755</a>)</p> </li> </ul> <p><a href="https://redirect.github.com/fsnotify/fsnotify/issues/754">#754</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/754">fsnotify/fsnotify#754</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/755">#755</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/755">fsnotify/fsnotify#755</a></p> <h2>v1.10.0</h2> <p>This version of fsnotify needs Go 1.23.</p> <h3>Changes and fixes</h3> <ul> <li> <p>inotify: improve initialization error message (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/731">#731</a>)</p> </li> <li> <p>inotify: send Rename event if recursive watch is renamed (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/696">#696</a>)</p> </li> <li> <p>inotify: avoid copying event buffers when reading names (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/741">#741</a>)</p> </li> <li> <p>kqueue: skip dangling symlinks (ENOENT) in watchDirectoryFiles, so a bad entry no longer aborts Watcher.Add for the whole directory (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/748">#748</a>)</p> </li> <li> <p>kqueue: drop watches directly in Close() to fix a file descriptor leak when recycling watchers (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/740">#740</a>)</p> </li> <li> <p>windows: fix nil pointer dereference in remWatch (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/736">#736</a>)</p> </li> <li> <p>windows: lock watch field updates against concurrent WatchList to fix a race introduced in v1.9.0 (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/709">#709</a>, <a href="https://redirect.github.com/fsnotify/fsnotify/issues/749">#749</a>)</p> </li> </ul> <p><a href="https://redirect.github.com/fsnotify/fsnotify/issues/696">#696</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/696">fsnotify/fsnotify#696</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/709">#709</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/709">fsnotify/fsnotify#709</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/731">#731</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/731">fsnotify/fsnotify#731</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/736">#736</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/736">fsnotify/fsnotify#736</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/740">#740</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/740">fsnotify/fsnotify#740</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/741">#741</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/741">fsnotify/fsnotify#741</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/748">#748</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/748">fsnotify/fsnotify#748</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/749">#749</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/749">fsnotify/fsnotify#749</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/fsnotify/fsnotify/blob/main/CHANGELOG.md">github.com/fsnotify/fsnotify's changelog</a>.</em></p> <blockquote> <h2>1.10.1 2026-05-04</h2> <h3>Changes and fixes</h3> <ul> <li> <p>inotify: don't remove sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/754">#754</a>)</p> </li> <li> <p>inotify, windows: don't rename sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/755">#755</a>)</p> </li> </ul> <p><a href="https://redirect.github.com/fsnotify/fsnotify/issues/754">#754</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/754">fsnotify/fsnotify#754</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/755">#755</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/755">fsnotify/fsnotify#755</a></p> <h2>1.10.0 2026-04-30</h2> <p>This version of fsnotify needs Go 1.23.</p> <h3>Changes and fixes</h3> <ul> <li> <p>inotify: improve initialization error message (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/731">#731</a>)</p> </li> <li> <p>inotify: send Rename event if recursive watch is renamed (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/696">#696</a>)</p> </li> <li> <p>inotify: avoid copying event buffers when reading names (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/741">#741</a>)</p> </li> <li> <p>kqueue: skip dangling symlinks (ENOENT) in watchDirectoryFiles, so a bad entry no longer aborts Watcher.Add for the whole directory (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/748">#748</a>)</p> </li> <li> <p>kqueue: drop watches directly in Close() to fix a file descriptor leak when recycling watchers (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/740">#740</a>)</p> </li> <li> <p>windows: fix nil pointer dereference in remWatch (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/736">#736</a>)</p> </li> <li> <p>windows: lock watch field updates against concurrent WatchList to fix a race introduced in v1.9.0 (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/709">#709</a>, <a href="https://redirect.github.com/fsnotify/fsnotify/issues/749">#749</a>)</p> </li> </ul> <p><a href="https://redirect.github.com/fsnotify/fsnotify/issues/696">#696</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/696">fsnotify/fsnotify#696</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/709">#709</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/709">fsnotify/fsnotify#709</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/731">#731</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/731">fsnotify/fsnotify#731</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/736">#736</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/736">fsnotify/fsnotify#736</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/740">#740</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/740">fsnotify/fsnotify#740</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/741">#741</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/741">fsnotify/fsnotify#741</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/748">#748</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/748">fsnotify/fsnotify#748</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/749">#749</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/749">fsnotify/fsnotify#749</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/fsnotify/fsnotify/commit/76b01a6e8f502187fecedea8b025e79e5a86085c"><code>76b01a6</code></a> Release 1.10.1</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/fec150b807510e54e5b25def4b6e5fb001b4898c"><code>fec150b</code></a> Update changelog</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/162b4216ab8f92ecd26425530bee198972c9b3cb"><code>162b421</code></a> inotify, windows: don't rename sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/755">#755</a>)</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/224257f23b2f3a96509b316c5cead71dd4a9099a"><code>224257f</code></a> inotify: don't remove sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/754">#754</a>)</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/e0c956c0ccaf51562fee30ef5c055c74e6ae2104"><code>e0c956c</code></a> windows: document directory Write events and stabilize tests (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/745">#745</a>)</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/8d01d7b9cbe0199e4a1e60fbd965fb05dbb42123"><code>8d01d7b</code></a> Release 1.10.0</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/602284e4a8cadd488d7a5fa07c48462dfac25108"><code>602284e</code></a> Update changelog</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/7f03e59f9659552d8a084e03024cb9b983748ed7"><code>7f03e59</code></a> kqueue: skip ENOENT entries in watchDirectoryFiles (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/748">#748</a>)</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/dab9dde2fc9ba4d0c1076318f81cabcc8fdb2ec9"><code>dab9dde</code></a> windows: lock watch field updates against concurrent WatchList (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/709">#709</a>) (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/749">#749</a>)</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/eadf267ce152b5e62d48cc2c13bb08bd4062b6c7"><code>eadf267</code></a> kqueue: drop watches directly in Close() instead of going through remove() (#...</li> <li>Additional commits viewable in <a href="https://github.com/fsnotify/fsnotify/compare/v1.9.0...v1.10.1">compare view</a></li> </ul> </details> <br /> Updates `github.com/huandu/go-sqlbuilder` from 1.40.2 to 1.41.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/huandu/go-sqlbuilder/releases">github.com/huandu/go-sqlbuilder's releases</a>.</em></p> <blockquote> <h2>v1.41.0</h2> <ul> <li><code>[NEW]</code> Add an option <code>NoExpand</code> to change default field "expand" behavior for backward compatibility. See <a href="https://redirect.github.com/huandu/go-sqlbuilder/issues/237">#237</a> for details.</li> </ul> <p>NOTE: Starting from v1.40.0, the <code>Struct</code> utility type defaults to expanding non-primitive struct fields. This change caused unexpected behavior for some users. To address this without reverting the features introduced in v1.40.0, we have introduced a <code>NoExpand </code>configuration. When set to true, all fields will default to no expansion (preserving legacy behavior). You can still opt-in to expansion for specific fields by using the <code>fieldopt:"expand"</code> tag.</p> <p><strong>Full Changelog</strong>: <a href="https://github.com/huandu/go-sqlbuilder/compare/v1.40.0...v1.41.0">https://github.com/huandu/go-sqlbuilder/compare/v1.40.0...v1.41.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/huandu/go-sqlbuilder/commit/44837218602c8f96eac9f27411d5b93a20dc979d"><code>4483721</code></a> fix <a href="https://redirect.github.com/huandu/go-sqlbuilder/issues/237">#237</a>: add option <code>NoExpand</code> to control default field "expand" behavior</li> <li>See full diff in <a href="https://github.com/huandu/go-sqlbuilder/compare/v1.40.2...v1.41.0">compare view</a></li> </ul> </details> <br /> Updates `github.com/lestrrat-go/jwx/v3` from 3.1.0 to 3.1.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/lestrrat-go/jwx/releases">github.com/lestrrat-go/jwx/v3's releases</a>.</em></p> <blockquote> <h2>v3.1.1</h2> <p>For more detailed release notes, see <a href="https://github.com/lestrrat-go/jwx/blob/v3.1.1/Changes">Changes</a>.</p> <h2>What's Changed</h2> <ul> <li>build(deps): bump pozil/auto-assign-issue from 2.2.0 to 2.2.1 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2045">lestrrat-go/jwx#2045</a></li> <li>guard ecdsa coordinates against oversized big.Int by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2050">lestrrat-go/jwx#2050</a></li> <li>reject jwe with conflicting alg in protected vs per-recipient by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2052">lestrrat-go/jwx#2052</a></li> <li>fix AddressClaim.MarshalJSON for non-printable bytes by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2056">lestrrat-go/jwx#2056</a></li> <li>jwt: only call ParseForm when WithFormKey is supplied by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2058">lestrrat-go/jwx#2058</a></li> <li>jws: jkuProvider rejects fetched keys marked use=enc by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2060">lestrrat-go/jwx#2060</a></li> <li>jwa: unify SignatureAlgorithm/KeyEncryption/ContentEncryption into one registry by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2066">lestrrat-go/jwx#2066</a></li> <li>build(deps): bump pozil/auto-assign-issue from f245a9119ba5cc2fed4aa7b8268d576d40acddf0 to 7bf9d82c77d45976224660b873fc83e60576c5aa by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2065">lestrrat-go/jwx#2065</a></li> <li>cmd/jwx: warn on private-key-to-tty + reject keysize<=0 for oct by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2071">lestrrat-go/jwx#2071</a></li> <li>jws: refuse "b64" header in VerifyCompactFast by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2081">lestrrat-go/jwx#2081</a></li> <li>jws: VerifyCompactFast refusals match jws.VerifyError() class by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2083">lestrrat-go/jwx#2083</a></li> <li>jws: name loose keySet options in fan-out verify error by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2085">lestrrat-go/jwx#2085</a></li> <li>jws: honor RFC 7797 b64=false in Message.MarshalJSON by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2087">lestrrat-go/jwx#2087</a></li> <li>jws: reject literal-JSON "protected" in general-form JWS by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2089">lestrrat-go/jwx#2089</a></li> <li>jwt: ParseRequest: don't skip form body on chunked transfer by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2091">lestrrat-go/jwx#2091</a></li> <li>jwt: pedantic mode enforces cty=JWT nested-envelope shape by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2094">lestrrat-go/jwx#2094</a></li> <li>jwt: defensively reject missing claims in MaxDeltaIs / MinDeltaIs by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2099">lestrrat-go/jwx#2099</a></li> <li>jwt: ParseInsecure: parse loop-local payload, not original input by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2097">lestrrat-go/jwx#2097</a></li> <li>jws: Verify rejects b64=false without "b64" listed in "crit" by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2102">lestrrat-go/jwx#2102</a></li> <li>jws: Sign auto-declares "b64" in "crit" when emitting b64=false by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2104">lestrrat-go/jwx#2104</a></li> <li>jws: declare "b64" as typed bool header field by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2106">lestrrat-go/jwx#2106</a></li> <li>jws: reject general-form JWS with top-level "header" sibling of "signatures" by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2108">lestrrat-go/jwx#2108</a></li> <li>jws: typed sentinel for AlgorithmsForKey unclassifiable-key failures by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2110">lestrrat-go/jwx#2110</a></li> <li>jws: VerifyMessage observes ctx cancellation between loop iterations by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2112">lestrrat-go/jwx#2112</a></li> <li>jws: cleanup follow-ups from recent review (low-severity batch) by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2114">lestrrat-go/jwx#2114</a></li> <li>jwe: DecryptMessage observes ctx cancellation between loop iterations by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2117">lestrrat-go/jwx#2117</a></li> <li>jwe: parse and bound-check PBES2 p2c in int64 space; name the violated bound by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2119">lestrrat-go/jwx#2119</a></li> <li>jwe: WithKey validates alg-vs-key shape at option-time by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2121">lestrrat-go/jwx#2121</a></li> <li>jwe: compression cap error names "decompressed" payload, the option, and the size by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2123">lestrrat-go/jwx#2123</a></li> <li>jwe: bound joined-error count and drop redundant outer Decrypt prefix by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2125">lestrrat-go/jwx#2125</a></li> <li>jwe: keySetProvider surfaces per-key errors via errors.Join by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2127">lestrrat-go/jwx#2127</a></li> <li>jwe: add WithDisabledKeyAlgorithms global policy hook by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2129">lestrrat-go/jwx#2129</a></li> <li>jwe: document WithMaxDecompressBufferSize behavior at non-positive values by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2131">lestrrat-go/jwx#2131</a></li> <li>jwk: stop duplicating JWK fields at JWKS top level on parse by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2133">lestrrat-go/jwx#2133</a></li> <li>jwk: wrap ParseKey errors with ParseError sentinel by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2135">lestrrat-go/jwx#2135</a></li> <li>jwk: stream the keys array with cap-before-allocate by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2137">lestrrat-go/jwx#2137</a></li> <li>jwk: treat nil key from custom KeyParser as continue, not success by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2140">lestrrat-go/jwx#2140</a></li> <li>jwk: fix phantom ContinueParseError refs and unmarshaler typo in docs by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2142">lestrrat-go/jwx#2142</a></li> <li>Changes: draft v3.1.1 release notes by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2155">lestrrat-go/jwx#2155</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/lestrrat-go/jwx/compare/v3.1.0...v3.1.1">https://github.com/lestrrat-go/jwx/compare/v3.1.0...v3.1.1</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/lestrrat-go/jwx/blob/v3.1.1/Changes">github.com/lestrrat-go/jwx/v3's changelog</a>.</em></p> <blockquote> <p>v3.1.1 7 May 2026</p> <ul> <li> <p>[jws] Coordinated RFC 7797 <code>b64=false</code> handling pass: <code>jws.Verify</code> rejects payloads with <code>b64=false</code> unless <code>b64</code> is also listed in <code>crit</code>; <code>jws.Sign</code> auto-declares <code>b64</code> in <code>crit</code> when emitting <code>b64=false</code>; <code>Message.MarshalJSON</code> honors <code>b64=false</code> instead of silently re-encoding; <code>jws.VerifyCompactFast</code> refuses any compact JWS carrying <code>b64</code> (the fast path doesn't process extension headers); and <code>b64</code> is now declared as a typed boolean header field rather than handled ad-hoc. (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2081">#2081</a>, <a href="https://redirect.github.com/lestrrat-go/jwx/issues/2087">#2087</a>, <a href="https://redirect.github.com/lestrrat-go/jwx/issues/2102">#2102</a>, <a href="https://redirect.github.com/lestrrat-go/jwx/issues/2104">#2104</a>, <a href="https://redirect.github.com/lestrrat-go/jwx/issues/2106">#2106</a>)</p> </li> <li> <p>[jws] Reject malformed general-form JSON-serialized JWS: inputs with a top-level <code>header</code> member as a sibling of <code>signatures</code> are rejected (the spec only permits <code>header</code> inside per-signature objects), as are inputs whose <code>protected</code> member is a literal JSON object instead of a base64url-encoded string. (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2089">#2089</a>, <a href="https://redirect.github.com/lestrrat-go/jwx/issues/2108">#2108</a>)</p> </li> <li> <p>[jws] <code>jws.AlgorithmsForKey</code> failures from unclassifiable keys are now wrapped in a typed sentinel so callers can branch on "couldn't categorize this key" without string matching the error message. (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2110">#2110</a>)</p> </li> <li> <p>[jws] Verify error-shape consistency: <code>VerifyCompactFast</code> refusals now match the <code>jws.VerifyError()</code> taxonomy used by the slow path, fan-out verify errors name the loose <code>WithKeySet</code> options that were tried, multi-signature <code>b64</code> mismatches name the offending signature index and conflicting value, and the compact <code>b64=false</code>+payload-contains-<code>.</code> error references RFC 7797 §5.2 and points at <code>WithDetachedPayload</code>. (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2083">#2083</a>, <a href="https://redirect.github.com/lestrrat-go/jwx/issues/2085">#2085</a>, <a href="https://redirect.github.com/lestrrat-go/jwx/issues/2114">#2114</a>)</p> </li> <li> <p>[jws] Keys fetched via the <code>jku</code> header are no longer accepted for signature verification when the JWK declares <code>use=enc</code>. (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2060">#2060</a>)</p> </li> <li> <p>[jws][jwe] <code>jws.VerifyMessage</code> and <code>jwe.DecryptMessage</code> observe context cancellation between loop iterations rather than only at boundaries. Long fan-out verify/decrypt loops now respond to a cancelled context promptly. (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2112">#2112</a>, <a href="https://redirect.github.com/lestrrat-go/jwx/issues/2117">#2117</a>)</p> </li> <li> <p>[jwe] Reject PBES2 messages whose <code>p2c</code> (iteration count) does not parse cleanly into int64 or violates the configured bound. The error now names the violated bound (min vs max) instead of the generic "out of range". (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2119">#2119</a>)</p> </li> <li> <p>[jwe] <code>jwe.WithKey()</code> validates the alg-vs-key shape at option construction time rather than during encryption, so misuse surfaces at the call site instead of inside the encrypt loop. (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2121">#2121</a>)</p> </li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/lestrrat-go/jwx/commit/59b8b1b4239be0b470e5d939f16759793bc4a203"><code>59b8b1b</code></a> release v3.1.1</li> <li><a href="https://github.com/lestrrat-go/jwx/commit/4d4ab015bec294bcee30d83506def12906e9da2c"><code>4d4ab01</code></a> Changes: draft v3.1.1 release notes (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2155">#2155</a>)</li> <li><a href="https://github.com/lestrrat-go/jwx/commit/ad739f565db19d9d8fe805eb5db0b05d5441f971"><code>ad739f5</code></a> jwk: fix phantom ContinueParseError refs and unmarshaler typo in docs (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2142">#2142</a>)</li> <li><a href="https://github.com/lestrrat-go/jwx/commit/3227cf9c3d8ddc2d9728d58db03f905b61972f69"><code>3227cf9</code></a> jwk: treat nil key from custom KeyParser as continue, not success (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2140">#2140</a>)</li> <li><a href="https://github.com/lestrrat-go/jwx/commit/82c067ed57cbcbf0aba072518ed928c96306e951"><code>82c067e</code></a> jwk: stream the keys array with cap-before-allocate (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2137">#2137</a>)</li> <li><a href="https://github.com/lestrrat-go/jwx/commit/931a815632dab9bb0e49c81aa701dbf9e9a77f04"><code>931a815</code></a> jwk: wrap ParseKey errors with ParseError sentinel (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2135">#2135</a>)</li> <li><a href="https://github.com/lestrrat-go/jwx/commit/53f62259012b1d934a1dc8c07ebbd8f516f7b919"><code>53f6225</code></a> jwk: stop duplicating JWK fields at JWKS top level on parse (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2133">#2133</a>)</li> <li><a href="https://github.com/lestrrat-go/jwx/commit/8943519997fa2fe4e7e0423baf9cd8e9bb45ddd9"><code>8943519</code></a> jwe: document WithMaxDecompressBufferSize behavior at non-positive values (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2">#2</a>...</li> <li><a href="https://github.com/lestrrat-go/jwx/commit/4797307a63aa0dd6847ee64cbdacbb878226b4f8"><code>4797307</code></a> jwe: add WithDisabledKeyAlgorithms global policy hook (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2129">#2129</a>)</li> <li><a href="https://github.com/lestrrat-go/jwx/commit/de41d0ef9e0b8f6a9f844f5313abbc510dda78fb"><code>de41d0e</code></a> jwe: keySetProvider surfaces per-key errors via errors.Join (<a href="https://redirect.github.com/lestrrat-go/jwx/issues/2127">#2127</a>)</li> <li>Additional commits viewable in <a href="https://github.com/lestrrat-go/jwx/compare/v3.1.0...v3.1.1">compare view</a></li> </ul> </details> <br /> Updates `github.com/olekukonko/tablewriter` from 1.1.0 to 1.1.4 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/olekukonko/tablewriter/commit/a0dea8a90a8a0c7610afb5588d2f15a57f4aa9a2"><code>a0dea8a</code></a> no need to disable twice</li> <li><a href="https://github.com/olekukonko/tablewriter/commit/a4fb40afbe367fd0733ce7b45223034febf7b0b4"><code>a4fb40a</code></a> Merge pull request <a href="https://redirect.github.com/olekukonko/tablewriter/issues/314">#314</a> from sducamp/fix/rendition-debug-leak</li> <li><a href="https://github.com/olekukonko/tablewriter/commit/6bc4cb4866ab2a10340bf0d11c41e676b546e253"><code>6bc4cb4</code></a> fix: prevent debug output leak from renderer during Options() reconfiguration</li> <li><a href="https://github.com/olekukonko/tablewriter/commit/54408fee90b7a66a94d9d71f789d42e03f45109b"><code>54408fe</code></a> update ll to v0.1.6</li> <li><a href="https://github.com/olekukonko/tablewriter/commit/5ea5f3c761e556def568d7e07df774c55ae66071"><code>5ea5f3c</code></a> add mote tab test ans update go mod</li> <li><a href="https://github.com/olekukonko/tablewriter/commit/1455dd8dd79719f142013f59e300fcdf0144f3fd"><code>1455dd8</code></a> Merge pull request <a href="https://redirect.github.com/olekukonko/tablewriter/issues/311">#311</a> from olekukonko/tabber</li> <li><a href="https://github.com/olekukonko/tablewriter/commit/d7b0a55c1f9c6bd55eceaa22dfb0123bac23f281"><code>d7b0a55</code></a> improve tab and make test more predictable</li> <li><a href="https://github.com/olekukonko/tablewriter/commit/62117a2ca655057ba2e61f2d18896f619fc48230"><code>62117a2</code></a> add space default <a href="https://redirect.github.com/olekukonko/tablewriter/issues/312">#312</a> for colorized renderer</li> <li><a href="https://github.com/olekukonko/tablewriter/commit/4958831ad1de62ec94567bf5d42a8a9b2c50e74d"><code>4958831</code></a> ll v0.1.5 update enables logging by default hence disable</li> <li><a href="https://github.com/olekukonko/tablewriter/commit/1c68e06c65b87d5416aada2737b6683fadd1b25b"><code>1c68e06</code></a> use space for padding as default <a href="https://redirect.github.com/olekukonko/tablewriter/issues/312">#312</a></li> <li>Additional commits viewable in <a href="https://github.com/olekukonko/tablewriter/compare/v1.1.0...v1.1.4">compare view</a></li> </ul> </details> <br /> Updates `github.com/vektah/gqlparser/v2` from 2.5.32 to 2.5.33 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vektah/gqlparser/releases">github.com/vektah/gqlparser/v2's releases</a>.</em></p> <blockquote> <h2>v2.5.33</h2> <h2>What's Changed</h2> <ul> <li>fix: allow repeatable directives on GraphQL document by <a href="https://github.com/fredzqm"><code>@fredzqm</code></a> in <a href="https://redirect.github.com/vektah/gqlparser/pull/418">vektah/gqlparser#418</a></li> <li>feat: create a new ScalarLeafsRuleWithoutSuggestions validator rule by <a href="https://github.com/XuankangLin"><code>@XuankangLin</code></a> in <a href="https://redirect.github.com/vektah/gqlparser/pull/413">vektah/gqlparser#413</a></li> <li>refactor: format lines in scalar_leafs.go by <a href="https://github.com/XuankangLin"><code>@XuankangLin</code></a> in <a href="https://redirect.github.com/vektah/gqlparser/pull/423">vektah/gqlparser#423</a></li> <li>Fix negative Position.Column for definitions with block string descriptions (<a href="https://redirect.github.com/vektah/gqlparser/issues/254">#254</a>) by <a href="https://github.com/riwal42c"><code>@riwal42c</code></a> in <a href="https://redirect.github.com/vektah/gqlparser/pull/422">vektah/gqlparser#422</a></li> <li>Update spec to 2023 version by <a href="https://github.com/StevenACoffman"><code>@StevenACoffman</code></a> in <a href="https://redirect.github.com/vektah/gqlparser/pull/401">vektah/gqlparser#401</a></li> <li>Bump picomatch from 2.3.1 to 2.3.2 in /validator/imported by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/vektah/gqlparser/pull/420">vektah/gqlparser#420</a></li> <li>Bump <code>@babel/preset-env</code> from 7.29.0 to 7.29.2 in /validator/imported in the actions-deps group by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/vektah/gqlparser/pull/419">vektah/gqlparser#419</a></li> <li>Bump brace-expansion from 1.1.12 to 1.1.13 in /validator/imported by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/vektah/gqlparser/pull/421">vektah/gqlparser#421</a></li> <li>Bump prettier from 3.8.1 to 3.8.2 in /validator/imported in the actions-deps group by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/vektah/gqlparser/pull/424">vektah/gqlparser#424</a></li> <li>Bump prettier from 3.8.2 to 3.8.3 in /validator/imported in the actions-deps group by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/vektah/gqlparser/pull/425">vektah/gqlparser#425</a></li> <li>Bump minimatch from 3.0.4 to 3.1.5 in /validator/imported by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/vektah/gqlparser/pull/417">vektah/gqlparser#417</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/XuankangLin"><code>@XuankangLin</code></a> made their first contribution in <a href="https://redirect.github.com/vektah/gqlparser/pull/413">vektah/gqlparser#413</a></li> <li><a href="https://github.com/riwal42c"><code>@riwal42c</code></a> made their first contribution in <a href="https://redirect.github.com/vektah/gqlparser/pull/422">vektah/gqlparser#422</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/vektah/gqlparser/compare/v2.5.32...v2.5.33">https://github.com/vektah/gqlparser/compare/v2.5.32...v2.5.33</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/vektah/gqlparser/commit/41b7913b390ac4278ca7fc766afd586c1e6df819"><code>41b7913</code></a> Bump minimatch from 3.0.4 to 3.1.5 in /validator/imported (<a href="https://redirect.github.com/vektah/gqlparser/issues/417">#417</a>)</li> <li><a href="https://github.com/vektah/gqlparser/commit/3c33bbeb81dd06c1dc5d5e56c97c2ac74e3a5e71"><code>3c33bbe</code></a> Bump prettier in /validator/imported in the actions-deps group (<a href="https://redirect.github.com/vektah/gqlparser/issues/425">#425</a>)</li> <li><a href="https://github.com/vektah/gqlparser/commit/f63b51fcf337b673ac06b593262f7ed72d11de24"><code>f63b51f</code></a> Update spec to 2023 version (<a href="https://redirect.github.com/vektah/gqlparser/issues/401">#401</a>)</li> <li><a href="https://github.com/vektah/gqlparser/commit/1f1383cb52d49c63919a791309a2c80e16a83c6f"><code>1f1383c</code></a> Bump prettier in /validator/imported in the actions-deps group (<a href="https://redirect.github.com/vektah/gqlparser/issues/424">#424</a>)</li> <li><a href="https://github.com/vektah/gqlparser/commit/021901042dbe56648020832ee88973acd389ea64"><code>0219010</code></a> Fix negative Position.Column for definitions with block string descriptions (...</li> <li><a href="https://github.com/vektah/gqlparser/commit/16bf3c4da15f2de0a8648e66f956ef9da2129d8e"><code>16bf3c4</code></a> refactor: format lines in scalar_leafs.go (<a href="https://redirect.github.com/vektah/gqlparser/issues/423">#423</a>)</li> <li><a href="https://github.com/vektah/gqlparser/commit/be677085400ffa5fd6e0ac86d98d1cf94db05efe"><code>be67708</code></a> Bump brace-expansion from 1.1.12 to 1.1.13 in /validator/imported (<a href="https://redirect.github.com/vektah/gqlparser/issues/421">#421</a>)</li> <li><a href="https://github.com/vektah/gqlparser/commit/61efb18da16d7f45f8050ecb576d27b85e6861da"><code>61efb18</code></a> feat: create a new ScalarLeafsRuleWithoutSuggestions validator rule (<a href="https://redirect.github.com/vektah/gqlparser/issues/413">#413</a>)</li> <li><a href="https://github.com/vektah/gqlparser/commit/a9bb4644d5911effae909bab06029df7f11c402c"><code>a9bb464</code></a> feat(validator): handle repeatable directives correctly (<a href="https://redirect.github.com/vektah/gqlparser/issues/418">#418</a>)</li> <li><a href="https://github.com/vektah/gqlparser/commit/b239ec3bfe15a44330f9752bd7fb56cc41cf1c2b"><code>b239ec3</code></a> Bump <code>@babel/preset-env</code> in /validator/imported in the actions-deps group (<a href="https://redirect.github.com/vektah/gqlparser/issues/419">#419</a>)</li> <li>Additional commits viewable in <a href="https://github.com/vektah/gqlparser/compare/v2.5.32...v2.5.33">compare view</a></li> </ul> </details> <br /> Updates `golang.org/x/net` from 0.53.0 to 0.54.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/golang/net/commit/b138e06246cb323f2f380c2b7f7dd91f581dd56b"><code>b138e06</code></a> go.mod: update golang.org/x dependencies</li> <li><a href="https://github.com/golang/net/commit/689f70a42abd350f3a1aaa70b0d13eb9543d927a"><code>689f70a</code></a> quic: fix wrong final size being used for RESET_STREAM frame</li> <li><a href="https://github.com/golang/net/commit/208f306b2f0fd008b388bee2c2644be279778e94"><code>208f306</code></a> http3: increase handshake timeout</li> <li><a href="https://github.com/golang/net/commit/49810da71b9026da9e0d028a6ad8c7730c52d9c4"><code>49810da</code></a> http2: enable net/http wrapping when go >= 1.27</li> <li><a href="https://github.com/golang/net/commit/5e11a5ab891c117eda83b4304d60dd13286c1c76"><code>5e11a5a</code></a> quic: fix data race in streamForFrame</li> <li><a href="https://github.com/golang/net/commit/8c63081cd380ea768db5651941614b73472160ff"><code>8c63081</code></a> http2: use empty Transport rather than DefaultTransport in http2wrap</li> <li><a href="https://github.com/golang/net/commit/fc7b466ca49cb204039630533ece4fc557eb35cd"><code>fc7b466</code></a> http2: add http2wrap test</li> <li><a href="https://github.com/golang/net/commit/15c2cb1875fd727313dc4de909b3ee149422fbe2"><code>15c2cb1</code></a> http2: avoid overflowing 32-bit int when http2wrap enabled</li> <li><a href="https://github.com/golang/net/commit/64651885c2f2d745d77af2d7af2edbf568c179af"><code>6465188</code></a> http2: add wrapped Server</li> <li><a href="https://github.com/golang/net/commit/72f419a894cb0597dd5b6bcf119086bf2af41231"><code>72f419a</code></a> http2: add wrapped ClientConn</li> <li>Additional commits viewable in <a href="https://github.com/golang/net/compare/v0.53.0...v0.54.0">compare view</a></li> </ul> </details> <br /> Updates `golang.org/x/text` from 0.36.0 to 0.37.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/golang/text/commit/3ef517e623a4bfc08d6457f87d73afda7af7d8e1"><code>3ef517e</code></a> go.mod: update golang.org/x dependencies</li> <li>See full diff in <a href="https://github.com/golang/text/compare/v0.36.0...v0.37.0">compare view</a></li> </ul> </details> <br /> Updates `google.golang.org/grpc` from 1.80.0 to 1.81.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/grpc/grpc-go/releases">google.golang.org/grpc's releases</a>.</em></p> <blockquote> <h2>Release 1.81.0</h2> <h1>Behavior Changes</h1> <ul> <li>balancer/rls: Switch gauge metrics to asynchronous emission (once per collection cycle) to reduce telemetry noise and align with other gRPC language implementations. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8808">#8808</a>)</li> </ul> <h1>Dependencies</h1> <ul> <li>Minimum supported Go version is now 1.25. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8969">#8969</a>)</li> </ul> <h1>Bug Fixes</h1> <ul> <li>xds: Use the leaf cluster's security config for the TLS handshake instead of the aggregate cluster's config. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8956">#8956</a>)</li> <li>transport: Send a <code>RST_STREAM</code> when receiving an <code>END_STREAM</code> when the stream is not already half-closed. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8832">#8832</a>)</li> <li>xds: Fix ADS resource name validation to prevent a panic. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8970">#8970</a>)</li> </ul> <h1>New Features</h1> <ul> <li>grpc/stats: Add support for custom labels in per-call metrics (<a href="https://github.com/grpc/proposal/blob/master/A108-otel-custom-per-call-label.md">gRFC A108</a>). (<a href="https://redirect.github.com/grpc/grpc-go/issues/9008">#9008</a>)</li> <li>xds: Add support for Server Name Indication (SNI) and SAN validation (<a href="https://github.com/grpc/proposal/blob/master/A101-SNI-setting-and-SNI-SAN-validation.md">gRFC A101</a>). Disabled by default. To enable, set <code>GRPC_EXPERIMENTAL_XDS_SNI=true</code> environment variable. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9016">#9016</a>)</li> <li>xds: Add support to control which fields get propagated from ORCA backend metric reports to LRS load reports (<a href="https://github.com/grpc/proposal/blob/master/A85-lrs-custom-metrics-changes.md">gRFC A85</a>). Disabled by default. To enable, set <code>GRPC_EXPERIMENTAL_XDS_ORCA_LRS_PROPAGATION=true</code>. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9005">#9005</a>)</li> <li>xds: Add metrics to track xDS client connectivity and cached resource state (<a href="https://github.com/grpc/proposal/blob/master/A78-grpc-metrics-wrr-pf-xds.md">gRFC A78</a>). (<a href="https://redirect.github.com/grpc/grpc-go/issues/8807">#8807</a>)</li> <li>stats/otel: Enhance <code>grpc.subchannel.disconnections</code> metric by adding disconnection reason to the <code>grpc.disconnect_error</code> label (<a href="https://github.com/grpc/proposal/blob/master/A94-subchannel-otel-metrics.md">gRFC A94</a>). This provides granular insights into why subchannels are closing. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8973">#8973</a>)</li> <li>mem: Add <code>mem.Buffer.Slice()</code> API to slice the buffer like a slice. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8977">#8977</a>) <ul> <li>Special Thanks: <a href="https://github.com/ash2k"><code>@ash2k</code></a></li> </ul> </li> </ul> <h1>Performance Improvements</h1> <ul> <li>alts: Pool read buffers to lower memory utilization when sockets are unreadable. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8964">#8964</a>)</li> <li>transport: Pool HTTP/2 framer read buffers to reduce idle memory consumption. Currently limited to Linux for ALTS and non-encrypted transports (TCP, Unix). To disable, set <code>GRPC_GO_EXPERIMENTAL_HTTP_FRAMER_READ_BUFFER_POOLING=false</code> and report any issues. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9032">#9032</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/grpc/grpc-go/commit/cb18228317ff523e63d931b4058b0329585b7dcd"><code>cb18228</code></a> Change version to 1.81.0 (<a href="https://redirect.github.com/grpc/grpc-go/issues/9062">#9062</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/96748f973e20bbfcafa19a8bdffc85ad5da138d1"><code>96748f9</code></a> Cherry-pick <a href="https://redirect.github.com/grpc/grpc-go/issues/9105">#9105</a> to 1.81.x (<a href="https://redirect.github.com/grpc/grpc-go/issues/9106">#9106</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/91832222f0144f76527b630ca55cfea6e1aa015a"><code>9183222</code></a> Cherry pick <a href="https://redirect.github.com/grpc/grpc-go/issues/9055">#9055</a>, <a href="https://redirect.github.com/grpc/grpc-go/issues/9032">#9032</a> to v1.81.x (<a href="https://redirect.github.com/grpc/grpc-go/issues/9095">#9095</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/5cba6da4211f3b130238c792937f5921741b616a"><code>5cba6da</code></a> Revert "deps: update dependencies for all modules (<a href="https://redirect.github.com/grpc/grpc-go/issues/9065">#9065</a>)" (<a href="https://redirect.github.com/grpc/grpc-go/issues/9067">#9067</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/af8a9364aa7523ab24d214e9ef13e6ad64d5c5f9"><code>af8a936</code></a> deps: update dependencies for all modules (<a href="https://redirect.github.com/grpc/grpc-go/issues/9065">#9065</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/cdc60dfaaadde45e16aa3c28237c0e655a722c1a"><code>cdc60df</code></a> transport: optimize heap allocations in ready reader and update syscall conne...</li> <li><a href="https://github.com/grpc/grpc-go/commit/208d053e3204c806ba9e6205c26aa064c8b42852"><code>208d053</code></a> xds/resolver: pass complete XDSConfig in RPC context for HTTP filters (gRFC A...</li> <li><a href="https://github.com/grpc/grpc-go/commit/50fe1cc7fd78b78ae638ed90ea78514c934167ac"><code>50fe1cc</code></a> test: Fix flaky test <code>TestServerStreaming_ClientCallRecvMsgTwice</code> in `end2end...</li> <li><a href="https://github.com/grpc/grpc-go/commit/d574bad188f25ba03d41a506e6f2ef93837ad10b"><code>d574bad</code></a> build(deps): bump go.opentelemetry.io/otel/sdk from 1.42.0 to 1.43.0 (<a href="https://redirect.github.com/grpc/grpc-go/issues/9050">#9050</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/b8bf4d0488a351c563d63797ffba321585d6bb24"><code>b8bf4d0</code></a> build(deps): bump go.opentelemetry.io/otel/sdk from 1.42.0 to 1.43.0 in /inte...</li> <li>Additional commits viewable in <a href="https://github.com/grpc/grpc-go/compare/v1.80.0...v1.81.0">compare view</a></li> </ul> </details> <br /> Updates `gopkg.in/ini.v1` from 1.67.1 to 1.67.2 Updates `github.com/fsnotify/fsnotify` from 1.9.0 to 1.10.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/fsnotify/fsnotify/releases">github.com/fsnotify/fsnotify's releases</a>.</em></p> <blockquote> <h2>v1.10.1</h2> <h3>Changes and fixes</h3> <ul> <li> <p>inotify: don't remove sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/754">#754</a>)</p> </li> <li> <p>inotify, windows: don't rename sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/755">#755</a>)</p> </li> </ul> <p><a href="https://redirect.github.com/fsnotify/fsnotify/issues/754">#754</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/754">fsnotify/fsnotify#754</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/755">#755</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/755">fsnotify/fsnotify#755</a></p> <h2>v1.10.0</h2> <p>This version of fsnotify needs Go 1.23.</p> <h3>Changes and fixes</h3> <ul> <li> <p>inotify: improve initialization error message (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/731">#731</a>)</p> </li> <li> <p>inotify: send Rename event if recursive watch is renamed (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/696">#696</a>)</p> </li> <li> <p>inotify: avoid copying event buffers when reading names (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/741">#741</a>)</p> </li> <li> <p>kqueue: skip dangling symlinks (ENOENT) in watchDirectoryFiles, so a bad entry no longer aborts Watcher.Add for the whole directory (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/748">#748</a>)</p> </li> <li> <p>kqueue: drop watches directly in Close() to fix a file descriptor leak when recycling watchers (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/740">#740</a>)</p> </li> <li> <p>windows: fix nil pointer dereference in remWatch (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/736">#736</a>)</p> </li> <li> <p>windows: lock watch field updates against concurrent WatchList to fix a race introduced in v1.9.0 (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/709">#709</a>, <a href="https://redirect.github.com/fsnotify/fsnotify/issues/749">#749</a>)</p> </li> </ul> <p><a href="https://redirect.github.com/fsnotify/fsnotify/issues/696">#696</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/696">fsnotify/fsnotify#696</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/709">#709</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/709">fsnotify/fsnotify#709</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/731">#731</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/731">fsnotify/fsnotify#731</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/736">#736</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/736">fsnotify/fsnotify#736</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/740">#740</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/740">fsnotify/fsnotify#740</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/741">#741</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/741">fsnotify/fsnotify#741</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/748">#748</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/748">fsnotify/fsnotify#748</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/749">#749</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/749">fsnotify/fsnotify#749</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/fsnotify/fsnotify/blob/main/CHANGELOG.md">github.com/fsnotify/fsnotify's changelog</a>.</em></p> <blockquote> <h2>1.10.1 2026-05-04</h2> <h3>Changes and fixes</h3> <ul> <li> <p>inotify: don't remove sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/754">#754</a>)</p> </li> <li> <p>inotify, windows: don't rename sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/755">#755</a>)</p> </li> </ul> <p><a href="https://redirect.github.com/fsnotify/fsnotify/issues/754">#754</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/754">fsnotify/fsnotify#754</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/755">#755</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/755">fsnotify/fsnotify#755</a></p> <h2>1.10.0 2026-04-30</h2> <p>This version of fsnotify needs Go 1.23.</p> <h3>Changes and fixes</h3> <ul> <li> <p>inotify: improve initialization error message (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/731">#731</a>)</p> </li> <li> <p>inotify: send Rename event if recursive watch is renamed (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/696">#696</a>)</p> </li> <li> <p>inotify: avoid copying event buffers when reading names (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/741">#741</a>)</p> </li> <li> <p>kqueue: skip dangling symlinks (ENOENT) in watchDirectoryFiles, so a bad entry no longer aborts Watcher.Add for the whole directory (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/748">#748</a>)</p> </li> <li> <p>kqueue: drop watches directly in Close() to fix a file descriptor leak when recycling watchers (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/740">#740</a>)</p> </li> <li> <p>windows: fix nil pointer dereference in remWatch (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/736">#736</a>)</p> </li> <li> <p>windows: lock watch field updates against concurrent WatchList to fix a race introduced in v1.9.0 (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/709">#709</a>, <a href="https://redirect.github.com/fsnotify/fsnotify/issues/749">#749</a>)</p> </li> </ul> <p><a href="https://redirect.github.com/fsnotify/fsnotify/issues/696">#696</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/696">fsnotify/fsnotify#696</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/709">#709</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/709">fsnotify/fsnotify#709</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/731">#731</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/731">fsnotify/fsnotify#731</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/736">#736</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/736">fsnotify/fsnotify#736</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/740">#740</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/740">fsnotify/fsnotify#740</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/741">#741</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/741">fsnotify/fsnotify#741</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/748">#748</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/748">fsnotify/fsnotify#748</a> <a href="https://redirect.github.com/fsnotify/fsnotify/issues/749">#749</a>: <a href="https://redirect.github.com/fsnotify/fsnotify/pull/749">fsnotify/fsnotify#749</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/fsnotify/fsnotify/commit/76b01a6e8f502187fecedea8b025e79e5a86085c"><code>76b01a6</code></a> Release 1.10.1</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/fec150b807510e54e5b25def4b6e5fb001b4898c"><code>fec150b</code></a> Update changelog</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/162b4216ab8f92ecd26425530bee198972c9b3cb"><code>162b421</code></a> inotify, windows: don't rename sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/755">#755</a>)</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/224257f23b2f3a96509b316c5cead71dd4a9099a"><code>224257f</code></a> inotify: don't remove sibling watches sharing a path prefix (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/754">#754</a>)</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/e0c956c0ccaf51562fee30ef5c055c74e6ae2104"><code>e0c956c</code></a> windows: document directory Write events and stabilize tests (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/745">#745</a>)</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/8d01d7b9cbe0199e4a1e60fbd965fb05dbb42123"><code>8d01d7b</code></a> Release 1.10.0</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/602284e4a8cadd488d7a5fa07c48462dfac25108"><code>602284e</code></a> Update changelog</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/7f03e59f9659552d8a084e03024cb9b983748ed7"><code>7f03e59</code></a> kqueue: skip ENOENT entries in watchDirectoryFiles (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/748">#748</a>)</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/dab9dde2fc9ba4d0c1076318f81cabcc8fdb2ec9"><code>dab9dde</code></a> windows: lock watch field updates against concurrent WatchList (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/709">#709</a>) (<a href="https://redirect.github.com/fsnotify/fsnotify/issues/749">#749</a>)</li> <li><a href="https://github.com/fsnotify/fsnotify/commit/eadf267ce152b5e62d48cc2c13bb08bd4062b6c7"><code>eadf267</code></a> kqueue: drop watches directly in Close() instead of going through remove() (#...</li> <li>Additional commits viewable in <a href="https://github.com/fsnotify/fsnotify/compare/v1.9.0...v1.10.1">compare view</a></li> </ul> </details> <br /> Updates `github.com/huandu/go-sqlbuilder` from 1.40.2 to 1.41.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/huandu/go-sqlbuilder/releases">github.com/huandu/go-sqlbuilder's releases</a>.</em></p> <blockquote> <h2>v1.41.0</h2> <ul> <li><code>[NEW]</code> Add an option <code>NoExpand</code> to change default field "expand" behavior for backward compatibility. See <a href="https://redirect.github.com/huandu/go-sqlbuilder/issues/237">#237</a> for details.</li> </ul> <p>NOTE: Starting from v1.40.0, the <code>Struct</code> utility type defaults to expanding non-primitive struct fields. This change caused unexpected behavior for some users. To address this without reverting the features introduced in v1.40.0, we have introduced a <code>NoExpand </code>configuration. When set to true, all fields will default to no expansion (preserving legacy behavior). You can still opt-in to expansion for specific fields by using the <code>fieldopt:"expand"</code> tag.</p> <p><strong>Full Changelog</strong>: <a href="https://github.com/huandu/go-sqlbuilder/compare/v1.40.0...v1.41.0">https://github.com/huandu/go-sqlbuilder/compare/v1.40.0...v1.41.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/huandu/go-sqlbuilder/commit/44837218602c8f96eac9f27411d5b93a20dc979d"><code>4483721</code></a> fix <a href="https://redirect.github.com/huandu/go-sqlbuilder/issues/237">#237</a>: add option <code>NoExpand</code> to control default field "expand" behavior</li> <li>See full diff in <a href="https://github.com/huandu/go-sqlbuilder/compare/v1.40.2...v1.41.0">compare view</a></li> </ul> </details> <br /> Updates `github.com/lestrrat-go/jwx/v3` from 3.1.0 to 3.1.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/lestrrat-go/jwx/releases">github.com/lestrrat-go/jwx/v3's releases</a>.</em></p> <blockquote> <h2>v3.1.1</h2> <p>For more detailed release notes, see <a href="https://github.com/lestrrat-go/jwx/blob/v3.1.1/Changes">Changes</a>.</p> <h2>What's Changed</h2> <ul> <li>build(deps): bump pozil/auto-assign-issue from 2.2.0 to 2.2.1 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2045">lestrrat-go/jwx#2045</a></li> <li>guard ecdsa coordinates against oversized big.Int by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2050">lestrrat-go/jwx#2050</a></li> <li>reject jwe with conflicting alg in protected vs per-recipient by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2052">lestrrat-go/jwx#2052</a></li> <li>fix AddressClaim.MarshalJSON for non-printable bytes by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2056">lestrrat-go/jwx#2056</a></li> <li>jwt: only call ParseForm when WithFormKey is supplied by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2058">lestrrat-go/jwx#2058</a></li> <li>jws: jkuProvider rejects fetched keys marked use=enc by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2060">lestrrat-go/jwx#2060</a></li> <li>jwa: unify SignatureAlgorithm/KeyEncryption/ContentEncryption into one registry by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2066">lestrrat-go/jwx#2066</a></li> <li>build(deps): bump pozil/auto-assign-issue from f245a9119ba5cc2fed4aa7b8268d576d40acddf0 to 7bf9d82c77d45976224660b873fc83e60576c5aa by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2065">lestrrat-go/jwx#2065</a></li> <li>cmd/jwx: warn on private-key-to-tty + reject keysize<=0 for oct by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2071">lestrrat-go/jwx#2071</a></li> <li>jws: refuse "b64" header in VerifyCompactFast by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2081">lestrrat-go/jwx#2081</a></li> <li>jws: VerifyCompactFast refusals match jws.VerifyError() class by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2083">lestrrat-go/jwx#2083</a></li> <li>jws: name loose keySet options in fan-out verify error by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2085">lestrrat-go/jwx#2085</a></li> <li>jws: honor RFC 7797 b64=false in Message.MarshalJSON by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2087">lestrrat-go/jwx#2087</a></li> <li>jws: reject literal-JSON "protected" in general-form JWS by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2089">lestrrat-go/jwx#2089</a></li> <li>jwt: ParseRequest: don't skip form body on chunked transfer by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2091">lestrrat-go/jwx#2091</a></li> <li>jwt: pedantic mode enforces cty=JWT nested-envelope shape by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2094">lestrrat-go/jwx#2094</a></li> <li>jwt: defensively reject missing claims in MaxDeltaIs / MinDeltaIs by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2099">lestrrat-go/jwx#2099</a></li> <li>jwt: ParseInsecure: parse loop-local payload, not original input by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2097">lestrrat-go/jwx#2097</a></li> <li>jws: Verify rejects b64=false without "b64" listed in "crit" by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2102">lestrrat-go/jwx#2102</a></li> <li>jws: Sign auto-declares "b64" in "crit" when emitting b64=false by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2104">lestrrat-go/jwx#2104</a></li> <li>jws: declare "b64" as typed bool header field by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2106">lestrrat-go/jwx#2106</a></li> <li>jws: reject general-form JWS with top-level "header" sibling of "signatures" by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2108">lestrrat-go/jwx#2108</a></li> <li>jws: typed sentinel for AlgorithmsForKey unclassifiable-key failures by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> in <a href="https://redirect.github.com/lestrrat-go/jwx/pull/2110">lestrrat-go/jwx#2110</a></li> <li>jws: VerifyMessage observes ctx cancellation between loop iterations by <a href="https://github.com/lestrrat"><code>@lestrrat</code></a> i... _Description has been truncated_ --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Johan Fylling <johan.dev@fylling.se> Signed-off-by: Stephan Renatus <stephan.renatus@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Johan Fylling <johan.dev@fylling.se> Co-authored-by: Stephan Renatus <stephan.renatus@gmail.com>
463 lines
12 KiB
Go
463 lines
12 KiB
Go
// Copyright 2021 The OPA Authors. All rights reserved.
|
|
// Use of this source code is governed by an Apache2
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/olekukonko/tablewriter/tw"
|
|
|
|
"github.com/open-policy-agent/opa/cmd/formats"
|
|
"github.com/open-policy-agent/opa/cmd/internal/env"
|
|
ib "github.com/open-policy-agent/opa/internal/bundle/inspect"
|
|
pr "github.com/open-policy-agent/opa/internal/presentation"
|
|
iStrs "github.com/open-policy-agent/opa/internal/strings"
|
|
"github.com/open-policy-agent/opa/v1/ast"
|
|
astJson "github.com/open-policy-agent/opa/v1/ast/json"
|
|
"github.com/open-policy-agent/opa/v1/bundle"
|
|
"github.com/open-policy-agent/opa/v1/util"
|
|
|
|
"github.com/olekukonko/tablewriter"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
const (
|
|
maxTableFieldLen = 50
|
|
pageWidth = 80
|
|
)
|
|
|
|
type inspectCommandParams struct {
|
|
outputFormat *util.EnumFlag
|
|
listAnnotations bool
|
|
v0Compatible bool
|
|
v1Compatible bool
|
|
}
|
|
|
|
func (p *inspectCommandParams) regoVersion() ast.RegoVersion {
|
|
if p.v0Compatible {
|
|
return ast.RegoV0
|
|
}
|
|
if p.v1Compatible {
|
|
return ast.RegoV1
|
|
}
|
|
return ast.DefaultRegoVersion
|
|
}
|
|
|
|
func newInspectCommandParams() inspectCommandParams {
|
|
return inspectCommandParams{
|
|
outputFormat: formats.Flag(formats.Pretty, formats.JSON),
|
|
listAnnotations: false,
|
|
}
|
|
}
|
|
|
|
func initInspect(root *cobra.Command, brand string) {
|
|
executable := root.Name()
|
|
|
|
params := newInspectCommandParams()
|
|
|
|
inspectCommand := &cobra.Command{
|
|
Use: "inspect <path> [<path> [...]]",
|
|
Short: `Inspect ` + brand + ` bundle(s)`,
|
|
Long: `Inspect ` + brand + ` bundle(s).
|
|
|
|
The 'inspect' command provides a summary of the contents in ` + brand + ` bundle(s) or a single Rego file.
|
|
Bundles are gzipped tarballs containing policies and data. The 'inspect' command reads bundle(s) and lists
|
|
the following:
|
|
|
|
* packages that are contributed by .rego files
|
|
* data locations defined by the data.json and data.yaml files
|
|
* manifest data
|
|
* signature data
|
|
* information about the Wasm module files
|
|
* package- and rule annotations
|
|
|
|
Example:
|
|
|
|
$ ls
|
|
bundle.tar.gz
|
|
$ ` + executable + ` inspect bundle.tar.gz
|
|
|
|
You can provide exactly one ` + brand + ` bundle, to a bundle directory, or direct path to a Rego file to the 'inspect'
|
|
command on the command-line. If you provide a path referring to a directory, the 'inspect' command will load that path as
|
|
a bundle and summarize its structure and contents. If you provide a path referring to a Rego file, the 'inspect' command
|
|
will load that file and summarize its structure and contents.
|
|
`,
|
|
PreRunE: func(cmd *cobra.Command, args []string) error {
|
|
if err := validateInspectParams(¶ms, args); err != nil {
|
|
return err
|
|
}
|
|
return env.CmdFlags.CheckEnvironmentVariables(cmd)
|
|
},
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
cmd.SilenceErrors = true
|
|
cmd.SilenceUsage = true
|
|
|
|
if err := doInspect(params, args[0], os.Stdout); err != nil {
|
|
fmt.Fprintln(os.Stderr, "error:", err)
|
|
return err
|
|
}
|
|
return nil
|
|
},
|
|
}
|
|
|
|
addOutputFormat(inspectCommand.Flags(), params.outputFormat)
|
|
addListAnnotations(inspectCommand.Flags(), ¶ms.listAnnotations)
|
|
addV0CompatibleFlag(inspectCommand.Flags(), ¶ms.v0Compatible, false)
|
|
addV1CompatibleFlag(inspectCommand.Flags(), ¶ms.v1Compatible, false)
|
|
root.AddCommand(inspectCommand)
|
|
}
|
|
|
|
func doInspect(params inspectCommandParams, path string, out io.Writer) error {
|
|
info, err := ib.FileForRegoVersion(params.regoVersion(), path, params.listAnnotations)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
switch params.outputFormat.String() {
|
|
case formats.JSON:
|
|
astJson.SetOptions(astJson.Options{
|
|
MarshalOptions: astJson.MarshalOptions{
|
|
IncludeLocation: astJson.NodeToggle{
|
|
// Annotation location data is only included if includeAnnotations is set
|
|
AnnotationsRef: params.listAnnotations,
|
|
},
|
|
},
|
|
})
|
|
defer astJson.SetOptions(astJson.Defaults())
|
|
|
|
return pr.JSON(out, info)
|
|
|
|
default:
|
|
if hasManifest(info) {
|
|
if err := populateManifest(out, info.Manifest); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if len(info.Namespaces) != 0 {
|
|
if err := populateNamespaces(out, info.Namespaces); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if params.listAnnotations && len(info.Annotations) != 0 {
|
|
if err := populateAnnotations(out, info.Annotations); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func hasManifest(info *ib.Info) bool {
|
|
if info.Manifest == nil {
|
|
return false
|
|
}
|
|
return info.Manifest.Revision != "" || len(*info.Manifest.Roots) != 0 || len(info.Manifest.Metadata) != 0 ||
|
|
info.Manifest.RegoVersion != nil
|
|
}
|
|
|
|
func validateInspectParams(p *inspectCommandParams, args []string) error {
|
|
if len(args) != 1 {
|
|
return errors.New("specify exactly one OPA bundle or path")
|
|
}
|
|
|
|
of := p.outputFormat.String()
|
|
if of == formats.JSON || of == formats.Pretty {
|
|
return nil
|
|
}
|
|
return errors.New("invalid output format for inspect command")
|
|
}
|
|
|
|
func populateManifest(out io.Writer, m *bundle.Manifest) error {
|
|
t := generateTableWithKeys(out, "field", "value")
|
|
var lines [][]string
|
|
|
|
if m.RegoVersion != nil {
|
|
lines = append(lines, []string{"Rego Version", truncateTableStr(strconv.Itoa(*m.RegoVersion))})
|
|
}
|
|
|
|
if m.Revision != "" {
|
|
lines = append(lines, []string{"Revision", truncateTableStr(m.Revision)})
|
|
}
|
|
|
|
if len(*m.Roots) != 0 {
|
|
roots := *m.Roots
|
|
if len(roots) == 1 {
|
|
if roots[0] != "" {
|
|
lines = append(lines, []string{"Roots", truncateFileName(roots[0])})
|
|
}
|
|
} else {
|
|
sort.Strings(roots)
|
|
for _, root := range roots {
|
|
lines = append(lines, []string{"Roots", truncateFileName(root)})
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(m.Metadata) != 0 {
|
|
metadata, err := json.Marshal(m.Metadata)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
lines = append(lines, []string{"Metadata", truncateTableStr(string(metadata))})
|
|
}
|
|
|
|
if len(lines) > 0 {
|
|
if err := t.Bulk(lines); err != nil {
|
|
return err
|
|
}
|
|
fmt.Fprintln(out, "MANIFEST:")
|
|
if err := t.Render(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func populateNamespaces(out io.Writer, n map[string][]string) error {
|
|
t := generateTableWithKeys(out, "namespace", "file")
|
|
// only auto-merge the namespace column
|
|
t = t.Options(tablewriter.WithConfig(tablewriter.NewConfigBuilder().
|
|
Row().Merging().WithMode(tw.MergeVertical).ByColumnIndex([]int{0}).
|
|
Build().Build().Build(),
|
|
))
|
|
|
|
var lines [][]string
|
|
|
|
for _, k := range util.KeysSorted(n) {
|
|
for _, file := range n[k] {
|
|
lines = append(lines, []string{k, truncateFileName(file)})
|
|
}
|
|
}
|
|
|
|
if err := t.Bulk(lines); err != nil {
|
|
return err
|
|
}
|
|
if len(lines) > 0 {
|
|
fmt.Fprintln(out, "NAMESPACES:")
|
|
if err := t.Render(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func populateAnnotations(out io.Writer, refs []*ast.AnnotationsRef) error {
|
|
if len(refs) > 0 {
|
|
fmt.Fprintln(out, "ANNOTATIONS:")
|
|
for _, ref := range refs {
|
|
printTitle(out, ref)
|
|
fmt.Fprintln(out)
|
|
|
|
if a := ref.Annotations; a != nil && len(a.Description) > 0 {
|
|
fmt.Fprintln(out, a.Description)
|
|
fmt.Fprintln(out)
|
|
}
|
|
|
|
if p := ref.GetPackage(); p != nil {
|
|
fmt.Fprintln(out, "Package: ", dropDataPrefix(p.Path))
|
|
}
|
|
if r := ref.GetRule(); r != nil {
|
|
fmt.Fprintln(out, "Rule: ", r.Head.Ref().String())
|
|
}
|
|
if loc := ref.Location; loc != nil {
|
|
fmt.Fprintln(out, "Location:", loc.String())
|
|
}
|
|
if a := ref.Annotations; a != nil {
|
|
if len(a.Scope) > 0 {
|
|
fmt.Fprintln(out, "Scope:", a.Scope)
|
|
}
|
|
if a.Entrypoint {
|
|
fmt.Fprintln(out, "Entrypoint:", a.Entrypoint)
|
|
}
|
|
}
|
|
fmt.Fprintln(out)
|
|
|
|
if a := ref.Annotations; a != nil {
|
|
if len(a.Organizations) > 0 {
|
|
fmt.Fprintln(out, "Organizations:")
|
|
l := make([]listEntry, 0, len(a.Organizations))
|
|
for _, o := range a.Organizations {
|
|
l = append(l, listEntry{"", removeNewLines(o)})
|
|
}
|
|
printList(out, l, "")
|
|
fmt.Fprintln(out)
|
|
}
|
|
|
|
if len(a.Authors) > 0 {
|
|
fmt.Fprintln(out, "Authors:")
|
|
l := make([]listEntry, 0, len(a.Authors))
|
|
for _, a := range a.Authors {
|
|
l = append(l, listEntry{"", removeNewLines(a.String())})
|
|
}
|
|
printList(out, l, "")
|
|
fmt.Fprintln(out)
|
|
}
|
|
|
|
if len(a.Schemas) > 0 {
|
|
// NOTE(johanfylling): The Type Checker will MERGE all applicable schema annotations for a rule
|
|
// into one list. Here, child nodes OVERRIDE parent nodes' schema annotations instead (default annot. behavior).
|
|
// Should the former behavior be replicated here?
|
|
fmt.Fprintln(out, "Schemas:")
|
|
l := make([]listEntry, 0, len(a.Schemas))
|
|
for _, s := range a.Schemas {
|
|
le := listEntry{key: s.Path.String()}
|
|
if len(s.Schema) > 0 {
|
|
le.value = s.Schema.String()
|
|
} else if s.Definition != nil {
|
|
b, _ := json.Marshal(s.Definition)
|
|
le.value = string(b)
|
|
}
|
|
l = append(l, le)
|
|
}
|
|
printList(out, l, ": ")
|
|
fmt.Fprintln(out)
|
|
}
|
|
|
|
if len(a.RelatedResources) > 0 {
|
|
fmt.Fprintln(out, "Related Resources:")
|
|
l := make([]listEntry, 0, len(a.RelatedResources))
|
|
for _, res := range a.RelatedResources {
|
|
l = append(l, listEntry{removeNewLines(res.Ref.String()), res.Description})
|
|
}
|
|
printList(out, l, " ")
|
|
fmt.Fprintln(out)
|
|
}
|
|
if len(a.Custom) > 0 {
|
|
fmt.Fprintln(out, "Custom:")
|
|
l := make([]listEntry, 0, len(a.Custom))
|
|
for k, v := range a.Custom {
|
|
b, _ := json.Marshal(v)
|
|
l = append(l, listEntry{k, string(b)})
|
|
}
|
|
printList(out, l, ": ")
|
|
fmt.Fprintln(out)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type listEntry struct {
|
|
key string
|
|
value string
|
|
}
|
|
|
|
func printList(out io.Writer, list []listEntry, separator string) {
|
|
keyLength := 0
|
|
for _, e := range list {
|
|
l := len(e.key)
|
|
if l > keyLength {
|
|
keyLength = l
|
|
}
|
|
}
|
|
for _, e := range list {
|
|
var line string
|
|
if len(e.value) > 0 {
|
|
line = fmt.Sprintf(" %s%s%s%s",
|
|
e.key,
|
|
separator,
|
|
strings.Repeat(" ", keyLength-len(e.key)),
|
|
e.value)
|
|
} else {
|
|
line = fmt.Sprintf(" %v", e.key)
|
|
}
|
|
fmt.Fprintln(out, truncateStr(line, pageWidth))
|
|
}
|
|
}
|
|
|
|
func printTitle(out io.Writer, ref *ast.AnnotationsRef) {
|
|
var title string
|
|
if a := ref.Annotations; a != nil {
|
|
t := strings.TrimSpace(a.Title)
|
|
if len(t) > 0 {
|
|
title = t
|
|
}
|
|
}
|
|
|
|
if len(title) == 0 {
|
|
title = dropDataPrefix(ref.Path).String()
|
|
}
|
|
|
|
fmt.Fprintf(out, "%s\n%s\n", title, strings.Repeat("=", min(len(title), pageWidth)))
|
|
}
|
|
|
|
func generateTableWithKeys(writer io.Writer, keys ...string) *tablewriter.Table {
|
|
hdrs := make([]any, len(keys))
|
|
for i, k := range keys {
|
|
hdrs[i] = pr.TitleCase.String(k)
|
|
}
|
|
|
|
t := tablewriter.NewTable(
|
|
writer,
|
|
tablewriter.WithConfig(tablewriter.Config{
|
|
Header: tw.CellConfig{
|
|
Formatting: tw.CellFormatting{AutoFormat: tw.On},
|
|
Alignment: tw.CellAlignment{Global: tw.AlignCenter},
|
|
},
|
|
Row: tw.CellConfig{
|
|
Alignment: tw.CellAlignment{Global: tw.AlignLeft},
|
|
Formatting: tw.CellFormatting{
|
|
AutoWrap: tw.WrapNone,
|
|
MergeMode: tw.MergeBoth,
|
|
},
|
|
},
|
|
}),
|
|
tablewriter.WithTrimLine(tw.Off),
|
|
)
|
|
|
|
t.Header(hdrs...)
|
|
return t
|
|
}
|
|
|
|
func truncateTableStr(s string) string {
|
|
return truncateStr(s, maxTableFieldLen)
|
|
}
|
|
|
|
func truncateStr(s string, maxLen int) string {
|
|
if len(s) < maxLen {
|
|
return s
|
|
}
|
|
return fmt.Sprintf("%v...", s[:maxLen-3])
|
|
}
|
|
|
|
func removeNewLines(s string) string {
|
|
return strings.ReplaceAll(s, "\n", " ")
|
|
}
|
|
|
|
func truncateFileName(s string) string {
|
|
if len(s) < maxTableFieldLen {
|
|
return s
|
|
}
|
|
|
|
res, _ := iStrs.TruncateFilePaths(maxTableFieldLen, len(s), s)
|
|
return res[s]
|
|
}
|
|
|
|
// dropDataPrefix drops the first component of the passed Ref
|
|
func dropDataPrefix(ref ast.Ref) ast.Ref {
|
|
if len(ref) <= 1 {
|
|
return ast.EmptyRef()
|
|
}
|
|
r := ref[1:].Copy()
|
|
if s, ok := r[0].Value.(ast.String); ok {
|
|
r[0].Value = ast.Var(s)
|
|
}
|
|
return r
|
|
}
|