gitverse-api-sdk 4.0.1 → 5.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.
Files changed (63) hide show
  1. package/README.md +126 -270
  2. package/dist/api/actions.d.ts +116 -43
  3. package/dist/api/actions.js +3 -3
  4. package/dist/api/actions.js.map +3 -3
  5. package/dist/api/branches.d.ts +33 -1
  6. package/dist/api/branches.js +3 -3
  7. package/dist/api/branches.js.map +3 -3
  8. package/dist/api/collaborators.d.ts +200 -3
  9. package/dist/api/collaborators.js +3 -3
  10. package/dist/api/collaborators.js.map +3 -3
  11. package/dist/api/commits.d.ts +88 -3
  12. package/dist/api/commits.js +3 -3
  13. package/dist/api/commits.js.map +3 -3
  14. package/dist/api/contents.d.ts +26 -1
  15. package/dist/api/contents.js +3 -3
  16. package/dist/api/contents.js.map +3 -3
  17. package/dist/api/emails.d.ts +28 -18
  18. package/dist/api/emails.js +3 -3
  19. package/dist/api/emails.js.map +3 -3
  20. package/dist/api/forks.d.ts +44 -1
  21. package/dist/api/forks.js +3 -3
  22. package/dist/api/forks.js.map +1 -1
  23. package/dist/api/git.d.ts +34 -4
  24. package/dist/api/git.js +3 -3
  25. package/dist/api/git.js.map +3 -3
  26. package/dist/api/issues.d.ts +252 -42
  27. package/dist/api/issues.js +3 -3
  28. package/dist/api/issues.js.map +3 -3
  29. package/dist/api/organizations.d.ts +10 -0
  30. package/dist/api/organizations.js +2 -2
  31. package/dist/api/organizations.js.map +1 -1
  32. package/dist/api/pulls.d.ts +145 -17
  33. package/dist/api/pulls.js +3 -3
  34. package/dist/api/pulls.js.map +3 -3
  35. package/dist/api/releases.d.ts +44 -16
  36. package/dist/api/releases.js +3 -3
  37. package/dist/api/releases.js.map +3 -3
  38. package/dist/api/repositories.d.ts +129 -45
  39. package/dist/api/repositories.js +3 -3
  40. package/dist/api/repositories.js.map +3 -3
  41. package/dist/api/stars.d.ts +65 -2
  42. package/dist/api/stars.js +3 -3
  43. package/dist/api/stars.js.map +3 -3
  44. package/dist/api/teams.d.ts +54 -44
  45. package/dist/api/teams.js +3 -3
  46. package/dist/api/teams.js.map +3 -3
  47. package/dist/api/users.d.ts +94 -0
  48. package/dist/api/users.js +3 -3
  49. package/dist/api/users.js.map +3 -3
  50. package/dist/client.d.ts +10 -0
  51. package/dist/client.js +3 -3
  52. package/dist/client.js.map +3 -3
  53. package/dist/enums.js +2 -2
  54. package/dist/enums.js.map +1 -1
  55. package/dist/errors.js +2 -2
  56. package/dist/errors.js.map +1 -1
  57. package/dist/index.d.ts +718 -180
  58. package/dist/index.js +2 -2
  59. package/dist/index.js.map +2 -2
  60. package/dist/types.d.ts +583 -85
  61. package/dist/utils.js +2 -2
  62. package/dist/utils.js.map +1 -1
  63. package/package.json +3 -5
package/README.md CHANGED
@@ -3,21 +3,41 @@
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
11
+
12
+ ## ⚠️ Breaking Changes в v4.0.0
13
+
14
+ В версии 4.0.0 произошла реструктуризация API модулей:
15
+
16
+ - **Удалены отдельные модули**: `branches`, `collaborators`, `commits`, `contents`, `forks`, `git`
17
+ - **Консолидированы в `repos`**: Все методы теперь доступны через `client.repos.*`
18
+
19
+ **Миграция:**
20
+ ```typescript
21
+ // До v4.0.0
22
+ await client.branches.list('owner', 'repo');
23
+ await client.contents.get('owner', 'repo', 'path');
24
+ await client.forks.create('owner', 'repo');
25
+
26
+ // После v4.0.0
27
+ await client.repos.listBranches('owner', 'repo');
28
+ await client.repos.getContent('owner', 'repo', 'path');
29
+ await client.repos.createFork('owner', 'repo');
30
+ ```
11
31
 
