mirror of
https://github.com/BerriAI/litellm.git
synced 2026-08-28 05:25:59 +00:00
* refactor(ui): extract the create-key payload builder out of create_key_button handleCreate built the POST /key/generate body inline by mutating the object antd handed it, across roughly 170 lines mixing form values, twelve pieces of React state and five sources that all fold into object_permission. Nothing could assert that shape without rendering the whole modal. The construction now lives in createKeyPayload.ts as a pure function returning a tagged union, with 46 unit tests that run in single digit milliseconds and pin whole payloads with toStrictEqual, following the createServerPayload pattern the dashboard CLAUDE.md documents. Behaviour is unchanged. The extraction was checked against the pre-extraction handler with a differential harness over 50 input combinations, comparing the built object, its key order and its serialised bytes, and eight mutations of the new module were each confirmed to fail the committed tests. * refactor(ui): align the key payload builder to the programme's entry-condition spec Folds the duplicate-alias guard and the endpoint choice into the builder, so KeyPayloadResult now carries three variants and handleCreate holds no payload decision of its own. The two failure branches keep their original position around toast.info and setIsModalVisible, and the builder checks the alias before the agent selection, so the observable order is unchanged. Pins the serialised wire shape as well as the object. The closed form registers team_id at null through initialValue while organization_id has no initialValue and stays undefined, so an untouched create sends seven of its eight keys. Opening Optional Settings takes the object to 23 keys and the wire to nine. Both directions of the definedness contract are now covered: undefined must not become null, and null must not be dropped. The earlier fixture fed a team_id the closed form cannot produce and pinned a six-key wire as a result. * refactor(ui): fold the service-account metadata write into its only caller Removes assignServiceAccountId as a separate helper so there is no mutating function available for reuse, which was the substance of the review finding. The write now sits two lines below the JSON.parse that produced the value, so it is visibly local and cannot reach a caller-owned object. The write itself stays. Metadata has no validation rules, so a user can submit a JSON body that parses to a primitive or an array. On a primitive the property write raises a TypeError and the existing catch surfaces an error toast, and on an array it leaves the array intact through JSON.stringify. A spread coerces both to plain objects instead, silently creating a key from input the form rejects today. Two tests pin those cases and go red against the spread. |
||
|---|---|---|
| .. | ||
| litellm-dashboard | ||
| Dockerfile | ||
| nginx.conf | ||