Renovate deprecated matchPackagePatterns. The new matchPackageNames
accepts regex patterns wrapped in / delimiters. All other changes
in this PR (quote style, comment removal) were cosmetic and have
been reverted.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
The proxy-based sign-in page derived the session expiry from the JWT by
decoding its payload with `window.atob`, which only accepts the standard
base64 alphabet. JWTs are encoded using base64url (RFC 7515), so any
token whose payload contained '-' or '_' raised a decoding error and
broke sign-in. Translate the payload back to the standard alphabet and
restore its padding before decoding.
Signed-off-by: Asish Kumar <officialasishkumar@gmail.com>
The built-in rate limiter derived its key directly from `req.ip`, which
express-rate-limit 8.x rejects with an ERR_ERL_KEY_GEN_IPV6 validation
error. A raw IPv6 address used as a rate limiting key would let a client
bypass the limit by rotating through addresses in its allotted block, so
the library now requires its `ipKeyGenerator` helper to normalize the
address. Wrap the resolved client address in that helper so the limiter
starts cleanly and groups IPv6 clients by their address block.
Signed-off-by: Asish Kumar <officialasishkumar@gmail.com>
* refactor(kubernetes-backend): boy-scout KubernetesFetcher
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Matthew Clarke <mclarke@spotify.com>
* fix(kubernetes-backend): restore dynamic imports for @kubernetes/client-node
The package is ESM-only and must be loaded via dynamic import() to work
in Jest's CommonJS transform. Reverts to the original inline
await import() pattern while keeping the agent pooling and refactoring.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Matthew Clarke <mclarke@spotify.com>
---------
Signed-off-by: Matthew Clarke <mclarke@spotify.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(skill): automatically onboard to openapi tooling
Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
* test skill against notifications backend
Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
* update URLs to point to main repo and describe multiple client types
Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
* address PR feedback
Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
* revert erroneous changes
Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
* add changeset
Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
* address review feedback: skill doc fixes and entityRef schema dedup
Disambiguate generated entityRef/orderField types and correct skill
guidance on operationId casing and OpenAPI version support.
Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
* note in skill that handler-side validation should be stripped
Reviewers may forget that manual InputError guards and primitive-type
checks become dead weight once the OpenAPI validator runs.
Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
---------
Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
- Remove the path="*" fallback Route so mismatches between mountPath
and initialRouteEntries surface as test failures instead of silently
rendering without params
- Handle mountPath values that already end with /* to avoid double splat
- Extract repeated entity path string into a shared constant
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
Address review feedback: mountedRoutes are for abstract route targets
the test subject links to, not for the subject itself. Add a dedicated
mountPath option that wraps the test element in a single Route with
the given path pattern, enabling useParams(). When mountPath is set
and initialRouteEntries is not, the initial entry defaults to mountPath.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
Move the adjustedFilters useMemo above refresh and reuse it in both
the fetch callback and the frontend filtering memo.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
The lastFetchParamsRef starts as undefined, so the initial debounce
would have fetched with an empty filter (returning every entity in
the catalog). Guard against this by skipping the fetch when no filter
components have registered yet.
Also skip the URL sync effect until at least one filter has been set,
to avoid briefly clearing filter query params from the URL bar before
filter components initialize.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>