/claim #2281

Summary

Adds a new Jira Service Management (JSM) connector as a thin subclass of the existing Jira connector, addressing Issue #2281.

Approach

After reviewing the feedback on PR #7008 and PR #9121, I chose the thin subclass approach — no code duplication, no copy-paste. The JSM connector inherits all logic from JiraConnector and overrides only what differs:

  • document_source property → returns DocumentSource.JIRA_SERVICE_MANAGEMENT
  • Constructor → accepts jira_service_management_base_url instead of jira_base_url

This is possible because JSM uses the same underlying Jira APIs and authentication.

Changes

Backend

File Change
backend/onyx/configs/constants.py Add JIRA_SERVICE_MANAGEMENT to DocumentSource enum + description
backend/onyx/connectors/jira/connector.py Add document_source property to JiraConnector; add source param to process_jira_issue()
backend/onyx/connectors/jira_service_management/__init__.py New module
backend/onyx/connectors/jira_service_management/connector.py JiraServiceManagementConnector — thin subclass of JiraConnector
backend/onyx/connectors/registry.py Register JSM connector in CONNECTOR_CLASS_MAP
backend/ee/onyx/external_permissions/sync_params.py Add JSM to permission sync config (reuses Jira sync functions)

Frontend

File Change
web/src/lib/types.ts Add JiraServiceManagement to ValidSources enum + auto-sync sources
web/src/lib/sources.ts Add JSM source metadata (uses JiraIcon)
web/src/lib/connectors/connectors.tsx Add JSM connector form config + JiraServiceManagementConfig interface
web/src/lib/connectors/credentials.ts Add JSM credential defaults (reuses JiraCredentialJson)
web/src/lib/connectors/AutoSyncOptionFields.tsx Add JSM auto-sync entry
web/src/components/admin/connectors/ConnectorTitle.tsx Add JSM connector title handling

Key design decisions addressing prior PR feedback

  1. No code duplication (P0 from #9121 review) — thin subclass, shared logic stays in jira/
  2. Uses ConnectorMapping not ConnectorDescriptor (P0 from #7008 review)
  3. DocumentSource.JIRA_SERVICE_MANAGEMENT properly added to enum (P0 from #7008 review)
  4. Frontend field names match backendjira_service_management_base_url only, no stale jira_base_url (P2 from #7008 review)
  5. No dead/unused code — no copy-pasted utilities (P2 from #9121 review)
  6. Modern Python typing — uses list not List (P2 from #9121 review)

Testing

The JSM connector inherits all behavior from the Jira connector. It can be tested by:

  1. Creating a JSM connector with a JSM project URL
  2. Providing Jira Cloud credentials (email + API token) or Server/DC PAT
  3. Indexing service requests, incidents, problems, and changes

Closes #2281


Summary by cubic

Adds a Jira Service Management connector as a thin subclass of the Jira connector to index service requests, incidents, problems, and changes while reusing Jira auth, JQL, and UI. Includes JSM-specific permission sync and prefixing so groups and docs are tagged with jira_service_management. Closes #2281.

  • New Features

    • Added JiraServiceManagementConnector (uses jira_service_management_base_url) with DocumentSource.JIRA_SERVICE_MANAGEMENT; registered in backend mapping and UI with form (incl. scoped_token), credential defaults, auto-sync, and Admin title.
    • Introduced subclass hooks: JiraConnector.document_source, process_jira_issue(source); permission helpers accept source for correct group prefixing.
    • Added JSM-specific doc_sync and group_sync that instantiate the JSM connector and read jira_service_management_base_url; wired in EE sync_params.
  • Bug Fixes

    • Permission prefixing now threads the connector document_source through Jira access and EE page access, so JSM groups/docs use jira_service_management.
    • Extracted public jira_group_sync_impl shared by Jira/JSM; JSM syncs read explicit config keys and use the JIRA_CONNECTOR_LABELS_TO_SKIP fallback; corrected JSM docs link to /jira_service_management; added missing scoped_token to the JSM TS interface.

Written for commit 50d12a9497f6ae1e4a8932da778e73efe8d29836. Summary will update on new commits.

Claim

Total prize pool $250
Total paid $0
Status Pending
Submitted March 23, 2026
Last updated March 23, 2026

Contributors

ZO

Zoro

@godlymane

100%

Sponsors

ON

Onyx (YC W24)

@onyx-dot-app

$250