Skip to content

Fix multiple UI/UX issues - #3001

Merged
lasanthaS merged 16 commits into
wso2:mainfrom
Piumal1999:uiux
Jul 30, 2026
Merged

Fix multiple UI/UX issues#3001
lasanthaS merged 16 commits into
wso2:mainfrom
Piumal1999:uiux

Conversation

@Piumal1999

@Piumal1999 Piumal1999 commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Purpose

Fixing multiple UI/UX issues
Fix #2939
Fix #2943
Fix #2944
Fix #2959
Fix #2963
Fix #2966

Summary

Settings — forms & fields

  • Fixed the "Add View" handle being overwritten when typing the Name (added a handleTouched guard); same fix applied to the Labels modal.
  • Reordered the View modal so Name comes before Handle.
  • Removed the Handle field from the Key Manager form (server derives it) and relabeled it "Name".
  • Subscription plan modal: auto-generate handle from name, then removed the Handle field entirely (server generates it); renamed labels/table columns to Name/Handle.
  • Added a real org Labels picker to the API create/edit wizard (it was mislabeling the free-text Tags field as "Labels").
  • API workflow creation: added a Handle field with auto-generation (APIs/MCP-style).
  • Fixed the plan modal being too small — the Limits dropdowns no longer clutter/clip.
  • Removed the margin-bottom on .cfg-field-hint.

API create/edit bugs

  • Fixed Visibility showing "Visible" for a saved "Hidden" API (uppercase/title-case mismatch).
  • Fixed Technical/Business Owner fields showing empty on edit (missing from the data blob).

Handle-generation standardization (id-or-UUID/slug, 409 on conflict)

  • Key managers & webhook subscribers → id, else UUID.
  • Subscription plans → id, else UUID.
  • Applications → id, else slugified display name.
  • API keys → made id optional (UUID fallback) + spec update; rejects malformed ids.
  • Hardened Key Manager against a non-string handle (YAML) crashing to 500.

Subscriptions

  • Added the missing Regenerate Subscription Key option to the per-API and MCP subscription views (with confirm dialog, a11y focus handling, cache sync).
  • Removed the Application column from the Subscriptions list.

