Skip to main content

Class: abstract RoadmapProvider<TConfig>

Base class for roadmap data providers (Jira, GitHub Projects, Linear).

Remarks​

Extend this class to integrate external project management systems with the roadmap plugin. Implement the abstract methods to fetch cards, columns, and provider metadata.

Example​

export class JiraRoadmapProvider extends RoadmapProvider<JiraProviderConfig> {
public async fetchCards(): Promise<RoadmapCard[]> {
// Fetch and map Jira issues to RoadmapCard
return [];
}

public async getColumns() {
return [{ id: 'todo', name: 'To Do', order: 0 }];
}
}

Extended by​

Type Parameters​

Type ParameterDefault type
TConfig extends ProviderConfigProviderConfig

Constructors​

new RoadmapProvider()​

protected new RoadmapProvider<TConfig>(config): RoadmapProvider<TConfig>

Creates a new roadmap provider instance with the supplied configuration.

Parameters​

ParameterTypeDescription
configTConfigProvider specific configuration object.

Returns​

RoadmapProvider<TConfig>

Properties​

PropertyModifierTypeDescription
configreadonlyTConfigProvider specific configuration object.

Methods​

createCard()​

abstract createCard(input): Promise<CreateCardResult>

Creates a new card in the external provider system.

Parameters​

ParameterTypeDescription
inputCreateCardInputCard data (title, description, column, labels, etc.).

Returns​

Promise<CreateCardResult>

Result containing the created card and success status.

Throws​

Authentication, validation, or network errors.

Example​

public async createCard(input: CreateCardInput): Promise<CreateCardResult> {
const issue = await this.client.createIssue({
summary: input.title,
description: input.description,
});
return { card: this.mapIssueToCard(issue), success: true };
}

fetchCards()​

abstract fetchCards(): Promise<readonly RoadmapCard[]>

Fetches all roadmap cards from the provider.

Returns​

Promise<readonly RoadmapCard[]>

Array of roadmap cards.


fetchCardsByDateRange()?​

optional fetchCardsByDateRange(filter): Promise<readonly RoadmapCard[]>

Optional method to fetch cards filtered by date range (useful for reporting and activity analysis).

Parameters​

ParameterTypeDescription
filterDateRangeFilterDate range filter with optional startDate, endDate, and dateField.

Returns​

Promise<readonly RoadmapCard[]>

Cards matching the date criteria, ordered by date descending (most recent first).

Example​

public async fetchCardsByDateRange(filter: DateRangeFilter): Promise<readonly RoadmapCard[]> {
const jql = this.buildDateRangeJql(filter);
const issues = await this.searchIssues(jql);
return issues.map(this.mapIssueToCard);
}

getCard()​

abstract getCard(cardId): Promise<null | RoadmapCard>

Retrieves a single card by its provider-specific ID (e.g., Jira issue key 'PROJ-123').

Parameters​

ParameterTypeDescription
cardIdstringProvider-specific identifier.

Returns​

Promise<null | RoadmapCard>

Card if found, null if not found.

Throws​

Authentication or network errors (not for missing cards).

Example​

public async getCard(cardId: string): Promise<RoadmapCard | null> {
try {
const issue = await this.client.getIssue(cardId);
return this.mapIssueToCard(issue);
} catch (error) {
if (error.status === 404) return null;
throw error;
}
}

getColumns()​

abstract getColumns(): Promise<readonly RoadmapColumn[]>

Retrieves the available roadmap columns.

Returns​

Promise<readonly RoadmapColumn[]>

Array of column definitions.

Example​

public async getColumns() {
return [
{ id: 'backlog', name: 'Backlog', order: 0, archived: false },
{ id: 'done', name: 'Done', order: 3, archived: true },
];
}

getIssueTypes()​

abstract getIssueTypes(): Promise<readonly string[]>

Retrieves available issue types for card creation (e.g., 'Task', 'Story', 'Bug').

Returns​

Promise<readonly string[]>

Array of issue type names.

Example​

public async getIssueTypes(): Promise<readonly string[]> {
return ['Task', 'Story', 'Bug', 'Epic'];
}

getLabels()​

abstract getLabels(): Promise<readonly string[]>

Retrieves available labels for card categorization (e.g., 'bug', 'enhancement').

Returns​

Promise<readonly string[]>

Array of label names.

Example​

public async getLabels(): Promise<readonly string[]> {
return ['bug', 'enhancement', 'feature'];
}

getProviderInfo()​

abstract getProviderInfo(): Promise<ProviderInfo>

Returns provider metadata (name, version, capabilities) for diagnostics and logging.

Returns​

Promise<ProviderInfo>

Provider information.

Example​

public async getProviderInfo() {
return {
name: 'GitHub Projects',
version: '0.1.0',
capabilities: ['cards', 'columns'],
};
}

init()​

init(): Promise<void>

Optional initialization hook called before the first sync. Default implementation is a no-op.

Returns​

Promise<void>

Example​

public override async init() {
await this.client.authenticate();
}

updateCard()​

abstract updateCard(cardId, input): Promise<UpdateCardResult>

Updates an existing card (partial update - only provided fields are changed).

Parameters​

ParameterTypeDescription
cardIdstringProvider-specific identifier.
inputUpdateCardInputPartial card data to update.

Returns​

Promise<UpdateCardResult>

Result containing the updated card and success status.

Throws​

Authentication, validation, not found, or network errors.

Example​

public async updateCard(cardId: string, input: UpdateCardInput): Promise<UpdateCardResult> {
const fields: Record<string, unknown> = {};
if (input.title) fields.summary = input.title;
if (input.description) fields.description = input.description;

await this.client.updateIssue(cardId, { fields });
const card = await this.getCard(cardId);

return { card: card!, success: true };
}

validateConfig()​

validateConfig(_config): boolean

Validates provider-specific configuration. Default implementation returns true.

Parameters​

ParameterTypeDescription
_configTConfigConfiguration to validate (defaults to instance config).

Returns​

boolean

Whether the configuration is valid.

Example​

public override validateConfig(config = this.config) {
return Boolean(config.options?.apiToken);
}