gitverse-api-sdk 1.1.1 → 2.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 +318 -125
- package/dist/api/actions.d.ts +506 -0
- package/dist/api/actions.js +4 -0
- package/dist/api/actions.js.map +10 -0
- package/dist/api/branches.d.ts +154 -0
- package/dist/api/branches.js +4 -0
- package/dist/api/branches.js.map +10 -0
- package/dist/api/collaborators.d.ts +224 -0
- package/dist/api/collaborators.js +4 -0
- package/dist/api/collaborators.js.map +10 -0
- package/dist/api/commits.d.ts +302 -0
- package/dist/api/commits.js +4 -0
- package/dist/api/commits.js.map +10 -0
- package/dist/api/contents.d.ts +121 -80
- package/dist/api/contents.js +3 -3
- package/dist/api/contents.js.map +3 -3
- package/dist/api/emails.d.ts +80 -39
- package/dist/api/emails.js +2 -2
- package/dist/api/emails.js.map +1 -1
- package/dist/api/forks.d.ts +121 -87
- package/dist/api/forks.js +3 -3
- package/dist/api/forks.js.map +3 -3
- package/dist/api/git.d.ts +228 -0
- package/dist/api/git.js +4 -0
- package/dist/api/git.js.map +10 -0
- package/dist/api/issues.d.ts +223 -82
- package/dist/api/issues.js +3 -3
- package/dist/api/issues.js.map +3 -3
- package/dist/api/organizations.d.ts +140 -0
- package/dist/api/organizations.js +4 -0
- package/dist/api/organizations.js.map +10 -0
- package/dist/api/pulls.d.ts +241 -80
- package/dist/api/pulls.js +3 -3
- package/dist/api/pulls.js.map +3 -3
- package/dist/api/releases.d.ts +400 -0
- package/dist/api/releases.js +4 -0
- package/dist/api/releases.js.map +10 -0
- package/dist/api/repositories.d.ts +266 -80
- package/dist/api/repositories.js +3 -3
- package/dist/api/repositories.js.map +3 -3
- package/dist/api/stars.d.ts +220 -1
- package/dist/api/stars.js +3 -3
- package/dist/api/stars.js.map +3 -3
- package/dist/api/teams.d.ts +287 -0
- package/dist/api/teams.js +4 -0
- package/dist/api/teams.js.map +10 -0
- package/dist/api/users.d.ts +121 -80
- package/dist/api/users.js +2 -2
- package/dist/api/users.js.map +1 -1
- package/dist/client.d.ts +42 -1
- package/dist/client.js +3 -3
- package/dist/client.js.map +3 -3
- package/dist/enums.js +2 -1
- package/dist/enums.js.map +1 -1
- package/dist/errors.d.ts +78 -0
- package/dist/errors.js +4 -0
- package/dist/errors.js.map +10 -0
- package/dist/index.d.ts +1535 -221
- package/dist/index.js +2 -2
- package/dist/index.js.map +3 -3
- package/dist/types.d.ts +588 -1
- package/dist/utils.js.map +1 -1
- package/package.json +51 -7
package/README.md
CHANGED
|
@@ -1,188 +1,381 @@
|
|
|
1
1
|
# GitVerse SDK
|
|
2
2
|
|
|
3
|
-
](https://www.npmjs.com/package/gitverse-api-sdk)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://gitverse.ru/rainypixel/gitverse-sdk)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Полнофункциональный TypeScript SDK для GitVerse API с поддержкой всех эндпоинтов, обработкой Rate Limits и версионирования.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Ключевые особенности
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
- [Особенности](#-особенности)
|
|
20
|
-
- [API](#-api)
|
|
21
|
-
- [Тестирование](#-тестирование)
|
|
22
|
-
- [Разработка](#-разработка)
|
|
23
|
-
- [Contributing](#-contributing)
|
|
24
|
-
- [Лицензия](#-лицензия)
|
|
11
|
+
- ✅ **100% покрытие API** — Все 90 эндпоинтов GitVerse API поддерживаются
|
|
12
|
+
- ✅ **Rate Limits** — Автоматическая обработка лимитов запросов с информативными ошибками
|
|
13
|
+
- ✅ **Версионирование API** — Предупреждения об устаревших версиях API
|
|
14
|
+
- ✅ **Специализированные ошибки** — `RateLimitError`, `ApiVersionWarning` для точной обработки
|
|
15
|
+
- ✅ **100% покрытие тестами** — Полное тестирование всех методов
|
|
16
|
+
- ✅ **Нет зависимостей** — Только нативный `fetch` API и `Buffer`
|
|
17
|
+
- ✅ **Tree-shakable** — Модульная архитектура для минимального размера бандла
|
|
18
|
+
- ✅ **TypeScript** — Полная типизация из коробки
|
|
25
19
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
## 🚀 Быстрый старт
|
|
20
|
+
## Установка
|
|
29
21
|
|
|
30
22
|
```bash
|
|
31
|
-
# bun
|
|
32
|
-
bun add gitverse-api-sdk
|
|
33
23
|
# npm
|
|
34
24
|
npm install gitverse-api-sdk
|
|
25
|
+
|
|
35
26
|
# yarn
|
|
36
27
|
yarn add gitverse-api-sdk
|
|
28
|
+
|
|
37
29
|
# pnpm
|
|
38
30
|
pnpm add gitverse-api-sdk
|
|
31
|
+
|
|
32
|
+
# bun
|
|
33
|
+
bun add gitverse-api-sdk
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Быстрый старт
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { GitVerse } from 'gitverse-api-sdk';
|
|
40
|
+
|
|
41
|
+
// Создание клиента с токеном
|
|
42
|
+
const client = new GitVerse({ token: 'your-token-here' });
|
|
43
|
+
|
|
44
|
+
// Получение информации о текущем пользователе
|
|
45
|
+
const user = await client.users.getCurrent();
|
|
46
|
+
console.log(user.login);
|
|
47
|
+
|
|
48
|
+
// Получение репозитория
|
|
49
|
+
const repo = await client.repos.get('owner', 'repo-name');
|
|
50
|
+
console.log(repo.full_name);
|
|
51
|
+
|
|
52
|
+
// Создание Pull Request
|
|
53
|
+
const pr = await client.pulls.create('owner', 'repo', {
|
|
54
|
+
title: 'New feature',
|
|
55
|
+
head: 'feature-branch',
|
|
56
|
+
base: 'main',
|
|
57
|
+
body: 'Description of changes'
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Обработка Rate Limits
|
|
62
|
+
|
|
63
|
+
SDK автоматически отслеживает лимиты запросов и предоставляет подробную информацию при их превышении:
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import { GitVerse, RateLimitError } from 'gitverse-api-sdk';
|
|
67
|
+
|
|
68
|
+
const client = new GitVerse({ token: 'your-token' });
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
await client.repos.get('owner', 'repo');
|
|
72
|
+
} catch (error) {
|
|
73
|
+
if (error instanceof RateLimitError) {
|
|
74
|
+
console.log(`Rate limit exceeded!`);
|
|
75
|
+
console.log(`Limit: ${error.rateLimit.limit}`);
|
|
76
|
+
console.log(`Remaining: ${error.rateLimit.remaining}`);
|
|
77
|
+
console.log(`Reset at: ${new Date(error.rateLimit.reset * 1000)}`);
|
|
78
|
+
|
|
79
|
+
// Ожидание сброса лимита
|
|
80
|
+
const waitTime = error.rateLimit.reset * 1000 - Date.now();
|
|
81
|
+
await new Promise(resolve => setTimeout(resolve, waitTime));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Обработка версионирования API
|
|
87
|
+
|
|
88
|
+
SDK предупреждает об использовании устаревших версий API:
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import { GitVerse } from 'gitverse-api-sdk';
|
|
92
|
+
|
|
93
|
+
const client = new GitVerse({
|
|
94
|
+
token: 'your-token',
|
|
95
|
+
apiVersion: '2022-11-28', // Указание версии API
|
|
96
|
+
onApiVersionWarning: (warning) => {
|
|
97
|
+
console.warn(`API Warning: ${warning.message}`);
|
|
98
|
+
console.warn(`Current version: ${warning.currentVersion}`);
|
|
99
|
+
console.warn(`Sunset date: ${warning.sunsetDate}`);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## API Модули
|
|
105
|
+
|
|
106
|
+
SDK организован в специализированные модули для различных областей GitVerse API:
|
|
107
|
+
|
|
108
|
+
### 👤 Users (2 метода)
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
await client.users.getCurrent();
|
|
112
|
+
await client.users.getByUsername('username');
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 📦 Repositories (7 методов)
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
await client.repos.get('owner', 'repo');
|
|
119
|
+
await client.repos.create({ name: 'new-repo', private: true });
|
|
120
|
+
await client.repos.update('owner', 'repo', { description: 'Updated' });
|
|
121
|
+
await client.repos.delete('owner', 'repo');
|
|
122
|
+
await client.repos.compare('owner', 'repo', 'main...dev');
|
|
123
|
+
await client.repos.getLanguages('owner', 'repo');
|
|
124
|
+
await client.repos.listForAuthenticatedUser();
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 📁 Contents (4 метода)
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
await client.contents.get('owner', 'repo', 'path/to/file');
|
|
131
|
+
await client.contents.create('owner', 'repo', 'path', { message: 'Add file', content: 'base64' });
|
|
132
|
+
await client.contents.update('owner', 'repo', 'path', { message: 'Update', content: 'base64', sha: 'sha' });
|
|
133
|
+
await client.contents.delete('owner', 'repo', 'path', { message: 'Delete', sha: 'sha' });
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 🔀 Pull Requests (7 методов)
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
await client.pulls.list('owner', 'repo');
|
|
140
|
+
await client.pulls.create('owner', 'repo', { title: 'New PR', head: 'feature', base: 'main' });
|
|
141
|
+
await client.pulls.get('owner', 'repo', 123);
|
|
142
|
+
await client.pulls.update('owner', 'repo', 123, { title: 'Updated title' });
|
|
143
|
+
await client.pulls.merge('owner', 'repo', 123);
|
|
144
|
+
await client.pulls.getFiles('owner', 'repo', 123);
|
|
145
|
+
await client.pulls.updateBranch('owner', 'repo', 123);
|
|
39
146
|
```
|
|
40
147
|
|
|
41
|
-
|
|
148
|
+
### 🐛 Issues (6 методов)
|
|
42
149
|
|
|
43
150
|
```typescript
|
|
44
|
-
|
|
151
|
+
await client.issues.list('owner', 'repo');
|
|
152
|
+
await client.issues.create('owner', 'repo', { title: 'Bug report' });
|
|
153
|
+
await client.issues.get('owner', 'repo', 123);
|
|
154
|
+
await client.issues.getComment('owner', 'repo', 456);
|
|
155
|
+
await client.issues.getComments('owner', 'repo', 123);
|
|
156
|
+
await client.issues.getLabels('owner', 'repo', 123);
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 🍴 Forks (1 метод)
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
await client.forks.create('owner', 'repo');
|
|
163
|
+
```
|
|
45
164
|
|
|
46
|
-
(
|
|
47
|
-
const sdk = new GitVerse({ token: "YOUR_TOKEN" });
|
|
165
|
+
### ⭐ Stars (4 метода)
|
|
48
166
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
167
|
+
```typescript
|
|
168
|
+
await client.stars.list('owner', 'repo');
|
|
169
|
+
await client.stars.listForAuthenticatedUser();
|
|
170
|
+
await client.stars.star('owner', 'repo');
|
|
171
|
+
await client.stars.unstar('owner', 'repo');
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 📧 Emails (3 метода)
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
await client.emails.list();
|
|
178
|
+
await client.emails.add(['email@example.com']);
|
|
179
|
+
await client.emails.delete(['email@example.com']);
|
|
180
|
+
```
|
|
52
181
|
|
|
53
|
-
|
|
54
|
-
const repo = await sdk.repos.get("owner", "repo");
|
|
55
|
-
console.log(repo);
|
|
182
|
+
### 🌿 Branches (1 метод)
|
|
56
183
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
description: "Описание репозитория",
|
|
61
|
-
private: false,
|
|
62
|
-
});
|
|
184
|
+
```typescript
|
|
185
|
+
await client.branches.list('owner', 'repo');
|
|
186
|
+
```
|
|
63
187
|
|
|
64
|
-
|
|
65
|
-
const emails = await sdk.emails.list();
|
|
66
|
-
await sdk.emails.add({ emails: ["new@example.com"] });
|
|
188
|
+
### 📝 Commits (3 метода)
|
|
67
189
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
190
|
+
```typescript
|
|
191
|
+
await client.commits.list('owner', 'repo');
|
|
192
|
+
await client.commits.get('owner', 'repo', 'sha');
|
|
193
|
+
await client.commits.getCommits('owner', 'repo', 123);
|
|
194
|
+
```
|
|
71
195
|
|
|
72
|
-
|
|
73
|
-
const issues = await sdk.issues.list("owner", "repo");
|
|
196
|
+
### 👥 Collaborators (2 метода)
|
|
74
197
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
message: "feat: add greeting",
|
|
79
|
-
});
|
|
80
|
-
console.log(file);
|
|
81
|
-
})();
|
|
198
|
+
```typescript
|
|
199
|
+
await client.collaborators.list('owner', 'repo');
|
|
200
|
+
await client.collaborators.add('owner', 'repo', 'username');
|
|
82
201
|
```
|
|
83
202
|
|
|
84
|
-
|
|
203
|
+
### 🏢 Organizations (1 метод)
|
|
85
204
|
|
|
86
|
-
|
|
205
|
+
```typescript
|
|
206
|
+
await client.organizations.list();
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### 👨👩👧👦 Teams (4 метода)
|
|
87
210
|
|
|
88
211
|
```typescript
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
212
|
+
await client.teams.list('org');
|
|
213
|
+
await client.teams.get('org', 'team-slug');
|
|
214
|
+
await client.teams.listMembers('org', 'team-slug');
|
|
215
|
+
await client.teams.getMembershipForUser('org', 'team-slug', 'username');
|
|
216
|
+
```
|
|
92
217
|
|
|
93
|
-
|
|
94
|
-
import { RepositoriesApi, GitVerseClient } from "gitverse-api-sdk/api/repositories";
|
|
95
|
-
const client = new GitVerseClient({ token: "YOUR_TOKEN" });
|
|
96
|
-
const reposApi = new RepositoriesApi(client);
|
|
218
|
+
### 🚀 Releases (10 методов)
|
|
97
219
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
220
|
+
```typescript
|
|
221
|
+
await client.releases.list('owner', 'repo');
|
|
222
|
+
await client.releases.create('owner', 'repo', { tag_name: 'v1.0.0' });
|
|
223
|
+
await client.releases.get('owner', 'repo', 123);
|
|
224
|
+
await client.releases.getByTag('owner', 'repo', 'v1.0.0');
|
|
225
|
+
await client.releases.update('owner', 'repo', 123, { name: 'New name' });
|
|
226
|
+
await client.releases.delete('owner', 'repo', 123);
|
|
227
|
+
await client.releases.deleteByTag('owner', 'repo', 'v1.0.0');
|
|
228
|
+
await client.releases.getAssets('owner', 'repo', 123);
|
|
229
|
+
await client.releases.uploadAsset('owner', 'repo', 123, { name: 'asset.zip' });
|
|
230
|
+
await client.releases.deleteAsset('owner', 'repo', 123, 456);
|
|
101
231
|
```
|
|
102
232
|
|
|
103
|
-
|
|
233
|
+
### 🔧 Git Objects (3 метода)
|
|
104
234
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
- Работа через **fetch**, совместим с Bun и браузером
|
|
235
|
+
```typescript
|
|
236
|
+
await client.git.getTree('owner', 'repo', 'sha');
|
|
237
|
+
await client.git.getBlob('owner', 'repo', 'sha');
|
|
238
|
+
await client.git.getRef('owner', 'repo', 'heads/main');
|
|
239
|
+
```
|
|
111
240
|
|
|
112
|
-
|
|
241
|
+
### ⚡ Actions (33 метода)
|
|
113
242
|
|
|
114
|
-
|
|
243
|
+
Полная поддержка GitHub Actions API, включая:
|
|
115
244
|
|
|
116
|
-
|
|
117
|
-
|
|
245
|
+
**Runners (8 методов)**
|
|
246
|
+
```typescript
|
|
247
|
+
await client.actions.listOrgRunners('org');
|
|
248
|
+
await client.actions.createOrgRegistrationToken('org');
|
|
249
|
+
await client.actions.getOrgRunner('org', 123);
|
|
250
|
+
await client.actions.deleteOrgRunner('org', 123);
|
|
251
|
+
await client.actions.listRepoRunners('owner', 'repo');
|
|
252
|
+
await client.actions.createRepoRegistrationToken('owner', 'repo');
|
|
253
|
+
await client.actions.getRepoRunner('owner', 'repo', 123);
|
|
254
|
+
await client.actions.deleteRepoRunner('owner', 'repo', 123);
|
|
255
|
+
```
|
|
118
256
|
|
|
119
|
-
|
|
257
|
+
**Secrets (8 методов)**
|
|
258
|
+
```typescript
|
|
259
|
+
await client.actions.listOrgSecrets('org');
|
|
260
|
+
await client.actions.getOrgSecret('org', 'SECRET_NAME');
|
|
261
|
+
await client.actions.createOrUpdateOrgSecret('org', 'SECRET_NAME', { encrypted_value: '...' });
|
|
262
|
+
await client.actions.deleteOrgSecret('org', 'SECRET_NAME');
|
|
263
|
+
await client.actions.listRepoSecrets('owner', 'repo');
|
|
264
|
+
await client.actions.getRepoSecret('owner', 'repo', 'SECRET_NAME');
|
|
265
|
+
await client.actions.createOrUpdateRepoSecret('owner', 'repo', 'SECRET_NAME', { encrypted_value: '...' });
|
|
266
|
+
await client.actions.deleteRepoSecret('owner', 'repo', 'SECRET_NAME');
|
|
267
|
+
```
|
|
120
268
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
269
|
+
**Variables (10 методов)**
|
|
270
|
+
```typescript
|
|
271
|
+
await client.actions.listOrgVariables('org');
|
|
272
|
+
await client.actions.createOrgVariable('org', { name: 'VAR', value: 'value' });
|
|
273
|
+
await client.actions.getOrgVariable('org', 'VAR');
|
|
274
|
+
await client.actions.updateOrgVariable('org', 'VAR', { value: 'new-value' });
|
|
275
|
+
await client.actions.deleteOrgVariable('org', 'VAR');
|
|
276
|
+
await client.actions.listRepoVariables('owner', 'repo');
|
|
277
|
+
await client.actions.createRepoVariable('owner', 'repo', { name: 'VAR', value: 'value' });
|
|
278
|
+
await client.actions.getRepoVariable('owner', 'repo', 'VAR');
|
|
279
|
+
await client.actions.updateRepoVariable('owner', 'repo', 'VAR', { value: 'new' });
|
|
280
|
+
await client.actions.deleteRepoVariable('owner', 'repo', 'VAR');
|
|
281
|
+
```
|
|
125
282
|
|
|
126
|
-
|
|
283
|
+
**Artifacts (5 методов)**
|
|
284
|
+
```typescript
|
|
285
|
+
await client.actions.listArtifacts('owner', 'repo');
|
|
286
|
+
await client.actions.getArtifact('owner', 'repo', 123);
|
|
287
|
+
await client.actions.deleteArtifact('owner', 'repo', 123);
|
|
288
|
+
await client.actions.downloadArtifact('owner', 'repo', 123);
|
|
289
|
+
await client.actions.downloadArtifactRaw('owner', 'repo', 123);
|
|
290
|
+
```
|
|
127
291
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
292
|
+
**Workflows (2 метода)**
|
|
293
|
+
```typescript
|
|
294
|
+
await client.actions.getWorkflowDispatchInputs('owner', 'repo', 'workflow.yml');
|
|
295
|
+
await client.actions.dispatchWorkflow('owner', 'repo', 'workflow.yml', { ref: 'main' });
|
|
296
|
+
```
|
|
132
297
|
|
|
133
|
-
|
|
298
|
+
## Продвинутое использование
|
|
134
299
|
|
|
135
|
-
-
|
|
136
|
-
- `sdk.pulls.get(owner: string, repo: string, number: number)`
|
|
137
|
-
- `sdk.pulls.create(owner: string, repo: string, params)`
|
|
300
|
+
### Tree-shaking
|
|
138
301
|
|
|
139
|
-
|
|
302
|
+
Для минимального размера бандла импортируйте только нужные модули:
|
|
140
303
|
|
|
141
|
-
|
|
142
|
-
|
|
304
|
+
```typescript
|
|
305
|
+
import { RepositoriesApi, GitVerseClient } from 'gitverse-api-sdk/api/repositories';
|
|
306
|
+
import { PullsApi } from 'gitverse-api-sdk/api/pulls';
|
|
143
307
|
|
|
144
|
-
|
|
308
|
+
const client = new GitVerseClient({ token: 'your-token' });
|
|
309
|
+
const repos = new RepositoriesApi(client);
|
|
310
|
+
const pulls = new PullsApi(client);
|
|
145
311
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
312
|
+
const repo = await repos.get('owner', 'repo');
|
|
313
|
+
const prList = await pulls.list('owner', 'repo');
|
|
314
|
+
```
|
|
149
315
|
|
|
150
|
-
###
|
|
316
|
+
### Обработка ошибок
|
|
151
317
|
|
|
152
|
-
|
|
153
|
-
|
|
318
|
+
```typescript
|
|
319
|
+
import { GitVerse, GitVerseApiError, RateLimitError } from 'gitverse-api-sdk';
|
|
320
|
+
|
|
321
|
+
const client = new GitVerse({ token: 'your-token' });
|
|
322
|
+
|
|
323
|
+
try {
|
|
324
|
+
await client.repos.get('owner', 'repo');
|
|
325
|
+
} catch (error) {
|
|
326
|
+
if (error instanceof RateLimitError) {
|
|
327
|
+
console.error('Rate limit exceeded:', error.rateLimit);
|
|
328
|
+
} else if (error instanceof GitVerseApiError) {
|
|
329
|
+
console.error(`API Error ${error.status}:`, error.message);
|
|
330
|
+
} else {
|
|
331
|
+
console.error('Unexpected error:', error);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
```
|
|
154
335
|
|
|
155
|
-
###
|
|
336
|
+
### Конфигурация клиента
|
|
156
337
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
338
|
+
```typescript
|
|
339
|
+
import { GitVerse } from 'gitverse-api-sdk';
|
|
340
|
+
|
|
341
|
+
const client = new GitVerse({
|
|
342
|
+
token: 'your-token',
|
|
343
|
+
baseUrl: 'https://gitverse.ru/api/v1', // По умолчанию
|
|
344
|
+
apiVersion: '2022-11-28', // Версия API
|
|
345
|
+
onApiVersionWarning: (warning) => {
|
|
346
|
+
console.warn('API version warning:', warning);
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
```
|
|
160
350
|
|
|
161
|
-
##
|
|
351
|
+
## Разработка
|
|
162
352
|
|
|
163
353
|
```bash
|
|
354
|
+
# Установка зависимостей
|
|
355
|
+
bun install
|
|
356
|
+
|
|
357
|
+
# Запуск тестов
|
|
164
358
|
bun test
|
|
165
|
-
bun test --coverage
|
|
166
|
-
```
|
|
167
359
|
|
|
168
|
-
|
|
360
|
+
# Проверка покрытия (требуется 100%)
|
|
361
|
+
bun test:coverage
|
|
169
362
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
git clone https://gitverse.ru/onreza/gitverse-sdk.git
|
|
173
|
-
```
|
|
174
|
-
2. Установка зависимостей:
|
|
175
|
-
```bash
|
|
176
|
-
bun install
|
|
177
|
-
```
|
|
178
|
-
3. Запуск серверов/скриптов по необходимости
|
|
179
|
-
4. Написание **семантических коммитов** по [Conventional Commits]
|
|
180
|
-
5. Поддержание **100% покрытия** тестов
|
|
363
|
+
# Сборка проекта
|
|
364
|
+
bun run build
|
|
181
365
|
|
|
182
|
-
|
|
366
|
+
# Линтинг
|
|
367
|
+
bun run lint
|
|
368
|
+
bun run lint:fix
|
|
369
|
+
```
|
|
183
370
|
|
|
184
|
-
|
|
371
|
+
## Лицензия
|
|
185
372
|
|
|
186
|
-
|
|
373
|
+
MIT © [Ivan Bobchenkov](https://bobchenkov.ru)
|
|
374
|
+
|
|
375
|
+
---
|
|
187
376
|
|
|
188
|
-
|
|
377
|
+
**Ссылки:**
|
|
378
|
+
- [GitVerse](https://gitverse.ru)
|
|
379
|
+
- [Репозиторий](https://gitverse.ru/rainypixel/gitverse-sdk)
|
|
380
|
+
- [Issues](https://gitverse.ru/rainypixel/gitverse-sdk/issues)
|
|
381
|
+
- [npm пакет](https://www.npmjs.com/package/gitverse-api-sdk)
|