Application key / token flow

  • Fixed the generated-token copy button (wrong function signature).
  • Fixed the Key Manager cURL copy button (broken element lookup).
  • Fixed Regenerate token not sending the request (new FormData(null) crash on a non-existent form).
  • Added the "✓ Copied" visual feedback to the token copy button.
  • Fixed the scopes input (Enter now adds scope chips, and they're actually sent on regenerate).
  • Removed the redundant Cancel button in the token modal.

MCP Playground

  • Enabled a custom auth header name field (was hardcoded to Authorization: Bearer).

API "Try Out"

  • Removed the tryItCorsProxy from the Elements UI so the sample curl no longer leaks the internal proxy URL.

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The changes update developer-portal settings, label selection, generated resource handles, subscription-token regeneration, API specification wiring, OAuth token interactions, workflow handles, and corresponding API documentation and integration tests.

Changes

Settings management

Layer / File(s) Summary
Settings forms and label selection
portals/developer-portal/src/controllers/viewConfigureController.js, portals/developer-portal/src/pages/settings/..., portals/developer-portal/src/scripts/settings-*.js, portals/developer-portal/src/styles/settings-layout.css
Adds managed API label selection, updates settings forms and tables, and preserves manually edited identifiers during auto-generation.
Key-manager settings workflow
portals/developer-portal/src/scripts/settings-keymanagers.js, portals/developer-portal/it/ui/cypress/e2e/settings/002-key-managers.cy.js
Creates key managers without client-supplied handles and verifies server-generated identifiers and developer access.
Views and labels E2E coverage
portals/developer-portal/it/ui/cypress/e2e/settings/001-views-labels.cy.js
Seeds labels for view creation, uses insecure-context-safe test identifiers, verifies rendered rows, and cleans up resources.

Subscription token management

Layer / File(s) Summary
Regeneration controls and subscription status
portals/developer-portal/src/defaultContent/pages/{api-landing,mcp-landing}/partials/*, portals/developer-portal/src/pages/subscriptions/partials/subscription-list.hbs
Adds regeneration dialogs and replaces the subscription application column with active/inactive status badges.
API token regeneration flow
portals/developer-portal/src/scripts/api-subscription-plans.js
Adds guarded API token regeneration, modal updates, alerts, focus handling, and event wiring.
MCP token regeneration flow
portals/developer-portal/src/scripts/mcp-subscription-plans.js, portals/developer-portal/src/scripts/subscription.js
Adds guarded MCP token regeneration and synchronizes shared token caches.

Identifier generation and API contracts

Layer / File(s) Summary
API key, plan, and application identifiers
portals/developer-portal/src/services/{apiKeyService,apiMetadataService}.js, portals/developer-portal/src/dao/applicationDao.js, portals/developer-portal/src/scripts/settings-plans.js
Uses optional identifiers with UUID or normalized fallbacks, adds duplicate handling, and updates plan creation payloads.
Resource handle creation and uniqueness
portals/developer-portal/src/services/{keyManagerService,webhookSubscriberService}.js, portals/developer-portal/database/schema.*
Generates UUID handles when omitted, validates explicit handles, maps duplicate inserts to conflicts, and enforces API-key handle uniqueness per organization and API.
Identifier API documentation and validation
portals/developer-portal/docs/devportal-openapi-spec-v0.9.yaml, docs/rest-apis/devportal/*, portals/developer-portal/it/rest-api/webhook-subscribers/*
Documents optional identifiers, UUID generation, collision responses, expanded key-manager scopes, and updated webhook-subscriber behavior.

Portal interactions and presentation

Layer / File(s) Summary
API and MCP specification wiring
portals/developer-portal/src/pages/partials/api-specification.hbs, portals/developer-portal/it/ui/cypress/e2e/002-apis/002-rest-api-details.cy.js
Removes conditional REST proxy wiring, configures the MCP Authorization header, and updates the Try It assertion.
Application and OAuth token interactions
portals/developer-portal/src/pages/application/partials/*, portals/developer-portal/src/scripts/oauth2-key-generation.js
Preserves scope chips during regeneration, adds delegated scope entry, updates consumer-key lookup, and replaces inline modal bindings with data attributes.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Developer
  participant ManageModal
  participant ConfirmationDialog
  participant SubscriptionAPI
  Developer->>ManageModal: Select Regenerate
  ManageModal->>ConfirmationDialog: Show confirmation
  Developer->>ConfirmationDialog: Confirm
  ConfirmationDialog->>SubscriptionAPI: POST /subscriptions/{subId}/regenerate-token
  SubscriptionAPI-->>ConfirmationDialog: Return token or error
  ConfirmationDialog->>ManageModal: Show token and update controls
Loading

Possibly related PRs

Suggested reviewers: lasanthas, thushani-jayasekera, malinthaprasan, renuka-fernando, virajsalaka

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (2 warnings, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 38.46% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ⚠️ Warning The description only covers Purpose and a brief Summary; most required template sections are missing or empty. Add the missing Goals, Approach, User stories, Documentation, tests, Security checks, Samples, Related PRs, and Test environment sections.
Title check ❓ Inconclusive The title is accurate but too generic to identify the main change at a glance. Use a more specific title naming the primary fix area, such as forms, token regeneration, and handle-generation changes.
✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@portals/developer-portal/it/ui/cypress/e2e/settings/002-key-managers.cy.js`:
- Around line 25-29: Replace the Date.now()-based suffix in
002-key-managers.cy.js lines 25-29 with crypto.randomUUID(), and use that UUID
for the key-manager and application identifiers. Apply the same UUID-based
suffix change in 001-views-labels.cy.js lines 23-27 for the view and label
identifiers, preserving the existing naming formats.

In `@portals/developer-portal/src/pages/partials/api-specification.hbs`:
- Line 9: Restore the conditional tryout proxy configuration in the Elements API
component, using the existing tryoutProxyBase value generated by the controller
and preserving direct requests only when the proxy is unavailable or
intentionally disabled. Ensure tryouts continue using tryoutProxyController.js
protections for non-CORS endpoints rather than bypassing server-side validation,
timeout, and response-size checks.

In `@portals/developer-portal/src/scripts/api-subscription-plans.js`:
- Around line 181-186: Replace the raw err.description and e.message
interpolations in the regeneration failure alerts with one generic failure
message in both
portals/developer-portal/src/scripts/api-subscription-plans.js:181-186 and
portals/developer-portal/src/scripts/mcp-subscription-plans.js:166-171. Keep
backend error details out of client-facing alerts and retain them only in
server-side logging.
- Around line 150-158: Make both regeneration dialogs keyboard and screen-reader
accessible: in portals/developer-portal/src/scripts/api-subscription-plans.js
lines 150-158 and portals/developer-portal/src/scripts/mcp-subscription-plans.js
lines 133-141, store the triggering element when opening, move focus to a dialog
action, and restore focus to that trigger when closing; in
portals/developer-portal/src/defaultContent/pages/api-landing/partials/api-subscription-plans.hbs
lines 177-189 and
portals/developer-portal/src/defaultContent/pages/mcp-landing/partials/mcp-subscription-plans.hbs
lines 193-205, add aria-labelledby to each dialog and assign the referenced ID
to its title.

In `@portals/developer-portal/src/services/keyManagerService.js`:
- Around line 142-152: Update the explicit-handle validation in the key creation
flow around hadExplicitHandle so non-string payload.handle values are rejected
with the same 400 validation response before calling trim or
HANDLE_PATTERN.test. Preserve the existing whitespace and pattern validation for
string handles, and continue deriving the handle from displayName when no valid
explicit handle is provided.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: eb6706fd-05f4-4d8a-883e-f3105dbfde8f

📥 Commits

Reviewing files that changed from the base of the PR and between 41672fe and 61ad950.

📒 Files selected for processing (24)
  • portals/developer-portal/it/ui/cypress/e2e/settings/001-views-labels.cy.js
  • portals/developer-portal/it/ui/cypress/e2e/settings/002-key-managers.cy.js
  • portals/developer-portal/src/controllers/viewConfigureController.js
  • portals/developer-portal/src/defaultContent/pages/api-landing/partials/api-subscription-plans.hbs
  • portals/developer-portal/src/defaultContent/pages/mcp-landing/partials/mcp-subscription-plans.hbs
  • portals/developer-portal/src/pages/partials/api-specification.hbs
  • portals/developer-portal/src/pages/settings/partials/cfg-apis-panel.hbs
  • portals/developer-portal/src/pages/settings/partials/cfg-keymanagers-panel.hbs
  • portals/developer-portal/src/pages/settings/partials/cfg-modals.hbs
  • portals/developer-portal/src/pages/settings/partials/cfg-plans-panel.hbs
  • portals/developer-portal/src/pages/subscriptions/partials/subscription-list.hbs
  • portals/developer-portal/src/scripts/api-subscription-plans.js
  • portals/developer-portal/src/scripts/mcp-subscription-plans.js
  • portals/developer-portal/src/scripts/settings-apis.js
  • portals/developer-portal/src/scripts/settings-keymanagers.js
  • portals/developer-portal/src/scripts/settings-labels.js
  • portals/developer-portal/src/scripts/settings-plans.js
  • portals/developer-portal/src/scripts/settings-views.js
  • portals/developer-portal/src/scripts/subscription.js
  • portals/developer-portal/src/services/keyManagerService.js
  • portals/developer-portal/src/services/webhookSubscriberService.js
  • portals/developer-portal/src/styles/settings-layout.css
  • portals/developer-portal/src/utils/handleSlug.js
  • portals/developer-portal/src/utils/handleSlug.test.js
💤 Files with no reviewable changes (1)
  • portals/developer-portal/src/pages/subscriptions/partials/subscription-list.hbs

Comment thread portals/developer-portal/it/ui/cypress/e2e/settings/002-key-managers.cy.js Outdated
Comment thread portals/developer-portal/src/pages/partials/api-specification.hbs
Comment thread portals/developer-portal/src/scripts/api-subscription-plans.js
Comment thread portals/developer-portal/src/scripts/api-subscription-plans.js
Comment thread portals/developer-portal/src/services/keyManagerService.js Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (1)
portals/developer-portal/src/dao/applicationDao.js (1)

28-36: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate slugify implementation.

This is byte-for-byte identical to the slugify function already in manage-api-workflows.js. Consider extracting a shared utility to avoid future divergence.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@portals/developer-portal/src/dao/applicationDao.js` around lines 28 - 36,
Extract the duplicated slugify implementation from applicationDao.js and
manage-api-workflows.js into a shared utility, then update both callers to
import and reuse that utility while preserving the existing slug generation
behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@portals/developer-portal/src/dao/applicationDao.js`:
- Around line 38-44: The create function must safely normalize appData.handle
before trimming, accepting non-string YAML metadata.name or JSON id values
without throwing. Use the caller-supplied handle only when its coerced value is
non-empty; otherwise fall back to slugify(appData.displayName), and ensure an
empty generated slug is replaced with the established valid fallback rather than
storing an empty handle.

In `@portals/developer-portal/src/pages/application/partials/keys-token.hbs`:
- Line 47: Remove the inline onclick handler from the token-generation element
and expose applicationMetadata.displayName and serialized subscriptionScopes
through appropriately escaped data-* attributes, alongside the other required
arguments. Update the JavaScript binding for the relevant token form/modal flow
to read these dataset values and invoke openGenerateTokenModal without embedding
user-controlled values in JavaScript source.

In `@portals/developer-portal/src/scripts/oauth2-key-generation.js`:
- Around line 564-567: Replace the innerHTML interpolation in the scope-chip
creation flow with a textContent or createTextNode node for the untrusted scope
value, then append the static remove control separately and retain the existing
click behavior. Audit and update all other scope-chip rendering sinks reachable
from this input to use contextual-safe DOM APIs rather than HTML interpolation.
- Around line 271-275: Update the scope-selection logic around uiScopeChips so
it uses the modal’s presence as the condition, not uiScopeChips.length. When the
modal exists, always assign subscribedScopes from uiScopeChips, including an
empty array, while preserving the existing fallback when no modal is available.

In `@portals/developer-portal/src/services/apiKeyService.js`:
- Around line 158-164: Enforce explicit API-key handle uniqueness atomically in
the persistence layer used by the create flow around apiKeyDao.getIdByHandle,
rather than relying only on its pre-check. Add or use a database unique
constraint/index for the per-API handle, then catch the resulting duplicate-key
error and return the existing 409 conflict behavior; preserve the current
validation message and normal creation path for non-duplicates.

In `@portals/developer-portal/src/services/apiMetadataService.js`:
- Around line 1268-1277: Update docs/devportal-openapi-spec-v0.9.yaml to reflect
UUID fallback identifiers across all affected resources: at
portals/developer-portal/src/services/apiMetadataService.js lines 1268-1277,
remove id from SubscriptionPlanRequest.required; at
portals/developer-portal/src/services/keyManagerService.js lines 132-146, revise
KeyManagerRequest.id and the POST /key-managers summary to describe UUID
generation rather than displayName-derived handles; at
portals/developer-portal/src/services/webhookSubscriberService.js lines 57-61,
revise WebhookSubscriberRequest.id to document UUID-on-omission and 409
responses for duplicates.
- Around line 1268-1277: Update the SubscriptionPlanRequest schema in
devportal-openapi-spec-v0.9.yaml so id is optional rather than required, while
preserving id’s existing property definition and validation. Keep
normalizePlanHandle and the settings-plans.js create/update behavior unchanged.

In `@portals/developer-portal/src/services/webhookSubscriberService.js`:
- Around line 48-50: Update the duplicate-key error handling in
updateWebhookSubscriber to pass the webhook subscriber handle string to
_uniqueConstraintMessage instead of the entire req.body object, preserving the
actual conflicting id in the generated message.

---

Nitpick comments:
In `@portals/developer-portal/src/dao/applicationDao.js`:
- Around line 28-36: Extract the duplicated slugify implementation from
applicationDao.js and manage-api-workflows.js into a shared utility, then update
both callers to import and reuse that utility while preserving the existing slug
generation behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 98296bea-e531-4181-b98a-a800568094cf

📥 Commits

Reviewing files that changed from the base of the PR and between 61ad950 and 758614e.

📒 Files selected for processing (22)
  • portals/developer-portal/docs/devportal-openapi-spec-v0.9.yaml
  • portals/developer-portal/it/ui/cypress/e2e/settings/001-views-labels.cy.js
  • portals/developer-portal/it/ui/cypress/e2e/settings/002-key-managers.cy.js
  • portals/developer-portal/src/dao/applicationDao.js
  • portals/developer-portal/src/defaultContent/pages/api-landing/partials/api-subscription-plans.hbs
  • portals/developer-portal/src/defaultContent/pages/mcp-landing/partials/mcp-subscription-plans.hbs
  • portals/developer-portal/src/pages/application/partials/keys-token.hbs
  • portals/developer-portal/src/pages/application/partials/manage-keys-km-card.hbs
  • portals/developer-portal/src/pages/settings/partials/cfg-modals.hbs
  • portals/developer-portal/src/pages/settings/partials/cfg-plans-panel.hbs
  • portals/developer-portal/src/pages/settings/partials/create-api-workflow.hbs
  • portals/developer-portal/src/scripts/api-subscription-plans.js
  • portals/developer-portal/src/scripts/manage-api-workflows.js
  • portals/developer-portal/src/scripts/mcp-subscription-plans.js
  • portals/developer-portal/src/scripts/oauth2-key-generation.js
  • portals/developer-portal/src/scripts/settings-plans.js
  • portals/developer-portal/src/services/apiKeyService.js
  • portals/developer-portal/src/services/apiMetadataService.js
  • portals/developer-portal/src/services/keyManagerService.js
  • portals/developer-portal/src/services/webhookSubscriberService.js
  • portals/developer-portal/src/utils/handleSlug.js
  • portals/developer-portal/src/utils/handleSlug.test.js
💤 Files with no reviewable changes (2)
  • portals/developer-portal/src/utils/handleSlug.js
  • portals/developer-portal/src/utils/handleSlug.test.js
🚧 Files skipped from review as they are similar to previous changes (2)
  • portals/developer-portal/src/defaultContent/pages/mcp-landing/partials/mcp-subscription-plans.hbs
  • portals/developer-portal/src/scripts/api-subscription-plans.js

Comment thread portals/developer-portal/src/dao/applicationDao.js Outdated
Comment thread portals/developer-portal/src/pages/application/partials/keys-token.hbs Outdated
Comment thread portals/developer-portal/src/scripts/oauth2-key-generation.js Outdated
Comment thread portals/developer-portal/src/scripts/oauth2-key-generation.js Outdated
Comment thread portals/developer-portal/src/services/apiKeyService.js
Comment thread portals/developer-portal/src/services/apiMetadataService.js
Comment thread portals/developer-portal/src/services/webhookSubscriberService.js

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
portals/developer-portal/src/services/webhookSubscriberService.js (1)

52-61: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Validate req.body before assigning payload.handle.

For requests without a required body, req.body can be undefined; payload.handle = ... then throws before _validateRequiredFields returns the 400. Normalize/reject non-object bodies before handle generation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@portals/developer-portal/src/services/webhookSubscriberService.js` around
lines 52 - 61, Update createWebhookSubscriber to validate or normalize req.body
before assigning payload.handle, ensuring undefined or non-object bodies reach
_validateRequiredFields and produce the expected 400 response instead of
throwing. Preserve the existing caller-supplied id behavior and UUID generation
for valid object payloads.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/rest-apis/devportal/api-keys.md`:
- Line 152: The generated Markdown files must not be edited directly; update the
API-key, key-manager, subscription-plan, and webhook-subscriber identifier
wording in their generator/template, then regenerate the outputs. Apply the
generator changes for docs/rest-apis/devportal/api-keys.md:152-152,
key-managers.md:22-22, schemas.md:918-918, schemas.md:1160-1160,
schemas.md:1307-1307, schemas.md:1430-1431, and webhook-subscribers.md:22-22,
preserving the generated content consistently across all affected sites.

In
`@portals/developer-portal/src/pages/application/partials/manage-keys-km-card.hbs`:
- Around line 100-106: Update the data-key-manager value in the token modal
trigger to pass the stable key-manager ID from kmId instead of the display name
kmName, matching the identifier used by keys-token.hbs and generateOauthKey to
locate token and regeneration elements.

In `@portals/developer-portal/src/scripts/oauth2-key-generation.js`:
- Around line 213-222: Update both scope-chip implementations in
portals/developer-portal/src/scripts/oauth2-key-generation.js at lines 213-222
and 581-586 to create the remove control as a labeled button with type="button"
instead of a non-focusable span; preserve the existing delegated and direct
removal behavior while making both controls keyboard accessible.

In `@portals/developer-portal/src/services/apiKeyService.js`:
- Around line 204-208: In the transaction catch around the API-key creation
flow, update the duplicate-key handling near db.isDuplicateKeyError(err) so it
maps to the 409 response only when the violated constraint is
uq_api_key_org_api_handle. Preserve unrelated duplicate-key errors from
webhook/application publishing or other transaction steps so their original
conflict and handling remain intact.

---

Outside diff comments:
In `@portals/developer-portal/src/services/webhookSubscriberService.js`:
- Around line 52-61: Update createWebhookSubscriber to validate or normalize
req.body before assigning payload.handle, ensuring undefined or non-object
bodies reach _validateRequiredFields and produce the expected 400 response
instead of throwing. Preserve the existing caller-supplied id behavior and UUID
generation for valid object payloads.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 6c3a87ec-ad7f-4ef7-a586-c7d1515b6bd4

📥 Commits

Reviewing files that changed from the base of the PR and between 758614e and bbc80ef.

📒 Files selected for processing (18)
  • docs/rest-apis/devportal/api-keys.md
  • docs/rest-apis/devportal/key-managers.md
  • docs/rest-apis/devportal/schemas.md
  • docs/rest-apis/devportal/webhook-subscribers.md
  • portals/developer-portal/database/schema.postgres.sql
  • portals/developer-portal/database/schema.sqlite.sql
  • portals/developer-portal/database/schema.sqlserver.sql
  • portals/developer-portal/docs/devportal-openapi-spec-v0.9.yaml
  • portals/developer-portal/it/rest-api/webhook-subscribers/webhook-subscribers.spec.js
  • portals/developer-portal/it/ui/cypress/e2e/002-apis/002-rest-api-details.cy.js
  • portals/developer-portal/it/ui/cypress/e2e/settings/001-views-labels.cy.js
  • portals/developer-portal/it/ui/cypress/e2e/settings/002-key-managers.cy.js
  • portals/developer-portal/src/dao/applicationDao.js
  • portals/developer-portal/src/pages/application/partials/keys-token.hbs
  • portals/developer-portal/src/pages/application/partials/manage-keys-km-card.hbs
  • portals/developer-portal/src/scripts/oauth2-key-generation.js
  • portals/developer-portal/src/services/apiKeyService.js
  • portals/developer-portal/src/services/webhookSubscriberService.js
🚧 Files skipped from review as they are similar to previous changes (1)
  • portals/developer-portal/docs/devportal-openapi-spec-v0.9.yaml

Comment thread docs/rest-apis/devportal/api-keys.md
Comment thread portals/developer-portal/src/scripts/oauth2-key-generation.js
Comment thread portals/developer-portal/src/services/apiKeyService.js Outdated
@lasanthaS
lasanthaS merged commit 66c0d02 into wso2:main Jul 30, 2026
9 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request Aug 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants