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.
Files changed (59) 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/index.d.ts +718 -180
  54. package/dist/index.js +2 -2
  55. package/dist/index.js.map +2 -2
  56. package/dist/types.d.ts +583 -85
  57. package/dist/utils.js +2 -2
  58. package/dist/utils.js.map +1 -1
  59. package/package.json +2 -2
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/api/issues.ts"],
4
4
  "sourcesContent": [
5
- "import type { GitVerseClient } from \"../client\";\nimport type { IssueState } from \"../enums\";\nimport type { Comment, Issue, Label, RequestOptions, TimelineEvent } from \"../types\";\n\n/**\n * Класс для работы с issues репозитория\n */\nexport class IssuesApi {\n constructor(private client: GitVerseClient) {}\n\n /**\n * Получить список issues репозитория\n * @param {string} owner - Владелец репозитория\n * @param {string} repo - Название репозитория\n * @param {IssueState} [state] - Фильтр по состоянию issue\n * @returns {Promise<Issue[]>} Массив issues\n */\n list(owner: string, repo: string, state?: IssueState, options?: RequestOptions): Promise<Issue[]> {\n const params = new URLSearchParams();\n if (state) {\n params.append(\"state\", state);\n }\n\n const queryString = params.toString();\n const url = `/repos/${owner}/${repo}/issues${queryString ? `?${queryString}` : \"\"}`;\n\n return this.client.get<Issue[]>(url, options);\n }\n\n /**\n * Получить конкретный issue\n * @param {string} owner - Владелец репозитория\n * @param {string} repo - Название репозитория\n * @param {number} index - Номер issue\n * @returns {Promise<Issue>} Информация об issue\n */\n get(owner: string, repo: string, index: number, options?: RequestOptions): Promise<Issue> {\n return this.client.get<Issue>(`/repos/${owner}/${repo}/issues/${index}`, options);\n }\n\n /**\n * Получить комментарий по ID\n * @param {string} owner - Владелец репозитория\n * @param {string} repo - Название репозитория\n * @param {number} id - ID комментария\n * @returns {Promise<Comment>} Информация о комментарии\n */\n getComment(owner: string, repo: string, id: number, options?: RequestOptions): Promise<Comment> {\n return this.client.get<Comment>(`/repos/${owner}/${repo}/issues/comments/${id}`, options);\n }\n\n /**\n * Получить список комментариев к issue\n * @param {string} owner - Владелец репозитория\n * @param {string} repo - Название репозитория\n * @param {number} index - Номер issue\n * @returns {Promise<Comment[]>} Массив комментариев\n */\n getComments(owner: string, repo: string, index: number, options?: RequestOptions): Promise<Comment[]> {\n return this.client.get<Comment[]>(`/repos/${owner}/${repo}/issues/${index}/comments`, options);\n }\n\n /**\n * Получить список меток issue\n * @param {string} owner - Владелец репозитория\n * @param {string} repo - Название репозитория\n * @param {number} index - Номер issue\n * @returns {Promise<Label[]>} Массив меток\n */\n getLabels(owner: string, repo: string, index: number, options?: RequestOptions): Promise<Label[]> {\n return this.client.get<Label[]>(`/repos/${owner}/${repo}/issues/${index}/labels`, options);\n }\n\n /**\n * Получить timeline событий issue\n * @param {string} owner - Владелец репозитория\n * @param {string} repo - Название репозитория\n * @param {number} index - Номер issue\n * @returns {Promise<TimelineEvent[]>} Массив событий timeline\n */\n getTimeline(owner: string, repo: string, index: number, options?: RequestOptions): Promise<TimelineEvent[]> {\n return this.client.get<TimelineEvent[]>(`/repos/${owner}/${repo}/issues/${index}/timeline`, options);\n }\n}\n"
5
+ "import type { GitVerseClient } from \"../client\";\nimport type {\n Comment,\n GetTimelineParams,\n Issue,\n Label,\n ListCommentsParams,\n ListIssuesParams,\n RequestOptions,\n TimelineComment,\n} from \"../types\";\n\n/**\n * Класс для работы с issues репозитория\n */\nexport class IssuesApi {\n constructor(private client: GitVerseClient) {}\n\n /**\n * Получить список issues репозитория\n */\n list(owner: string, repo: string, params?: ListIssuesParams, options?: RequestOptions): Promise<Issue[]> {\n const searchParams = new URLSearchParams();\n if (params?.state) searchParams.append(\"state\", params.state);\n if (params?.page) searchParams.append(\"page\", String(params.page));\n if (params?.per_page) searchParams.append(\"per_page\", String(params.per_page));\n if (params?.q) searchParams.append(\"q\", params.q);\n if (params?.labels) searchParams.append(\"labels\", params.labels);\n if (params?.milestones) searchParams.append(\"milestones\", params.milestones);\n if (params?.created_by) searchParams.append(\"created_by\", params.created_by);\n if (params?.assigned_by) searchParams.append(\"assigned_by\", params.assigned_by);\n if (params?.mentioned_by) searchParams.append(\"mentioned_by\", params.mentioned_by);\n if (params?.type) searchParams.append(\"type\", params.type);\n if (params?.since) searchParams.append(\"since\", params.since);\n if (params?.before) searchParams.append(\"before\", params.before);\n\n const queryString = searchParams.toString();\n const url = `/repos/${owner}/${repo}/issues${queryString ? `?${queryString}` : \"\"}`;\n\n return this.client.get<Issue[]>(url, options);\n }\n\n /**\n * Получить конкретный issue\n */\n get(owner: string, repo: string, index: number, options?: RequestOptions): Promise<Issue> {\n return this.client.get<Issue>(`/repos/${owner}/${repo}/issues/${index}`, options);\n }\n\n /**\n * Получить комментарий по ID\n */\n getComment(owner: string, repo: string, id: number, options?: RequestOptions): Promise<Comment> {\n return this.client.get<Comment>(`/repos/${owner}/${repo}/issues/comments/${id}`, options);\n }\n\n /**\n * Получить список комментариев к issue\n */\n getComments(\n owner: string,\n repo: string,\n index: number,\n params?: ListCommentsParams,\n options?: RequestOptions,\n ): Promise<Comment[]> {\n const searchParams = new URLSearchParams();\n if (params?.since) searchParams.append(\"since\", params.since);\n if (params?.before) searchParams.append(\"before\", params.before);\n\n const queryString = searchParams.toString();\n const url = `/repos/${owner}/${repo}/issues/${index}/comments${queryString ? `?${queryString}` : \"\"}`;\n\n return this.client.get<Comment[]>(url, options);\n }\n\n /**\n * Получить список меток issue\n */\n getLabels(owner: string, repo: string, index: number, options?: RequestOptions): Promise<Label[]> {\n return this.client.get<Label[]>(`/repos/${owner}/${repo}/issues/${index}/labels`, options);\n }\n\n /**\n * Получить timeline событий issue\n */\n getTimeline(\n owner: string,\n repo: string,\n index: number,\n params?: GetTimelineParams,\n options?: RequestOptions,\n ): Promise<TimelineComment[]> {\n const searchParams = new URLSearchParams();\n if (params?.page) searchParams.append(\"page\", String(params.page));\n if (params?.per_page) searchParams.append(\"per_page\", String(params.per_page));\n if (params?.since) searchParams.append(\"since\", params.since);\n if (params?.before) searchParams.append(\"before\", params.before);\n\n const queryString = searchParams.toString();\n const url = `/repos/${owner}/${repo}/issues/${index}/timeline${queryString ? `?${queryString}` : \"\"}`;\n\n return this.client.get<TimelineComment[]>(url, options);\n }\n}\n"
6
6
  ],