12
32
  ## Ключевые особенности
13
33
 
14
- - ✅ **100% покрытие API** — Все 91 эндпоинт GitVerse API поддерживаются
15
- - ✅ **Rate Limits** — Автоматическая обработка лимитов запросов с информативными ошибками
16
- - ✅ **Версионирование API** — Предупреждения об устаревших версиях API
17
- - ✅ **Специализированные ошибки** — `RateLimitError`, `ApiVersionWarning` для точной обработки
34
+ - ✅ **Полное покрытие API** — Все эндпоинты GitVerse OpenAPI v1.1
35
+ - ✅ **Rate Limits** — Автоматическая обработка лимитов запросов
36
+ - ✅ **Версионирование API** — Предупреждения об устаревших версиях
37
+ - ✅ **Специализированные ошибки** — `RateLimitError`, `ApiVersionWarning`
18
38
  - ✅ **100% покрытие тестами** — Полное тестирование всех методов
19
39
  - ✅ **Нет зависимостей** — Только нативный `fetch` API и `Buffer`
20
- - ✅ **Tree-shakable** — Модульная архитектура для минимального размера бандла
40
+ - ✅ **Tree-shakable** — Модульная архитектура
21
41
  - ✅ **TypeScript** — Полная типизация из коробки
22
42
 
23
43
  ## Установка
@@ -41,11 +61,10 @@ bun add gitverse-api-sdk
41
61
  ```typescript
42
62
  import { GitVerse } from 'gitverse-api-sdk';
43
63
 
44
- // Создание клиента с токеном
45
64
  const client = new GitVerse({ token: 'your-token-here' });
46
65
 
47
66
  // Получение информации о текущем пользователе
48
- const user = await client.users.getCurrent();
67
+ const user = await client.users.getAuthenticated();
49
68
  console.log(user.login);
50
69
 
51
70
  // Получение репозитория
@@ -63,8 +82,6 @@ const pr = await client.pulls.create('owner', 'repo', {
63
82
 
64
83
  ## Обработка Rate Limits
65
84
 
66
- SDK автоматически отслеживает лимиты запросов и предоставляет подробную информацию при их превышении:
67
-
68
85
  ```typescript
69
86
  import { GitVerse, RateLimitError } from 'gitverse-api-sdk';
70
87
 
@@ -77,169 +94,99 @@ try {
77
94
  console.log(`Rate limit exceeded!`);
78
95
  console.log(`Limit: ${error.rateLimit.limit}`);
79
96
  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));
97
+ console.log(`Retry after: ${error.rateLimit.retryAfter}s`);
85
98
  }
86
99
  }
87
100
  ```
88
101
 
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
102
  ## Отмена запросов (AbortSignal)
108
103
 
109
- SDK поддерживает отмену HTTP-запросов через стандартный Web API `AbortController`:
110
-
111
104
  ```typescript
112
- import { GitVerse } from 'gitverse-api-sdk';
113
-
114
- const client = new GitVerse({ token: 'your-token' });
115
-
116
- // Создание контроллера для управления отменой запроса
117
105
  const controller = new AbortController();
118
106
 
119
- // Выполнение запроса с возможностью отмены
107
+ // Запрос с возможностью отмены
120
108
  const promise = client.repos.get('owner', 'repo', { signal: controller.signal });
121
109
 
122
- // Отмена запроса (например, при размонтировании компонента)
110
+ // Отмена запроса
123
111
  controller.abort();
124
112
 
125
113
  try {
126
- const repo = await promise;
114
+ await promise;
127
115
  } catch (error) {
128
116
  if (error.name === 'AbortError') {
129
- console.log('Запрос был отменен');
117
+ console.log('Запрос отменён');
130
118
  }
131
119
  }
132
120
  ```
133
121
 
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
- ```
122
+ ## API Модули
152
123
 
153
- ### Отмена при размонтировании React-компонента
124
+ ### 👤 Users (4 метода)
154
125
 
