fix(providers): add PATCH handler to provider connection route (CLI rotate 405) - #10366
fix(providers): add PATCH handler to provider connection route (CLI rotate 405)#10366benzntech wants to merge 4 commits into
Conversation
|
Thanks for tracking this down — the PATCH/PUT mismatch between Two things need to land before this can merge:
Everything else — code, security, scope — looks good. Happy to help land this once those two are sorted. |
The OpenAPI spec and the CLI (omniroute providers rotate, generated api-commands) both use PATCH /api/providers/[id], but the route only implemented PUT — PATCH requests returned 405 and key rotation via the CLI silently failed while reporting success (the DB-write fallback only catches thrown exceptions, not non-OK HTTP responses). Add a PATCH handler delegating to the PUT handler: both apply the same partial-update schema, so the semantics are identical. Regression test proves the PATCH export exists and delegates into the shared auth path; verified to fail without the fix.
The 'PATCH delegates to PUT' assertion hardcoded a 401, which only holds when management auth is enforced (dev). In the CI unit-test env auth is not required, so the flow falls through to 'Connection not found' (404) for an unknown id — the test failed on the status code while the PATCH->PUT delegation itself is correct. Assert on delegation equivalence instead: PATCH must never 405 (the regression) and must return the same status as PUT for the same input. Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
The same Request was passed to both PATCH and PUT — PUT consumes the body via request.json(), so the second call got an empty body (400 validation) vs the first (404 not-found): a false status mismatch on bases where management auth is bypassed in the test env (release v3.8.50). Fresh Request per invocation makes identical inputs produce identical statuses.
d2feb89 to
5129094
Compare
|
Both points addressed — thanks for the guidance! 🙏 1. Test made environment-independent. The previous version passed the same 2. Retargeted to CI should pick up the retarget now — happy to address anything that surfaces. |
Problem
omniroute providers rotate <name> --new-key <key>fails with HTTP 405 on every run, while still reporting success. The CLI (both the hand-writtenbin/cli/commands/providers.mjsand the auto-generatedbin/cli/api-commands/providers.mjs) sendsPATCH /api/providers/[id]— matching the OpenAPI spec (docs/openapi.yamldeclarespatchfor that path) — but the route only implements PUT, so PATCH returns 405.Worse, the CLI's DB-write fallback only catches thrown exceptions, not non-OK HTTP responses, so the failure is silent: the key is never updated but the command exits 0.
Fix
Add a
PATCHhandler tosrc/app/api/providers/[id]/route.tsthat delegates to the existingPUThandler. Both apply the same partial-update schema (updateProviderConnectionSchema— only provided fields are applied), so PATCH and PUT have identical semantics; the route now honors the method the spec and CLI already use.Regression test
tests/unit/providers-route-patch-method.test.ts:PATCHhandlerPATCHwith an unauthenticated request and asserts it reaches the shared auth path (401), proving delegation rather than a 405/undefinedVerified to fail without the fix (2/3 tests fail on the pre-fix route) and pass with it. Route-validation gate passes (606 route files).