https://github.com/udamir/youtrack-client
JavaScript Client library for accessing the youtrack REST and Widget API
https://github.com/udamir/youtrack-client
api javascipt jetbrains nodejs rest sdk typescript widget youtrack
Last synced: 7 months ago
JSON representation
JavaScript Client library for accessing the youtrack REST and Widget API
- Host: GitHub
- URL: https://github.com/udamir/youtrack-client
- Owner: udamir
- License: mit
- Created: 2024-09-11T21:09:00.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2024-12-30T10:11:30.000Z (9 months ago)
- Last Synced: 2025-01-14T06:47:45.421Z (9 months ago)
- Topics: api, javascipt, jetbrains, nodejs, rest, sdk, typescript, widget, youtrack
- Language: TypeScript
- Homepage:
- Size: 274 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# YouTrack Client
![]()
![]()
![]()
JavaScript client library for accessing the youtrack REST and Widget API
## Features
- All User API methods are supported
- All Admin API methods are supported
- Axios and custom HTTP clients supported
- Can be used in Youtrack Widgets (check [widget template](https://github.com/udamir/youtrack-widget-template))
- Full Typescript support, including parameters and responses
- All methods with full js documentation## Installation
```SH
npm install youtrack-client --save
```
or
```SH
yarn add youtrack-client
```## Usage
### Rest Client
YouTrack API client based on fetch:
```typescript
import { YouTrack } from "youtrack-client"const baseUrl = "http://example.myjetbrains.com"
const token = "perm:your-token"const yt = YouTrack.client(baseUrl, token)
yt.Users.getCurrentUserProfile({
// fields in FieldsSchema format
fields: ["login", "avatarUrl", "email", "fullName"]
}).then((user) => {
// typeof user
// { login: string, avatarUrl: string, email: string, fullName: string }console.log(user)
})yt.Tags.getTags({
// fields in string format
fields: "id,name,owner(login)",
$top: 5
}).then((tags) => {
// typeof tags
// Array<{ id: string, name: string, owner: { login: string } }>console.log(tags)
})```
### Axios Client
Axios can be used to make requests:```typescript
import { YouTrack } from "youtrack-client"
import axios from "axios"const yt = YouTrack.axiosClient(axios, baseUrl, token)
```
### Widget Client
```typescript
import { YouTrack, DashboardApi, WidgetApi } from "youtrack-client"DashboardAddons.registerWidget(async (dashboardApi: DashboardApi, widgetApi: WidgetApi) => {
const yt = await YouTrack.widget(dashboardApi)
const user = await yt.Users.getCurrentUserProfile({
fields: ["login", "avatarUrl", "email", "fullName"]
})
// typeof user
// { login: string, avatarUrl: string, email: string, fullName: string }const tags = await yt.Tags.getTags({
fields: "id,name,owner(login)",
$top: 5
})
// typeof tags
// Array<{ id: string, name: string, owner: { login: string } }>})
```### Custom client
```typescript
import { YouTrack, joinUrl, encodeBody, FetchFunc } from "youtrack-client"const baseUrl = "http://example.myjetbrains.com"
const token = "perm:your-token"const fetchFunc: FetchFunc = async (config) => {
// add base url to config.url
const url = joinUrl(baseUrl, config.url)// add authorization to config.headers
const headers = {
Authorization: `Bearer ${token}`,
Accept: "application/json;charset=utf-8",
"Content-Type": "application/json",
...config.headers,
}
// encode body from config.data (object or FormData)
const body = encodeBody(config.data)// fetch response via custom client
const response = await client[method](url, { body, headers })// return parsed response
return response.data
}const yt = new YouTrack(baseUrl, fetchFunc)
```
## Documentation
The following resources are avaliable in Youtrack instance:
```typescript
interface YouTrack {
Agiles: ResourceApi.AgilesApi
Activities: ResourceApi.ActivitiesApi
Articles: ResourceApi.ArticlesApi
Commands: ResourceApi.CommandsApi
Groups: ResourceApi.GroupsApi
IssueLinkTypes: ResourceApi.IssueLinkTypesApi
Issues: ResourceApi.IssuesApi
IssueComments: ResourceApi.IssueCommentsApi
IssueLinks: ResourceApi.IssueLinksApi
IssueTags: ResourceApi.IssueTagsApi
IssueTimeTracking: ResourceApi.IssueTimeTrackingApi
IssueVcsChanges: ResourceApi.IssueVcsChangesApi
IssueAttachments: ResourceApi.IssueAttechmentsApi
SavedQueries: ResourceApi.SavedQueriesApi
Search: ResourceApi.SearchApi
Tags: ResourceApi.TagsApi
Users: ResourceApi.UsersApi
WorkItems: ResourceApi.WorkItemsApi
Admin: {
Projects: ResourceApi.ProjectsApi
BuildBundles: ResourceApi.BuildBundlesApi
EnumBundles: ResourceApi.EnumBundlesApi
OwnedBundles: ResourceApi.OwnedBundlesApi
StateBundles: ResourceApi.StateBundlesApi
UserBundles: ResourceApi.UserBundlesApi
VersionBundles: ResourceApi.VersionBundlesApi
CustomFields: ResourceApi.CustomFieldsApi
BackupFiles: ResourceApi.BackupFilesApi
DatabaseBackupSettings: ResourceApi.DatabaseBackupSettingsApi
GlobalSettings: ResourceApi.GlobalSettingsApi
TelemetryData: ResourceApi.TelemetryDataApi
GlobalTimeTrackingSettings: ResourceApi.GlobalTimeTrackingSettingsApi
}
}
```List of all method in resources can be found in "src/resources" folder.
## Contributing
When contributing, keep in mind that it is an objective of `youtrack-client` to have no package dependencies. This may change in the future, but for now, no new dependencies.## License
MIT