UNPKG

redmine-ts

Version:

Redmine REST API client written using TypeScript

872 lines (869 loc) 31.1 kB
/** * Redmine REST API client written in TypeScript * * MIT License 2021 Jakub Gawryl * */ /// <reference types="node" /> export declare class Redmine { private baseURL; private options; private conn; /** * Constructor * @param host * @param options */ constructor(baseUrl: string, options: RedmineTS.Config); /** * Deeply iterate through given object and replace all found arrays into comma separated strings. * * @param obj */ private static _deepJoinArrays; /** * Creates connection (if there's not any) and sends request to redmine API * @param method HTTP methos (GET, POST, PUT, DELETE, etc) * @param path Redmine API path (without initial "/" and format eg. "issues/1") * @param params Parameters that are sent with request */ private request; /** * Get list of projects * http://www.redmine.org/projects/redmine/wiki/Rest_Projects#Listing-projects * * @param params */ listProjects(params?: RedmineTS.Projects.ListParams): Promise<any>; /** * Create project * http://www.redmine.org/projects/redmine/wiki/Rest_Projects#Creating-a-project * * @param project */ createProject(project: RedmineTS.Projects.CreateParams): Promise<any>; /** * Get project * http://www.redmine.org/projects/redmine/wiki/Rest_Projects#Showing-a-project * * @param projectId * @param params */ getProject(projectId: RedmineTS.Projects.ID, params?: RedmineTS.Projects.GetParams): Promise<any>; /** * Update project * http://www.redmine.org/projects/redmine/wiki/Rest_Projects#Updating-a-project * * @param projectId * @param project */ updateProject(projectId: RedmineTS.Projects.ID, project: RedmineTS.Projects.UpdateParams): Promise<any>; /** * Delete project * https://www.redmine.org/projects/redmine/wiki/Rest_Projects#Deleting-a-project * * @param projectId */ deleteProject(projectId: RedmineTS.Projects.ID): Promise<any>; /** * Get list of issues * http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Listing-issues * * @param params */ listIssues(params?: RedmineTS.Issues.ListParams): Promise<any>; /** * Create issue * http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Creating-an-issue * * @param issue */ createIssue(issue: RedmineTS.Issues.CreateParams): Promise<any>; /** * Get issue * http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Showing-an-issue * * @param issueId * @param params */ getIssue(issueId: number, params?: RedmineTS.Issues.GetParams): Promise<any>; /** * Update issue * http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Updating-an-issue * * @param issueId * @param issue */ updateIssue(issueId: number, issue: RedmineTS.Issues.UpdateParams): Promise<any>; /** * Delete issue * http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Deleting-an-issue * * @param issueId */ deleteIssue(issueId: number): Promise<any>; /** * Adds watcher to issue * https://www.redmine.org/projects/redmine/wiki/Rest_Issues#Adding-a-watcher * * @param issueId * @param watcherId */ addWatcher(issueId: number, watcherId: number): Promise<any>; /** * Remove watcher from issue * https://www.redmine.org/projects/redmine/wiki/Rest_Issues#Removing-a-watcher * * @param issueId * @param watcherId */ removeWatcher(issueId: number, watcherId: number): Promise<any>; /** * Returns a paginated list of the project memberships. * https://www.redmine.org/projects/redmine/wiki/Rest_Memberships#GET * * @param projectId can be either the project numerical id or the project identifier. */ listProjectMembers(projectId: RedmineTS.Projects.ID, params?: RedmineTS.Memberships.ListProjectMembersParams): Promise<any>; /** * Adds a project member. * https://www.redmine.org/projects/redmine/wiki/Rest_Memberships#POST * * @param projectId can be either the project numerical id or the project identifier. * @param membership */ addProjectMember(projectId: RedmineTS.Projects.ID, membership: RedmineTS.Memberships.AddParams): Promise<any>; /** * Returns the membership of given id * https://www.redmine.org/projects/redmine/wiki/Rest_Memberships#GET-2 * * @param membershipId */ getMembership(membershipId: number): Promise<any>; /** * Updates the membership of given id. Only the roles can be updated, the project and the user of a membership are read-only. * https://www.redmine.org/projects/redmine/wiki/Rest_Memberships#PUT * * @param membershipId * @param membership */ updateMembership(membershipId: number, membership: RedmineTS.Memberships.UpdateParams): Promise<any>; /** * Deletes a memberships. Memberships inherited from a group membership can not be deleted. You must delete the group membership. * https://www.redmine.org/projects/redmine/wiki/Rest_Memberships#DELETE * * @param membershipId */ deleteMembership(membershipId: number): Promise<any>; /** * Returns a list of users. This endpoint requires admin privileges. * https://www.redmine.org/projects/redmine/wiki/Rest_Users#GET * * @param params */ listUsers(params?: RedmineTS.Users.ListParams): Promise<any>; /** * Creates a user. This endpoint requires admin privileges. * https://www.redmine.org/projects/redmine/wiki/Rest_Users#POST * * @param user * @param sendToUser */ createUser(user: RedmineTS.Users.CreateParams, sendToUser?: boolean): Promise<any>; /** * Returns the user details. This endpoint can be used by admin or non admin but the returned fields will * depend on the privileges of the requesting user. Details available in documentation: * https://www.redmine.org/projects/redmine/wiki/Rest_Users#GET-2 * * @param userId Id of the user or 'current' for retrieving the user whose credentials are used to access the API. * @param params */ getUser(userId: number | 'current', params?: RedmineTS.Users.GetParams): Promise<any>; /** * Updates a user. This endpoint requires admin privileges. * https://www.redmine.org/projects/redmine/wiki/Rest_Users#PUT * * @param userId * @param user */ updateUser(userId: number | 'current', user: RedmineTS.Users.UpdateParams): Promise<any>; /** * Deletes a user. This endpoint requires admin privileges. * https://www.redmine.org/projects/redmine/wiki/Rest_Users#DELETE * * @param userId */ deleteUser(userId: number | 'current'): Promise<any>; /** * Return time entries. * https://www.redmine.org/projects/redmine/wiki/Rest_TimeEntries#Listing-time-entries * * @param params */ listTimeEntries(params?: RedmineTS.TimeEntries.ListParams): Promise<any>; /** * Returns the time entry of given id. * https://www.redmine.org/projects/redmine/wiki/Rest_TimeEntries#Showing-a-time-entry * * @param teId */ getTimeEntry(teId: number): Promise<any>; /** * Creates a time entry. It's apply to the issue or project but only one is required! * (so only issue_id OR project_id can be passed here!) * https://www.redmine.org/projects/redmine/wiki/Rest_TimeEntries#Creating-a-time-entry * * @param timeEntry */ createTimeEntry(timeEntry: RedmineTS.TimeEntries.CreateParams): Promise<any>; /** * Updates the time entry of given id. * IMPORTANT NOTE: If time entry is transferred from one project to another (by changing project_id), * the issue_id parameter must be set to null (or issue id which belongs to a new project) * Otherwise, the method may return the error 'Issue is invalid' * https://www.redmine.org/projects/redmine/wiki/Rest_TimeEntries#Updating-a-time-entry * * @param teId * @param timeEntry */ updateTimeEntry(teId: number, timeEntry: RedmineTS.TimeEntries.UpdateParams): Promise<any>; /** * Deletes the time entry of given id. * https://www.redmine.org/projects/redmine/wiki/Rest_TimeEntries#Deleting-a-time-entry * * @param teId */ deleteTimeEntry(teId: number): Promise<any>; /** * Returns all news across all projects with pagination. * https://www.redmine.org/projects/redmine/wiki/Rest_News#GET * * @param params */ listAllNews(params?: RedmineTS.News.ListParams): Promise<any>; /** * Returns all news from project with given id or identifier with pagination. * https://www.redmine.org/projects/redmine/wiki/Rest_News#GET-2 * * @param projectId * @param params */ listProjectNews(projectId: RedmineTS.Projects.ID, params?: RedmineTS.News.ListParams): Promise<any>; /** * Get single news (Released in Redmine 4.1.0 but not yet documented) * https://www.redmine.org/projects/redmine/repository/revisions/18441 * * @param newsId */ getNews(newsId: number, params?: RedmineTS.News.GetParams): Promise<any>; /** * Create news (Released in Redmine 4.1.0 but not yet documented) * https://www.redmine.org/projects/redmine/repository/revisions/18440 * * @param news */ createNews(projectId: RedmineTS.Projects.ID, news: RedmineTS.News.CreateParams): Promise<any>; /** * Update news (Released in Redmine 4.1.0 but not yet documented) * https://www.redmine.org/projects/redmine/repository/revisions/18443 * * @param newsId * @param news */ updateNews(newsId: number, news: RedmineTS.News.UpdateParams): Promise<any>; /** * Delete news (Released in Redmine 4.1.0 but not yet documented) * https://www.redmine.org/projects/redmine/repository/revisions/18442 * * @param newsId */ deleteNews(newsId: number): Promise<any>; /** * Returns the relations for the issue of given id (not relation id!) * https://www.redmine.org/projects/redmine/wiki/Rest_IssueRelations#GET * * @param issueId */ listIssueRelations(issueId: number): Promise<any>; /** * Creates a relation for the issue of given id (not relation id!) * https://www.redmine.org/projects/redmine/wiki/Rest_IssueRelations#POST * * @param issueId * @param relation */ createIssueRelation(issueId: number, relation: RedmineTS.IssueRelations.CreateParams): Promise<any>; /** * Returns the relation of given id (not issue id!) * https://www.redmine.org/projects/redmine/wiki/Rest_IssueRelations#GET-2 * * @param relationId */ getIssueRelation(relationId: number): Promise<any>; /** * Deletes the relation of given id (not issue id!) * https://www.redmine.org/projects/redmine/wiki/Rest_IssueRelations#DELETE * * @param relationId */ deleteIssueRelation(relationId: number): Promise<any>; /** * Returns the versions available for the project of given id or identifier. * The response may include shared versions from other projects. * https://www.redmine.org/projects/redmine/wiki/Rest_Versions#GET * * @param projectId */ listProjectVersions(projectId: RedmineTS.Projects.ID): Promise<any>; /** * Creates a version for the project of given id or identifier * https://www.redmine.org/projects/redmine/wiki/Rest_Versions#POST * * @param projectId * @param version */ createProjectVersion(projectId: RedmineTS.Projects.ID, version: RedmineTS.Versions.CreateParams): Promise<any>; /** * Returns the version of given id. * https://www.redmine.org/projects/redmine/wiki/Rest_Versions#GET-2 * * @param versionId */ getProjectVersion(versionId: number): Promise<any>; /** * Updates the version of given id * https://www.redmine.org/projects/redmine/wiki/Rest_Versions#PUT * * @param versionId * @param version */ updateProjectVersion(versionId: number, version: RedmineTS.Versions.UpdateParams): Promise<any>; /** * Deletes the version of given id. * https://www.redmine.org/projects/redmine/wiki/Rest_Versions#DELETE * * @param versionId */ deleteProjectVersion(versionId: number): Promise<any>; /** * Returns the list of all pages in a project wiki. * https://www.redmine.org/projects/redmine/wiki/Rest_WikiPages#Getting-the-pages-list-of-a-wiki * * @param projectId */ listWikiPages(projectId: RedmineTS.Projects.ID): Promise<any>; /** * Returns the details of a wiki page. * If version param is passed, returns the details of an old version of a wiki page. * https://www.redmine.org/projects/redmine/wiki/Rest_WikiPages#Getting-a-wiki-page * * @param projectId * @param pageTitle * @param params * @param version */ getWikiPage(projectId: RedmineTS.Projects.ID, pageTitle: string, params?: RedmineTS.WikiPages.GetParams, version?: number): Promise<any>; /** * Creates or updates a wiki page. * * When creating or updating wiki pages, the text field must be provided. * If you do not wish to change the text, you can keep it by first getting * the wiki page, and provide the current text in the update. * * When updating an existing page, you can include a version attribute to * make sure that the page is a specific version when you try to update it. * (eg. you don't want to overwrite an update that would have been done after you retrieved the page). * https://www.redmine.org/projects/redmine/wiki/Rest_WikiPages#Creating-or-updating-a-wiki-page * @param projectId * @param pageTitle * @param wikiPages */ createUpdateWikiPage(projectId: RedmineTS.Projects.ID, pageTitle: string, wikiPages: RedmineTS.WikiPages.CreateUpdateParams): Promise<any>; /** * Deletes a wiki page, its attachments and its history. If the deleted page is a * parent page,its child pages are not deleted but changed as root pages. * https://www.redmine.org/projects/redmine/wiki/Rest_WikiPages#Deleting-a-wiki-page * * @param projectId * @param pageTitle */ deleteWikiPage(projectId: RedmineTS.Projects.ID, pageTitle: string): Promise<any>; /** * Returns the list of all custom queries visible by the user (public and private queries) for all projects. * https://www.redmine.org/projects/redmine/wiki/Rest_Queries */ listQueries(): Promise<any>; /** * Upload file to Redmine's server If the upload succeeds, you get * a 201 response that contains a token for your uploaded file. * https://www.redmine.org/projects/redmine/wiki/Rest_api#Attaching-files * * @param fileContent File content */ uploadFile(fileContent: Buffer): Promise<any>; /** * Returns the description of the attachment of given id. The file can actually * be downloaded at the URL given by the content_url attribute in the response. * Then you can use this token to attach your uploaded file to a new or an * existing issue or other resource (eg. news, wiki pages etc.) * https://www.redmine.org/projects/redmine/wiki/Rest_Attachments#attachmentsidformat * * @param attachmentId */ getAttachment(attachmentId: number): Promise<any>; /** * Update attachment info (only filename and description can be changed) * * IMPORTANT NOTE: Changing filename may cause the image file to * no longer appear on news pages, wikis, etc., when an image * token ("!filename.png!") is used in the content. * * @param attachmentId * @param attachment */ updateAttachmentInfo(attachmentId: number, attachment: RedmineTS.Attachments.UpdateParams): Promise<any>; /** * Delete an attachement * * IMPORTANT NOTE: Deleting attachement may cause the image file to * no longer appear on news pages, wikis, etc., when an image * token ("!filename.png!") is used in the content. * * https://www.redmine.org/projects/redmine/wiki/Rest_Attachments#DELETE * * @param attachmentId */ deleteAttachment(attachmentId: number): Promise<any>; /** * Returns the list of all issue statuses. * https://www.redmine.org/projects/redmine/wiki/Rest_IssueStatuses */ listIssueStatuses(): Promise<any>; /** * Returns the list of all trackers. * https://www.redmine.org/projects/redmine/wiki/Rest_Trackers */ listTrackers(): Promise<any>; /** * Returns the list of issue priorities. * https://www.redmine.org/projects/redmine/wiki/Rest_Enumerations#enumerationsissue_prioritiesformat */ listIssuePrioritiesEnum(): Promise<any>; /** * Returns the list of time entry activities. * https://www.redmine.org/projects/redmine/wiki/Rest_Enumerations#enumerationstime_entry_activitiesformat */ listTimeEntryActivitiesEnum(): Promise<any>; /** * Returns the list of document categories. * https://www.redmine.org/projects/redmine/wiki/Rest_Enumerations#enumerationsdocument_categoriesformat */ listDocumentCategoriesEnum(): Promise<any>; /** * Returns the issue categories available for the project of given id or identifier. * @param projectId */ listIssueCategories(projectId: RedmineTS.Projects.ID): Promise<any>; /** * Creates an issue category for the project of given id or identifier * https://www.redmine.org/projects/redmine/wiki/Rest_IssueCategories#POST * * @param projectId * @param issueCategory */ createIssueCategory(projectId: RedmineTS.Projects.ID, issueCategory: RedmineTS.IssueCategories.CreateParams): Promise<any>; /** * Returns the issue category of given id * https://www.redmine.org/projects/redmine/wiki/Rest_IssueCategories#GET-2 * * @param issueCategoryId */ getIssueCategory(issueCategoryId: number): Promise<any>; /** * Updates the issue category of given id * https://www.redmine.org/projects/redmine/wiki/Rest_IssueCategories#PUT * * @param issueCategoryId * @param issueCategory */ updateIssueCategory(issueCategoryId: number, issueCategory: RedmineTS.IssueCategories.UpdateParams): Promise<any>; /** * Deletes the issue category of given id * https://www.redmine.org/projects/redmine/wiki/Rest_IssueCategories#DELETE * * @param issueCategoryId */ deleteIssueCategory(issueCategoryId: number): Promise<any>; /** * Returns the list of roles * https://www.redmine.org/projects/redmine/wiki/Rest_Roles#rolesformat */ listRoles(): Promise<any>; /** * Returns the list of permissions for a given role * https://www.redmine.org/projects/redmine/wiki/Rest_Roles#GET-2 * * @param roleId */ listRolePermissions(roleId: number): Promise<any>; /** * Returns the list of groups. This endpoint requires admin privileges * https://www.redmine.org/projects/redmine/wiki/Rest_Groups#GET */ listGroups(): Promise<any>; /** * Creates a group. This endpoint requires admin privileges * https://www.redmine.org/projects/redmine/wiki/Rest_Groups#POST * * @param group */ createGroup(group: RedmineTS.Groups.CreateParams): Promise<any>; /** * Returns details of a group. This endpoint requires admin privileges * https://www.redmine.org/projects/redmine/wiki/Rest_Groups#GET-2 * * @param groupId * @param params */ getGroup(groupId: number, params?: RedmineTS.Groups.GetParams): Promise<any>; /** * Updates an existing group. This endpoint requires admin privileges * https://www.redmine.org/projects/redmine/wiki/Rest_Groups#PUT * * @param groupId * @param group */ updateGroup(groupId: number, group: RedmineTS.Groups.UpdateParams): Promise<any>; /** * Deletes an existing group. This endpoint requires admin privileges * https://www.redmine.org/projects/redmine/wiki/Rest_Groups#DELETE * * @param groupId */ deleteGroup(groupId: number): Promise<any>; /** * Adds an existing user to a group. This endpoint requires admin privileges * https://www.redmine.org/projects/redmine/wiki/Rest_Groups#POST-2 * * @param userId * @param groupId */ addUserToGroup(userId: number, groupId: number): Promise<any>; /** * Removes a user from a group. This endpoint requires admin privileges * https://www.redmine.org/projects/redmine/wiki/Rest_Groups#DELETE-2 * * @param userId * @param groupId */ removeUserFromGroup(userId: number, groupId: number): Promise<any>; /** * Returns all the custom fields definitions * https://www.redmine.org/projects/redmine/wiki/Rest_CustomFields#custom_fieldsformat */ listCustomFields(): Promise<any>; /** * Search in Redmine (Not documented yet - details in https://www.redmine.org/issues/6277) * https://www.redmine.org/projects/redmine/wiki/Rest_Search * * @param q * @param additionalParams */ search(q: string, additionalParams?: RedmineTS.Search.Params): Promise<any>; /** * Returns the files available for the project of given id or identifier * https://www.redmine.org/projects/redmine/wiki/Rest_Files#GET * * @param projectId */ listProjectFiles(projectId: RedmineTS.Projects.ID): Promise<any>; /** * Upload a file for the project of given id or identifier * https://www.redmine.org/projects/redmine/wiki/Rest_Files#POST * * @param projectId * @param file */ addProjectFile(projectId: RedmineTS.Projects.ID, file: RedmineTS.Files.AddProjectarams): Promise<any>; /** * Returns the details of your account. * https://www.redmine.org/projects/redmine/wiki/Rest_MyAccount#GET */ getMyAccount(): Promise<any>; updateMyAccount(user: RedmineTS.MyAccount.UpdateParams): Promise<any>; } export declare namespace RedmineTS { type Config = { apiKey?: string; username?: string; password?: string; impersonateUser?: string; maxUploadSize?: number; }; namespace Common { type EnabledModuleNames = 'boards' | 'calendar' | 'documents' | 'files' | 'gantt' | 'issue_tracking' | 'news' | 'repository' | 'time_tracking' | 'wiki'; type CustomField = { id: number; value: string; }; type Upload = { token: string; filename: string; content_type: string; description?: string; }; type PaginationParams = { limit?: number; offset?: number; }; } namespace Projects { type ID = number | string; type OptionalParams = { description?: string; homepage?: string; is_public?: boolean; parent_id?: number; inherit_members?: boolean; tracker_ids?: number[]; enabled_module_names?: Common.EnabledModuleNames[]; issue_custom_field_ids?: number[]; }; type CreateParams = OptionalParams & { name: string; identifier: string; }; type UpdateParams = OptionalParams & { name?: string; }; type ListParamsInclude = 'trackers' | 'issue_categories' | 'enabled_modules'; type ListParams = Common.PaginationParams & { include?: ListParamsInclude[]; }; type GetParamsInclude = ListParamsInclude | 'time_entry_activities'; type GetParams = { include?: GetParamsInclude[]; }; } namespace Issues { type OptionalParams = { tracker_id?: number; status_id?: number; priority_id?: number; description?: string; category_id?: number; fixed_version_id?: number; assigned_to_id?: number; parent_issue_id?: number; custom_fields?: Common.CustomField[]; watcher_user_ids?: number[]; is_private?: boolean; estimated_hours?: number; uploads?: Common.Upload[]; done_ratio?: number; start_date?: string; due_date?: string; }; type CreateParams = OptionalParams & { subject: string; project_id: number; }; type UpdateParams = OptionalParams & { subject?: string; project_id?: number; notes?: string; private_notes?: boolean; }; type ListParamsInclude = 'attachments' | 'relations'; type ListParams = Common.PaginationParams & { sort?: string; include?: ListParamsInclude[]; issue_id?: number[] | string; project_id?: number; subproject_id?: number | string; tracker_id?: number; status_id?: number | 'open' | 'closed' | '*'; assigned_to_id?: number | 'me'; parent_id?: number; query_id?: number; }; type GetParamsInclude = ListParamsInclude | 'children' | 'changesets' | 'journals' | 'watchers'; type GetParams = { include?: GetParamsInclude[]; }; } namespace Memberships { type AddParams = { user_id: number; role_ids: number[]; }; type UpdateParams = { role_ids: number[]; }; type ListProjectMembersParams = Common.PaginationParams; } namespace Users { type MailNotificationOptions = 'all' | 'selected' | 'only_my_events' | 'only_assigned' | 'only_owner' | 'none'; type OptionalParams = { auth_source_id?: number; mail_notification?: MailNotificationOptions; must_change_passwd?: boolean; generate_password?: boolean; admin?: boolean; status?: number; }; type ListParams = Common.PaginationParams & { status?: 0 | 1 | 2 | 3; name?: string; group_id?: number; }; type CreateParams = OptionalParams & { login: string; password: string; firstname: string; lastname: string; mail: string; }; type GetParamsInclude = 'memberships' | 'groups'; type GetParams = { include?: GetParamsInclude[]; }; type UpdateParams = OptionalParams & { login?: string; firstname?: string; lastname?: string; mail?: string; }; } namespace TimeEntries { type ListParams = Common.PaginationParams & { user_id?: number; project_id?: number; spent_on?: string; from?: string; to?: string; }; type OptionalParams = { spent_on?: string; activity_id?: number; comments?: string; user_id?: number; }; type CreateParams = OptionalParams & { issue_id: number; project_id?: never; } | { issue_id?: never; project_id: number; } & { hours: number; }; type UpdateParams = OptionalParams & { project_id?: number; issue_id?: number; hours?: number; }; } namespace News { type ListParams = Common.PaginationParams; type GetParamsInclude = 'attachments'; type GetParams = { include?: GetParamsInclude[]; }; type OptionalCreateParams = { summary?: string; uploads?: Common.Upload[]; }; type CreateParams = OptionalCreateParams & { title: string; description: string; }; type UpdateParams = OptionalCreateParams & { title?: string; description?: string; }; } namespace IssueRelations { type RelationType = 'relates' | 'duplicates' | 'duplicated' | 'blocks' | 'blocked' | 'precedes' | 'follows' | 'copied_to' | 'copied_from'; type CreateParams = { issue_to_id: number; relation_type?: RelationType; delay?: number; }; } namespace Versions { type OptionalVersionParams = { status?: 'open' | 'locked' | 'closed'; sharing?: 'none' | 'descendants' | 'hierarchy' | 'tree' | 'system'; due_date?: string; description?: string; wiki_page_title?: string; }; type CreateParams = OptionalVersionParams & { name: string; }; type UpdateParams = OptionalVersionParams & { name?: string; }; } namespace WikiPages { type GetParams = { include?: 'attachments'; }; type CreateUpdateParams = { text: string; comments?: string; version?: number; parent_id?: number; uploads?: Common.Upload[]; }; } namespace Attachments { type UpdateParams = { filename?: string; description?: string; }; } namespace IssueCategories { type OptionalCreateParams = { assigned_to_id?: number; }; type CreateParams = OptionalCreateParams & { name: string; }; type UpdateParams = OptionalCreateParams & { name?: string; }; } namespace Groups { type CreateParams = { name: string; user_ids?: number[]; }; type UpdateParams = { name?: string; }; type GetParamsInclude = 'users' | 'memberships'; type GetParams = { include?: GetParamsInclude[]; }; } namespace Search { type Params = Common.PaginationParams; } namespace Files { type AddProjectarams = { token: string; version_id?: number; filename?: string; description?: string; }; } namespace MyAccount { type UpdateParams = { firstame?: string; lastname?: string; mail?: string; }; } }