gitverse-api-sdk 4.0.2 → 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.
- package/README.md +126 -270
- package/dist/api/actions.d.ts +116 -43
- package/dist/api/actions.js +3 -3
- package/dist/api/actions.js.map +3 -3
- package/dist/api/branches.d.ts +33 -1
- package/dist/api/branches.js +3 -3
- package/dist/api/branches.js.map +3 -3
- package/dist/api/collaborators.d.ts +200 -3
- package/dist/api/collaborators.js +3 -3
- package/dist/api/collaborators.js.map +3 -3
- package/dist/api/commits.d.ts +88 -3
- package/dist/api/commits.js +3 -3
- package/dist/api/commits.js.map +3 -3
- package/dist/api/contents.d.ts +26 -1
- package/dist/api/contents.js +3 -3
- package/dist/api/contents.js.map +3 -3
- package/dist/api/emails.d.ts +28 -18
- package/dist/api/emails.js +3 -3
- package/dist/api/emails.js.map +3 -3
- package/dist/api/forks.d.ts +44 -1
- package/dist/api/forks.js +3 -3
- package/dist/api/forks.js.map +1 -1
- package/dist/api/git.d.ts +34 -4
- package/dist/api/git.js +3 -3
- package/dist/api/git.js.map +3 -3
- package/dist/api/issues.d.ts +252 -42
- package/dist/api/issues.js +3 -3
- package/dist/api/issues.js.map +3 -3
- package/dist/api/organizations.d.ts +10 -0
- package/dist/api/organizations.js +2 -2
- package/dist/api/organizations.js.map +1 -1
- package/dist/api/pulls.d.ts +145 -17
- package/dist/api/pulls.js +3 -3
- package/dist/api/pulls.js.map +3 -3
- package/dist/api/releases.d.ts +44 -16
- package/dist/api/releases.js +3 -3
- package/dist/api/releases.js.map +3 -3
- package/dist/api/repositories.d.ts +129 -45
- package/dist/api/repositories.js +3 -3
- package/dist/api/repositories.js.map +3 -3
- package/dist/api/stars.d.ts +65 -2
- package/dist/api/stars.js +3 -3
- package/dist/api/stars.js.map +3 -3
- package/dist/api/teams.d.ts +54 -44
- package/dist/api/teams.js +3 -3
- package/dist/api/teams.js.map +3 -3
- package/dist/api/users.d.ts +94 -0
- package/dist/api/users.js +3 -3
- package/dist/api/users.js.map +3 -3
- package/dist/client.d.ts +10 -0
- package/dist/client.js +3 -3
- package/dist/client.js.map +3 -3
- package/dist/index.d.ts +718 -180
- package/dist/index.js +2 -2
- package/dist/index.js.map +2 -2
- package/dist/types.d.ts +583 -85
- package/dist/utils.js +2 -2
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -3,21 +3,41 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/gitverse-api-sdk)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
[](https://gitverse.ru/rainypixel/gitverse-sdk)
|
|
6
|
-
[](https://gitverse.ru)
|
|
7
7
|
|
|
8
8
|
Полнофункциональный TypeScript SDK для GitVerse API с поддержкой всех эндпоинтов, обработкой Rate Limits и версионирования.
|
|
9
9
|
|
|
10
|
-
> **Совместимость:** SDK синхронизирован с GitVerse
|
|
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
|
-
- ✅
|
|
15
|
-
- ✅ **Rate Limits** — Автоматическая обработка лимитов запросов
|
|
16
|
-
- ✅ **Версионирование 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.
|
|
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(`
|
|
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
|
-
|
|
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
|
-
###
|
|
124
|
+
### 👤 Users (4 метода)
|
|
154
125
|
|
|
155
126
|
```typescript
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
//
|
|
188
|
-
await client.
|
|
189
|
-
await client.repos.
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
await client.repos.
|
|
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
|
-
//
|
|
196
|
-
await client.
|
|
197
|
-
await client.repos.delete('owner', 'repo', { signal: controller.signal });
|
|
198
|
-
```
|
|
143
|
+
// Ветки
|
|
144
|
+
await client.repos.listBranches('owner', 'repo');
|
|
199
145
|
|
|
200
|
-
|
|
146
|
+
// Коллабораторы
|
|
147
|
+
await client.repos.listCollaborators('owner', 'repo');
|
|
148
|
+
await client.repos.addCollaborator('owner', 'repo', 'username', { permission: 'push' });
|
|
201
149
|
|
|
202
|
-
|
|
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
|
-
|
|
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
|
-
|
|
207
|
-
await client.
|
|
208
|
-
await client.users.getByUsername('username');
|
|
209
|
-
```
|
|
161
|
+
// Форки
|
|
162
|
+
await client.repos.createFork('owner', 'repo');
|
|
210
163
|
|
|
211
|
-
|
|
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
|
-
|
|
214
|
-
await client.repos.
|
|
215
|
-
await client.repos.
|
|
216
|
-
await client.repos.
|
|
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
|
-
|
|
174
|
+
// Секреты репозитория
|
|
175
|
+
await client.repos.listRepoSecrets('owner', 'repo');
|
|
176
|
+
await client.repos.createOrUpdateRepoSecret('owner', 'repo', 'SECRET', { encrypted_value: '...' });
|
|
224
177
|
|
|
225
|
-
|
|
226
|
-
await client.
|
|
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 (
|
|
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: '
|
|
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
|
|
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.
|
|
253
|
-
await client.issues.getLabels('owner', 'repo', 123);
|
|
200
|
+
await client.issues.listLabels('owner', 'repo');
|
|
254
201
|
```
|
|
255
202
|
|
|
256
|
-
###
|
|
203
|
+
### 🚀 Releases (10 методов)
|
|
257
204
|
|
|
258
205
|
```typescript
|
|
259
|
-
await client.
|
|
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
|
-
###
|
|
235
|
+
### 🏢 Organizations (5 методов)
|
|
280
236
|
|
|
281
237
|
```typescript
|
|
282
|
-
await client.
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
|
267
|
+
**Secrets**
|
|
355
268
|
```typescript
|
|
356
269
|
await client.actions.listOrgSecrets('org');
|
|
357
|
-
await client.actions.getOrgSecret('org', '
|
|
358
|
-
await client.actions.createOrUpdateOrgSecret('org', '
|
|
359
|
-
await client.actions.deleteOrgSecret('org', '
|
|
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', '
|
|
362
|
-
await client.actions.createOrUpdateRepoSecret('owner', 'repo', '
|
|
363
|
-
await client.actions.deleteRepoSecret('owner', 'repo', '
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
|
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',
|
|
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
|
|
453
|
-
|
|
454
|
-
#
|
|
455
|
-
bun
|
|
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
|