7
- "mappings": "AAOO,MAAM,CAAU,CACD,OAApB,WAAW,CAAS,EAAwB,CAAxB,cASpB,IAAI,CAAC,EAAe,EAAc,EAAoB,EAA4C,CAChG,IAAM,EAAS,IAAI,gBACnB,GAAI,EACF,EAAO,OAAO,QAAS,CAAK,EAG9B,IAAM,EAAc,EAAO,SAAS,EAC9B,EAAM,UAAU,KAAS,WAAc,EAAc,IAAI,IAAgB,KAE/E,OAAO,KAAK,OAAO,IAAa,EAAK,CAAO,EAU9C,GAAG,CAAC,EAAe,EAAc,EAAe,EAA0C,CACxF,OAAO,KAAK,OAAO,IAAW,UAAU,KAAS,YAAe,IAAS,CAAO,EAUlF,UAAU,CAAC,EAAe,EAAc,EAAY,EAA4C,CAC9F,OAAO,KAAK,OAAO,IAAa,UAAU,KAAS,qBAAwB,IAAM,CAAO,EAU1F,WAAW,CAAC,EAAe,EAAc,EAAe,EAA8C,CACpG,OAAO,KAAK,OAAO,IAAe,UAAU,KAAS,YAAe,aAAkB,CAAO,EAU/F,SAAS,CAAC,EAAe,EAAc,EAAe,EAA4C,CAChG,OAAO,KAAK,OAAO,IAAa,UAAU,KAAS,YAAe,WAAgB,CAAO,EAU3F,WAAW,CAAC,EAAe,EAAc,EAAe,EAAoD,CAC1G,OAAO,KAAK,OAAO,IAAqB,UAAU,KAAS,YAAe,aAAkB,CAAO,EAEvG",
8
- "debugId": "1F131645A0C768A864756E2164756E21",
7
+ "mappings": "AAeO,MAAM,CAAU,CACD,OAApB,WAAW,CAAS,EAAwB,CAAxB,cAKpB,IAAI,CAAC,EAAe,EAAc,EAA2B,EAA4C,CACvG,IAAM,EAAe,IAAI,gBACzB,GAAI,GAAQ,MAAO,EAAa,OAAO,QAAS,EAAO,KAAK,EAC5D,GAAI,GAAQ,KAAM,EAAa,OAAO,OAAQ,OAAO,EAAO,IAAI,CAAC,EACjE,GAAI,GAAQ,SAAU,EAAa,OAAO,WAAY,OAAO,EAAO,QAAQ,CAAC,EAC7E,GAAI,GAAQ,EAAG,EAAa,OAAO,IAAK,EAAO,CAAC,EAChD,GAAI,GAAQ,OAAQ,EAAa,OAAO,SAAU,EAAO,MAAM,EAC/D,GAAI,GAAQ,WAAY,EAAa,OAAO,aAAc,EAAO,UAAU,EAC3E,GAAI,GAAQ,WAAY,EAAa,OAAO,aAAc,EAAO,UAAU,EAC3E,GAAI,GAAQ,YAAa,EAAa,OAAO,cAAe,EAAO,WAAW,EAC9E,GAAI,GAAQ,aAAc,EAAa,OAAO,eAAgB,EAAO,YAAY,EACjF,GAAI,GAAQ,KAAM,EAAa,OAAO,OAAQ,EAAO,IAAI,EACzD,GAAI,GAAQ,MAAO,EAAa,OAAO,QAAS,EAAO,KAAK,EAC5D,GAAI,GAAQ,OAAQ,EAAa,OAAO,SAAU,EAAO,MAAM,EAE/D,IAAM,EAAc,EAAa,SAAS,EACpC,EAAM,UAAU,KAAS,WAAc,EAAc,IAAI,IAAgB,KAE/E,OAAO,KAAK,OAAO,IAAa,EAAK,CAAO,EAM9C,GAAG,CAAC,EAAe,EAAc,EAAe,EAA0C,CACxF,OAAO,KAAK,OAAO,IAAW,UAAU,KAAS,YAAe,IAAS,CAAO,EAMlF,UAAU,CAAC,EAAe,EAAc,EAAY,EAA4C,CAC9F,OAAO,KAAK,OAAO,IAAa,UAAU,KAAS,qBAAwB,IAAM,CAAO,EAM1F,WAAW,CACT,EACA,EACA,EACA,EACA,EACoB,CACpB,IAAM,EAAe,IAAI,gBACzB,GAAI,GAAQ,MAAO,EAAa,OAAO,QAAS,EAAO,KAAK,EAC5D,GAAI,GAAQ,OAAQ,EAAa,OAAO,SAAU,EAAO,MAAM,EAE/D,IAAM,EAAc,EAAa,SAAS,EACpC,EAAM,UAAU,KAAS,YAAe,aAAiB,EAAc,IAAI,IAAgB,KAEjG,OAAO,KAAK,OAAO,IAAe,EAAK,CAAO,EAMhD,SAAS,CAAC,EAAe,EAAc,EAAe,EAA4C,CAChG,OAAO,KAAK,OAAO,IAAa,UAAU,KAAS,YAAe,WAAgB,CAAO,EAM3F,WAAW,CACT,EACA,EACA,EACA,EACA,EAC4B,CAC5B,IAAM,EAAe,IAAI,gBACzB,GAAI,GAAQ,KAAM,EAAa,OAAO,OAAQ,OAAO,EAAO,IAAI,CAAC,EACjE,GAAI,GAAQ,SAAU,EAAa,OAAO,WAAY,OAAO,EAAO,QAAQ,CAAC,EAC7E,GAAI,GAAQ,MAAO,EAAa,OAAO,QAAS,EAAO,KAAK,EAC5D,GAAI,GAAQ,OAAQ,EAAa,OAAO,SAAU,EAAO,MAAM,EAE/D,IAAM,EAAc,EAAa,SAAS,EACpC,EAAM,UAAU,KAAS,YAAe,aAAiB,EAAc,IAAI,IAAgB,KAEjG,OAAO,KAAK,OAAO,IAAuB,EAAK,CAAO,EAE1D",
8
+ "debugId": "002E078DE313E04264756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -137,6 +137,16 @@ declare class GitVerseClient {
137
137
  * @returns Ответ от API
138
138
  */
139
139
  patch<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T>;
140
+ /**
141
+ * Выполняет загрузку файла через multipart/form-data
142
+ * @param path Путь к API-ресурсу
143
+ * @param fieldName Имя поля для файла
144
+ * @param file Файл для загрузки (Blob или ArrayBuffer)
145
+ * @param fileName Имя файла
146
+ * @param options Опции запроса (опционально)
147
+ * @returns Ответ от API
148
+ */
149
+ uploadFile<T>(path: string, fieldName: string, file: Blob | ArrayBuffer, fileName: string, options?: RequestOptions): Promise<T>;
140
150
  }