155
126
  ```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
- }
127
+ await client.users.getAuthenticated();
128
+ await client.users.get('username');
129
+ await client.users.listEmails();
130
+ await client.users.listFollowers('username');
180
131
  ```
181
132
 
182
- ### Поддержка во всех методах
183
-
184
- AbortSignal поддерживается во **всех 102 методах API** — просто передайте опциональный параметр `{ signal }`:
133
+ ### 📦 Repositories (27 методов)
185
134
 
186
135
  ```typescript
187
- // GET запросы
188
- await client.users.getCurrent({ signal: controller.signal });
189
- await client.repos.list({ signal: controller.signal });
190
-
191
- // POST запросы
192
- await client.repos.create(params, { signal: controller.signal });
193
- await client.pulls.create('owner', 'repo', params, { signal: controller.signal });
136
+ // Основные операции
137
+ await client.repos.get('owner', 'repo');
138
+ await client.repos.update('owner', 'repo', { description: 'Updated' });
139
+ await client.repos.delete('owner', 'repo');
140
+ await client.repos.listForAuthenticatedUser();
141
+ await client.repos.createForAuthenticatedUser({ name: 'new-repo' });
194
142
 
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
- ```
143
+ // Ветки
144
+ await client.repos.listBranches('owner', 'repo');
199
145
 
200
- ## API Модули
146
+ // Коллабораторы
147
+ await client.repos.listCollaborators('owner', 'repo');
148
+ await client.repos.addCollaborator('owner', 'repo', 'username', { permission: 'push' });
201
149
 
202
- SDK организован в специализированные модули для различных областей GitVerse API:
150
+ // Коммиты
151
+ await client.repos.listCommits('owner', 'repo');
152
+ await client.repos.getCommit('owner', 'repo', 'sha');
153
+ await client.repos.compareCommits('owner', 'repo', 'base...head');
154
+ await client.repos.createCommit('owner', 'repo', { message: 'msg', tree: 'sha' });
203
155
 
204
- ### 👤 Users (2 метода)
156
+ // Контент
157
+ await client.repos.getContent('owner', 'repo', 'path/to/file');
158
+ await client.repos.createOrUpdateFile('owner', 'repo', 'path', { message: 'Add', content: 'base64' });
159
+ await client.repos.deleteFile('owner', 'repo', 'path', { message: 'Delete', sha: 'sha' });
205
160
 
206
- ```typescript
207
- await client.users.getCurrent();
208
- await client.users.getByUsername('username');
209
- ```
161
+ // Форки
162
+ await client.repos.createFork('owner', 'repo');
210
163
 
211
- ### 📦 Repositories (7 методов)
164
+ // Git объекты
165
+ await client.repos.getTree('owner', 'repo', 'sha');
166
+ await client.repos.createTree('owner', 'repo', { tree: [...] });
167
+ await client.repos.createRef('owner', 'repo', { ref: 'refs/heads/new', sha: 'sha' });
212
168
 
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
- ```
169
+ // Pull Requests (через repos)
170
+ await client.repos.listPulls('owner', 'repo');
171
+ await client.repos.getPull('owner', 'repo', 123);
172
+ await client.repos.updatePull('owner', 'repo', 123, { title: 'New title' });
222
173
 
223
- ### 📁 Contents (4 метода)
174
+ // Секреты репозитория
175
+ await client.repos.listRepoSecrets('owner', 'repo');
176
+ await client.repos.createOrUpdateRepoSecret('owner', 'repo', 'SECRET', { encrypted_value: '...' });
224
177
 
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' });
178
+ // Прочее
179
+ await client.repos.listLanguages('owner', 'repo');
230
180
  ```
231
181
 
232
- ### 🔀 Pull Requests (8 методов)
182
+ ### 🔀 Pull Requests (5 методов)
233
183
 
234
184
  ```typescript
235
185
  await client.pulls.list('owner', 'repo');
236
- await client.pulls.create('owner', 'repo', { title: 'New PR', head: 'feature', base: 'main' });
186
+ await client.pulls.create('owner', 'repo', { title: 'PR', head: 'feature', base: 'main' });
237
187
  await client.pulls.get('owner', 'repo', 123);
238
- await client.pulls.update('owner', 'repo', 123, { title: 'Updated title' });
188
+ await client.pulls.update('owner', 'repo', 123, { title: 'Updated' });
239
189
  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
190
  ```
