gitverse-api-sdk 4.0.2 → 5.0.1

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.
Files changed (65) hide show
  1. package/README.md +106 -270
  2. package/dist/api/actions.d.ts +360 -363
  3. package/dist/api/actions.js +3 -3
  4. package/dist/api/actions.js.map +3 -3
  5. package/dist/api/emails.d.ts +56 -51
  6. package/dist/api/emails.js +3 -3
  7. package/dist/api/emails.js.map +3 -3
  8. package/dist/api/issues.d.ts +297 -214
  9. package/dist/api/issues.js +3 -3
  10. package/dist/api/issues.js.map +3 -3
  11. package/dist/api/organizations.d.ts +78 -7
  12. package/dist/api/organizations.js +3 -3
  13. package/dist/api/organizations.js.map +3 -3
  14. package/dist/api/pulls.d.ts +338 -427
  15. package/dist/api/pulls.js +3 -3
  16. package/dist/api/pulls.js.map +3 -3
  17. package/dist/api/releases.d.ts +198 -231
  18. package/dist/api/releases.js +3 -3
  19. package/dist/api/releases.js.map +3 -3
  20. package/dist/api/repositories.d.ts +878 -330
  21. package/dist/api/repositories.js +3 -3
  22. package/dist/api/repositories.js.map +3 -3
  23. package/dist/api/stars.d.ts +109 -182
  24. package/dist/api/stars.js +3 -3
  25. package/dist/api/stars.js.map +3 -3
  26. package/dist/api/teams.d.ts +118 -134
  27. package/dist/api/teams.js +3 -3
  28. package/dist/api/teams.js.map +3 -3
  29. package/dist/api/users.d.ts +99 -97
  30. package/dist/api/users.js +3 -3
  31. package/dist/api/users.js.map +3 -3
  32. package/dist/client.d.ts +14 -0
  33. package/dist/client.js +3 -3
  34. package/dist/client.js.map +3 -3
  35. package/dist/enums.d.ts +27 -71
  36. package/dist/enums.js +3 -3
  37. package/dist/enums.js.map +3 -3
  38. package/dist/errors.d.ts +12 -10
  39. package/dist/errors.js +2 -2
  40. package/dist/errors.js.map +1 -1
  41. package/dist/index.d.ts +2042 -2130
  42. package/dist/index.js +2 -2
  43. package/dist/index.js.map +3 -3
  44. package/dist/types.d.ts +779 -1223
  45. package/dist/utils.js +1 -2
  46. package/dist/utils.js.map +1 -1
  47. package/package.json +2 -2
  48. package/dist/api/branches.d.ts +0 -173
  49. package/dist/api/branches.js +0 -4
  50. package/dist/api/branches.js.map +0 -10
  51. package/dist/api/collaborators.d.ts +0 -243
  52. package/dist/api/collaborators.js +0 -4
  53. package/dist/api/collaborators.js.map +0 -10
  54. package/dist/api/commits.d.ts +0 -321
  55. package/dist/api/commits.js +0 -4
  56. package/dist/api/commits.js.map +0 -10
  57. package/dist/api/contents.d.ts +0 -364
  58. package/dist/api/contents.js +0 -4
  59. package/dist/api/contents.js.map +0 -10
  60. package/dist/api/forks.d.ts +0 -344
  61. package/dist/api/forks.js +0 -4
  62. package/dist/api/forks.js.map +0 -10
  63. package/dist/api/git.d.ts +0 -247
  64. package/dist/api/git.js +0 -4
  65. package/dist/api/git.js.map +0 -10
