Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,13 @@ const project = await client.projects.create("workspace-slug", {
- **Stickies**: Stickies management
- **Teamspaces**: Teamspace management
- **Initiatives**: Initiative management
- **WorkspaceTemplates**: Workspace-level work item, project, and page templates
- **WorkspaceWorkItemTypes**: Workspace-level work item type management with property links
- **WorkspaceWorkItemProperties**: Workspace-level custom property management with options
- **WorkspaceProjectLabels**: Workspace-level project label management
- **WorkspaceProjectStates**: Workspace-level project state management
- **WorkItemRelationDefinitions**: Custom work item relation type definitions
- **Releases**: Release management with tags, labels, and item label assignment
- **Features**: Workspace and project features management

## Development
Expand Down
32 changes: 32 additions & 0 deletions src/api/Releases/ItemLabels.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { BaseResource } from "../BaseResource";
import { Configuration } from "../../Configuration";
import { AddReleaseItemLabel, ReleaseLabel } from "../../models/Release";

/**
* ReleaseItemLabels sub-resource
* Manages labels assigned to a specific release
*/
export class ItemLabels extends BaseResource {
constructor(config: Configuration) {
super(config);
}

async list(workspaceSlug: string, releaseId: string): Promise<ReleaseLabel[]> {
const data = await this.get<ReleaseLabel[] | { results: ReleaseLabel[] }>(
`/workspaces/${workspaceSlug}/releases/${releaseId}/labels/`
);
return Array.isArray(data) ? data : data.results;
}

async create(workspaceSlug: string, releaseId: string, data: AddReleaseItemLabel): Promise<ReleaseLabel[]> {
const result = await this.post<ReleaseLabel[] | { results: ReleaseLabel[] }>(
`/workspaces/${workspaceSlug}/releases/${releaseId}/labels/`,
data
);
return Array.isArray(result) ? result : result.results;
}

async del(workspaceSlug: string, releaseId: string, labelId: string): Promise<void> {
return this.httpDelete(`/workspaces/${workspaceSlug}/releases/${releaseId}/labels/${labelId}/`);
}
}
24 changes: 24 additions & 0 deletions src/api/Releases/Labels.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { BaseResource } from "../BaseResource";
import { Configuration } from "../../Configuration";
import { CreateReleaseLabel, ReleaseLabel } from "../../models/Release";

/**
* ReleaseLabels sub-resource
* Manages release labels at the workspace level
*/
export class Labels extends BaseResource {
constructor(config: Configuration) {
super(config);
}

async list(workspaceSlug: string): Promise<ReleaseLabel[]> {
const data = await this.get<ReleaseLabel[] | { results: ReleaseLabel[] }>(
`/workspaces/${workspaceSlug}/releases/labels/`
);
return Array.isArray(data) ? data : data.results;
}

async create(workspaceSlug: string, data: CreateReleaseLabel): Promise<ReleaseLabel> {
return this.post<ReleaseLabel>(`/workspaces/${workspaceSlug}/releases/labels/`, data);
}
}
24 changes: 24 additions & 0 deletions src/api/Releases/Tags.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { BaseResource } from "../BaseResource";
import { Configuration } from "../../Configuration";
import { CreateReleaseTag, ReleaseTag } from "../../models/Release";

/**
* ReleaseTags sub-resource
* Manages release tags at the workspace level
*/
export class Tags extends BaseResource {
constructor(config: Configuration) {
super(config);
}

async list(workspaceSlug: string): Promise<ReleaseTag[]> {
const data = await this.get<ReleaseTag[] | { results: ReleaseTag[] }>(
`/workspaces/${workspaceSlug}/releases/tags/`
);
return Array.isArray(data) ? data : data.results;
}

async create(workspaceSlug: string, data: CreateReleaseTag): Promise<ReleaseTag> {
return this.post<ReleaseTag>(`/workspaces/${workspaceSlug}/releases/tags/`, data);
}
}
36 changes: 36 additions & 0 deletions src/api/Releases/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { BaseResource } from "../BaseResource";
import { Configuration } from "../../Configuration";
import { CreateRelease, Release, UpdateRelease } from "../../models/Release";
import { Tags } from "./Tags";
import { Labels } from "./Labels";
import { ItemLabels } from "./ItemLabels";

/**
* Releases API resource
* Manages releases at the workspace level with tags, labels, and item-label sub-resources
*/
export class Releases extends BaseResource {
public tags: Tags;
public labels: Labels;
public itemLabels: ItemLabels;

constructor(config: Configuration) {
super(config);
this.tags = new Tags(config);
this.labels = new Labels(config);
this.itemLabels = new ItemLabels(config);
}

async list(workspaceSlug: string): Promise<Release[]> {
const data = await this.get<Release[] | { results: Release[] }>(`/workspaces/${workspaceSlug}/releases/`);
return Array.isArray(data) ? data : data.results;
}

async create(workspaceSlug: string, data: CreateRelease): Promise<Release> {
return this.post<Release>(`/workspaces/${workspaceSlug}/releases/`, data);
}

async update(workspaceSlug: string, releaseId: string, data: UpdateRelease): Promise<Release> {
return this.patch<Release>(`/workspaces/${workspaceSlug}/releases/${releaseId}/`, data);
}
}
52 changes: 52 additions & 0 deletions src/api/WorkItemRelationDefinitions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { BaseResource } from "./BaseResource";
import { Configuration } from "../Configuration";
import {
CreateWorkItemRelationDefinition,
ListWorkItemRelationDefinitionsParams,
UpdateWorkItemRelationDefinition,
WorkItemRelationDefinition,
} from "../models/WorkItemRelationDefinition";

/**
* WorkItemRelationDefinitions API resource
* Manages work item relation definitions at the workspace level
*/
export class WorkItemRelationDefinitions extends BaseResource {
constructor(config: Configuration) {
super(config);
}

async list(
workspaceSlug: string,
params?: ListWorkItemRelationDefinitionsParams
): Promise<WorkItemRelationDefinition[]> {
const query: Record<string, string> = {};
if (params?.is_default !== undefined) query["is_default"] = String(params.is_default);
if (params?.is_active !== undefined) query["is_active"] = String(params.is_active);

const data = await this.get<WorkItemRelationDefinition[] | { results: WorkItemRelationDefinition[] }>(
`/workspaces/${workspaceSlug}/work-item-relation-definitions/`,
Object.keys(query).length ? query : undefined
);
return Array.isArray(data) ? data : data.results;
}

async create(workspaceSlug: string, data: CreateWorkItemRelationDefinition): Promise<WorkItemRelationDefinition> {
return this.post<WorkItemRelationDefinition>(`/workspaces/${workspaceSlug}/work-item-relation-definitions/`, data);
}

async update(
workspaceSlug: string,
definitionId: string,
data: UpdateWorkItemRelationDefinition
): Promise<WorkItemRelationDefinition> {
return this.patch<WorkItemRelationDefinition>(
`/workspaces/${workspaceSlug}/work-item-relation-definitions/${definitionId}/`,
data
);
}

async del(workspaceSlug: string, definitionId: string): Promise<void> {
return this.httpDelete(`/workspaces/${workspaceSlug}/work-item-relation-definitions/${definitionId}/`);
}
}
40 changes: 40 additions & 0 deletions src/api/WorkspaceProjectLabels.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { BaseResource } from "./BaseResource";
import { Configuration } from "../Configuration";
import {
CreateWorkspaceProjectLabel,
UpdateWorkspaceProjectLabel,
WorkspaceProjectLabel,
} from "../models/WorkspaceProjectLabel";

/**
* WorkspaceProjectLabels API resource
* Manages project labels at the workspace level
*/
export class WorkspaceProjectLabels extends BaseResource {
constructor(config: Configuration) {
super(config);
}

async list(workspaceSlug: string): Promise<WorkspaceProjectLabel[]> {
const data = await this.get<WorkspaceProjectLabel[] | { results: WorkspaceProjectLabel[] }>(
`/workspaces/${workspaceSlug}/project-labels/`
);
return Array.isArray(data) ? data : data.results;
}

async create(workspaceSlug: string, data: CreateWorkspaceProjectLabel): Promise<WorkspaceProjectLabel> {
return this.post<WorkspaceProjectLabel>(`/workspaces/${workspaceSlug}/project-labels/`, data);
}

async update(
workspaceSlug: string,
labelId: string,
data: UpdateWorkspaceProjectLabel
): Promise<WorkspaceProjectLabel> {
return this.patch<WorkspaceProjectLabel>(`/workspaces/${workspaceSlug}/project-labels/${labelId}/`, data);
}

async del(workspaceSlug: string, labelId: string): Promise<void> {
return this.httpDelete(`/workspaces/${workspaceSlug}/project-labels/${labelId}/`);
}
}
40 changes: 40 additions & 0 deletions src/api/WorkspaceProjectStates.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { BaseResource } from "./BaseResource";
import { Configuration } from "../Configuration";
import {
CreateWorkspaceProjectState,
UpdateWorkspaceProjectState,
WorkspaceProjectState,
} from "../models/WorkspaceProjectState";

/**
* WorkspaceProjectStates API resource
* Manages project states at the workspace level
*/
export class WorkspaceProjectStates extends BaseResource {
constructor(config: Configuration) {
super(config);
}

async list(workspaceSlug: string): Promise<WorkspaceProjectState[]> {
const data = await this.get<WorkspaceProjectState[] | { results: WorkspaceProjectState[] }>(
`/workspaces/${workspaceSlug}/project-states/`
);
return Array.isArray(data) ? data : data.results;
}

async create(workspaceSlug: string, data: CreateWorkspaceProjectState): Promise<WorkspaceProjectState> {
return this.post<WorkspaceProjectState>(`/workspaces/${workspaceSlug}/project-states/`, data);
}

async update(
workspaceSlug: string,
stateId: string,
data: UpdateWorkspaceProjectState
): Promise<WorkspaceProjectState> {
return this.patch<WorkspaceProjectState>(`/workspaces/${workspaceSlug}/project-states/${stateId}/`, data);
}

async del(workspaceSlug: string, stateId: string): Promise<void> {
return this.httpDelete(`/workspaces/${workspaceSlug}/project-states/${stateId}/`);
}
}
40 changes: 40 additions & 0 deletions src/api/WorkspaceTemplates/Pages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { BaseResource } from "../BaseResource";
import { Configuration } from "../../Configuration";
import {
CreateWorkspacePageTemplate,
UpdateWorkspacePageTemplate,
WorkspacePageTemplate,
} from "../../models/WorkspaceTemplate";

/**
* WorkspacePageTemplates sub-resource
* Manages page templates at the workspace level
*/
export class Pages extends BaseResource {
constructor(config: Configuration) {
super(config);
}

async list(workspaceSlug: string): Promise<WorkspacePageTemplate[]> {
const data = await this.get<WorkspacePageTemplate[] | { results: WorkspacePageTemplate[] }>(
`/workspaces/${workspaceSlug}/pages/templates/`
);
return Array.isArray(data) ? data : data.results;
}

async create(workspaceSlug: string, data: CreateWorkspacePageTemplate): Promise<WorkspacePageTemplate> {
return this.post<WorkspacePageTemplate>(`/workspaces/${workspaceSlug}/pages/templates/`, data);
}

async update(
workspaceSlug: string,
templateId: string,
data: UpdateWorkspacePageTemplate
): Promise<WorkspacePageTemplate> {
return this.patch<WorkspacePageTemplate>(`/workspaces/${workspaceSlug}/pages/templates/${templateId}/`, data);
}

async del(workspaceSlug: string, templateId: string): Promise<void> {
return this.httpDelete(`/workspaces/${workspaceSlug}/pages/templates/${templateId}/`);
}
}
40 changes: 40 additions & 0 deletions src/api/WorkspaceTemplates/Projects.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { BaseResource } from "../BaseResource";
import { Configuration } from "../../Configuration";
import {
CreateWorkspaceProjectTemplate,
UpdateWorkspaceProjectTemplate,
WorkspaceProjectTemplate,
} from "../../models/WorkspaceTemplate";

/**
* WorkspaceProjectTemplates sub-resource
* Manages project templates at the workspace level
*/
export class Projects extends BaseResource {
constructor(config: Configuration) {
super(config);
}

async list(workspaceSlug: string): Promise<WorkspaceProjectTemplate[]> {
const data = await this.get<WorkspaceProjectTemplate[] | { results: WorkspaceProjectTemplate[] }>(
`/workspaces/${workspaceSlug}/projects/templates/`
);
return Array.isArray(data) ? data : data.results;
}

async create(workspaceSlug: string, data: CreateWorkspaceProjectTemplate): Promise<WorkspaceProjectTemplate> {
return this.post<WorkspaceProjectTemplate>(`/workspaces/${workspaceSlug}/projects/templates/`, data);
}

async update(
workspaceSlug: string,
templateId: string,
data: UpdateWorkspaceProjectTemplate
): Promise<WorkspaceProjectTemplate> {
return this.patch<WorkspaceProjectTemplate>(`/workspaces/${workspaceSlug}/projects/templates/${templateId}/`, data);
}

async del(workspaceSlug: string, templateId: string): Promise<void> {
return this.httpDelete(`/workspaces/${workspaceSlug}/projects/templates/${templateId}/`);
}
}
43 changes: 43 additions & 0 deletions src/api/WorkspaceTemplates/WorkItems.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { BaseResource } from "../BaseResource";
import { Configuration } from "../../Configuration";
import {
CreateWorkspaceWorkItemTemplate,
UpdateWorkspaceWorkItemTemplate,
WorkspaceWorkItemTemplate,
} from "../../models/WorkspaceTemplate";

/**
* WorkspaceWorkItemTemplates sub-resource
* Manages work item templates at the workspace level
*/
export class WorkItems extends BaseResource {
constructor(config: Configuration) {
super(config);
}

async list(workspaceSlug: string): Promise<WorkspaceWorkItemTemplate[]> {
const data = await this.get<WorkspaceWorkItemTemplate[] | { results: WorkspaceWorkItemTemplate[] }>(
`/workspaces/${workspaceSlug}/workitems/templates/`
);
return Array.isArray(data) ? data : data.results;
}

async create(workspaceSlug: string, data: CreateWorkspaceWorkItemTemplate): Promise<WorkspaceWorkItemTemplate> {
return this.post<WorkspaceWorkItemTemplate>(`/workspaces/${workspaceSlug}/workitems/templates/`, data);
}

async update(
workspaceSlug: string,
templateId: string,
data: UpdateWorkspaceWorkItemTemplate
): Promise<WorkspaceWorkItemTemplate> {
return this.patch<WorkspaceWorkItemTemplate>(
`/workspaces/${workspaceSlug}/workitems/templates/${templateId}/`,
data
);
}

async del(workspaceSlug: string, templateId: string): Promise<void> {
return this.httpDelete(`/workspaces/${workspaceSlug}/workitems/templates/${templateId}/`);
}
}
Loading
Loading