244
191
 
245
192
  ### 🐛 Issues (6 методов)
@@ -248,15 +195,24 @@ await client.pulls.checkIfMerged('owner', 'repo', 123); // Проверка: б
248
195
  await client.issues.list('owner', 'repo');
249
196
  await client.issues.create('owner', 'repo', { title: 'Bug report' });
250
197
  await client.issues.get('owner', 'repo', 123);
198
+ await client.issues.listComments('owner', 'repo', 123);
251
199
  await client.issues.getComment('owner', 'repo', 456);
252
- await client.issues.getComments('owner', 'repo', 123);
253
- await client.issues.getLabels('owner', 'repo', 123);
200
+ await client.issues.listLabels('owner', 'repo');
254
201
  ```
255
202
 
256
- ### 🍴 Forks (1 метод)
203
+ ### 🚀 Releases (10 методов)
257
204
 
258
205
  ```typescript
259
- await client.forks.create('owner', 'repo');
206
+ await client.releases.list('owner', 'repo');
207
+ await client.releases.create('owner', 'repo', { tag_name: 'v1.0.0', name: 'Release' });
208
+ await client.releases.get('owner', 'repo', 123);
209
+ await client.releases.getByTag('owner', 'repo', 'v1.0.0');
210
+ await client.releases.update('owner', 'repo', 123, { name: 'Updated' });
211
+ await client.releases.delete('owner', 'repo', 123);
212
+ await client.releases.deleteByTag('owner', 'repo', 'v1.0.0');
213
+ await client.releases.listAssets('owner', 'repo', 123);
214
+ await client.releases.uploadAsset('owner', 'repo', 123, { name: 'asset.zip' });
215
+ await client.releases.deleteAsset('owner', 'repo', 123, 456);
260
216
  ```
261
217
 
262
218
  ### ⭐ Stars (4 метода)
@@ -276,206 +232,106 @@ await client.emails.add(['email@example.com']);
276
232
  await client.emails.delete(['email@example.com']);
277
233
  ```
278
234
 
279
- ### 🌿 Branches (1 метод)
235
+ ### 🏢 Organizations (5 методов)
280
236
 
281
237
  ```typescript
282
- await client.branches.list('owner', 'repo');
238
+ await client.orgs.listOrgSecrets('org');
239
+ await client.orgs.getOrgSecret('org', 'SECRET');
240
+ await client.orgs.createOrUpdateOrgSecret('org', 'SECRET', { encrypted_value: '...' });
241
+ await client.orgs.deleteOrgSecret('org', 'SECRET');
242
+ await client.orgs.isMember('org', 'username');
283
243
  ```
284
244
 
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 метод)
301
-
302
- ```typescript
303
- await client.organizations.list();
304
- ```
305
-
306
- ### 👨‍👩‍👧‍👦 Teams (4 метода)
245
+ ### 👨‍👩‍👧‍👦 Teams (3 метода)
307
246
 
308
247
  ```typescript
309
248
  await client.teams.list('org');
310
- await client.teams.get('org', 'team-slug');
311
249
  await client.teams.listMembers('org', 'team-slug');
312
250
  await client.teams.getMembershipForUser('org', 'team-slug', 'username');
313
251
  ```
314
252
 
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 метода)
253
+ ### Actions (25 методов)
339
254
 
340
- Полная поддержка GitHub Actions API, включая:
341
-
342
- **Runners (8 методов)**
255
+ **Runners**
343
256
  ```typescript
344
257
  await client.actions.listOrgRunners('org');
345
- await client.actions.createOrgRegistrationToken('org');
346
258
  await client.actions.getOrgRunner('org', 123);
347
259
  await client.actions.deleteOrgRunner('org', 123);
260
+ await client.actions.createOrgRegistrationToken('org');
348
261
  await client.actions.listRepoRunners('owner', 'repo');
349
- await client.actions.createRepoRegistrationToken('owner', 'repo');
350
262
  await client.actions.getRepoRunner('owner', 'repo', 123);
351
263
  await client.actions.deleteRepoRunner('owner', 'repo', 123);
264
+ await client.actions.createRepoRegistrationToken('owner', 'repo');
352
265
  ```