package/README.md CHANGED
@@ -3,21 +3,21 @@
3
3
  [![npm version](https://img.shields.io/npm/v/gitverse-api-sdk.svg)](https://www.npmjs.com/package/gitverse-api-sdk)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
  [![Test Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen.svg)](https://gitverse.ru/rainypixel/gitverse-sdk)
6
- [![GitVerse API](https://img.shields.io/badge/GitVerse%20API-v22.0.0-blue.svg)](https://gitverse.ru)
6
+ [![GitVerse API](https://img.shields.io/badge/GitVerse%20API-v1.1-blue.svg)](https://gitverse.ru)
7
7
 
8
8
  Полнофункциональный TypeScript SDK для GitVerse API с поддержкой всех эндпоинтов, обработкой Rate Limits и версионирования.
9
9
 
10
- > **Совместимость:** SDK синхронизирован с GitVerse API v22.0.0 (обновлено: 06.11.2025)
10
+ > **Совместимость:** SDK синхронизирован с GitVerse OpenAPI v1.1 от 15.01.2026
11
11
 
12
12
  ## Ключевые особенности
13
13
 
14
- - ✅ **100% покрытие API** — Все 91 эндпоинт GitVerse API поддерживаются
15
- - ✅ **Rate Limits** — Автоматическая обработка лимитов запросов с информативными ошибками
16
- - ✅ **Версионирование API** — Предупреждения об устаревших версиях API
17
- - ✅ **Специализированные ошибки** — `RateLimitError`, `ApiVersionWarning` для точной обработки
14
+ - ✅ **Полное покрытие API** — Все эндпоинты GitVerse OpenAPI v1.1
15
+ - ✅ **Rate Limits** — Автоматическая обработка лимитов запросов
16
+ - ✅ **Версионирование API** — Предупреждения об устаревших версиях
17
+ - ✅ **Специализированные ошибки** — `RateLimitError`, `ApiVersionWarning`
18
18
  - ✅ **100% покрытие тестами** — Полное тестирование всех методов
19
19
  - ✅ **Нет зависимостей** — Только нативный `fetch` API и `Buffer`
20
- - ✅ **Tree-shakable** — Модульная архитектура для минимального размера бандла
20
+ - ✅ **Tree-shakable** — Модульная архитектура
21
21
  - ✅ **TypeScript** — Полная типизация из коробки
22
22
 
23
23
  ## Установка
@@ -41,11 +41,10 @@ bun add gitverse-api-sdk
41
41
  ```typescript
42
42
  import { GitVerse } from 'gitverse-api-sdk';
43
43
 
44
- // Создание клиента с токеном
45
44
  const client = new GitVerse({ token: 'your-token-here' });
46
45
 
47
46
  // Получение информации о текущем пользователе
48
- const user = await client.users.getCurrent();
47
+ const user = await client.users.getAuthenticated();
49
48
  console.log(user.login);
50
49
 
51
50
  // Получение репозитория
@@ -63,8 +62,6 @@ const pr = await client.pulls.create('owner', 'repo', {
63
62
 
64
63
  ## Обработка Rate Limits
65
64
 
66
- SDK автоматически отслеживает лимиты запросов и предоставляет подробную информацию при их превышении:
67
-
68
65
  ```typescript
69
66
  import { GitVerse, RateLimitError } from 'gitverse-api-sdk';
70
67
 
@@ -77,169 +74,99 @@ try {
77
74
  console.log(`Rate limit exceeded!`);
78
75
  console.log(`Limit: ${error.rateLimit.limit}`);
79
76
  console.log(`Remaining: ${error.rateLimit.remaining}`);
80
- console.log(`Reset at: ${new Date(error.rateLimit.reset * 1000)}`);
81
-
82
- // Ожидание сброса лимита
83
- const waitTime = error.rateLimit.reset * 1000 - Date.now();
84
- await new Promise(resolve => setTimeout(resolve, waitTime));
77
+ console.log(`Retry after: ${error.rateLimit.retryAfter}s`);
85
78
  }
86
79
  }
87
80
  ```
88
81
 
89
- ## Обработка версионирования API
90
-
91
- SDK предупреждает об использовании устаревших версий API:
92
-
93
- ```typescript
94
- import { GitVerse } from 'gitverse-api-sdk';
95
-
96
- const client = new GitVerse({
97
- token: 'your-token',
98
- apiVersion: '2022-11-28', // Указание версии API
99
- onApiVersionWarning: (warning) => {
100
- console.warn(`API Warning: ${warning.message}`);
101
- console.warn(`Current version: ${warning.currentVersion}`);
102
- console.warn(`Sunset date: ${warning.sunsetDate}`);
103
- }
104
- });
105
- ```
106
-
107
82
  ## Отмена запросов (AbortSignal)
108
83
 
109
- SDK поддерживает отмену HTTP-запросов через стандартный Web API `AbortController`:
110
-
111
84
  ```typescript
112
- import { GitVerse } from 'gitverse-api-sdk';
113
-
114
- const client = new GitVerse({ token: 'your-token' });
115
-
116
- // Создание контроллера для управления отменой запроса
117
85
  const controller = new AbortController();
118
86
 
119
- // Выполнение запроса с возможностью отмены
87
+ // Запрос с возможностью отмены
120
88
  const promise = client.repos.get('owner', 'repo', { signal: controller.signal });
121
89
 
122
- // Отмена запроса (например, при размонтировании компонента)
90
+ // Отмена запроса
123
91
  controller.abort();
124
92
 
125
93
  try {
126
- const repo = await promise;
94
+ await promise;
127
95
  } catch (error) {
128
96
  if (error.name === 'AbortError') {
129
- console.log('Запрос был отменен');
97
+ console.log('Запрос отменён');
130
98
  }
131
99
  }
132
100
  ```
133
101
 
134
- ### Использование с таймаутом
135
-
136
- ```typescript
137
- // Автоматическая отмена запроса через 5 секунд
138
- const controller = new AbortController();
139
- const timeoutId = setTimeout(() => controller.abort(), 5000);
140
-
141
- try {
142
- const repo = await client.repos.get('owner', 'repo', { signal: controller.signal });
143
- clearTimeout(timeoutId);
144
- console.log('Репозиторий получен:', repo.name);
145
- } catch (error) {
146
- if (error.name === 'AbortError') {
147
- console.log('Запрос превысил таймаут');
148
- }
149
- throw error;
150
- }
151
- ```
102
+ ## API Модули
152
103
 
153
- ### Отмена при размонтировании React-компонента
104
+ ### 👤 Users (4 метода)
154
105
 
155
106
  ```typescript
156
- import { useEffect, useState } from 'react';
157
- import { GitVerse } from 'gitverse-api-sdk';
158
-
159
- function RepositoryView({ owner, repo }) {
160
- const [data, setData] = useState(null);
161
-
162
- useEffect(() => {
163
- const controller = new AbortController();
164
- const client = new GitVerse({ token: 'your-token' });
165
-
166
- client.repos.get(owner, repo, { signal: controller.signal })
167
- .then(setData)
168
- .catch(error => {
169
- if (error.name !== 'AbortError') {
170
- console.error('Ошибка загрузки:', error);
171
- }
172
- });
173
-
174
- // Отмена запроса при размонтировании компонента
175
- return () => controller.abort();
176
- }, [owner, repo]);
177
-
178
- return <div>{data ? data.name : 'Загрузка...'}</div>;
179
- }
107
+ await client.users.getAuthenticated();
108
+ await client.users.get('username');
109
+ await client.users.listEmails();
110
+ await client.users.listFollowers('username');
180
111
  ```
181
112
 
182
- ### Поддержка во всех методах
183
-
184
- AbortSignal поддерживается во **всех 102 методах API** — просто передайте опциональный параметр `{ signal }`:
113
+ ### 📦 Repositories (27 методов)
185
114
 
186
115
  ```typescript
187
- // GET запросы
188
- await client.users.getCurrent({ signal: controller.signal });
189
- await client.repos.list({ signal: controller.signal });
116
+ // Основные операции
117
+ await client.repos.get('owner', 'repo');
118
+ await client.repos.update('owner', 'repo', { description: 'Updated' });
119
+ await client.repos.delete('owner', 'repo');
120
+ await client.repos.listForAuthenticatedUser();
121
+ await client.repos.createForAuthenticatedUser({ name: 'new-repo' });
190
122
 
191
- // POST запросы
192
- await client.repos.create(params, { signal: controller.signal });
193
- await client.pulls.create('owner', 'repo', params, { signal: controller.signal });
123
+ // Ветки
124
+ await client.repos.listBranches('owner', 'repo');
194
125
 
195
- // PUT/PATCH/DELETE запросы
196
- await client.contents.update('owner', 'repo', 'path', params, { signal: controller.signal });
197
- await client.repos.delete('owner', 'repo', { signal: controller.signal });
198
- ```
126
+ // Коллабораторы
127
+ await client.repos.listCollaborators('owner', 'repo');
128
+ await client.repos.addCollaborator('owner', 'repo', 'username', { permission: 'push' });
199
129
 
200
- ## API Модули
130
+ // Коммиты
131
+ await client.repos.listCommits('owner', 'repo');
132
+ await client.repos.getCommit('owner', 'repo', 'sha');
133
+ await client.repos.compareCommits('owner', 'repo', 'base...head');
134
+ await client.repos.createCommit('owner', 'repo', { message: 'msg', tree: 'sha' });
201
135
 
202
- SDK организован в специализированные модули для различных областей GitVerse API:
136
+ // Контент
137
+ await client.repos.getContent('owner', 'repo', 'path/to/file');
138
+ await client.repos.createOrUpdateFile('owner', 'repo', 'path', { message: 'Add', content: 'base64' });
139
+ await client.repos.deleteFile('owner', 'repo', 'path', { message: 'Delete', sha: 'sha' });
203
140
 
204
- ### 👤 Users (2 метода)
141
+ // Форки
142
+ await client.repos.createFork('owner', 'repo');
205
143
 
206
- ```typescript
207
- await client.users.getCurrent();
208
- await client.users.getByUsername('username');
209
- ```
144
+ // Git объекты
145
+ await client.repos.getTree('owner', 'repo', 'sha');
146
+ await client.repos.createTree('owner', 'repo', { tree: [...] });
147
+ await client.repos.createRef('owner', 'repo', { ref: 'refs/heads/new', sha: 'sha' });
210
148
 
211
- ### 📦 Repositories (7 методов)
149
+ // Pull Requests (через repos)
150
+ await client.repos.listPulls('owner', 'repo');
151
+ await client.repos.getPull('owner', 'repo', 123);
152
+ await client.repos.updatePull('owner', 'repo', 123, { title: 'New title' });
212
153
 
213
- ```typescript
214
- await client.repos.get('owner', 'repo');
215
- await client.repos.create({ name: 'new-repo', private: true });
216
- await client.repos.update('owner', 'repo', { description: 'Updated' });
217
- await client.repos.delete('owner', 'repo');
218
- await client.repos.compare('owner', 'repo', 'main...dev');
219
- await client.repos.getLanguages('owner', 'repo');
220
- await client.repos.listForAuthenticatedUser();
221
- ```
154
+ // Секреты репозитория
155
+ await client.repos.listRepoSecrets('owner', 'repo');
156
+ await client.repos.createOrUpdateRepoSecret('owner', 'repo', 'SECRET', { encrypted_value: '...' });
222
157
 
223
- ### 📁 Contents (4 метода)
224
-
225
- ```typescript
226
- await client.contents.get('owner', 'repo', 'path/to/file');
227
- await client.contents.create('owner', 'repo', 'path', { message: 'Add file', content: 'base64' });
228
- await client.contents.update('owner', 'repo', 'path', { message: 'Update', content: 'base64', sha: 'sha' });
229
- await client.contents.delete('owner', 'repo', 'path', { message: 'Delete', sha: 'sha' });
158
+ // Прочее
159
+ await client.repos.listLanguages('owner', 'repo');
230
160
  ```
231
161
 
232
- ### 🔀 Pull Requests (8 методов)
162
+ ### 🔀 Pull Requests (5 методов)
233
163
 
234
164
  ```typescript
235
165
  await client.pulls.list('owner', 'repo');
236
- await client.pulls.create('owner', 'repo', { title: 'New PR', head: 'feature', base: 'main' });
166
+ await client.pulls.create('owner', 'repo', { title: 'PR', head: 'feature', base: 'main' });
237
167
  await client.pulls.get('owner', 'repo', 123);
238
- await client.pulls.update('owner', 'repo', 123, { title: 'Updated title' });
168
+ await client.pulls.update('owner', 'repo', 123, { title: 'Updated' });
239
169
  await client.pulls.merge('owner', 'repo', 123);
240
- await client.pulls.getFiles('owner', 'repo', 123);
241
- await client.pulls.updateBranch('owner', 'repo', 123);
242
- await client.pulls.checkIfMerged('owner', 'repo', 123); // Проверка: был ли PR влит
243
170
  ```
244
171
 
245
172
  ### 🐛 Issues (6 методов)
@@ -248,15 +175,24 @@ await client.pulls.checkIfMerged('owner', 'repo', 123); // Проверка: б
248
175
  await client.issues.list('owner', 'repo');
249
176
  await client.issues.create('owner', 'repo', { title: 'Bug report' });
250
177
  await client.issues.get('owner', 'repo', 123);
178
+ await client.issues.listComments('owner', 'repo', 123);
251
179
  await client.issues.getComment('owner', 'repo', 456);
252
- await client.issues.getComments('owner', 'repo', 123);
253
- await client.issues.getLabels('owner', 'repo', 123);
180
+ await client.issues.listLabels('owner', 'repo');
254
181
  ```
255
182
 
256
- ### 🍴 Forks (1 метод)
183
+ ### 🚀 Releases (10 методов)
257
184
 
258
185
  ```typescript
259
- await client.forks.create('owner', 'repo');
186
+ await client.releases.list('owner', 'repo');
187
+ await client.releases.create('owner', 'repo', { tag_name: 'v1.0.0', name: 'Release' });
188
+ await client.releases.get('owner', 'repo', 123);
189
+ await client.releases.getByTag('owner', 'repo', 'v1.0.0');
190
+ await client.releases.update('owner', 'repo', 123, { name: 'Updated' });
191
+ await client.releases.delete('owner', 'repo', 123);
192
+ await client.releases.deleteByTag('owner', 'repo', 'v1.0.0');
193
+ await client.releases.listAssets('owner', 'repo', 123);
194
+ await client.releases.uploadAsset('owner', 'repo', 123, { name: 'asset.zip' });
195
+ await client.releases.deleteAsset('owner', 'repo', 123, 456);
260
196
  ```
261
197
 
262
198
  ### ⭐ Stars (4 метода)
@@ -276,206 +212,106 @@ await client.emails.add(['email@example.com']);
276
212
  await client.emails.delete(['email@example.com']);
277
213
  ```
278
214
 
279
- ### 🌿 Branches (1 метод)
280
-
281
- ```typescript
282
- await client.branches.list('owner', 'repo');
283
- ```
284
-
285
- ### 📝 Commits (3 метода)
286
-
287
- ```typescript
288
- await client.commits.list('owner', 'repo');
289
- await client.commits.get('owner', 'repo', 'sha');
290
- await client.commits.getCommits('owner', 'repo', 123);
291
- ```
292
-
293
- ### 👥 Collaborators (2 метода)
294
-
295
- ```typescript
296
- await client.collaborators.list('owner', 'repo');
297
- await client.collaborators.add('owner', 'repo', 'username');
298
- ```
299
-
300
- ### 🏢 Organizations (1 метод)
215
+ ### 🏢 Organizations (5 методов)
301
216
 
302
217
  ```typescript
303
- await client.organizations.list();
218
+ await client.orgs.listOrgSecrets('org');
219
+ await client.orgs.getOrgSecret('org', 'SECRET');
220
+ await client.orgs.createOrUpdateOrgSecret('org', 'SECRET', { encrypted_value: '...' });
221
+ await client.orgs.deleteOrgSecret('org', 'SECRET');
222
+ await client.orgs.isMember('org', 'username');
304
223
  ```
305
224
 
306
- ### 👨‍👩‍👧‍👦 Teams (4 метода)
225
+ ### 👨‍👩‍👧‍👦 Teams (3 метода)
307
226
 
308
227
  ```typescript
309
228
  await client.teams.list('org');
310
- await client.teams.get('org', 'team-slug');
311
229
  await client.teams.listMembers('org', 'team-slug');
312
230
  await client.teams.getMembershipForUser('org', 'team-slug', 'username');
313
231
  ```
314
232
 
315
- ### 🚀 Releases (10 методов)
316
-
317
- ```typescript
318
- await client.releases.list('owner', 'repo');
319
- await client.releases.create('owner', 'repo', { tag_name: 'v1.0.0' });
320
- await client.releases.get('owner', 'repo', 123);
321
- await client.releases.getByTag('owner', 'repo', 'v1.0.0');
322
- await client.releases.update('owner', 'repo', 123, { name: 'New name' });
323
- await client.releases.delete('owner', 'repo', 123);
324
- await client.releases.deleteByTag('owner', 'repo', 'v1.0.0');
325
- await client.releases.getAssets('owner', 'repo', 123);
326
- await client.releases.uploadAsset('owner', 'repo', 123, { name: 'asset.zip' });
327
- await client.releases.deleteAsset('owner', 'repo', 123, 456);
328
- ```
329
-
330
- ### 🔧 Git Objects (3 метода)
331
-
332
- ```typescript
333
- await client.git.getTree('owner', 'repo', 'sha');
334
- await client.git.getBlob('owner', 'repo', 'sha');
335
- await client.git.getRef('owner', 'repo', 'heads/main');
336
- ```
337
-
338
- ### ⚡ Actions (33 метода)
339
-
340
- Полная поддержка GitHub Actions API, включая:
233
+ ### Actions (25 методов)
341
234
 
342
- **Runners (8 методов)**
235
+ **Runners**
343
236
  ```typescript
344
237
  await client.actions.listOrgRunners('org');
345
- await client.actions.createOrgRegistrationToken('org');
346
238
  await client.actions.getOrgRunner('org', 123);
347
239
  await client.actions.deleteOrgRunner('org', 123);
240
+ await client.actions.createOrgRegistrationToken('org');
348
241
  await client.actions.listRepoRunners('owner', 'repo');
349
- await client.actions.createRepoRegistrationToken('owner', 'repo');
350
242
  await client.actions.getRepoRunner('owner', 'repo', 123);
351
243
  await client.actions.deleteRepoRunner('owner', 'repo', 123);
244
+ await client.actions.createRepoRegistrationToken('owner', 'repo');
352
245
  ```
353
246
 
354
- **Secrets (8 методов)**
247
+ **Secrets**
355
248
  ```typescript
356
249
  await client.actions.listOrgSecrets('org');
357
- await client.actions.getOrgSecret('org', 'SECRET_NAME');
358
- await client.actions.createOrUpdateOrgSecret('org', 'SECRET_NAME', { encrypted_value: '...' });
359
- await client.actions.deleteOrgSecret('org', 'SECRET_NAME');
250
+ await client.actions.getOrgSecret('org', 'SECRET');
251
+ await client.actions.createOrUpdateOrgSecret('org', 'SECRET', { encrypted_value: '...' });
252
+ await client.actions.deleteOrgSecret('org', 'SECRET');
360
253
  await client.actions.listRepoSecrets('owner', 'repo');
361
- await client.actions.getRepoSecret('owner', 'repo', 'SECRET_NAME');
362
- await client.actions.createOrUpdateRepoSecret('owner', 'repo', 'SECRET_NAME', { encrypted_value: '...' });
363
- await client.actions.deleteRepoSecret('owner', 'repo', 'SECRET_NAME');
254
+ await client.actions.getRepoSecret('owner', 'repo', 'SECRET');
255
+ await client.actions.createOrUpdateRepoSecret('owner', 'repo', 'SECRET', { encrypted_value: '...' });
256
+ await client.actions.deleteRepoSecret('owner', 'repo', 'SECRET');
364
257
  ```
365
258
 
366
- **Variables (10 методов)**
259
+ **Variables**
367
260
  ```typescript
368
261
  await client.actions.listOrgVariables('org');
369
- await client.actions.createOrgVariable('org', { name: 'VAR', value: 'value' });
370
262
  await client.actions.getOrgVariable('org', 'VAR');
371
- await client.actions.updateOrgVariable('org', 'VAR', { value: 'new-value' });
263
+ await client.actions.createOrgVariable('org', { name: 'VAR', value: 'value' });
264
+ await client.actions.updateOrgVariable('org', 'VAR', { value: 'new' });
372
265
  await client.actions.deleteOrgVariable('org', 'VAR');
373
266
  await client.actions.listRepoVariables('owner', 'repo');
374
- await client.actions.createRepoVariable('owner', 'repo', { name: 'VAR', value: 'value' });
375
267
  await client.actions.getRepoVariable('owner', 'repo', 'VAR');
268
+ await client.actions.createRepoVariable('owner', 'repo', { name: 'VAR', value: 'value' });
376
269
  await client.actions.updateRepoVariable('owner', 'repo', 'VAR', { value: 'new' });
377
270
  await client.actions.deleteRepoVariable('owner', 'repo', 'VAR');
378
271
  ```
379
272
 
380
- **Artifacts (5 методов)**
381
- ```typescript
382
- await client.actions.listArtifacts('owner', 'repo');
383
- await client.actions.getArtifact('owner', 'repo', 123);
384
- await client.actions.deleteArtifact('owner', 'repo', 123);
385
- await client.actions.downloadArtifact('owner', 'repo', 123);
386
- await client.actions.downloadArtifactRaw('owner', 'repo', 123);
387
- ```
388
-
389
- **Workflows (2 метода)**
390
- ```typescript
391
- await client.actions.getWorkflowDispatchInputs('owner', 'repo', 'workflow.yml');
392
- await client.actions.dispatchWorkflow('owner', 'repo', 'workflow.yml', { ref: 'main' });
393
- ```
394
-
395
- ## Продвинутое использование
396
-
397
- ### Tree-shaking
398
-
399
- Для минимального размера бандла импортируйте только нужные модули:
400
-
401
- ```typescript
402
- import { RepositoriesApi, GitVerseClient } from 'gitverse-api-sdk/api/repositories';
403
- import { PullsApi } from 'gitverse-api-sdk/api/pulls';
404
-
405
- const client = new GitVerseClient({ token: 'your-token' });
406
- const repos = new RepositoriesApi(client);
407
- const pulls = new PullsApi(client);
408
-
409
- const repo = await repos.get('owner', 'repo');
410
- const prList = await pulls.list('owner', 'repo');
411
- ```
412
-
413
- ### Обработка ошибок
273
+ ## Обработка ошибок
414
274
 
415
275
  ```typescript
416
276
  import { GitVerse, GitVerseApiError, RateLimitError } from 'gitverse-api-sdk';
417
277
 
418
- const client = new GitVerse({ token: 'your-token' });
419
-
420
278
  try {
421
279
  await client.repos.get('owner', 'repo');
422
280
  } catch (error) {
423
281
  if (error instanceof RateLimitError) {
424
- console.error('Rate limit exceeded:', error.rateLimit);
282
+ console.error('Rate limit:', error.rateLimit);
425
283
  } else if (error instanceof GitVerseApiError) {
426
284
  console.error(`API Error ${error.status}:`, error.message);
427
- } else {
428
- console.error('Unexpected error:', error);
429
285
  }
430
286
  }
431
287
  ```
432
288
 
433
- ### Конфигурация клиента
289
+ ## Конфигурация
434
290
 
435
291
  ```typescript
436
- import { GitVerse } from 'gitverse-api-sdk';
437
-
438
292
  const client = new GitVerse({
439
293
  token: 'your-token',
440
- baseUrl: 'https://gitverse.ru/api/v1', // По умолчанию
441
- apiVersion: '2022-11-28', // Версия API
294
+ baseUrl: 'https://gitverse.ru/api/v1',
295
+ apiVersion: '2022-11-28',
442
296
  onApiVersionWarning: (warning) => {
443
297
  console.warn('API version warning:', warning);
444
298
  }
445
299
  });
300
+
301
+ // Динамическое обновление токена
302
+ client.setToken('new-token');
446
303
  ```
447
304
 
448
305
  ## Разработка
449
306
 
450
307
  ```bash
451
- # Установка зависимостей
452
- bun install
453
-
454
- # Запуск тестов
455
- bun test
456
-
457
- # Проверка покрытия (требуется 100%)
458
- bun test:coverage
459
-
460
- # Сборка проекта
461
- bun run build
462
-
463
- # Линтинг
464
- bun run lint
465
- bun run lint:fix
308
+ bun install # Установка зависимостей
309
+ bun test # Запуск тестов
310
+ bun test:coverage # Проверка покрытия (требуется 100%)
311
+ bun run build # Сборка
312
+ bun run lint # Линтинг
466
313
  ```
467
314
 
468
315
  ## Лицензия
469
316
 
470
317
  MIT © [RainyPixel](https://gitverse.ru/RainyPixel)
471
-
472
- ## Полезные ссылки
473
-
474
- - [GitVerse SDK](https://gitverse.ru/RainyPixel/gitverse-sdk) - Основной репозиторий
475
- - [GitVerse API Docs](https://gitverse.ru/gitverse/rest-api-description/content/master/v1/openapi-1.0.json) - Документация API
476
- - [Issues](https://gitverse.ru/RainyPixel/gitverse-sdk/tasktracker) - Сообщить об ошибке
477
- - [npm пакет](https://www.npmjs.com/package/gitverse-api-sdk)
478
-
479
- ---
480
-
481
- Сделано с ❤️ для GitVerse