gitverse-api-sdk 2.0.1 → 3.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 +9 -6
- package/dist/client.js.map +2 -2
- package/package.json +55 -64
package/README.md
CHANGED
|
@@ -370,12 +370,15 @@ bun run lint:fix
|
|
|
370
370
|
|
|
371
371
|
## Лицензия
|
|
372
372
|
|
|
373
|
-
MIT © [
|
|
373
|
+
MIT © [RainyPixel](https://gitverse.ru/RainyPixel)
|
|
374
374
|
|
|
375
|
-
|
|
375
|
+
## Полезные ссылки
|
|
376
376
|
|
|
377
|
-
|
|
378
|
-
- [GitVerse](https://gitverse.ru)
|
|
379
|
-
- [
|
|
380
|
-
- [Issues](https://gitverse.ru/rainypixel/gitverse-sdk/issues)
|
|
377
|
+
- [GitVerse SDK](https://gitverse.ru/RainyPixel/gitverse-sdk) - Основной репозиторий
|
|
378
|
+
- [GitVerse API Docs](https://gitverse.ru/gitverse/rest-api-description/content/master/v1/openapi-1.0.json) - Документация API
|
|
379
|
+
- [Issues](https://gitverse.ru/RainyPixel/gitverse-sdk/issues) - Сообщить об ошибке
|
|
381
380
|
- [npm пакет](https://www.npmjs.com/package/gitverse-api-sdk)
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
Сделано с ❤️ для GitVerse
|
package/dist/client.js.map
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/client.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { ApiVersionWarning, GitVerseApiError, RateLimitError } from \"./errors\";\nimport type { ApiError, ApiResponseMetadata, ApiVersionInfo, RateLimitInfo } from \"./types\";\
|
|
5
|
+
"import { ApiVersionWarning, GitVerseApiError, RateLimitError } from \"./errors\";\nimport type { ApiError, ApiResponseMetadata, ApiVersionInfo, RateLimitInfo } from \"./types\";\nexport const HTTPMethods = {\n DELETE: \"DELETE\",\n GET: \"GET\",\n PATCH: \"PATCH\",\n POST: \"POST\",\n PUT: \"PUT\",\n} as const;\n\nexport type HTTPMethods = (typeof HTTPMethods)[keyof typeof HTTPMethods];\n\n/**\n * Параметры для конфигурации GitVerse клиента\n */\nexport interface GitVerseClientConfig {\n /**\n * Базовый URL API GitVerse\n * @default 'https://api.gitverse.ru'\n */\n baseUrl?: string;\n\n /**\n * Токен доступа для авторизации в API\n */\n token?: string;\n\n /**\n * Версия API\n * @default '1'\n */\n apiVersion?: string;\n}\n\n/**\n * Основной класс для работы с GitVerse API\n */\nexport class GitVerseClient {\n private baseUrl: string;\n private token?: string;\n private apiVersion: string;\n\n /**\n * Callback для обработки предупреждений об устаревшей версии API\n */\n public onApiVersionWarning?: (warning: ApiVersionWarning) => void;\n\n /**\n * Создает новый экземпляр GitVerse клиента\n * @param config Конфигурация клиента\n */\n constructor(config: GitVerseClientConfig = {}) {\n this.baseUrl = config.baseUrl || \"https://api.gitverse.ru\";\n this.token = config.token;\n this.apiVersion = config.apiVersion || \"1\";\n }\n\n /**\n * Устанавливает токен авторизации\n * @param token Токен доступа\n */\n setToken(token: string): void {\n this.token = token;\n }\n\n /**\n * Извлекает информацию о Rate Limit из заголовков ответа\n */\n private extractRateLimitInfo(headers: Headers): RateLimitInfo | undefined {\n const limit = headers.get(\"GitVerse-RateLimit-Limit\");\n const remaining = headers.get(\"GitVerse-RateLimit-Remaining\");\n const retryAfter = headers.get(\"GitVerse-RateLimit-Retry-After\");\n const reset = headers.get(\"Gitverse-Ratelimit-Reset\");\n\n if (!(limit && remaining && retryAfter && reset)) {\n return;\n }\n\n return {\n limit: Number.parseInt(limit, 10),\n remaining: Number.parseInt(remaining, 10),\n reset: Number.parseInt(reset, 10),\n retryAfter: Number.parseInt(retryAfter, 10),\n };\n }\n\n /**\n * Извлекает информацию о версии API из заголовков ответа\n */\n private extractApiVersionInfo(headers: Headers): ApiVersionInfo | undefined {\n const version = headers.get(\"Gitverse-Api-Version\");\n const latestVersion = headers.get(\"Gitverse-Api-Latest-Version\");\n const deprecated = headers.get(\"Gitverse-Api-Deprecation\") === \"true\";\n const decommissioning = headers.get(\"Gitverse-Api-Decommissioning\");\n\n if (!(version && latestVersion)) {\n return;\n }\n\n return {\n decommissioning: decommissioning || undefined,\n deprecated,\n latestVersion,\n version,\n };\n }\n\n /**\n * Извлекает метаданные из заголовков ответа\n */\n private extractMetadata(headers: Headers): ApiResponseMetadata {\n const rateLimit = this.extractRateLimitInfo(headers);\n const apiVersion = this.extractApiVersionInfo(headers);\n\n // Проверяем устаревшую версию API и вызываем callback\n if (apiVersion?.deprecated && this.onApiVersionWarning) {\n const warning = new ApiVersionWarning(apiVersion.version, apiVersion.latestVersion, apiVersion.decommissioning);\n this.onApiVersionWarning(warning);\n }\n\n return {\n apiVersion,\n rateLimit,\n };\n }\n\n /**\n * Выполняет API-запрос с учетом авторизации и версии API\n * @param path Путь к API-ресурсу\n * @param method HTTP-метод\n * @param body Тело запроса (опционально)\n * @returns Ответ от API\n * @throws {RateLimitError} При превышении лимита запросов (429)\n * @throws {GitVerseApiError} При других ошибках API\n */\n async request<T>(path: string, method: HTTPMethods, body?: unknown): Promise<T> {\n // Правильная конкатенация URL: убираем начальный / из path если он есть\n const cleanPath = path.startsWith(\"/\") ? path.slice(1) : path;\n const url = `${this.baseUrl}/${cleanPath}`;\n\n const headers = new Headers();\n\n headers.set(\"Content-Type\", \"application/json\");\n headers.set(\"Accept\", `application/vnd.gitverse.object+json; version=${this.apiVersion}`);\n\n if (this.token) {\n headers.set(\"Authorization\", `Bearer ${this.token}`);\n }\n\n const options: RequestInit = {\n body: body ? JSON.stringify(body) : undefined,\n headers,\n method,\n };\n\n const response = await fetch(url, options);\n\n // Извлекаем метаданные из заголовков\n const metadata = this.extractMetadata(response.headers);\n\n let data: unknown;\n try {\n data = await response.json();\n } catch {\n data = undefined;\n }\n\n if (!response.ok) {\n const error = data as ApiError | undefined;\n const errorMessage = error?.message || response.statusText;\n\n // Обработка ошибки превышения лимита запросов\n if (response.status === 429 && metadata.rateLimit) {\n throw new RateLimitError(\n errorMessage || \"Превышен лимит запросов. Попробуйте позже.\",\n metadata.rateLimit,\n metadata,\n );\n }\n\n // Общая ошибка API\n throw new GitVerseApiError(response.status, errorMessage, metadata);\n }\n\n return data as T;\n }\n\n /**\n * Выполняет GET-запрос\n * @param path Путь к API-ресурсу\n * @returns Ответ от API\n */\n get<T>(path: string): Promise<T> {\n return this.request<T>(path, HTTPMethods.GET);\n }\n\n /**\n * Выполняет POST-запрос\n * @param path Путь к API-ресурсу\n * @param body Тело запроса\n * @returns Ответ от API\n */\n post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, HTTPMethods.POST, body);\n }\n\n /**\n * Выполняет PUT-запрос\n * @param path Путь к API-ресурсу\n * @param body Тело запроса\n * @returns Ответ от API\n */\n put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, HTTPMethods.PUT, body);\n }\n\n /**\n * Выполняет DELETE-запрос\n * @param path Путь к API-ресурсу\n * @param body Тело запроса (опционально)\n * @returns Ответ от API\n */\n delete<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, HTTPMethods.DELETE, body);\n }\n\n /**\n * Выполняет PATCH-запрос\n * @param path Путь к API-ресурсу\n * @param body Тело запроса\n * @returns Ответ от API\n */\n patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, HTTPMethods.PATCH, body);\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
7
|
+
"mappings": "8CAEO,IAAM,EAAc,CACzB,OAAQ,SACR,IAAK,MACL,MAAO,QACP,KAAM,OACN,IAAK,KACP,EA6BO,MAAM,CAAe,CAClB,QACA,MACA,WAKD,oBAMP,WAAW,CAAC,EAA+B,CAAC,EAAG,CAC7C,KAAK,QAAU,EAAO,SAAW,0BACjC,KAAK,MAAQ,EAAO,MACpB,KAAK,WAAa,EAAO,YAAc,IAOzC,QAAQ,CAAC,EAAqB,CAC5B,KAAK,MAAQ,EAMP,oBAAoB,CAAC,EAA6C,CACxE,IAAM,EAAQ,EAAQ,IAAI,0BAA0B,EAC9C,EAAY,EAAQ,IAAI,8BAA8B,EACtD,EAAa,EAAQ,IAAI,gCAAgC,EACzD,EAAQ,EAAQ,IAAI,0BAA0B,EAEpD,GAAI,EAAE,GAAS,GAAa,GAAc,GACxC,OAGF,MAAO,CACL,MAAO,OAAO,SAAS,EAAO,EAAE,EAChC,UAAW,OAAO,SAAS,EAAW,EAAE,EACxC,MAAO,OAAO,SAAS,EAAO,EAAE,EAChC,WAAY,OAAO,SAAS,EAAY,EAAE,CAC5C,EAMM,qBAAqB,CAAC,EAA8C,CAC1E,IAAM,EAAU,EAAQ,IAAI,sBAAsB,EAC5C,EAAgB,EAAQ,IAAI,6BAA6B,EACzD,EAAa,EAAQ,IAAI,0BAA0B,IAAM,OACzD,EAAkB,EAAQ,IAAI,8BAA8B,EAElE,GAAI,EAAE,GAAW,GACf,OAGF,MAAO,CACL,gBAAiB,GAAmB,OACpC,aACA,gBACA,SACF,EAMM,eAAe,CAAC,EAAuC,CAC7D,IAAM,EAAY,KAAK,qBAAqB,CAAO,EAC7C,EAAa,KAAK,sBAAsB,CAAO,EAGrD,GAAI,GAAY,YAAc,KAAK,oBAAqB,CACtD,IAAM,EAAU,IAAI,EAAkB,EAAW,QAAS,EAAW,cAAe,EAAW,eAAe,EAC9G,KAAK,oBAAoB,CAAO,EAGlC,MAAO,CACL,aACA,WACF,OAYI,QAAU,CAAC,EAAc,EAAqB,EAA4B,CAE9E,IAAM,EAAY,EAAK,WAAW,GAAG,EAAI,EAAK,MAAM,CAAC,EAAI,EACnD,EAAM,GAAG,KAAK,WAAW,IAEzB,EAAU,IAAI,QAKpB,GAHA,EAAQ,IAAI,eAAgB,kBAAkB,EAC9C,EAAQ,IAAI,SAAU,iDAAiD,KAAK,YAAY,EAEpF,KAAK,MACP,EAAQ,IAAI,gBAAiB,UAAU,KAAK,OAAO,EAGrD,IAAM,EAAuB,CAC3B,KAAM,EAAO,KAAK,UAAU,CAAI,EAAI,OACpC,UACA,QACF,EAEM,EAAW,MAAM,MAAM,EAAK,CAAO,EAGnC,EAAW,KAAK,gBAAgB,EAAS,OAAO,EAElD,EACJ,GAAI,CACF,EAAO,MAAM,EAAS,KAAK,EAC3B,KAAM,CACN,EAAO,OAGT,GAAI,CAAC,EAAS,GAAI,CAEhB,IAAM,EADQ,GACc,SAAW,EAAS,WAGhD,GAAI,EAAS,SAAW,KAAO,EAAS,UACtC,MAAM,IAAI,EACR,GAAgB,6CAChB,EAAS,UACT,CACF,EAIF,MAAM,IAAI,EAAiB,EAAS,OAAQ,EAAc,CAAQ,EAGpE,OAAO,EAQT,GAAM,CAAC,EAA0B,CAC/B,OAAO,KAAK,QAAW,EAAM,EAAY,GAAG,EAS9C,IAAO,CAAC,EAAc,EAA4B,CAChD,OAAO,KAAK,QAAW,EAAM,EAAY,KAAM,CAAI,EASrD,GAAM,CAAC,EAAc,EAA4B,CAC/C,OAAO,KAAK,QAAW,EAAM,EAAY,IAAK,CAAI,EASpD,MAAS,CAAC,EAAc,EAA4B,CAClD,OAAO,KAAK,QAAW,EAAM,EAAY,OAAQ,CAAI,EASvD,KAAQ,CAAC,EAAc,EAA4B,CACjD,OAAO,KAAK,QAAW,EAAM,EAAY,MAAO,CAAI,EAExD",
|
|
8
8
|
"debugId": "3C1435E422FBD05064756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/package.json
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gitverse-api-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Полнофункциональный TypeScript SDK для GitVerse API с поддержкой всех эндпоинтов, обработкой Rate Limits и версионирования",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"sideEffects": false,
|
|
7
5
|
"keywords": [
|
|
8
6
|
"gitverse",
|
|
9
7
|
"api",
|
|
@@ -18,24 +16,38 @@
|
|
|
18
16
|
"releases",
|
|
19
17
|
"ci-cd"
|
|
20
18
|
],
|
|
21
|
-
"
|
|
22
|
-
"
|
|
19
|
+
"homepage": "https://gitverse.ru/rainypixel/gitverse-sdk#readme",
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://gitverse.ru/rainypixel/gitverse-sdk/issues"
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://gitverse.ru/rainypixel/gitverse-sdk.git"
|
|
26
|
+
},
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"author": "Ivan Bobchenkov<me@bobchenkov.ru>",
|
|
29
|
+
"sideEffects": false,
|
|
30
|
+
"type": "module",
|
|
23
31
|
"exports": {
|
|
24
32
|
".": {
|
|
25
33
|
"import": "./dist/index.js",
|
|
26
34
|
"types": "./dist/index.d.ts"
|
|
27
35
|
},
|
|
28
|
-
"./
|
|
29
|
-
"import": "./dist/
|
|
30
|
-
"types": "./dist/
|
|
36
|
+
"./api/actions": {
|
|
37
|
+
"import": "./dist/api/actions.js",
|
|
38
|
+
"types": "./dist/api/actions.d.ts"
|
|
31
39
|
},
|
|
32
|
-
"./
|
|
33
|
-
"import": "./dist/
|
|
34
|
-
"types": "./dist/
|
|
40
|
+
"./api/branches": {
|
|
41
|
+
"import": "./dist/api/branches.js",
|
|
42
|
+
"types": "./dist/api/branches.d.ts"
|
|
35
43
|
},
|
|
36
|
-
"./
|
|
37
|
-
"import": "./dist/
|
|
38
|
-
"types": "./dist/
|
|
44
|
+
"./api/collaborators": {
|
|
45
|
+
"import": "./dist/api/collaborators.js",
|
|
46
|
+
"types": "./dist/api/collaborators.d.ts"
|
|
47
|
+
},
|
|
48
|
+
"./api/commits": {
|
|
49
|
+
"import": "./dist/api/commits.js",
|
|
50
|
+
"types": "./dist/api/commits.d.ts"
|
|
39
51
|
},
|
|
40
52
|
"./api/contents": {
|
|
41
53
|
"import": "./dist/api/contents.js",
|
|
@@ -49,14 +61,26 @@
|
|
|
49
61
|
"import": "./dist/api/forks.js",
|
|
50
62
|
"types": "./dist/api/forks.d.ts"
|
|
51
63
|
},
|
|
64
|
+
"./api/git": {
|
|
65
|
+
"import": "./dist/api/git.js",
|
|
66
|
+
"types": "./dist/api/git.d.ts"
|
|
67
|
+
},
|
|
52
68
|
"./api/issues": {
|
|
53
69
|
"import": "./dist/api/issues.js",
|
|
54
70
|
"types": "./dist/api/issues.d.ts"
|
|
55
71
|
},
|
|
72
|
+
"./api/organizations": {
|
|
73
|
+
"import": "./dist/api/organizations.js",
|
|
74
|
+
"types": "./dist/api/organizations.d.ts"
|
|
75
|
+
},
|
|
56
76
|
"./api/pulls": {
|
|
57
77
|
"import": "./dist/api/pulls.js",
|
|
58
78
|
"types": "./dist/api/pulls.d.ts"
|
|
59
79
|
},
|
|
80
|
+
"./api/releases": {
|
|
81
|
+
"import": "./dist/api/releases.js",
|
|
82
|
+
"types": "./dist/api/releases.d.ts"
|
|
83
|
+
},
|
|
60
84
|
"./api/repositories": {
|
|
61
85
|
"import": "./dist/api/repositories.js",
|
|
62
86
|
"types": "./dist/api/repositories.d.ts"
|
|
@@ -65,82 +89,49 @@
|
|
|
65
89
|
"import": "./dist/api/stars.js",
|
|
66
90
|
"types": "./dist/api/stars.d.ts"
|
|
67
91
|
},
|
|
92
|
+
"./api/teams": {
|
|
93
|
+
"import": "./dist/api/teams.js",
|
|
94
|
+
"types": "./dist/api/teams.d.ts"
|
|
95
|
+
},
|
|
68
96
|
"./api/users": {
|
|
69
97
|
"import": "./dist/api/users.js",
|
|
70
98
|
"types": "./dist/api/users.d.ts"
|
|
71
99
|
},
|
|
72
|
-
"./
|
|
73
|
-
"import": "./dist/
|
|
74
|
-
"types": "./dist/
|
|
75
|
-
},
|
|
76
|
-
"./api/branches": {
|
|
77
|
-
"import": "./dist/api/branches.js",
|
|
78
|
-
"types": "./dist/api/branches.d.ts"
|
|
79
|
-
},
|
|
80
|
-
"./api/collaborators": {
|
|
81
|
-
"import": "./dist/api/collaborators.js",
|
|
82
|
-
"types": "./dist/api/collaborators.d.ts"
|
|
83
|
-
},
|
|
84
|
-
"./api/commits": {
|
|
85
|
-
"import": "./dist/api/commits.js",
|
|
86
|
-
"types": "./dist/api/commits.d.ts"
|
|
87
|
-
},
|
|
88
|
-
"./api/git": {
|
|
89
|
-
"import": "./dist/api/git.js",
|
|
90
|
-
"types": "./dist/api/git.d.ts"
|
|
91
|
-
},
|
|
92
|
-
"./api/organizations": {
|
|
93
|
-
"import": "./dist/api/organizations.js",
|
|
94
|
-
"types": "./dist/api/organizations.d.ts"
|
|
95
|
-
},
|
|
96
|
-
"./api/releases": {
|
|
97
|
-
"import": "./dist/api/releases.js",
|
|
98
|
-
"types": "./dist/api/releases.d.ts"
|
|
100
|
+
"./client": {
|
|
101
|
+
"import": "./dist/client.js",
|
|
102
|
+
"types": "./dist/client.d.ts"
|
|
99
103
|
},
|
|
100
|
-
"./
|
|
101
|
-
"import": "./dist/
|
|
102
|
-
"types": "./dist/
|
|
104
|
+
"./enums": {
|
|
105
|
+
"import": "./dist/enums.js",
|
|
106
|
+
"types": "./dist/enums.d.ts"
|
|
103
107
|
},
|
|
104
108
|
"./errors": {
|
|
105
109
|
"import": "./dist/errors.js",
|
|
106
110
|
"types": "./dist/errors.d.ts"
|
|
111
|
+
},
|
|
112
|
+
"./types": {
|
|
113
|
+
"import": "./dist/types.js",
|
|
114
|
+
"types": "./dist/types.d.ts"
|
|
107
115
|
}
|
|
108
116
|
},
|
|
117
|
+
"main": "dist/index.js",
|
|
118
|
+
"types": "dist/index.d.ts",
|
|
109
119
|
"files": [
|
|
110
120
|
"dist"
|
|
111
121
|
],
|
|
112
|
-
"author": "Ivan Bobchenkov<me@bobchenkov.ru>",
|
|
113
122
|
"scripts": {
|
|
114
123
|
"build": "bun build.ts",
|
|
124
|
+
"dev": "bun build.ts --watch",
|
|
115
125
|
"test": "bun test",
|
|
116
126
|
"test:coverage": "bun test --coverage",
|
|
117
|
-
"prepublishOnly": "bun run build",
|
|
118
|
-
"lint": "biome check",
|
|
119
|
-
"lint:fix": "biome check --write",
|
|
120
127
|
"typecheck": "tsc --noEmit"
|
|
121
128
|
},
|
|
122
|
-
"license": "MIT",
|
|
123
|
-
"repository": {
|
|
124
|
-
"type": "git",
|
|
125
|
-
"url": "https://gitverse.ru/rainypixel/gitverse-sdk.git"
|
|
126
|
-
},
|
|
127
|
-
"bugs": {
|
|
128
|
-
"url": "https://gitverse.ru/rainypixel/gitverse-sdk/issues"
|
|
129
|
-
},
|
|
130
|
-
"homepage": "https://gitverse.ru/rainypixel/gitverse-sdk#readme",
|
|
131
129
|
"devDependencies": {
|
|
132
130
|
"@aryzing/bun-mock-fetch": "^1.1.0",
|
|
133
|
-
"@biomejs/biome": "^2.3.2",
|
|
134
|
-
"@semantic-release/changelog": "^6.0.3",
|
|
135
|
-
"@semantic-release/exec": "^7.1.0",
|
|
136
|
-
"@semantic-release/git": "^10.0.1",
|
|
137
131
|
"@types/bun": "1.3.0",
|
|
138
132
|
"bun-bagel": "^1.2.0",
|
|
139
133
|
"bun-dts": "^0.1.70",
|
|
140
134
|
"bun-plugin-dts": "^0.3.0",
|
|
141
|
-
"conventional-changelog-conventionalcommits": "^7.0.2",
|
|
142
|
-
"lefthook": "^2.0.2",
|
|
143
|
-
"semantic-release": "^22.0.12",
|
|
144
135
|
"typescript": "^5.9.3"
|
|
145
136
|
},
|
|
146
137
|
"publishConfig": {
|