141
151
  /**
142
152
  * API для работы с организациями
@@ -1,4 +1,4 @@
1
1
  class k{client;constructor(b){this.client=b}async checkMembership(b,h,j){try{return await this.client.get(`/orgs/${b}/members/${h}`,j),!0}catch(d){if(d instanceof Error&&d.message.includes("404"))return!1;throw d}}}export{k as OrganizationsApi};
2
- export{k as n};
2
+ export{k as C};
3
3
 
4
- //# debugId=A1021BB3245B53C064756E2164756E21
4
+ //# debugId=DEDD92DE5FBDE75664756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import type { GitVerseClient } from \"../client\";\nimport type { RequestOptions } from \"../types\";\n\n/**\n * API для работы с организациями\n */\nexport class OrganizationsApi {\n private client: GitVerseClient;\n\n /**\n * Создает новый экземпляр API для работы с организациями\n * @param client GitVerse клиент\n */\n constructor(client: GitVerseClient) {\n this.client = client;\n }\n\n /**\n * Проверяет членство пользователя в организации\n * @param org Название организации\n * @param username Имя пользователя\n * @returns true если пользователь является членом организации, false если нет\n */\n async checkMembership(org: string, username: string, options?: RequestOptions): Promise<boolean> {\n try {\n await this.client.get<void>(`/orgs/${org}/members/${username}`, options);\n return true;\n } catch (error: unknown) {\n if (error instanceof Error && error.message.includes(\"404\")) {\n return false;\n }\n throw error;\n }\n }\n}\n"
6
6
  ],
7
7
  "mappings": "AAMO,MAAM,CAAiB,CACpB,OAMR,WAAW,CAAC,EAAwB,CAClC,KAAK,OAAS,OASV,gBAAe,CAAC,EAAa,EAAkB,EAA4C,CAC/F,GAAI,CAEF,OADA,MAAM,KAAK,OAAO,IAAU,SAAS,aAAe,IAAY,CAAO,EAChE,GACP,MAAO,EAAgB,CACvB,GAAI,aAAiB,OAAS,EAAM,QAAQ,SAAS,KAAK,EACxD,MAAO,GAET,MAAM,GAGZ",
8
- "debugId": "A1021BB3245B53C064756E2164756E21",
8
+ "debugId": "DEDD92DE5FBDE75664756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -82,6 +82,39 @@ interface RequestOptions {
82
82
  signal?: AbortSignal;
83
83
  }
84
84
  /**
85
+ * Базовые параметры пагинации
86
+ */
87
+ interface PaginationParams {
88
+ /** Номер страницы (начиная с 1) */
89
+ page?: number;
90
+ /** Количество элементов на странице */
91
+ per_page?: number;
92
+ }
93
+ /**
94
+ * Параметры для получения файлов pull request
95
+ */
96
+ interface GetPullFilesParams extends PaginationParams {}
97
+ /**
98
+ * Параметры для получения коммитов pull request
99
+ */
100
+ interface GetPullCommitsParams extends PaginationParams {}
101
+ /**
102
+ * Параметры для обновления ветки pull request
103
+ */
104
+ interface UpdateBranchParams {
105
+ /** Ожидаемый SHA головы ветки */
106
+ expected_head_sha?: string;
107
+ }
108
+ /**
109
+ * Ответ на обновление ветки pull request
110
+ */
111
+ interface UpdateBranchResponse {
112
+ /** Сообщение о результате */
113
+ message: string;
114
+ /** URL обновлённого pull request */
115
+ url?: string;
116
+ }
117
+ /**
85
118
  * Интерфейс пользователя
86
119
  */
87
120
  interface User2 {
@@ -129,6 +162,12 @@ interface User2 {
129
162
  public_repos?: number;
130
163
  /** Количество репозиториев, отмеченных звездой */
131
164
  stars_count?: number;
165
+ /** API-ссылка на подписки пользователя */
166
+ following_url?: string;
167
+ /** API-ссылка на избранные репозитории */
168
+ starred_url?: string;
169
+ /** API-ссылка на подписки на уведомления */
170
+ subscriptions_url?: string;
132
171
  /** Дата создания аккаунта */
133
172
  created_at: string;
134
173
  /** Дата последнего обновления аккаунта */
@@ -221,6 +260,12 @@ interface PullRequest {
221
260
  merged_by?: User2 | null;
222
261
  /** Может ли мейнтейнер изменять pull request */
223
262
  maintainer_can_modify: boolean;
263
+ /** Является ли pull request черновиком */
264
+ is_draft?: boolean;
265
+ /** Запрошенные ревьюеры */
266
+ requested_reviewers?: User2[];
267
+ /** Запрошенные команды для ревью */
268
+ requested_teams?: Team[];
224
269
  /** Информация о целевой ветке */
225
270
  base: PullRequestBase;
226
271
  /** Информация о ветке с изменениями */
@@ -244,6 +289,20 @@ interface CreatePullRequestParams {
244
289
  head: string;
245
290
  /** Имя ветки, в которую будут внесены изменения */
246
291
  base: string;
292
+ /** Назначенные пользователи */
293
+ assignees?: string[];
294
+ /** Черновик ли pull request */
295
+ draft?: boolean;
296
+ /** Срок выполнения */
297
+ due_date?: string;
298
+ /** Репозиторий head ветки (для кросс-репозиторных PR) */
299
+ head_repo?: string;
300
+ /** ID меток */
301
+ labels?: number[];
302
+ /** Может ли мейнтейнер модифицировать */
303
+ maintainer_can_modify?: boolean;
304
+ /** ID milestone */
305
+ milestone?: number;
247
306
  }
248
307
  /**
249
308
  * Интерфейс параметров для получения списка pull requests
@@ -290,6 +349,10 @@ interface Label {
290
349
  color: string;
291
350
  /** URL метки */
292
351
  url?: string;
352
+ /** Эксклюзивная метка (взаимоисключающая в группе) */
353
+ exclusive?: boolean;
354
+ /** Архивирована ли метка */
355
+ is_archived?: boolean;
293
356
  }
294
357
  /**
295
358
  * Интерфейс майлстоуна (milestone)
@@ -346,6 +409,8 @@ interface Commit {
346
409
  tree: {
347
410
  sha: string
348
411
  url: string
412
+ /** Дата создания */
413
+ created?: string
349
414
  }
350
415
  };
351
416
  /** Автор (пользователь GitVerse) */
@@ -362,6 +427,45 @@ interface Commit {
362
427
  url: string;
363
428
  /** Веб-ссылка на коммит */
364
429
  html_url: string;
430
+ /** Ветка коммита */
431
+ branch?: string;
432
+ /** Дата создания */
433
+ created?: string;
434
+ /** Изменённые файлы */
435
+ files?: CommitFile[];
436
+ /** Статистика изменений */
437
+ stats?: {
438
+ additions: number
439
+ deletions: number
440
+ total: number
441
+ };
442
+ }
443
+ /**
444
+ * Файл в коммите
445
+ */
446
+ interface CommitFile {
447
+ /** Имя файла */
448
+ filename: string;
449
+ /** Количество добавленных строк */
450
+ additions: number;
451
+ /** Количество удалённых строк */
452
+ deletions: number;
453
+ /** Общее количество изменений */
454
+ changes: number;
455
+ /** Статус файла (added, modified, removed, renamed) */
456
+ status: string;
457
+ /** Предыдущее имя файла (при переименовании) */
458
+ previous_filename?: string;
459
+ /** SHA-хеш blob файла */
460
+ sha?: string;
461
+ /** URL blob файла */
462
+ blob_url?: string;
463
+ /** URL contents файла */
464
+ contents_url?: string;
465
+ /** URL raw файла */
466
+ raw_url?: string;
467
+ /** Патч с изменениями */
468
+ patch?: string;
365
469
  }
366
470
  /**
367
471
  * Параметры для обновления pull request
@@ -402,8 +506,34 @@ interface PullRequestFile {
402
506
  contents_url: string;
403
507
  /** Patch для файла */
404
508
  patch?: string;
405
- /** Предыдущее имя файла (для переименованных) */
406
- previous_filename?: string;
509
+ }
510
+ interface Team {
511
+ /** Идентификатор команды */
512
+ id: number;
513
+ /** Название команды */
514
+ name: string;
515
+ /** Описание команды */
516
+ description?: string;
517
+ /** Права доступа */
518
+ permission: "pull" | "push" | "admin";
519
+ /** Количество участников */
520
+ num_members?: number;
521
+ /** Количество репозиториев */
522
+ num_repos?: number;
523
+ /** Может создавать репозитории в организации */
524
+ can_create_org_repo?: boolean;
525
+ /** Включает все репозитории */
526
+ includes_all_repositories?: boolean;
527
+ /** Права на Actions */
528
+ permission_actions?: string;
529
+ /** Права на код */
530
+ permission_code?: string;
531
+ /** Права на packages */
532
+ permission_packages?: string;
533
+ /** Права на pull requests */
534
+ permission_pulls?: string;
535
+ /** Права на релизы */
536
+ permission_releases?: string;
407
537
  }
408
538
  /**
409
539
  * Предупреждение об устаревшей версии API
@@ -531,6 +661,16 @@ declare class GitVerseClient {
531
661
  * @returns Ответ от API
532
662
  */
533
663
  patch<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T>;
664
+ /**
665
+ * Выполняет загрузку файла через multipart/form-data
666
+ * @param path Путь к API-ресурсу
667
+ * @param fieldName Имя поля для файла
668
+ * @param file Файл для загрузки (Blob или ArrayBuffer)
669
+ * @param fileName Имя файла
670
+ * @param options Опции запроса (опционально)
671
+ * @returns Ответ от API
672
+ */
673
+ uploadFile<T>(path: string, fieldName: string, file: Blob | ArrayBuffer, fileName: string, options?: RequestOptions): Promise<T>;
534
674
  }
535
675
  /**
536
676
  * API для работы с запросами на слияние (пулл-реквестами)
@@ -577,28 +717,16 @@ declare class PullsApi {
577
717
  update(owner: string, repo: string, number: number, params: UpdatePullRequestParams, options?: RequestOptions): Promise<PullRequest>;
578
718
  /**
579
719
  * Получает список файлов в pull request
580
- * @param owner Владелец репозитория
581
- * @param repo Название репозитория
582
- * @param number Номер pull request
583
- * @returns Список изменённых файлов
584
720
  */
585
- getFiles(owner: string, repo: string, number: number, options?: RequestOptions): Promise<PullRequestFile[]>;
721
+ getFiles(owner: string, repo: string, number: number, params?: GetPullFilesParams, options?: RequestOptions): Promise<PullRequestFile[]>;
586
722
  /**
587
723
  * Обновляет ветку pull request с базовой веткой
588
- * @param owner Владелец репозитория
589
- * @param repo Название репозитория
590
- * @param number Номер pull request
591
- * @returns Результат операции
592
724
  */
593
- updateBranch(owner: string, repo: string, number: number, options?: RequestOptions): Promise<void>;
725
+ updateBranch(owner: string, repo: string, number: number, params?: UpdateBranchParams, options?: RequestOptions): Promise<UpdateBranchResponse>;
594
726
  /**
595
727
  * Получает список коммитов в pull request
596
- * @param owner Владелец репозитория
597
- * @param repo Название репозитория
598
- * @param number Номер pull request
599
- * @returns Список коммитов
600
728
  */
601
- getCommits(owner: string, repo: string, number: number, options?: RequestOptions): Promise<Commit[]>;
729
+ getCommits(owner: string, repo: string, number: number, params?: GetPullCommitsParams, options?: RequestOptions): Promise<Commit[]>;
602
730
  /**
603
731
  * Проверяет, был ли pull request влит в базовую ветку
604
732
  * @param owner Владелец репозитория
package/dist/api/pulls.js CHANGED
@@ -1,4 +1,4 @@
1
- import{x as v}from"../errors.js";class y{client;constructor(d){this.client=d}create(d,f,g,j){return this.client.post(`/repos/${d}/${f}/pulls`,g,j)}get(d,f,g,j){return this.client.get(`/repos/${d}/${f}/pulls/${g}`,j)}list(d,f,g,j){let x=new URLSearchParams(Object.entries(g??{})),q=new URL(`/repos/${d}/${f}/pulls`,"http://localhost");return q.search=x.toString(),this.client.get(q.href.replace("http://localhost",""),j)}update(d,f,g,j,k){return this.client.patch(`/repos/${d}/${f}/pulls/${g}`,j,k)}getFiles(d,f,g,j){return this.client.get(`/repos/${d}/${f}/pulls/${g}/files`,j)}updateBranch(d,f,g,j){return this.client.put(`/repos/${d}/${f}/pulls/${g}/update-branch`,{},j)}getCommits(d,f,g,j){return this.client.get(`/repos/${d}/${f}/pulls/${g}/commits`,j)}async checkIfMerged(d,f,g,j){try{return await this.client.get(`/repos/${d}/${f}/pulls/${g}/merge`,j),!0}catch(k){if(k instanceof v&&k.status===404)return!1;throw k}}}export{y as PullsApi};
2
- export{y as b};
1
+ import{x as C}from"../errors.js";class D{client;constructor(f){this.client=f}create(f,j,k,d){return this.client.post(`/repos/${f}/${j}/pulls`,k,d)}get(f,j,k,d){return this.client.get(`/repos/${f}/${j}/pulls/${k}`,d)}list(f,j,k,d){let x=new URLSearchParams(Object.entries(k??{})),z=new URL(`/repos/${f}/${j}/pulls`,"http://localhost");return z.search=x.toString(),this.client.get(z.href.replace("http://localhost",""),d)}update(f,j,k,d,v){return this.client.patch(`/repos/${f}/${j}/pulls/${k}`,d,v)}getFiles(f,j,k,d,v){let x=new URLSearchParams;if(d?.page)x.append("page",String(d.page));if(d?.per_page)x.append("per_page",String(d.per_page));let z=x.toString(),B=`/repos/${f}/${j}/pulls/${k}/files${z?`?${z}`:""}`;return this.client.get(B,v)}updateBranch(f,j,k,d,v){return this.client.put(`/repos/${f}/${j}/pulls/${k}/update-branch`,d??{},v)}getCommits(f,j,k,d,v){let x=new URLSearchParams;if(d?.page)x.append("page",String(d.page));if(d?.per_page)x.append("per_page",String(d.per_page));let z=x.toString(),B=`/repos/${f}/${j}/pulls/${k}/commits${z?`?${z}`:""}`;return this.client.get(B,v)}async checkIfMerged(f,j,k,d){try{return await this.client.get(`/repos/${f}/${j}/pulls/${k}/merge`,d),!0}catch(v){if(v instanceof C&&v.status===404)return!1;throw v}}}export{D as PullsApi};
2
+ export{D as i};
3
3
 
4
- //# debugId=8277BC7BC30521EF64756E2164756E21
4
+ //# debugId=1BA37919BA587E8764756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/api/pulls.ts"],
4
4
  "sourcesContent": [
5
- "import type { GitVerseClient } from \"../client\";\nimport { GitVerseApiError } from \"../errors\";\nimport type {\n Commit,\n CreatePullRequestParams,\n ListPullRequestsParams,\n PullRequest,\n PullRequestFile,\n RequestOptions,\n UpdatePullRequestParams,\n} from \"../types\";\n\n/**\n * API для работы с запросами на слияние (пулл-реквестами)\n */\nexport class PullsApi {\n private client: GitVerseClient;\n\n /**\n * Создает новый экземпляр API для работы с пулл-реквестами\n * @param client GitVerse клиент\n */\n constructor(client: GitVerseClient) {\n this.client = client;\n }\n\n /**\n * Создает новый запрос на слияние в репозитории\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param params Параметры создания запроса на слияние\n * @returns Информация о созданном запросе на слияние\n */\n create(owner: string, repo: string, params: CreatePullRequestParams, options?: RequestOptions): Promise<PullRequest> {\n return this.client.post<PullRequest>(`/repos/${owner}/${repo}/pulls`, params, options);\n }\n\n /**\n * Получает запрос на слияние по его номеру\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param number Номер запроса на слияние\n * @returns Информация о запросе на слияние\n */\n get(owner: string, repo: string, number: number, options?: RequestOptions): Promise<PullRequest> {\n return this.client.get<PullRequest>(`/repos/${owner}/${repo}/pulls/${number}`, options);\n }\n\n /**\n * Получает список запросов на слияние в репозитории\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param state Состояние запросов на слияние (открытые/закрытые/все)\n * @returns Список запросов на слияние\n */\n list(owner: string, repo: string, params?: ListPullRequestsParams, options?: RequestOptions): Promise<PullRequest[]> {\n const TEMP = \"http://localhost\";\n\n const search = new URLSearchParams(Object.entries(params ?? {}));\n\n const path = new URL(`/repos/${owner}/${repo}/pulls`, TEMP);\n\n path.search = search.toString();\n\n return this.client.get<PullRequest[]>(path.href.replace(TEMP, \"\"), options);\n }\n\n /**\n * Обновляет pull request\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param number Номер pull request\n * @param params Параметры для обновления\n * @returns Обновлённый pull request\n */\n update(\n owner: string,\n repo: string,\n number: number,\n params: UpdatePullRequestParams,\n options?: RequestOptions,\n ): Promise<PullRequest> {\n return this.client.patch<PullRequest>(`/repos/${owner}/${repo}/pulls/${number}`, params, options);\n }\n\n /**\n * Получает список файлов в pull request\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param number Номер pull request\n * @returns Список изменённых файлов\n */\n getFiles(owner: string, repo: string, number: number, options?: RequestOptions): Promise<PullRequestFile[]> {\n return this.client.get<PullRequestFile[]>(`/repos/${owner}/${repo}/pulls/${number}/files`, options);\n }\n\n /**\n * Обновляет ветку pull request с базовой веткой\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param number Номер pull request\n * @returns Результат операции\n */\n updateBranch(owner: string, repo: string, number: number, options?: RequestOptions): Promise<void> {\n return this.client.put<void>(`/repos/${owner}/${repo}/pulls/${number}/update-branch`, {}, options);\n }\n\n /**\n * Получает список коммитов в pull request\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param number Номер pull request\n * @returns Список коммитов\n */\n getCommits(owner: string, repo: string, number: number, options?: RequestOptions): Promise<Commit[]> {\n return this.client.get<Commit[]>(`/repos/${owner}/${repo}/pulls/${number}/commits`, options);\n }\n\n /**\n * Проверяет, был ли pull request влит в базовую ветку\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param number Номер pull request\n * @returns true если PR был влит, false если не был влит или не существует\n */\n async checkIfMerged(owner: string, repo: string, number: number, options?: RequestOptions): Promise<boolean> {\n try {\n await this.client.get<void>(`/repos/${owner}/${repo}/pulls/${number}/merge`, options);\n return true; // Статус 204 - PR был влит\n } catch (error) {\n if (error instanceof GitVerseApiError && error.status === 404) {\n return false; // Статус 404 - PR не был влит или не существует\n }\n throw error; // Пробрасываем другие ошибки (401, 403, 500 и т.д.)\n }\n }\n}\n"
5
+ "import type { GitVerseClient } from \"../client\";\nimport { GitVerseApiError } from \"../errors\";\nimport type {\n Commit,\n CreatePullRequestParams,\n GetPullCommitsParams,\n GetPullFilesParams,\n ListPullRequestsParams,\n PullRequest,\n PullRequestFile,\n RequestOptions,\n UpdateBranchParams,\n UpdateBranchResponse,\n UpdatePullRequestParams,\n} from \"../types\";\n\n/**\n * API для работы с запросами на слияние (пулл-реквестами)\n */\nexport class PullsApi {\n private client: GitVerseClient;\n\n /**\n * Создает новый экземпляр API для работы с пулл-реквестами\n * @param client GitVerse клиент\n */\n constructor(client: GitVerseClient) {\n this.client = client;\n }\n\n /**\n * Создает новый запрос на слияние в репозитории\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param params Параметры создания запроса на слияние\n * @returns Информация о созданном запросе на слияние\n */\n create(owner: string, repo: string, params: CreatePullRequestParams, options?: RequestOptions): Promise<PullRequest> {\n return this.client.post<PullRequest>(`/repos/${owner}/${repo}/pulls`, params, options);\n }\n\n /**\n * Получает запрос на слияние по его номеру\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param number Номер запроса на слияние\n * @returns Информация о запросе на слияние\n */\n get(owner: string, repo: string, number: number, options?: RequestOptions): Promise<PullRequest> {\n return this.client.get<PullRequest>(`/repos/${owner}/${repo}/pulls/${number}`, options);\n }\n\n /**\n * Получает список запросов на слияние в репозитории\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param state Состояние запросов на слияние (открытые/закрытые/все)\n * @returns Список запросов на слияние\n */\n list(owner: string, repo: string, params?: ListPullRequestsParams, options?: RequestOptions): Promise<PullRequest[]> {\n const TEMP = \"http://localhost\";\n\n const search = new URLSearchParams(Object.entries(params ?? {}));\n\n const path = new URL(`/repos/${owner}/${repo}/pulls`, TEMP);\n\n path.search = search.toString();\n\n return this.client.get<PullRequest[]>(path.href.replace(TEMP, \"\"), options);\n }\n\n /**\n * Обновляет pull request\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param number Номер pull request\n * @param params Параметры для обновления\n * @returns Обновлённый pull request\n */\n update(\n owner: string,\n repo: string,\n number: number,\n params: UpdatePullRequestParams,\n options?: RequestOptions,\n ): Promise<PullRequest> {\n return this.client.patch<PullRequest>(`/repos/${owner}/${repo}/pulls/${number}`, params, options);\n }\n\n /**\n * Получает список файлов в pull request\n */\n getFiles(\n owner: string,\n repo: string,\n number: number,\n params?: GetPullFilesParams,\n options?: RequestOptions,\n ): Promise<PullRequestFile[]> {\n const searchParams = new URLSearchParams();\n if (params?.page) searchParams.append(\"page\", String(params.page));\n if (params?.per_page) searchParams.append(\"per_page\", String(params.per_page));\n\n const queryString = searchParams.toString();\n const url = `/repos/${owner}/${repo}/pulls/${number}/files${queryString ? `?${queryString}` : \"\"}`;\n\n return this.client.get<PullRequestFile[]>(url, options);\n }\n\n /**\n * Обновляет ветку pull request с базовой веткой\n */\n updateBranch(\n owner: string,\n repo: string,\n number: number,\n params?: UpdateBranchParams,\n options?: RequestOptions,\n ): Promise<UpdateBranchResponse> {\n return this.client.put<UpdateBranchResponse>(\n `/repos/${owner}/${repo}/pulls/${number}/update-branch`,\n params ?? {},\n options,\n );\n }\n\n /**\n * Получает список коммитов в pull request\n */\n getCommits(\n owner: string,\n repo: string,\n number: number,\n params?: GetPullCommitsParams,\n options?: RequestOptions,\n ): Promise<Commit[]> {\n const searchParams = new URLSearchParams();\n if (params?.page) searchParams.append(\"page\", String(params.page));\n if (params?.per_page) searchParams.append(\"per_page\", String(params.per_page));\n\n const queryString = searchParams.toString();\n const url = `/repos/${owner}/${repo}/pulls/${number}/commits${queryString ? `?${queryString}` : \"\"}`;\n\n return this.client.get<Commit[]>(url, options);\n }\n\n /**\n * Проверяет, был ли pull request влит в базовую ветку\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param number Номер pull request\n * @returns true если PR был влит, false если не был влит или не существует\n */\n async checkIfMerged(owner: string, repo: string, number: number, options?: RequestOptions): Promise<boolean> {\n try {\n await this.client.get<void>(`/repos/${owner}/${repo}/pulls/${number}/merge`, options);\n return true; // Статус 204 - PR был влит\n } catch (error) {\n if (error instanceof GitVerseApiError && error.status === 404) {\n return false; // Статус 404 - PR не был влит или не существует\n }\n throw error; // Пробрасываем другие ошибки (401, 403, 500 и т.д.)\n }\n }\n}\n"
6
6
  ],
7
- "mappings": "iCAeO,MAAM,CAAS,CACZ,OAMR,WAAW,CAAC,EAAwB,CAClC,KAAK,OAAS,EAUhB,MAAM,CAAC,EAAe,EAAc,EAAiC,EAAgD,CACnH,OAAO,KAAK,OAAO,KAAkB,UAAU,KAAS,UAAc,EAAQ,CAAO,EAUvF,GAAG,CAAC,EAAe,EAAc,EAAgB,EAAgD,CAC/F,OAAO,KAAK,OAAO,IAAiB,UAAU,KAAS,WAAc,IAAU,CAAO,EAUxF,IAAI,CAAC,EAAe,EAAc,EAAiC,EAAkD,CAGnH,IAAM,EAAS,IAAI,gBAAgB,OAAO,QAAQ,GAAU,CAAC,CAAC,CAAC,EAEzD,EAAO,IAAI,IAAI,UAAU,KAAS,UAJ3B,kBAI6C,EAI1D,OAFA,EAAK,OAAS,EAAO,SAAS,EAEvB,KAAK,OAAO,IAAmB,EAAK,KAAK,QARnC,mBAQiD,EAAE,EAAG,CAAO,EAW5E,MAAM,CACJ,EACA,EACA,EACA,EACA,EACsB,CACtB,OAAO,KAAK,OAAO,MAAmB,UAAU,KAAS,WAAc,IAAU,EAAQ,CAAO,EAUlG,QAAQ,CAAC,EAAe,EAAc,EAAgB,EAAsD,CAC1G,OAAO,KAAK,OAAO,IAAuB,UAAU,KAAS,WAAc,UAAgB,CAAO,EAUpG,YAAY,CAAC,EAAe,EAAc,EAAgB,EAAyC,CACjG,OAAO,KAAK,OAAO,IAAU,UAAU,KAAS,WAAc,kBAAwB,CAAC,EAAG,CAAO,EAUnG,UAAU,CAAC,EAAe,EAAc,EAAgB,EAA6C,CACnG,OAAO,KAAK,OAAO,IAAc,UAAU,KAAS,WAAc,YAAkB,CAAO,OAUvF,cAAa,CAAC,EAAe,EAAc,EAAgB,EAA4C,CAC3G,GAAI,CAEF,OADA,MAAM,KAAK,OAAO,IAAU,UAAU,KAAS,WAAc,UAAgB,CAAO,EAC7E,GACP,MAAO,EAAO,CACd,GAAI,aAAiB,GAAoB,EAAM,SAAW,IACxD,MAAO,GAET,MAAM,GAGZ",
8
- "debugId": "8277BC7BC30521EF64756E2164756E21",
7
+ "mappings": "iCAmBO,MAAM,CAAS,CACZ,OAMR,WAAW,CAAC,EAAwB,CAClC,KAAK,OAAS,EAUhB,MAAM,CAAC,EAAe,EAAc,EAAiC,EAAgD,CACnH,OAAO,KAAK,OAAO,KAAkB,UAAU,KAAS,UAAc,EAAQ,CAAO,EAUvF,GAAG,CAAC,EAAe,EAAc,EAAgB,EAAgD,CAC/F,OAAO,KAAK,OAAO,IAAiB,UAAU,KAAS,WAAc,IAAU,CAAO,EAUxF,IAAI,CAAC,EAAe,EAAc,EAAiC,EAAkD,CAGnH,IAAM,EAAS,IAAI,gBAAgB,OAAO,QAAQ,GAAU,CAAC,CAAC,CAAC,EAEzD,EAAO,IAAI,IAAI,UAAU,KAAS,UAJ3B,kBAI6C,EAI1D,OAFA,EAAK,OAAS,EAAO,SAAS,EAEvB,KAAK,OAAO,IAAmB,EAAK,KAAK,QARnC,mBAQiD,EAAE,EAAG,CAAO,EAW5E,MAAM,CACJ,EACA,EACA,EACA,EACA,EACsB,CACtB,OAAO,KAAK,OAAO,MAAmB,UAAU,KAAS,WAAc,IAAU,EAAQ,CAAO,EAMlG,QAAQ,CACN,EACA,EACA,EACA,EACA,EAC4B,CAC5B,IAAM,EAAe,IAAI,gBACzB,GAAI,GAAQ,KAAM,EAAa,OAAO,OAAQ,OAAO,EAAO,IAAI,CAAC,EACjE,GAAI,GAAQ,SAAU,EAAa,OAAO,WAAY,OAAO,EAAO,QAAQ,CAAC,EAE7E,IAAM,EAAc,EAAa,SAAS,EACpC,EAAM,UAAU,KAAS,WAAc,UAAe,EAAc,IAAI,IAAgB,KAE9F,OAAO,KAAK,OAAO,IAAuB,EAAK,CAAO,EAMxD,YAAY,CACV,EACA,EACA,EACA,EACA,EAC+B,CAC/B,OAAO,KAAK,OAAO,IACjB,UAAU,KAAS,WAAc,kBACjC,GAAU,CAAC,EACX,CACF,EAMF,UAAU,CACR,EACA,EACA,EACA,EACA,EACmB,CACnB,IAAM,EAAe,IAAI,gBACzB,GAAI,GAAQ,KAAM,EAAa,OAAO,OAAQ,OAAO,EAAO,IAAI,CAAC,EACjE,GAAI,GAAQ,SAAU,EAAa,OAAO,WAAY,OAAO,EAAO,QAAQ,CAAC,EAE7E,IAAM,EAAc,EAAa,SAAS,EACpC,EAAM,UAAU,KAAS,WAAc,YAAiB,EAAc,IAAI,IAAgB,KAEhG,OAAO,KAAK,OAAO,IAAc,EAAK,CAAO,OAUzC,cAAa,CAAC,EAAe,EAAc,EAAgB,EAA4C,CAC3G,GAAI,CAEF,OADA,MAAM,KAAK,OAAO,IAAU,UAAU,KAAS,WAAc,UAAgB,CAAO,EAC7E,GACP,MAAO,EAAO,CACd,GAAI,aAAiB,GAAoB,EAAM,SAAW,IACxD,MAAO,GAET,MAAM,GAGZ",
8
+ "debugId": "1BA37919BA587E8764756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -35,6 +35,15 @@ interface RequestOptions {
35
35
  signal?: AbortSignal;
36
36
  }
37
37
  /**
38
+ * Базовые параметры пагинации
39
+ */
40
+ interface PaginationParams {
41
+ /** Номер страницы (начиная с 1) */
42
+ page?: number;
43
+ /** Количество элементов на странице */
44
+ per_page?: number;
45
+ }
46
+ /**
38
47
  * Интерфейс пользователя
39
48
  */
40
49
  interface User2 {
@@ -82,6 +91,12 @@ interface User2 {
82
91
  public_repos?: number;
83
92
  /** Количество репозиториев, отмеченных звездой */
84
93
  stars_count?: number;
94
+ /** API-ссылка на подписки пользователя */
95
+ following_url?: string;
96
+ /** API-ссылка на избранные репозитории */
97
+ starred_url?: string;
98
+ /** API-ссылка на подписки на уведомления */
99
+ subscriptions_url?: string;
85
100
  /** Дата создания аккаунта */
86
101
  created_at: string;
87
102
  /** Дата последнего обновления аккаунта */
@@ -119,10 +134,21 @@ interface Release {
119
134
  tarball_url: string;
120
135
  /** Ссылка на архив zip */
121
136
  zipball_url: string;
137
+ /** URL для загрузки ассетов */
138
+ upload_url?: string;
122
139
  /** Список ассетов */
123
140
  assets: Asset[];
124
141
  }
125
142
  /**
143
+ * Параметры для получения списка релизов
144
+ */
145
+ interface ListReleasesParams extends PaginationParams {
146
+ /** Фильтр по черновикам */
147
+ draft?: boolean;
148
+ /** Фильтр по пре-релизам */
149
+ pre_release?: boolean;
150
+ }
151
+ /**
126
152
  * Параметры для создания релиза
127
153
  */
128
154
  interface CreateReleaseParams {
@@ -162,28 +188,18 @@ interface UpdateReleaseParams {
162
188
  interface Asset {
163
189
  /** Идентификатор ассета */
164
190
  id: number;
191
+ /** UUID ассета */
192
+ uuid: string;
165
193
  /** Название файла */
166
194
  name: string;
167
- /** Метка ассета */
168
- label?: string;
169
- /** Content-Type */
170
- content_type: string;
171
- /** Состояние ассета */
172
- state: "uploaded" | "open";
173
195
  /** Размер в байтах */
174
196
  size: number;
175
197
  /** Количество скачиваний */
176
198
  download_count: number;
177
199
  /** Дата создания */
178
200
  created_at: string;
179
- /** Дата обновления */
180
- updated_at: string;
181
- /** Загрузивший пользователь */
182
- uploader: User2;
183
201
  /** URL для скачивания */
184
202
  browser_download_url: string;
185
- /** API-ссылка */
186
- url: string;
187
203
  }
188
204
  /**
189
205
  * Параметры для загрузки ассета
@@ -191,8 +207,6 @@ interface Asset {
191
207
  interface UploadAssetParams {
192
208
  /** Название файла */
193
209
  name: string;
194
- /** Метка ассета */
195
- label?: string;
196
210
  /** Содержимое файла */
197
211
  data: ArrayBuffer | Blob;
198
212
  }
@@ -322,6 +336,16 @@ declare class GitVerseClient {
322
336
  * @returns Ответ от API
323
337
  */
324
338
  patch<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T>;
339
+ /**
340
+ * Выполняет загрузку файла через multipart/form-data
341
+ * @param path Путь к API-ресурсу
342
+ * @param fieldName Имя поля для файла
343
+ * @param file Файл для загрузки (Blob или ArrayBuffer)
344
+ * @param fileName Имя файла
345
+ * @param options Опции запроса (опционально)
346
+ * @returns Ответ от API
347
+ */
348
+ uploadFile<T>(path: string, fieldName: string, file: Blob | ArrayBuffer, fileName: string, options?: RequestOptions): Promise<T>;
325
349
  }
326
350
  /**
327
351
  * API для работы с релизами репозитория
@@ -337,9 +361,11 @@ declare class ReleasesApi {
337
361
  * Получает список релизов репозитория
338
362
  * @param owner Владелец репозитория
339
363
  * @param repo Название репозитория
364
+ * @param params Параметры пагинации и фильтрации
365
+ * @param options Опции запроса
340
366
  * @returns Список релизов
341
367
  */
342
- list(owner: string, repo: string, options?: RequestOptions): Promise<Release[]>;
368
+ list(owner: string, repo: string, params?: ListReleasesParams, options?: RequestOptions): Promise<Release[]>;
343
369
  /**
344
370
  * Создает новый релиз
345
371
  * @param owner Владелец репозитория
@@ -394,9 +420,11 @@ declare class ReleasesApi {
394
420
  * @param owner Владелец репозитория
395
421
  * @param repo Название репозитория
396
422
  * @param releaseId ID релиза
423
+ * @param params Параметры пагинации
424
+ * @param options Опции запроса
397
425
  * @returns Список ассетов
398
426
  */
399
- getAssets(owner: string, repo: string, releaseId: number, options?: RequestOptions): Promise<Asset[]>;
427
+ getAssets(owner: string, repo: string, releaseId: number, params?: PaginationParams, options?: RequestOptions): Promise<Asset[]>;
400
428
  /**
401
429
  * Загружает ассет к релизу
402
430
  * @param owner Владелец репозитория
@@ -1,4 +1,4 @@
1
- class q{client;constructor(b){this.client=b}list(b,f,h){return this.client.get(`/repos/${b}/${f}/releases`,h)}create(b,f,h,j){return this.client.post(`/repos/${b}/${f}/releases`,h,j)}getByTag(b,f,h,j){return this.client.get(`/repos/${b}/${f}/releases/tags/${h}`,j)}deleteByTag(b,f,h,j){return this.client.delete(`/repos/${b}/${f}/releases/tags/${h}`,void 0,j)}get(b,f,h,j){return this.client.get(`/repos/${b}/${f}/releases/${h}`,j)}delete(b,f,h,j){return this.client.delete(`/repos/${b}/${f}/releases/${h}`,void 0,j)}update(b,f,h,j,k){return this.client.patch(`/repos/${b}/${f}/releases/${h}`,j,k)}getAssets(b,f,h,j){return this.client.get(`/repos/${b}/${f}/releases/${h}/assets`,j)}uploadAsset(b,f,h,j,k){return this.client.post(`/repos/${b}/${f}/releases/${h}/assets`,j,k)}deleteAsset(b,f,h,j,k){return this.client.delete(`/repos/${b}/${f}/releases/${h}/assets/${j}`,void 0,k)}}export{q as ReleasesApi};
2
- export{q as i};
1
+ class B{client;constructor(j){this.client=j}list(j,k,b,f){let v=new URLSearchParams;if(b?.page)v.append("page",String(b.page));if(b?.per_page)v.append("per_page",String(b.per_page));if(b?.draft!==void 0)v.append("draft",String(b.draft));if(b?.pre_release!==void 0)v.append("pre_release",String(b.pre_release));let x=v.toString(),z=`/repos/${j}/${k}/releases${x?`?${x}`:""}`;return this.client.get(z,f)}create(j,k,b,f){return this.client.post(`/repos/${j}/${k}/releases`,b,f)}getByTag(j,k,b,f){return this.client.get(`/repos/${j}/${k}/releases/tags/${b}`,f)}deleteByTag(j,k,b,f){return this.client.delete(`/repos/${j}/${k}/releases/tags/${b}`,void 0,f)}get(j,k,b,f){return this.client.get(`/repos/${j}/${k}/releases/${b}`,f)}delete(j,k,b,f){return this.client.delete(`/repos/${j}/${k}/releases/${b}`,void 0,f)}update(j,k,b,f,v){return this.client.patch(`/repos/${j}/${k}/releases/${b}`,f,v)}getAssets(j,k,b,f,v){let x=new URLSearchParams;if(f?.page)x.append("page",String(f.page));if(f?.per_page)x.append("per_page",String(f.per_page));let z=x.toString(),A=`/repos/${j}/${k}/releases/${b}/assets${z?`?${z}`:""}`;return this.client.get(A,v)}uploadAsset(j,k,b,f,v){let x=`/repos/${j}/${k}/releases/${b}/assets?name=${encodeURIComponent(f.name)}`;return this.client.uploadFile(x,"attachment",f.data,f.name,v)}deleteAsset(j,k,b,f,v){return this.client.delete(`/repos/${j}/${k}/releases/${b}/assets/${f}`,void 0,v)}}export{B as ReleasesApi};
2
+ export{B as c};
3
3
 
4
- //# debugId=A3908BBF4C4E30C564756E2164756E21
4
+ //# debugId=C315A6A79E2DD48B64756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/api/releases.ts"],
4
4
  "sourcesContent": [
5
- "import type { GitVerseClient } from \"../client\";\nimport type {\n Asset,\n CreateReleaseParams,\n Release,\n RequestOptions,\n UpdateReleaseParams,\n UploadAssetParams,\n} from \"../types\";\n\n/**\n * API для работы с релизами репозитория\n */\nexport class ReleasesApi {\n private client: GitVerseClient;\n\n /**\n * Создает новый экземпляр API для работы с релизами\n * @param client GitVerse клиент\n */\n constructor(client: GitVerseClient) {\n this.client = client;\n }\n\n /**\n * Получает список релизов репозитория\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @returns Список релизов\n */\n list(owner: string, repo: string, options?: RequestOptions): Promise<Release[]> {\n return this.client.get<Release[]>(`/repos/${owner}/${repo}/releases`, options);\n }\n\n /**\n * Создает новый релиз\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param params Параметры создания релиза\n * @returns Созданный релиз\n */\n create(owner: string, repo: string, params: CreateReleaseParams, options?: RequestOptions): Promise<Release> {\n return this.client.post<Release>(`/repos/${owner}/${repo}/releases`, params, options);\n }\n\n /**\n * Получает релиз по тегу\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param tag Тег релиза\n * @returns Информация о релизе\n */\n getByTag(owner: string, repo: string, tag: string, options?: RequestOptions): Promise<Release> {\n return this.client.get<Release>(`/repos/${owner}/${repo}/releases/tags/${tag}`, options);\n }\n\n /**\n * Удаляет релиз по тегу\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param tag Тег релиза\n * @returns Результат операции\n */\n deleteByTag(owner: string, repo: string, tag: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`/repos/${owner}/${repo}/releases/tags/${tag}`, undefined, options);\n }\n\n /**\n * Получает релиз по ID\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @returns Информация о релизе\n */\n get(owner: string, repo: string, releaseId: number, options?: RequestOptions): Promise<Release> {\n return this.client.get<Release>(`/repos/${owner}/${repo}/releases/${releaseId}`, options);\n }\n\n /**\n * Удаляет релиз по ID\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @returns Результат операции\n */\n delete(owner: string, repo: string, releaseId: number, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`/repos/${owner}/${repo}/releases/${releaseId}`, undefined, options);\n }\n\n /**\n * Обновляет релиз\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @param params Параметры обновления релиза\n * @returns Обновлённый релиз\n */\n update(\n owner: string,\n repo: string,\n releaseId: number,\n params: UpdateReleaseParams,\n options?: RequestOptions,\n ): Promise<Release> {\n return this.client.patch<Release>(`/repos/${owner}/${repo}/releases/${releaseId}`, params, options);\n }\n\n /**\n * Получает список ассетов релиза\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @returns Список ассетов\n */\n getAssets(owner: string, repo: string, releaseId: number, options?: RequestOptions): Promise<Asset[]> {\n return this.client.get<Asset[]>(`/repos/${owner}/${repo}/releases/${releaseId}/assets`, options);\n }\n\n /**\n * Загружает ассет к релизу\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @param params Параметры загрузки ассета\n * @returns Загруженный ассет\n */\n uploadAsset(\n owner: string,\n repo: string,\n releaseId: number,\n params: UploadAssetParams,\n options?: RequestOptions,\n ): Promise<Asset> {\n return this.client.post<Asset>(`/repos/${owner}/${repo}/releases/${releaseId}/assets`, params, options);\n }\n\n /**\n * Удаляет ассет релиза\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @param assetId ID ассета\n * @returns Результат операции\n */\n deleteAsset(\n owner: string,\n repo: string,\n releaseId: number,\n assetId: number,\n options?: RequestOptions,\n ): Promise<void> {\n return this.client.delete<void>(\n `/repos/${owner}/${repo}/releases/${releaseId}/assets/${assetId}`,\n undefined,\n options,\n );\n }\n}\n"
5
+ "import type { GitVerseClient } from \"../client\";\nimport type {\n Asset,\n CreateReleaseParams,\n ListReleasesParams,\n PaginationParams,\n Release,\n RequestOptions,\n UpdateReleaseParams,\n UploadAssetParams,\n} from \"../types\";\n\n/**\n * API для работы с релизами репозитория\n */\nexport class ReleasesApi {\n private client: GitVerseClient;\n\n /**\n * Создает новый экземпляр API для работы с релизами\n * @param client GitVerse клиент\n */\n constructor(client: GitVerseClient) {\n this.client = client;\n }\n\n /**\n * Получает список релизов репозитория\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param params Параметры пагинации и фильтрации\n * @param options Опции запроса\n * @returns Список релизов\n */\n list(owner: string, repo: string, params?: ListReleasesParams, options?: RequestOptions): Promise<Release[]> {\n const searchParams = new URLSearchParams();\n if (params?.page) searchParams.append(\"page\", String(params.page));\n if (params?.per_page) searchParams.append(\"per_page\", String(params.per_page));\n if (params?.draft !== undefined) searchParams.append(\"draft\", String(params.draft));\n if (params?.pre_release !== undefined) searchParams.append(\"pre_release\", String(params.pre_release));\n\n const queryString = searchParams.toString();\n const url = `/repos/${owner}/${repo}/releases${queryString ? `?${queryString}` : \"\"}`;\n\n return this.client.get<Release[]>(url, options);\n }\n\n /**\n * Создает новый релиз\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param params Параметры создания релиза\n * @returns Созданный релиз\n */\n create(owner: string, repo: string, params: CreateReleaseParams, options?: RequestOptions): Promise<Release> {\n return this.client.post<Release>(`/repos/${owner}/${repo}/releases`, params, options);\n }\n\n /**\n * Получает релиз по тегу\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param tag Тег релиза\n * @returns Информация о релизе\n */\n getByTag(owner: string, repo: string, tag: string, options?: RequestOptions): Promise<Release> {\n return this.client.get<Release>(`/repos/${owner}/${repo}/releases/tags/${tag}`, options);\n }\n\n /**\n * Удаляет релиз по тегу\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param tag Тег релиза\n * @returns Результат операции\n */\n deleteByTag(owner: string, repo: string, tag: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`/repos/${owner}/${repo}/releases/tags/${tag}`, undefined, options);\n }\n\n /**\n * Получает релиз по ID\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @returns Информация о релизе\n */\n get(owner: string, repo: string, releaseId: number, options?: RequestOptions): Promise<Release> {\n return this.client.get<Release>(`/repos/${owner}/${repo}/releases/${releaseId}`, options);\n }\n\n /**\n * Удаляет релиз по ID\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @returns Результат операции\n */\n delete(owner: string, repo: string, releaseId: number, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`/repos/${owner}/${repo}/releases/${releaseId}`, undefined, options);\n }\n\n /**\n * Обновляет релиз\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @param params Параметры обновления релиза\n * @returns Обновлённый релиз\n */\n update(\n owner: string,\n repo: string,\n releaseId: number,\n params: UpdateReleaseParams,\n options?: RequestOptions,\n ): Promise<Release> {\n return this.client.patch<Release>(`/repos/${owner}/${repo}/releases/${releaseId}`, params, options);\n }\n\n /**\n * Получает список ассетов релиза\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @param params Параметры пагинации\n * @param options Опции запроса\n * @returns Список ассетов\n */\n getAssets(\n owner: string,\n repo: string,\n releaseId: number,\n params?: PaginationParams,\n options?: RequestOptions,\n ): Promise<Asset[]> {\n const searchParams = new URLSearchParams();\n if (params?.page) searchParams.append(\"page\", String(params.page));\n if (params?.per_page) searchParams.append(\"per_page\", String(params.per_page));\n\n const queryString = searchParams.toString();\n const url = `/repos/${owner}/${repo}/releases/${releaseId}/assets${queryString ? `?${queryString}` : \"\"}`;\n\n return this.client.get<Asset[]>(url, options);\n }\n\n /**\n * Загружает ассет к релизу\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @param params Параметры загрузки ассета\n * @returns Загруженный ассет\n */\n uploadAsset(\n owner: string,\n repo: string,\n releaseId: number,\n params: UploadAssetParams,\n options?: RequestOptions,\n ): Promise<Asset> {\n const url = `/repos/${owner}/${repo}/releases/${releaseId}/assets?name=${encodeURIComponent(params.name)}`;\n return this.client.uploadFile<Asset>(url, \"attachment\", params.data, params.name, options);\n }\n\n /**\n * Удаляет ассет релиза\n * @param owner Владелец репозитория\n * @param repo Название репозитория\n * @param releaseId ID релиза\n * @param assetId ID ассета\n * @returns Результат операции\n */\n deleteAsset(\n owner: string,\n repo: string,\n releaseId: number,\n assetId: number,\n options?: RequestOptions,\n ): Promise<void> {\n return this.client.delete<void>(\n `/repos/${owner}/${repo}/releases/${releaseId}/assets/${assetId}`,\n undefined,\n options,\n );\n }\n}\n"
6
6
  ],
7
- "mappings": "AAaO,MAAM,CAAY,CACf,OAMR,WAAW,CAAC,EAAwB,CAClC,KAAK,OAAS,EAShB,IAAI,CAAC,EAAe,EAAc,EAA8C,CAC9E,OAAO,KAAK,OAAO,IAAe,UAAU,KAAS,aAAiB,CAAO,EAU/E,MAAM,CAAC,EAAe,EAAc,EAA6B,EAA4C,CAC3G,OAAO,KAAK,OAAO,KAAc,UAAU,KAAS,aAAiB,EAAQ,CAAO,EAUtF,QAAQ,CAAC,EAAe,EAAc,EAAa,EAA4C,CAC7F,OAAO,KAAK,OAAO,IAAa,UAAU,KAAS,mBAAsB,IAAO,CAAO,EAUzF,WAAW,CAAC,EAAe,EAAc,EAAa,EAAyC,CAC7F,OAAO,KAAK,OAAO,OAAa,UAAU,KAAS,mBAAsB,IAAO,OAAW,CAAO,EAUpG,GAAG,CAAC,EAAe,EAAc,EAAmB,EAA4C,CAC9F,OAAO,KAAK,OAAO,IAAa,UAAU,KAAS,cAAiB,IAAa,CAAO,EAU1F,MAAM,CAAC,EAAe,EAAc,EAAmB,EAAyC,CAC9F,OAAO,KAAK,OAAO,OAAa,UAAU,KAAS,cAAiB,IAAa,OAAW,CAAO,EAWrG,MAAM,CACJ,EACA,EACA,EACA,EACA,EACkB,CAClB,OAAO,KAAK,OAAO,MAAe,UAAU,KAAS,cAAiB,IAAa,EAAQ,CAAO,EAUpG,SAAS,CAAC,EAAe,EAAc,EAAmB,EAA4C,CACpG,OAAO,KAAK,OAAO,IAAa,UAAU,KAAS,cAAiB,WAAoB,CAAO,EAWjG,WAAW,CACT,EACA,EACA,EACA,EACA,EACgB,CAChB,OAAO,KAAK,OAAO,KAAY,UAAU,KAAS,cAAiB,WAAoB,EAAQ,CAAO,EAWxG,WAAW,CACT,EACA,EACA,EACA,EACA,EACe,CACf,OAAO,KAAK,OAAO,OACjB,UAAU,KAAS,cAAiB,YAAoB,IACxD,OACA,CACF,EAEJ",
8
- "debugId": "A3908BBF4C4E30C564756E2164756E21",
7
+ "mappings": "AAeO,MAAM,CAAY,CACf,OAMR,WAAW,CAAC,EAAwB,CAClC,KAAK,OAAS,EAWhB,IAAI,CAAC,EAAe,EAAc,EAA6B,EAA8C,CAC3G,IAAM,EAAe,IAAI,gBACzB,GAAI,GAAQ,KAAM,EAAa,OAAO,OAAQ,OAAO,EAAO,IAAI,CAAC,EACjE,GAAI,GAAQ,SAAU,EAAa,OAAO,WAAY,OAAO,EAAO,QAAQ,CAAC,EAC7E,GAAI,GAAQ,QAAU,OAAW,EAAa,OAAO,QAAS,OAAO,EAAO,KAAK,CAAC,EAClF,GAAI,GAAQ,cAAgB,OAAW,EAAa,OAAO,cAAe,OAAO,EAAO,WAAW,CAAC,EAEpG,IAAM,EAAc,EAAa,SAAS,EACpC,EAAM,UAAU,KAAS,aAAgB,EAAc,IAAI,IAAgB,KAEjF,OAAO,KAAK,OAAO,IAAe,EAAK,CAAO,EAUhD,MAAM,CAAC,EAAe,EAAc,EAA6B,EAA4C,CAC3G,OAAO,KAAK,OAAO,KAAc,UAAU,KAAS,aAAiB,EAAQ,CAAO,EAUtF,QAAQ,CAAC,EAAe,EAAc,EAAa,EAA4C,CAC7F,OAAO,KAAK,OAAO,IAAa,UAAU,KAAS,mBAAsB,IAAO,CAAO,EAUzF,WAAW,CAAC,EAAe,EAAc,EAAa,EAAyC,CAC7F,OAAO,KAAK,OAAO,OAAa,UAAU,KAAS,mBAAsB,IAAO,OAAW,CAAO,EAUpG,GAAG,CAAC,EAAe,EAAc,EAAmB,EAA4C,CAC9F,OAAO,KAAK,OAAO,IAAa,UAAU,KAAS,cAAiB,IAAa,CAAO,EAU1F,MAAM,CAAC,EAAe,EAAc,EAAmB,EAAyC,CAC9F,OAAO,KAAK,OAAO,OAAa,UAAU,KAAS,cAAiB,IAAa,OAAW,CAAO,EAWrG,MAAM,CACJ,EACA,EACA,EACA,EACA,EACkB,CAClB,OAAO,KAAK,OAAO,MAAe,UAAU,KAAS,cAAiB,IAAa,EAAQ,CAAO,EAYpG,SAAS,CACP,EACA,EACA,EACA,EACA,EACkB,CAClB,IAAM,EAAe,IAAI,gBACzB,GAAI,GAAQ,KAAM,EAAa,OAAO,OAAQ,OAAO,EAAO,IAAI,CAAC,EACjE,GAAI,GAAQ,SAAU,EAAa,OAAO,WAAY,OAAO,EAAO,QAAQ,CAAC,EAE7E,IAAM,EAAc,EAAa,SAAS,EACpC,EAAM,UAAU,KAAS,cAAiB,WAAmB,EAAc,IAAI,IAAgB,KAErG,OAAO,KAAK,OAAO,IAAa,EAAK,CAAO,EAW9C,WAAW,CACT,EACA,EACA,EACA,EACA,EACgB,CAChB,IAAM,EAAM,UAAU,KAAS,cAAiB,iBAAyB,mBAAmB,EAAO,IAAI,IACvG,OAAO,KAAK,OAAO,WAAkB,EAAK,aAAc,EAAO,KAAM,EAAO,KAAM,CAAO,EAW3F,WAAW,CACT,EACA,EACA,EACA,EACA,EACe,CACf,OAAO,KAAK,OAAO,OACjB,UAAU,KAAS,cAAiB,YAAoB,IACxD,OACA,CACF,EAEJ",
8
+ "debugId": "C315A6A79E2DD48B64756E2164756E21",
9
9
  "names": []
10
10
  }