353
266
 
354
- **Secrets (8 методов)**
267
+ **Secrets**
355
268
  ```typescript
356
269
  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');
270
+ await client.actions.getOrgSecret('org', 'SECRET');
271
+ await client.actions.createOrUpdateOrgSecret('org', 'SECRET', { encrypted_value: '...' });
272
+ await client.actions.deleteOrgSecret('org', 'SECRET');
360
273
  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');
274
+ await client.actions.getRepoSecret('owner', 'repo', 'SECRET');
275
+ await client.actions.createOrUpdateRepoSecret('owner', 'repo', 'SECRET', { encrypted_value: '...' });
276
+ await client.actions.deleteRepoSecret('owner', 'repo', 'SECRET');
364
277
  ```
365
278
 
366
- **Variables (10 методов)**
279
+ **Variables**
367
280
  ```typescript
368
281
  await client.actions.listOrgVariables('org');
369
- await client.actions.createOrgVariable('org', { name: 'VAR', value: 'value' });
370
282
  await client.actions.getOrgVariable('org', 'VAR');
371
- await client.actions.updateOrgVariable('org', 'VAR', { value: 'new-value' });
283
+ await client.actions.createOrgVariable('org', { name: 'VAR', value: 'value' });
284
+ await client.actions.updateOrgVariable('org', 'VAR', { value: 'new' });
372
285
  await client.actions.deleteOrgVariable('org', 'VAR');
373
286
  await client.actions.listRepoVariables('owner', 'repo');
374
- await client.actions.createRepoVariable('owner', 'repo', { name: 'VAR', value: 'value' });
375
287
  await client.actions.getRepoVariable('owner', 'repo', 'VAR');
288
+ await client.actions.createRepoVariable('owner', 'repo', { name: 'VAR', value: 'value' });
376
289
  await client.actions.updateRepoVariable('owner', 'repo', 'VAR', { value: 'new' });
377
290
  await client.actions.deleteRepoVariable('owner', 'repo', 'VAR');
378
291
  ```
379
292
 
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
- ### Обработка ошибок
293
+ ## Обработка ошибок
414
294
 
415
295
  ```typescript
416
296
  import { GitVerse, GitVerseApiError, RateLimitError } from 'gitverse-api-sdk';
417
297
 
418
- const client = new GitVerse({ token: 'your-token' });
419
-
420
298
  try {
421
299
  await client.repos.get('owner', 'repo');
422
300
  } catch (error) {
423
301
  if (error instanceof RateLimitError) {
424
- console.error('Rate limit exceeded:', error.rateLimit);
302
+ console.error('Rate limit:', error.rateLimit);
425
303
  } else if (error instanceof GitVerseApiError) {
426
304
  console.error(`API Error ${error.status}:`, error.message);
427
- } else {
428
- console.error('Unexpected error:', error);
429
305
  }
430
306
  }
431
307
  ```
432
308
 
433
- ### Конфигурация клиента
309
+ ## Конфигурация
434
310
 
435
311
  ```typescript
436
- import { GitVerse } from 'gitverse-api-sdk';
437
-
438
312
  const client = new GitVerse({
439
313
  token: 'your-token',
440
- baseUrl: 'https://gitverse.ru/api/v1', // По умолчанию
441
- apiVersion: '2022-11-28', // Версия API
314
+ baseUrl: 'https://gitverse.ru/api/v1',
315
+ apiVersion: '2022-11-28',
442
316
  onApiVersionWarning: (warning) => {
443
317
  console.warn('API version warning:', warning);
444
318
  }
445
319
  });
320
+
321
+ // Динамическое обновление токена
322
+ client.setToken('new-token');
446
323
  ```
447
324
 
448
325
  ## Разработка
449
326
 
450
327
  ```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
328
+ bun install # Установка зависимостей
329
+ bun test # Запуск тестов
330
+ bun test:coverage # Проверка покрытия (требуется 100%)
331
+ bun run build # Сборка
332
+ bun run lint # Линтинг
466
333
  ```
467
334
 
468
335
  ## Лицензия
469
336
 
470
337
  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