gitverse-api-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +167 -0
- package/dist/index.d.ts +1009 -0
- package/dist/index.js +1 -0
- package/package.json +57 -0
package/README.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# GitVerse SDK
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+

|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
**Легковесный TypeScript SDK для взаимодействия с GitVerse API**
|
|
8
|
+
|
|
9
|
+
> 🚀 Без внешних зависимостей
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 📋 Оглавление
|
|
14
|
+
|
|
15
|
+
- [Установка](#-установка)
|
|
16
|
+
- [Быстрый старт](#-быстрый-старт)
|
|
17
|
+
- [Использование](#-использование)
|
|
18
|
+
- [Особенности](#-особенности)
|
|
19
|
+
- [API](#-api)
|
|
20
|
+
- [Тестирование](#-тестирование)
|
|
21
|
+
- [Разработка](#-разработка)
|
|
22
|
+
- [Contributing](#-contributing)
|
|
23
|
+
- [Лицензия](#-лицензия)
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 🚀 Быстрый старт
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# bun
|
|
31
|
+
bun add @onreza/gitverse-sdk
|
|
32
|
+
# npm
|
|
33
|
+
npm install @onreza/gitverse-sdk
|
|
34
|
+
# yarn
|
|
35
|
+
yarn add @onreza/gitverse-sdk
|
|
36
|
+
# pnpm
|
|
37
|
+
pnpm add @onreza/gitverse-sdk
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 📖 Использование
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
import GitVerse from '@onreza/gitverse-sdk';
|
|
44
|
+
|
|
45
|
+
(async () => {
|
|
46
|
+
const sdk = new GitVerse({ token: 'YOUR_TOKEN' });
|
|
47
|
+
|
|
48
|
+
// Получить текущего пользователя
|
|
49
|
+
const me = await sdk.users.getCurrent();
|
|
50
|
+
console.log(me);
|
|
51
|
+
|
|
52
|
+
// Получить репозиторий
|
|
53
|
+
const repo = await sdk.repos.get('owner', 'repo');
|
|
54
|
+
console.log(repo);
|
|
55
|
+
|
|
56
|
+
// Создать репозиторий
|
|
57
|
+
const newRepo = await sdk.repos.create({
|
|
58
|
+
name: 'my-new-repo',
|
|
59
|
+
description: 'Описание репозитория',
|
|
60
|
+
private: false
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// Управление email адресами
|
|
64
|
+
const emails = await sdk.emails.list();
|
|
65
|
+
await sdk.emails.add({ emails: ['new@example.com'] });
|
|
66
|
+
|
|
67
|
+
// Работа со звездами
|
|
68
|
+
await sdk.stars.add('owner', 'repo');
|
|
69
|
+
const isStarred = await sdk.stars.check('owner', 'repo');
|
|
70
|
+
|
|
71
|
+
// Получить issues
|
|
72
|
+
const issues = await sdk.issues.list('owner', 'repo');
|
|
73
|
+
|
|
74
|
+
// Создать файл
|
|
75
|
+
const file = await sdk.contents.createFile('owner', 'repo', 'path.txt', {
|
|
76
|
+
content: Buffer.from('Hello').toString('base64'),
|
|
77
|
+
message: 'feat: add greeting',
|
|
78
|
+
});
|
|
79
|
+
console.log(file);
|
|
80
|
+
})();
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## ✨ Особенности
|
|
84
|
+
|
|
85
|
+
- **100% покрытие** тестов (lines/functions/statements)
|
|
86
|
+
- **Нет сторонних зависимостей**
|
|
87
|
+
- Поддержка **Conventional Commits**
|
|
88
|
+
- Интуитивный API, единообразный интерфейс
|
|
89
|
+
- Работа через **fetch**, совместим с Bun и браузером
|
|
90
|
+
|
|
91
|
+
## 🔍 API
|
|
92
|
+
|
|
93
|
+
### Users
|
|
94
|
+
|
|
95
|
+
- `sdk.users.getCurrent()`
|
|
96
|
+
- `sdk.users.getByUsername(username: string)`
|
|
97
|
+
|
|
98
|
+
### Repositories
|
|
99
|
+
|
|
100
|
+
- `sdk.repos.get(owner: string, repo: string)`
|
|
101
|
+
- `sdk.repos.getLanguages(owner: string, repo: string)`
|
|
102
|
+
- `sdk.repos.listForAuthenticatedUser()`
|
|
103
|
+
- `sdk.repos.create(params: CreateRepositoryParams)`
|
|
104
|
+
|
|
105
|
+
### Contents
|
|
106
|
+
|
|
107
|
+
- `sdk.contents.get(owner: string, repo: string, path: string)`
|
|
108
|
+
- `sdk.contents.createFile(owner: string, repo: string, path: string, params)`
|
|
109
|
+
- `sdk.contents.updateFile(owner: string, repo: string, path: string, params)`
|
|
110
|
+
- `sdk.contents.deleteFile(owner: string, repo: string, path: string, params)`
|
|
111
|
+
|
|
112
|
+
### Pulls
|
|
113
|
+
|
|
114
|
+
- `sdk.pulls.list(owner: string, repo: string, state?)`
|
|
115
|
+
- `sdk.pulls.get(owner: string, repo: string, number: number)`
|
|
116
|
+
- `sdk.pulls.create(owner: string, repo: string, params)`
|
|
117
|
+
|
|
118
|
+
### Forks
|
|
119
|
+
|
|
120
|
+
- `sdk.forks.list(owner: string, repo: string)`
|
|
121
|
+
- `sdk.forks.create(owner: string, repo: string)`
|
|
122
|
+
|
|
123
|
+
### Emails
|
|
124
|
+
|
|
125
|
+
- `sdk.emails.list()`
|
|
126
|
+
- `sdk.emails.add(params: AddEmailParams)`
|
|
127
|
+
- `sdk.emails.remove(params: RemoveEmailParams)`
|
|
128
|
+
|
|
129
|
+
### Issues
|
|
130
|
+
|
|
131
|
+
- `sdk.issues.list(owner: string, repo: string, state?: IssueState)`
|
|
132
|
+
- `sdk.issues.get(owner: string, repo: string, number: number)`
|
|
133
|
+
|
|
134
|
+
### Stars
|
|
135
|
+
|
|
136
|
+
- `sdk.stars.add(owner: string, repo: string)`
|
|
137
|
+
- `sdk.stars.check(owner: string, repo: string)`
|
|
138
|
+
- `sdk.stars.remove(owner: string, repo: string)`
|
|
139
|
+
|
|
140
|
+
## 🧪 Тестирование
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
bun test
|
|
144
|
+
bun test --coverage
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## 🛠 Разработка
|
|
148
|
+
|
|
149
|
+
1. Форк и клон:
|
|
150
|
+
```bash
|
|
151
|
+
git clone https://gitverse.ru/onreza/gitverse-sdk.git
|
|
152
|
+
```
|
|
153
|
+
2. Установка зависимостей:
|
|
154
|
+
```bash
|
|
155
|
+
bun install
|
|
156
|
+
```
|
|
157
|
+
3. Запуск серверов/скриптов по необходимости
|
|
158
|
+
4. Написание **семантических коммитов** по [Conventional Commits]
|
|
159
|
+
5. Поддержание **100% покрытия** тестов
|
|
160
|
+
|
|
161
|
+
## 🤝 Contributing
|
|
162
|
+
|
|
163
|
+
См. детали в [CONTRIBUTING.md](./CONTRIBUTING.md).
|
|
164
|
+
|
|
165
|
+
## 📝 Лицензия
|
|
166
|
+
|
|
167
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,1009 @@
|
|
|
1
|
+
declare enum HTTPMethods {
|
|
2
|
+
GET = "GET",
|
|
3
|
+
POST = "POST",
|
|
4
|
+
PUT = "PUT",
|
|
5
|
+
DELETE = "DELETE"
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Параметры для конфигурации GitVerse клиента
|
|
9
|
+
*/
|
|
10
|
+
export interface GitVerseClientConfig {
|
|
11
|
+
/**
|
|
12
|
+
* Базовый URL API GitVerse
|
|
13
|
+
* @default 'https://api.gitverse.ru'
|
|
14
|
+
*/
|
|
15
|
+
baseUrl?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Токен доступа для авторизации в API
|
|
18
|
+
*/
|
|
19
|
+
token?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Версия API
|
|
22
|
+
* @default '1'
|
|
23
|
+
*/
|
|
24
|
+
apiVersion?: string;
|
|
25
|
+
}
|
|
26
|
+
declare class GitVerseClient {
|
|
27
|
+
private baseUrl;
|
|
28
|
+
private token?;
|
|
29
|
+
private apiVersion;
|
|
30
|
+
/**
|
|
31
|
+
* Создает новый экземпляр GitVerse клиента
|
|
32
|
+
* @param config Конфигурация клиента
|
|
33
|
+
*/
|
|
34
|
+
constructor(config?: GitVerseClientConfig);
|
|
35
|
+
/**
|
|
36
|
+
* Устанавливает токен авторизации
|
|
37
|
+
* @param token Токен доступа
|
|
38
|
+
*/
|
|
39
|
+
setToken(token: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Выполняет API-запрос с учетом авторизации и версии API
|
|
42
|
+
* @param path Путь к API-ресурсу
|
|
43
|
+
* @param method HTTP-метод
|
|
44
|
+
* @param body Тело запроса (опционально)
|
|
45
|
+
* @returns Ответ от API
|
|
46
|
+
* @throws {Error} Если запрос завершится с ошибкой
|
|
47
|
+
*/
|
|
48
|
+
request<T>(path: string, method: HTTPMethods, body?: any): Promise<T>;
|
|
49
|
+
/**
|
|
50
|
+
* Выполняет GET-запрос
|
|
51
|
+
* @param path Путь к API-ресурсу
|
|
52
|
+
* @returns Ответ от API
|
|
53
|
+
*/
|
|
54
|
+
get<T>(path: string): Promise<T>;
|
|
55
|
+
/**
|
|
56
|
+
* Выполняет POST-запрос
|
|
57
|
+
* @param path Путь к API-ресурсу
|
|
58
|
+
* @param body Тело запроса
|
|
59
|
+
* @returns Ответ от API
|
|
60
|
+
*/
|
|
61
|
+
post<T>(path: string, body?: any): Promise<T>;
|
|
62
|
+
/**
|
|
63
|
+
* Выполняет PUT-запрос
|
|
64
|
+
* @param path Путь к API-ресурсу
|
|
65
|
+
* @param body Тело запроса
|
|
66
|
+
* @returns Ответ от API
|
|
67
|
+
*/
|
|
68
|
+
put<T>(path: string, body?: any): Promise<T>;
|
|
69
|
+
/**
|
|
70
|
+
* Выполняет DELETE-запрос
|
|
71
|
+
* @param path Путь к API-ресурсу
|
|
72
|
+
* @param body Тело запроса (опционально)
|
|
73
|
+
* @returns Ответ от API
|
|
74
|
+
*/
|
|
75
|
+
delete<T>(path: string, body?: any): Promise<T>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Типы данных для GitVerse API
|
|
79
|
+
*/
|
|
80
|
+
/**
|
|
81
|
+
* Типы пользователей в системе
|
|
82
|
+
*/
|
|
83
|
+
export declare enum UserType {
|
|
84
|
+
User = "User",
|
|
85
|
+
Organization = "Organization"
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Типы видимости для репозиториев и пользователей
|
|
89
|
+
*/
|
|
90
|
+
export declare enum VisibilityType {
|
|
91
|
+
Public = "public",
|
|
92
|
+
Limited = "limited",
|
|
93
|
+
Private = "private"
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Типы содержимого в репозитории
|
|
97
|
+
*/
|
|
98
|
+
export declare enum ContentType {
|
|
99
|
+
File = "file",
|
|
100
|
+
Directory = "dir"
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Состояния pull request
|
|
104
|
+
*/
|
|
105
|
+
export declare enum PullRequestState {
|
|
106
|
+
Open = "open",
|
|
107
|
+
Closed = "closed"
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Состояния issue
|
|
111
|
+
*/
|
|
112
|
+
export declare enum IssueState {
|
|
113
|
+
Open = "open",
|
|
114
|
+
Closed = "closed"
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Интерфейс пользователя
|
|
118
|
+
*/
|
|
119
|
+
export interface User {
|
|
120
|
+
/** Уникальный идентификатор пользователя */
|
|
121
|
+
id: number;
|
|
122
|
+
/** Имя пользователя */
|
|
123
|
+
name?: string;
|
|
124
|
+
/** Логин пользователя */
|
|
125
|
+
login: string;
|
|
126
|
+
/** Полное имя пользователя */
|
|
127
|
+
full_name?: string;
|
|
128
|
+
/** Тип аккаунта: пользователь или организация */
|
|
129
|
+
type: UserType;
|
|
130
|
+
/** Биография пользователя */
|
|
131
|
+
bio?: string;
|
|
132
|
+
/** Электронная почта пользователя */
|
|
133
|
+
email?: string;
|
|
134
|
+
/** URL аватара пользователя */
|
|
135
|
+
avatar_url: string;
|
|
136
|
+
/** Веб-ссылка на профиль пользователя */
|
|
137
|
+
html_url: string;
|
|
138
|
+
/** API-ссылка на профиль пользователя */
|
|
139
|
+
url?: string;
|
|
140
|
+
/** API-ссылка на список подписчиков пользователя */
|
|
141
|
+
followers_url?: string;
|
|
142
|
+
/** API-ссылка на репозитории пользователя */
|
|
143
|
+
repos_url?: string;
|
|
144
|
+
/** API-ссылка на организации пользователя */
|
|
145
|
+
organizations_url?: string;
|
|
146
|
+
/** Права администратора */
|
|
147
|
+
site_admin: boolean;
|
|
148
|
+
/** Местоположение пользователя */
|
|
149
|
+
location?: string;
|
|
150
|
+
/** Верификация аккаунта */
|
|
151
|
+
is_verified?: boolean;
|
|
152
|
+
/** Настройки приватности профиля */
|
|
153
|
+
visibility?: VisibilityType;
|
|
154
|
+
/** Персональный веб-сайт */
|
|
155
|
+
website?: string;
|
|
156
|
+
/** Количество подписчиков */
|
|
157
|
+
followers?: number;
|
|
158
|
+
/** Количество подписок */
|
|
159
|
+
following?: number;
|
|
160
|
+
/** Количество публичных репозиториев */
|
|
161
|
+
public_repos?: number;
|
|
162
|
+
/** Количество репозиториев, отмеченных звездой */
|
|
163
|
+
stars_count?: number;
|
|
164
|
+
/** Дата создания аккаунта */
|
|
165
|
+
created_at: string;
|
|
166
|
+
/** Дата последнего обновления аккаунта */
|
|
167
|
+
updated_at?: string;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Интерфейс текущего авторизованного пользователя
|
|
171
|
+
* Получается из API метода /user
|
|
172
|
+
*/
|
|
173
|
+
export interface CurrentUser {
|
|
174
|
+
/** Уникальный идентификатор пользователя */
|
|
175
|
+
id: number;
|
|
176
|
+
/** Имя пользователя (может быть пустым) */
|
|
177
|
+
name?: string;
|
|
178
|
+
/** Логин пользователя */
|
|
179
|
+
login: string;
|
|
180
|
+
/** Электронная почта пользователя (может быть недоступна) */
|
|
181
|
+
email?: string;
|
|
182
|
+
/** URL аватара пользователя */
|
|
183
|
+
avatar_url: string;
|
|
184
|
+
/** Веб-ссылка на профиль пользователя */
|
|
185
|
+
html_url: string;
|
|
186
|
+
/** Количество публичных репозиториев */
|
|
187
|
+
public_repos: number;
|
|
188
|
+
/** Количество подписчиков */
|
|
189
|
+
followers: number;
|
|
190
|
+
/** Дата создания аккаунта */
|
|
191
|
+
created_at: string;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Интерфейс репозитория
|
|
195
|
+
*/
|
|
196
|
+
export interface Repository {
|
|
197
|
+
/** Уникальный идентификатор репозитория */
|
|
198
|
+
id: number;
|
|
199
|
+
/** Информация о владельце репозитория */
|
|
200
|
+
owner: User;
|
|
201
|
+
/** Название репозитория */
|
|
202
|
+
name: string;
|
|
203
|
+
/** Полное название репозитория в формате {owner}/{repo} */
|
|
204
|
+
full_name: string;
|
|
205
|
+
/** Описание репозитория */
|
|
206
|
+
description?: string;
|
|
207
|
+
/** Список тем, связанных с репозиторием */
|
|
208
|
+
topics?: string[] | null;
|
|
209
|
+
/** Является ли репозиторий приватным */
|
|
210
|
+
private: boolean;
|
|
211
|
+
/** Является ли репозиторий форком другого репозитория */
|
|
212
|
+
fork: boolean;
|
|
213
|
+
/** Информация о родительском репозитории (если это форк) */
|
|
214
|
+
parent?: Repository | null;
|
|
215
|
+
/** Размер репозитория в килобайтах */
|
|
216
|
+
size: number;
|
|
217
|
+
/** Основной язык программирования, используемый в репозитории */
|
|
218
|
+
language?: string;
|
|
219
|
+
/** SSH-URL для клонирования репозитория */
|
|
220
|
+
ssh_url: string;
|
|
221
|
+
/** HTTPS-URL для клонирования репозитория */
|
|
222
|
+
clone_url: string;
|
|
223
|
+
/** Веб-ссылка на репозиторий */
|
|
224
|
+
html_url: string;
|
|
225
|
+
/** API-ссылка на репозиторий */
|
|
226
|
+
url: string;
|
|
227
|
+
/** Git-URL для клонирования репозитория */
|
|
228
|
+
git_url: string;
|
|
229
|
+
/** Зеркало репозитория (если доступно) */
|
|
230
|
+
mirror_url?: string;
|
|
231
|
+
/** Ссылка на вебсайт проекта */
|
|
232
|
+
website?: string;
|
|
233
|
+
/** Альтернативная ссылка на домашнюю страницу проекта */
|
|
234
|
+
homepage?: string;
|
|
235
|
+
/** Количество звезд у репозитория */
|
|
236
|
+
stargazers_count: number;
|
|
237
|
+
/** Количество форков репозитория */
|
|
238
|
+
forks: number;
|
|
239
|
+
/** Количество форков репозитория (дублирует поле forks) */
|
|
240
|
+
forks_count: number;
|
|
241
|
+
/** Количество наблюдателей за репозиторием */
|
|
242
|
+
watchers: number;
|
|
243
|
+
/** Количество наблюдателей за репозиторием (дублирует поле watchers) */
|
|
244
|
+
watchers_count: number;
|
|
245
|
+
/** Количество репозиториев в сети (форков и оригинала) */
|
|
246
|
+
network_count: number;
|
|
247
|
+
/** Количество подписчиков на уведомления о репозитории */
|
|
248
|
+
subscribers_count: number;
|
|
249
|
+
/** Количество открытых задач (issues) в репозитории */
|
|
250
|
+
open_issues: number;
|
|
251
|
+
/** Количество открытых задач (дублирует поле open_issues) */
|
|
252
|
+
open_issues_count: number;
|
|
253
|
+
/** Количество открытых pull requests */
|
|
254
|
+
open_pr_counter: number;
|
|
255
|
+
/** Основная ветка репозитория */
|
|
256
|
+
default_branch: string;
|
|
257
|
+
/** Архивирован ли репозиторий */
|
|
258
|
+
archived: boolean;
|
|
259
|
+
/** Разрешено ли создание задач (issues) */
|
|
260
|
+
has_issues: boolean;
|
|
261
|
+
/** Разрешено ли использование проектов */
|
|
262
|
+
has_projects: boolean;
|
|
263
|
+
/** Разрешено ли использование обсуждений */
|
|
264
|
+
has_discussions: boolean;
|
|
265
|
+
/** Разрешено ли использование wiki */
|
|
266
|
+
has_wiki: boolean;
|
|
267
|
+
/** Разрешено ли использование GitHub Pages */
|
|
268
|
+
has_pages: boolean;
|
|
269
|
+
/** Отключен ли репозиторий */
|
|
270
|
+
disabled: boolean;
|
|
271
|
+
/** Настройки приватности репозитория */
|
|
272
|
+
visibility: "public" | "private";
|
|
273
|
+
/** Является ли репозиторий шаблоном */
|
|
274
|
+
is_template: boolean;
|
|
275
|
+
/** Информация о шаблоне репозитория (если доступно) */
|
|
276
|
+
template_repository?: Repository | null;
|
|
277
|
+
/** Разрешены ли слияния через merge commits */
|
|
278
|
+
allow_merge_commits: boolean;
|
|
279
|
+
/** Разрешены ли слияния через squash commits */
|
|
280
|
+
allow_squash_merge: boolean;
|
|
281
|
+
/** Удалять ли ветку после слияния по умолчанию */
|
|
282
|
+
default_delete_branch_after_merge: boolean;
|
|
283
|
+
/** Дата создания репозитория */
|
|
284
|
+
created_at: string;
|
|
285
|
+
/** Дата последнего обновления репозитория */
|
|
286
|
+
updated_at: string;
|
|
287
|
+
/** Дата последнего push-события в репозиторий */
|
|
288
|
+
pushed_at: string;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Интерфейс ответа с распределением языков в репозитории
|
|
292
|
+
*/
|
|
293
|
+
export interface LanguagesResponse {
|
|
294
|
+
/** Количество байт кода на каждом языке */
|
|
295
|
+
[language: string]: number;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Интерфейс информации о файле
|
|
299
|
+
*/
|
|
300
|
+
export interface FileContent {
|
|
301
|
+
/** Имя файла */
|
|
302
|
+
name: string;
|
|
303
|
+
/** Путь к файлу относительно корня репозитория */
|
|
304
|
+
path: string;
|
|
305
|
+
/** SHA-хеш содержимого файла */
|
|
306
|
+
sha: string;
|
|
307
|
+
/** Размер файла в байтах */
|
|
308
|
+
size: number;
|
|
309
|
+
/** Тип объекта (всегда 'file' для файла) */
|
|
310
|
+
type: ContentType.File;
|
|
311
|
+
/** Кодировка содержимого файла (например, 'base64') */
|
|
312
|
+
encoding?: string;
|
|
313
|
+
/** Содержимое файла в формате Base64 */
|
|
314
|
+
content?: string;
|
|
315
|
+
/** Определенный язык программирования файла */
|
|
316
|
+
language?: string;
|
|
317
|
+
/** API-ссылка на файл */
|
|
318
|
+
url?: string;
|
|
319
|
+
/** Веб-ссылка на файл */
|
|
320
|
+
html_url?: string;
|
|
321
|
+
/** Git-URL для файла */
|
|
322
|
+
git_url?: string;
|
|
323
|
+
/** URL для скачивания файла */
|
|
324
|
+
download_url?: string;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Интерфейс информации о директории
|
|
328
|
+
*/
|
|
329
|
+
export interface DirectoryContent {
|
|
330
|
+
/** Тип объекта (всегда 'dir' для директории) */
|
|
331
|
+
type: ContentType.Directory;
|
|
332
|
+
/** Размер директории (всегда 0) */
|
|
333
|
+
size: number;
|
|
334
|
+
/** Имя директории */
|
|
335
|
+
name: string;
|
|
336
|
+
/** Путь к директории относительно корня репозитория */
|
|
337
|
+
path: string;
|
|
338
|
+
/** SHA-хеш объекта директории */
|
|
339
|
+
sha: string;
|
|
340
|
+
/** Список файлов и поддиректорий внутри директории */
|
|
341
|
+
entries: Array<FileContent | DirectoryContent>;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Тип для содержимого репозитория (файл или директория)
|
|
345
|
+
*/
|
|
346
|
+
export type Content = FileContent | DirectoryContent;
|
|
347
|
+
/**
|
|
348
|
+
* Интерфейс информации о коммите
|
|
349
|
+
*/
|
|
350
|
+
export interface CommitInfo {
|
|
351
|
+
/** SHA-хеш коммита */
|
|
352
|
+
sha: string;
|
|
353
|
+
/** Node ID коммита */
|
|
354
|
+
node_id?: string;
|
|
355
|
+
/** API-ссылка на коммит */
|
|
356
|
+
url: string;
|
|
357
|
+
/** Веб-ссылка на коммит */
|
|
358
|
+
html_url: string;
|
|
359
|
+
/** Информация об авторе коммита */
|
|
360
|
+
author: {
|
|
361
|
+
/** Имя автора */
|
|
362
|
+
name: string;
|
|
363
|
+
/** Email автора */
|
|
364
|
+
email: string;
|
|
365
|
+
/** Дата создания коммита */
|
|
366
|
+
date: string;
|
|
367
|
+
};
|
|
368
|
+
/** Информация о коммиттере */
|
|
369
|
+
committer: {
|
|
370
|
+
/** Имя коммиттера */
|
|
371
|
+
name: string;
|
|
372
|
+
/** Email коммиттера */
|
|
373
|
+
email: string;
|
|
374
|
+
/** Дата коммита */
|
|
375
|
+
date: string;
|
|
376
|
+
};
|
|
377
|
+
/** Сообщение коммита */
|
|
378
|
+
message: string;
|
|
379
|
+
/** Информация о дереве коммита */
|
|
380
|
+
tree: {
|
|
381
|
+
/** SHA-хеш дерева */
|
|
382
|
+
sha: string;
|
|
383
|
+
/** URL дерева */
|
|
384
|
+
url: string;
|
|
385
|
+
};
|
|
386
|
+
/** Родительские коммиты */
|
|
387
|
+
parents: Array<{
|
|
388
|
+
/** SHA-хеш родительского коммита */
|
|
389
|
+
sha: string;
|
|
390
|
+
/** API-ссылка на родительский коммит */
|
|
391
|
+
url: string;
|
|
392
|
+
/** Веб-ссылка на родительский коммит */
|
|
393
|
+
html_url: string;
|
|
394
|
+
}>;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Интерфейс ответа на создание файла
|
|
398
|
+
*/
|
|
399
|
+
export interface FileCreationResponse {
|
|
400
|
+
/** Информация о созданном файле */
|
|
401
|
+
content: FileContent;
|
|
402
|
+
/** Информация о коммите */
|
|
403
|
+
commit: CommitInfo;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Интерфейс ответа на удаление файла
|
|
407
|
+
*/
|
|
408
|
+
export interface FileDeletionResponse {
|
|
409
|
+
/** Информация о содержимом (null для удаленного файла) */
|
|
410
|
+
content: null;
|
|
411
|
+
/** Информация о коммите удаления */
|
|
412
|
+
commit: CommitInfo;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Интерфейс параметров для создания форка
|
|
416
|
+
*/
|
|
417
|
+
export interface CreateForkParams {
|
|
418
|
+
/** Имя нового форка */
|
|
419
|
+
name?: string;
|
|
420
|
+
/** Название организации, в которую будет создан форк */
|
|
421
|
+
organization?: string;
|
|
422
|
+
/** Описание нового форка */
|
|
423
|
+
description?: string;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Интерфейс параметров для создания файла
|
|
427
|
+
*/
|
|
428
|
+
export interface CreateFileParams {
|
|
429
|
+
/** Имя ветки, в которую будет добавлен файл (по умолчанию - основная ветка) */
|
|
430
|
+
branch?: string;
|
|
431
|
+
/** Содержимое файла, закодированное в Base64 */
|
|
432
|
+
content: string;
|
|
433
|
+
/** Сообщение коммита */
|
|
434
|
+
message?: string;
|
|
435
|
+
/** Имя новой ветки, которая будет создана для этого изменения */
|
|
436
|
+
new_branch?: string;
|
|
437
|
+
/** Добавлять ли подпись (Signed-off-by) в коммит */
|
|
438
|
+
signoff?: boolean;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Интерфейс параметров для обновления файла
|
|
442
|
+
*/
|
|
443
|
+
export interface UpdateFileParams {
|
|
444
|
+
/** Имя ветки, в которой находится файл */
|
|
445
|
+
branch?: string;
|
|
446
|
+
/** Новое содержимое файла, закодированное в Base64 */
|
|
447
|
+
content: string;
|
|
448
|
+
/** SHA-хеш текущего содержимого файла */
|
|
449
|
+
sha: string;
|
|
450
|
+
/** Если файл переименовывается, указывает старый путь к файлу */
|
|
451
|
+
from_path?: string;
|
|
452
|
+
/** Сообщение коммита */
|
|
453
|
+
message?: string;
|
|
454
|
+
/** Имя новой ветки, которая будет создана для этого изменения */
|
|
455
|
+
new_branch?: string;
|
|
456
|
+
/** Добавлять ли подпись (Signed-off-by) в коммит */
|
|
457
|
+
signoff?: boolean;
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Интерфейс параметров для удаления файла
|
|
461
|
+
*/
|
|
462
|
+
export interface DeleteFileParams {
|
|
463
|
+
/** SHA-хеш текущего содержимого файла */
|
|
464
|
+
sha: string;
|
|
465
|
+
/** Имя ветки, в которой находится файл */
|
|
466
|
+
branch?: string;
|
|
467
|
+
/** Сообщение коммита */
|
|
468
|
+
message?: string;
|
|
469
|
+
/** Имя новой ветки, которая будет создана для этого изменения */
|
|
470
|
+
new_branch?: string;
|
|
471
|
+
/** Добавлять ли подпись (Signed-off-by) в коммит */
|
|
472
|
+
signoff?: boolean;
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Интерфейс базовой или целевой ветки для pull request
|
|
476
|
+
*/
|
|
477
|
+
export interface PullRequestBase {
|
|
478
|
+
/** Метка ветки */
|
|
479
|
+
label: string;
|
|
480
|
+
/** Имя ветки */
|
|
481
|
+
ref: string;
|
|
482
|
+
/** SHA-хеш последнего коммита в ветке */
|
|
483
|
+
sha: string;
|
|
484
|
+
/** ID репозитория */
|
|
485
|
+
repo_id: number;
|
|
486
|
+
/** Информация о репозитории */
|
|
487
|
+
repo: {
|
|
488
|
+
/** ID репозитория */
|
|
489
|
+
id: number;
|
|
490
|
+
/** Название репозитория */
|
|
491
|
+
name: string;
|
|
492
|
+
/** Полное название репозитория в формате {owner}/{repo} */
|
|
493
|
+
full_name: string;
|
|
494
|
+
/** Является ли репозиторий приватным */
|
|
495
|
+
private: boolean;
|
|
496
|
+
/** Основная ветка репозитория */
|
|
497
|
+
default_branch: string;
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Интерфейс pull request
|
|
502
|
+
*/
|
|
503
|
+
export interface PullRequest {
|
|
504
|
+
/** Уникальный идентификатор pull request */
|
|
505
|
+
id: number;
|
|
506
|
+
/** API-ссылка на pull request */
|
|
507
|
+
url: string;
|
|
508
|
+
/** Номер pull request в репозитории */
|
|
509
|
+
number: number;
|
|
510
|
+
/** Информация о пользователе, создавшем pull request */
|
|
511
|
+
user: {
|
|
512
|
+
/** ID пользователя */
|
|
513
|
+
id: number;
|
|
514
|
+
/** Логин пользователя */
|
|
515
|
+
login: string;
|
|
516
|
+
/** Тип аккаунта */
|
|
517
|
+
type: string;
|
|
518
|
+
/** URL аватара пользователя */
|
|
519
|
+
avatar_url: string;
|
|
520
|
+
/** Веб-ссылка на профиль пользователя */
|
|
521
|
+
html_url: string;
|
|
522
|
+
/** Права администратора */
|
|
523
|
+
site_admin: boolean;
|
|
524
|
+
};
|
|
525
|
+
/** Заголовок pull request */
|
|
526
|
+
title: string;
|
|
527
|
+
/** Описание pull request */
|
|
528
|
+
body?: string;
|
|
529
|
+
/** Список меток */
|
|
530
|
+
labels: Array<any>;
|
|
531
|
+
/** Информация о майлстоуне */
|
|
532
|
+
milestone?: any;
|
|
533
|
+
/** Информация о назначенном пользователе */
|
|
534
|
+
assignee?: any;
|
|
535
|
+
/** Список назначенных пользователей */
|
|
536
|
+
assignees?: any;
|
|
537
|
+
/** Состояние pull request (открыт/закрыт) */
|
|
538
|
+
state: PullRequestState;
|
|
539
|
+
/** Заблокирован ли pull request */
|
|
540
|
+
locked: boolean;
|
|
541
|
+
/** Количество комментариев */
|
|
542
|
+
comments: number;
|
|
543
|
+
/** Веб-ссылка на pull request */
|
|
544
|
+
html_url: string;
|
|
545
|
+
/** Ссылка на diff файл */
|
|
546
|
+
diff_url: string;
|
|
547
|
+
/** Ссылка на patch файл */
|
|
548
|
+
patch_url: string;
|
|
549
|
+
/** Можно ли слить pull request */
|
|
550
|
+
mergeable: boolean;
|
|
551
|
+
/** Был ли pull request слит */
|
|
552
|
+
merged: boolean;
|
|
553
|
+
/** Дата слияния (если был слит) */
|
|
554
|
+
merged_at?: string | null;
|
|
555
|
+
/** SHA-хеш коммита слияния (если был слит) */
|
|
556
|
+
merge_commit_sha?: string | null;
|
|
557
|
+
/** Пользователь, выполнивший слияние */
|
|
558
|
+
merged_by?: any;
|
|
559
|
+
/** Может ли мейнтейнер изменять pull request */
|
|
560
|
+
maintainer_can_modify: boolean;
|
|
561
|
+
/** Информация о целевой ветке */
|
|
562
|
+
base: PullRequestBase;
|
|
563
|
+
/** Информация о ветке с изменениями */
|
|
564
|
+
head: PullRequestBase;
|
|
565
|
+
/** Дата создания pull request */
|
|
566
|
+
created_at: string;
|
|
567
|
+
/** Дата обновления pull request */
|
|
568
|
+
updated_at: string;
|
|
569
|
+
/** Дата закрытия pull request (если закрыт) */
|
|
570
|
+
closed_at?: string | null;
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* Интерфейс параметров для создания pull request
|
|
574
|
+
*/
|
|
575
|
+
export interface CreatePullRequestParams {
|
|
576
|
+
/** Заголовок pull request */
|
|
577
|
+
title: string;
|
|
578
|
+
/** Описание pull request */
|
|
579
|
+
body?: string;
|
|
580
|
+
/** Имя ветки, из которой предлагаются изменения */
|
|
581
|
+
head: string;
|
|
582
|
+
/** Имя ветки, в которую будут внесены изменения */
|
|
583
|
+
base: string;
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* Интерфейс ошибки API
|
|
587
|
+
*/
|
|
588
|
+
export interface ApiError {
|
|
589
|
+
/** Тип ошибки */
|
|
590
|
+
error: string;
|
|
591
|
+
/** Сообщение об ошибке */
|
|
592
|
+
message: string;
|
|
593
|
+
/** HTTP-код статуса */
|
|
594
|
+
status: number;
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* Интерфейс email адреса
|
|
598
|
+
*/
|
|
599
|
+
export interface Email {
|
|
600
|
+
/** Email адрес */
|
|
601
|
+
email: string;
|
|
602
|
+
/** Подтвержден ли email */
|
|
603
|
+
verified: boolean;
|
|
604
|
+
/** Является ли основным */
|
|
605
|
+
primary: boolean;
|
|
606
|
+
/** Публичный ли email */
|
|
607
|
+
is_public: boolean;
|
|
608
|
+
}
|
|
609
|
+
/**
|
|
610
|
+
* Параметры для добавления email адресов
|
|
611
|
+
*/
|
|
612
|
+
export interface AddEmailParams {
|
|
613
|
+
/** Массив email адресов для добавления */
|
|
614
|
+
emails: string[];
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* Параметры для удаления email адресов
|
|
618
|
+
*/
|
|
619
|
+
export interface RemoveEmailParams {
|
|
620
|
+
/** Массив email адресов для удаления */
|
|
621
|
+
emails: string[];
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Ответ на операции с email
|
|
625
|
+
*/
|
|
626
|
+
export interface EmailOperationResponse {
|
|
627
|
+
/** Сообщение о результате операции */
|
|
628
|
+
message: string;
|
|
629
|
+
/** Удаленные email адреса (только для операции удаления) */
|
|
630
|
+
deleted_emails?: string[];
|
|
631
|
+
/** HTTP статус код */
|
|
632
|
+
status: number;
|
|
633
|
+
}
|
|
634
|
+
/**
|
|
635
|
+
* Параметры для создания репозитория
|
|
636
|
+
*/
|
|
637
|
+
export interface CreateRepositoryParams {
|
|
638
|
+
/** Имя репозитория */
|
|
639
|
+
name: string;
|
|
640
|
+
/** Описание репозитория */
|
|
641
|
+
description?: string;
|
|
642
|
+
/** Приватный ли репозиторий */
|
|
643
|
+
private?: boolean;
|
|
644
|
+
/** Создать ли инициализирующий коммит */
|
|
645
|
+
auto_init?: boolean;
|
|
646
|
+
/** Список .gitignore шаблонов */
|
|
647
|
+
gitignores?: string[];
|
|
648
|
+
/** Лицензия репозитория */
|
|
649
|
+
license?: string;
|
|
650
|
+
/** Ветка по умолчанию */
|
|
651
|
+
default_branch?: string;
|
|
652
|
+
}
|
|
653
|
+
/**
|
|
654
|
+
* Интерфейс issue
|
|
655
|
+
*/
|
|
656
|
+
export interface Issue {
|
|
657
|
+
/** Уникальный идентификатор issue */
|
|
658
|
+
id: number;
|
|
659
|
+
/** Номер issue в репозитории */
|
|
660
|
+
number: number;
|
|
661
|
+
/** Заголовок issue */
|
|
662
|
+
title: string;
|
|
663
|
+
/** Описание issue */
|
|
664
|
+
body?: string;
|
|
665
|
+
/** Состояние issue */
|
|
666
|
+
state: IssueState;
|
|
667
|
+
/** Пользователь, создавший issue */
|
|
668
|
+
user: User;
|
|
669
|
+
/** Список меток */
|
|
670
|
+
labels: Array<any>;
|
|
671
|
+
/** Назначенные пользователи */
|
|
672
|
+
assignees?: User[];
|
|
673
|
+
/** Дата создания */
|
|
674
|
+
created_at: string;
|
|
675
|
+
/** Дата обновления */
|
|
676
|
+
updated_at: string;
|
|
677
|
+
/** Дата закрытия */
|
|
678
|
+
closed_at?: string | null;
|
|
679
|
+
/** Количество комментариев */
|
|
680
|
+
comments: number;
|
|
681
|
+
/** Веб-ссылка на issue */
|
|
682
|
+
html_url: string;
|
|
683
|
+
/** API-ссылка на issue */
|
|
684
|
+
url: string;
|
|
685
|
+
}
|
|
686
|
+
declare class UsersApi {
|
|
687
|
+
private client;
|
|
688
|
+
/**
|
|
689
|
+
* Создает новый экземпляр API для работы с пользователями
|
|
690
|
+
* @param client GitVerse клиент
|
|
691
|
+
*/
|
|
692
|
+
constructor(client: GitVerseClient);
|
|
693
|
+
/**
|
|
694
|
+
* Получает информацию о текущем авторизованном пользователе
|
|
695
|
+
* @returns Данные о пользователе
|
|
696
|
+
*/
|
|
697
|
+
getCurrent(): Promise<CurrentUser>;
|
|
698
|
+
/**
|
|
699
|
+
* Получает информацию о пользователе по имени пользователя
|
|
700
|
+
* @param username Имя пользователя
|
|
701
|
+
* @returns Данные о пользователе
|
|
702
|
+
*/
|
|
703
|
+
getByUsername(username: string): Promise<User>;
|
|
704
|
+
}
|
|
705
|
+
declare class RepositoriesApi {
|
|
706
|
+
private client;
|
|
707
|
+
/**
|
|
708
|
+
* Создает новый экземпляр API для работы с репозиториями
|
|
709
|
+
* @param client GitVerse клиент
|
|
710
|
+
*/
|
|
711
|
+
constructor(client: GitVerseClient);
|
|
712
|
+
/**
|
|
713
|
+
* Получает информацию о репозитории
|
|
714
|
+
* @param owner Владелец репозитория
|
|
715
|
+
* @param repo Название репозитория
|
|
716
|
+
* @returns Данные о репозитории
|
|
717
|
+
*/
|
|
718
|
+
get(owner: string, repo: string): Promise<Repository>;
|
|
719
|
+
/**
|
|
720
|
+
* Получает информацию о языках программирования в репозитории
|
|
721
|
+
* @param owner Владелец репозитория
|
|
722
|
+
* @param repo Название репозитория
|
|
723
|
+
* @returns Объект с языками и количеством байт кода
|
|
724
|
+
*/
|
|
725
|
+
getLanguages(owner: string, repo: string): Promise<LanguagesResponse>;
|
|
726
|
+
/**
|
|
727
|
+
* Получает список репозиториев авторизованного пользователя
|
|
728
|
+
* @returns Массив репозиториев пользователя
|
|
729
|
+
*/
|
|
730
|
+
listForAuthenticatedUser(): Promise<Repository[]>;
|
|
731
|
+
/**
|
|
732
|
+
* Создает новый репозиторий для авторизованного пользователя
|
|
733
|
+
* @param params Параметры создания репозитория
|
|
734
|
+
* @returns Созданный репозиторий
|
|
735
|
+
*/
|
|
736
|
+
create(params: CreateRepositoryParams): Promise<Repository>;
|
|
737
|
+
}
|
|
738
|
+
declare class ContentsApi {
|
|
739
|
+
private client;
|
|
740
|
+
/**
|
|
741
|
+
* Создает новый экземпляр API для работы с содержимым репозитория
|
|
742
|
+
* @param client GitVerse клиент
|
|
743
|
+
*/
|
|
744
|
+
constructor(client: GitVerseClient);
|
|
745
|
+
/**
|
|
746
|
+
* Получает содержимое файла или список файлов в директории
|
|
747
|
+
* @param owner Владелец репозитория
|
|
748
|
+
* @param repo Название репозитория
|
|
749
|
+
* @param path Путь к файлу или директории
|
|
750
|
+
* @returns Содержимое файла или директории
|
|
751
|
+
*/
|
|
752
|
+
get(owner: string, repo: string, path: string): Promise<Content>;
|
|
753
|
+
/**
|
|
754
|
+
* Создает новый файл в репозитории
|
|
755
|
+
* @param owner Владелец репозитория
|
|
756
|
+
* @param repo Название репозитория
|
|
757
|
+
* @param path Путь к файлу, который будет создан
|
|
758
|
+
* @param params Параметры создания файла
|
|
759
|
+
* @returns Информация о созданном файле и коммите
|
|
760
|
+
*/
|
|
761
|
+
createFile(owner: string, repo: string, path: string, params: CreateFileParams): Promise<FileCreationResponse>;
|
|
762
|
+
/**
|
|
763
|
+
* Обновляет существующий файл в репозитории
|
|
764
|
+
* @param owner Владелец репозитория
|
|
765
|
+
* @param repo Название репозитория
|
|
766
|
+
* @param path Путь к файлу, который будет обновлен
|
|
767
|
+
* @param params Параметры обновления файла
|
|
768
|
+
* @returns Информация об обновленном файле и коммите
|
|
769
|
+
*/
|
|
770
|
+
updateFile(owner: string, repo: string, path: string, params: UpdateFileParams): Promise<FileCreationResponse>;
|
|
771
|
+
/**
|
|
772
|
+
* Удаляет файл из репозитория
|
|
773
|
+
* @param owner Владелец репозитория
|
|
774
|
+
* @param repo Название репозитория
|
|
775
|
+
* @param path Путь к файлу, который будет удален
|
|
776
|
+
* @param params Параметры удаления файла
|
|
777
|
+
* @returns Информация об удаленном файле и коммите
|
|
778
|
+
*/
|
|
779
|
+
deleteFile(owner: string, repo: string, path: string, params: DeleteFileParams): Promise<FileDeletionResponse>;
|
|
780
|
+
}
|
|
781
|
+
declare class PullsApi {
|
|
782
|
+
private client;
|
|
783
|
+
/**
|
|
784
|
+
* Создает новый экземпляр API для работы с пулл-реквестами
|
|
785
|
+
* @param client GitVerse клиент
|
|
786
|
+
*/
|
|
787
|
+
constructor(client: GitVerseClient);
|
|
788
|
+
/**
|
|
789
|
+
* Создает новый запрос на слияние в репозитории
|
|
790
|
+
* @param owner Владелец репозитория
|
|
791
|
+
* @param repo Название репозитория
|
|
792
|
+
* @param params Параметры создания запроса на слияние
|
|
793
|
+
* @returns Информация о созданном запросе на слияние
|
|
794
|
+
*/
|
|
795
|
+
create(owner: string, repo: string, params: CreatePullRequestParams): Promise<PullRequest>;
|
|
796
|
+
/**
|
|
797
|
+
* Получает запрос на слияние по его номеру
|
|
798
|
+
* @param owner Владелец репозитория
|
|
799
|
+
* @param repo Название репозитория
|
|
800
|
+
* @param number Номер запроса на слияние
|
|
801
|
+
* @returns Информация о запросе на слияние
|
|
802
|
+
*/
|
|
803
|
+
get(owner: string, repo: string, number: number): Promise<PullRequest>;
|
|
804
|
+
/**
|
|
805
|
+
* Получает список запросов на слияние в репозитории
|
|
806
|
+
* @param owner Владелец репозитория
|
|
807
|
+
* @param repo Название репозитория
|
|
808
|
+
* @param state Состояние запросов на слияние (открытые/закрытые/все)
|
|
809
|
+
* @returns Список запросов на слияние
|
|
810
|
+
*/
|
|
811
|
+
list(owner: string, repo: string, state?: PullRequestState): Promise<PullRequest[]>;
|
|
812
|
+
}
|
|
813
|
+
declare class ForksApi {
|
|
814
|
+
private client;
|
|
815
|
+
/**
|
|
816
|
+
* Создает новый экземпляр API для работы с форками
|
|
817
|
+
* @param client GitVerse клиент
|
|
818
|
+
*/
|
|
819
|
+
constructor(client: GitVerseClient);
|
|
820
|
+
/**
|
|
821
|
+
* Создает форк репозитория
|
|
822
|
+
* @param owner Владелец исходного репозитория
|
|
823
|
+
* @param repo Название исходного репозитория
|
|
824
|
+
* @param params Параметры создания форка
|
|
825
|
+
* @returns Информация о созданном форке
|
|
826
|
+
*/
|
|
827
|
+
create(owner: string, repo: string, params?: CreateForkParams): Promise<Repository>;
|
|
828
|
+
/**
|
|
829
|
+
* Получает список форков репозитория
|
|
830
|
+
* @param owner Владелец репозитория
|
|
831
|
+
* @param repo Название репозитория
|
|
832
|
+
* @returns Список форков
|
|
833
|
+
*/
|
|
834
|
+
list(owner: string, repo: string): Promise<Repository[]>;
|
|
835
|
+
}
|
|
836
|
+
declare class EmailsApi {
|
|
837
|
+
private client;
|
|
838
|
+
constructor(client: GitVerseClient);
|
|
839
|
+
/**
|
|
840
|
+
* Получить список email адресов текущего пользователя
|
|
841
|
+
* @returns {Promise<Email[]>} Массив email адресов
|
|
842
|
+
*/
|
|
843
|
+
list(): Promise<Email[]>;
|
|
844
|
+
/**
|
|
845
|
+
* Добавить email адреса к аккаунту пользователя
|
|
846
|
+
* @param {AddEmailParams} params - Параметры для добавления email
|
|
847
|
+
* @returns {Promise<EmailOperationResponse>} Результат операции
|
|
848
|
+
*/
|
|
849
|
+
add(params: AddEmailParams): Promise<EmailOperationResponse>;
|
|
850
|
+
/**
|
|
851
|
+
* Удалить email адреса из аккаунта пользователя
|
|
852
|
+
* @param {RemoveEmailParams} params - Параметры для удаления email
|
|
853
|
+
* @returns {Promise<EmailOperationResponse>} Результат операции
|
|
854
|
+
*/
|
|
855
|
+
remove(params: RemoveEmailParams): Promise<EmailOperationResponse>;
|
|
856
|
+
}
|
|
857
|
+
declare class IssuesApi {
|
|
858
|
+
private client;
|
|
859
|
+
constructor(client: GitVerseClient);
|
|
860
|
+
/**
|
|
861
|
+
* Получить список issues репозитория
|
|
862
|
+
* @param {string} owner - Владелец репозитория
|
|
863
|
+
* @param {string} repo - Название репозитория
|
|
864
|
+
* @param {IssueState} [state] - Фильтр по состоянию issue
|
|
865
|
+
* @returns {Promise<Issue[]>} Массив issues
|
|
866
|
+
*/
|
|
867
|
+
list(owner: string, repo: string, state?: IssueState): Promise<Issue[]>;
|
|
868
|
+
/**
|
|
869
|
+
* Получить конкретный issue
|
|
870
|
+
* @param {string} owner - Владелец репозитория
|
|
871
|
+
* @param {string} repo - Название репозитория
|
|
872
|
+
* @param {number} number - Номер issue
|
|
873
|
+
* @returns {Promise<Issue>} Информация об issue
|
|
874
|
+
*/
|
|
875
|
+
get(owner: string, repo: string, number: number): Promise<Issue>;
|
|
876
|
+
}
|
|
877
|
+
declare class StarsApi {
|
|
878
|
+
private client;
|
|
879
|
+
constructor(client: GitVerseClient);
|
|
880
|
+
/**
|
|
881
|
+
* Добавить звезду репозиторию
|
|
882
|
+
* @param {string} owner - Владелец репозитория
|
|
883
|
+
* @param {string} repo - Название репозитория
|
|
884
|
+
* @returns {Promise<void>} Результат операции (204 No Content при успехе)
|
|
885
|
+
*/
|
|
886
|
+
add(owner: string, repo: string): Promise<void>;
|
|
887
|
+
/**
|
|
888
|
+
* Проверить, отмечен ли репозиторий звездой
|
|
889
|
+
* @param {string} owner - Владелец репозитория
|
|
890
|
+
* @param {string} repo - Название репозитория
|
|
891
|
+
* @returns {Promise<boolean>} true если отмечен звездой, false если нет
|
|
892
|
+
*/
|
|
893
|
+
check(owner: string, repo: string): Promise<boolean>;
|
|
894
|
+
/**
|
|
895
|
+
* Убрать звезду с репозитория
|
|
896
|
+
* @param {string} owner - Владелец репозитория
|
|
897
|
+
* @param {string} repo - Название репозитория
|
|
898
|
+
* @returns {Promise<void>} Результат операции
|
|
899
|
+
*/
|
|
900
|
+
remove(owner: string, repo: string): Promise<void>;
|
|
901
|
+
}
|
|
902
|
+
/**
|
|
903
|
+
* Вспомогательные утилиты для работы с GitVerse API
|
|
904
|
+
*/
|
|
905
|
+
/**
|
|
906
|
+
* Кодирует строку в Base64
|
|
907
|
+
* @param str Строка для кодирования
|
|
908
|
+
* @returns Строка в формате Base64
|
|
909
|
+
*/
|
|
910
|
+
export declare function encodeBase64(str: string): string;
|
|
911
|
+
/**
|
|
912
|
+
* Декодирует строку из Base64
|
|
913
|
+
* @param base64 Строка в формате Base64
|
|
914
|
+
* @returns Декодированная строка
|
|
915
|
+
*/
|
|
916
|
+
export declare function decodeBase64(base64: string): string;
|
|
917
|
+
/**
|
|
918
|
+
* Создает объект параметров для создания файла
|
|
919
|
+
* @param content Содержимое файла в виде строки
|
|
920
|
+
* @param message Сообщение коммита
|
|
921
|
+
* @param branch Имя ветки (опционально)
|
|
922
|
+
* @returns Объект параметров для создания файла
|
|
923
|
+
*/
|
|
924
|
+
export declare function createFileParams(content: string, message?: string, branch?: string): {
|
|
925
|
+
content: string;
|
|
926
|
+
message: string | undefined;
|
|
927
|
+
branch: string | undefined;
|
|
928
|
+
};
|
|
929
|
+
/**
|
|
930
|
+
* Создает объект параметров для обновления файла
|
|
931
|
+
* @param content Новое содержимое файла в виде строки
|
|
932
|
+
* @param sha SHA хеш текущего содержимого файла
|
|
933
|
+
* @param message Сообщение коммита
|
|
934
|
+
* @param branch Имя ветки (опционально)
|
|
935
|
+
* @returns Объект параметров для обновления файла
|
|
936
|
+
*/
|
|
937
|
+
export declare function updateFileParams(content: string, sha: string, message?: string, branch?: string): {
|
|
938
|
+
content: string;
|
|
939
|
+
sha: string;
|
|
940
|
+
message: string | undefined;
|
|
941
|
+
branch: string | undefined;
|
|
942
|
+
};
|
|
943
|
+
/**
|
|
944
|
+
* Парсит содержимое файла из ответа API
|
|
945
|
+
* @param fileContent Объект с информацией о файле
|
|
946
|
+
* @returns Декодированное содержимое файла
|
|
947
|
+
*/
|
|
948
|
+
export declare function parseFileContent(fileContent: {
|
|
949
|
+
content?: string;
|
|
950
|
+
encoding?: string;
|
|
951
|
+
}): string;
|
|
952
|
+
/**
|
|
953
|
+
* Класс GitVerse, объединяющий все API методы
|
|
954
|
+
*/
|
|
955
|
+
export declare class GitVerse {
|
|
956
|
+
/**
|
|
957
|
+
* Клиент API
|
|
958
|
+
*/
|
|
959
|
+
readonly client: GitVerseClient;
|
|
960
|
+
/**
|
|
961
|
+
* API для работы с пользователями
|
|
962
|
+
*/
|
|
963
|
+
readonly users: UsersApi;
|
|
964
|
+
/**
|
|
965
|
+
* API для работы с репозиториями
|
|
966
|
+
*/
|
|
967
|
+
readonly repos: RepositoriesApi;
|
|
968
|
+
/**
|
|
969
|
+
* API для работы с содержимым репозитория
|
|
970
|
+
*/
|
|
971
|
+
readonly contents: ContentsApi;
|
|
972
|
+
/**
|
|
973
|
+
* API для работы с запросами на слияние
|
|
974
|
+
*/
|
|
975
|
+
readonly pulls: PullsApi;
|
|
976
|
+
/**
|
|
977
|
+
* API для работы с форками
|
|
978
|
+
*/
|
|
979
|
+
readonly forks: ForksApi;
|
|
980
|
+
/**
|
|
981
|
+
* API для работы с email адресами
|
|
982
|
+
*/
|
|
983
|
+
readonly emails: EmailsApi;
|
|
984
|
+
/**
|
|
985
|
+
* API для работы с issues
|
|
986
|
+
*/
|
|
987
|
+
readonly issues: IssuesApi;
|
|
988
|
+
/**
|
|
989
|
+
* API для работы со звездами
|
|
990
|
+
*/
|
|
991
|
+
readonly stars: StarsApi;
|
|
992
|
+
/**
|
|
993
|
+
* Создает новый экземпляр GitVerse
|
|
994
|
+
* @param config Конфигурация клиента
|
|
995
|
+
*/
|
|
996
|
+
constructor(config?: GitVerseClientConfig);
|
|
997
|
+
/**
|
|
998
|
+
* Устанавливает токен авторизации
|
|
999
|
+
* @param token Токен доступа
|
|
1000
|
+
* @returns Текущий экземпляр GitVerse
|
|
1001
|
+
*/
|
|
1002
|
+
setToken(token: string): GitVerse;
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
export {
|
|
1006
|
+
GitVerse as default,
|
|
1007
|
+
};
|
|
1008
|
+
|
|
1009
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class X{baseUrl;token;apiVersion;constructor(j={}){this.baseUrl=j.baseUrl||"https://api.gitverse.ru",this.token=j.token,this.apiVersion=j.apiVersion||"1"}setToken(j){this.token=j}async request(j,x,z){let J=new URL(j,this.baseUrl),K=new Headers;if(K.set("Content-Type","application/json"),K.set("Accept",`application/vnd.gitverse+json;version=${this.apiVersion}`),this.token)K.set("Authorization",`Bearer ${this.token}`);let W={method:x,headers:K,body:z?JSON.stringify(z):void 0},N=await fetch(J,W),Q;try{Q=await N.json()}catch{Q=void 0}if(!N.ok){let G=Q?.message||N.statusText;throw new Error(`${N.status} ${G}`)}return Q}async get(j){return this.request(j,"GET")}async post(j,x){return this.request(j,"POST",x)}async put(j,x){return this.request(j,"PUT",x)}async delete(j,x){return this.request(j,"DELETE",x)}}class Y{client;constructor(j){this.client=j}async getCurrent(){return this.client.get("/user")}async getByUsername(j){return this.client.get(`/users/${j}`)}}class Z{client;constructor(j){this.client=j}async get(j,x){return this.client.get(`/repos/${j}/${x}`)}async getLanguages(j,x){return this.client.get(`/repos/${j}/${x}/languages`)}async listForAuthenticatedUser(){return this.client.get("/user/repos")}async create(j){return this.client.post("/user/repos",j)}}class _{client;constructor(j){this.client=j}async get(j,x,z){return this.client.get(`/public/api/repos/${j}/${x}/contents/${z}`)}async createFile(j,x,z,J){return this.client.put(`/repos/${j}/${x}/contents/${z}`,J)}async updateFile(j,x,z,J){return this.client.put(`/repos/${j}/${x}/contents/${z}`,J)}async deleteFile(j,x,z,J){return this.client.delete(`/public/api/repos/${j}/${x}/contents/${z}`,J)}}class ${client;constructor(j){this.client=j}async create(j,x,z){return this.client.post(`/repos/${j}/${x}/pulls`,z)}async get(j,x,z){return this.client.get(`/repos/${j}/${x}/pulls/${z}`)}async list(j,x,z){let K=new URL(`/repos/${j}/${x}/pulls`,"http://localhost");if(z)K.searchParams.set("state",z);return this.client.get(K.href.replace("http://localhost",""))}}class D{client;constructor(j){this.client=j}async create(j,x,z){return this.client.post(`/public/api/repos/${j}/${x}/forks`,z)}async list(j,x){return this.client.get(`/repos/${j}/${x}/forks`)}}class F{client;constructor(j){this.client=j}async list(){return this.client.get("/user/emails")}async add(j){return this.client.post("/user/emails",j)}async remove(j){return this.client.delete("/user/emails",j)}}class L{client;constructor(j){this.client=j}async list(j,x,z){let J=new URLSearchParams;if(z)J.append("state",z);let K=J.toString(),W=`/repos/${j}/${x}/issues${K?`?${K}`:""}`;return this.client.get(W)}async get(j,x,z){return this.client.get(`/repos/${j}/${x}/issues/${z}`)}}class O{client;constructor(j){this.client=j}async add(j,x){await this.client.put(`/user/starred/${j}/${x}`)}async check(j,x){try{return await this.client.get(`/user/starred/${j}/${x}`),!0}catch(z){if(z.message.includes("404"))return!1;throw z}}async remove(j,x){await this.client.delete(`/user/starred/${j}/${x}`)}}var U;((z)=>{z.User="User";z.Organization="Organization"})(U||={});var q;((J)=>{J.Public="public";J.Limited="limited";J.Private="private"})(q||={});var H;((z)=>{z.File="file";z.Directory="dir"})(H||={});var k;((z)=>{z.Open="open";z.Closed="closed"})(k||={});var E;((z)=>{z.Open="open";z.Closed="closed"})(E||={});function v(j){return Buffer.from(j).toString("base64")}function M(j){return Buffer.from(j,"base64").toString("utf-8")}function y(j,x,z){return{content:v(j),message:x,branch:z}}function d(j,x,z,J){return{content:v(j),sha:x,message:z,branch:J}}function w(j){if(!j.content)return"";if(j.encoding==="base64"){let x=j.content;if(!/^[A-Za-z0-9+/=]+$/.test(x))return x;try{return M(x)}catch{return x}}return j.content}class B{client;users;repos;contents;pulls;forks;emails;issues;stars;constructor(j={}){this.client=new X(j),this.users=new Y(this.client),this.repos=new Z(this.client),this.contents=new _(this.client),this.pulls=new $(this.client),this.forks=new D(this.client),this.emails=new F(this.client),this.issues=new L(this.client),this.stars=new O(this.client)}setToken(j){return this.client.setToken(j),this}}var e=B;export{d as updateFileParams,w as parseFileContent,v as encodeBase64,e as default,M as decodeBase64,y as createFileParams,q as VisibilityType,U as UserType,k as PullRequestState,E as IssueState,B as GitVerse,H as ContentType};
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gitverse-api-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "TypeScript SDK для работы с GitVerse API",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"keywords": [
|
|
8
|
+
"gitverse",
|
|
9
|
+
"api",
|
|
10
|
+
"sdk",
|
|
11
|
+
"git",
|
|
12
|
+
"typescript",
|
|
13
|
+
"bun"
|
|
14
|
+
],
|
|
15
|
+
"main": "dist/index.js",
|
|
16
|
+
"types": "dist/index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"import": "./dist/index.js",
|
|
20
|
+
"types": "./dist/index.d.ts"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist"
|
|
25
|
+
],
|
|
26
|
+
"author": "Ivan Bobchenkov<me@bobchenkov.ru>",
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "bun run build.ts",
|
|
29
|
+
"test": "bun test",
|
|
30
|
+
"test:coverage": "bun test --coverage",
|
|
31
|
+
"prepublishOnly": "bun run build"
|
|
32
|
+
},
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://gitverse.ru/rainypixel/gitverse-sdk.git"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://gitverse.ru/rainypixel/gitverse-sdk/issues"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://gitverse.ru/rainypixel/gitverse-sdk#readme",
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@aryzing/bun-mock-fetch": "^1.0.2",
|
|
44
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
45
|
+
"@semantic-release/exec": "^7.1.0",
|
|
46
|
+
"@semantic-release/git": "^10.0.1",
|
|
47
|
+
"@types/bun": "latest",
|
|
48
|
+
"bun-bagel": "^1.2.0",
|
|
49
|
+
"bun-plugin-dts": "^0.3.0",
|
|
50
|
+
"conventional-changelog-conventionalcommits": "7",
|
|
51
|
+
"semantic-release": "22",
|
|
52
|
+
"typescript": "^5"
|
|
53
|
+
},
|
|
54
|
+
"publishConfig": {
|
|
55
|
+
"access": "public"
|
|
56
|
+
}
|
|
57
|
+
}
|