rustore 1.0.2 → 1.0.4

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 (46) hide show
  1. package/README.md +125 -12
  2. package/dist/api/apps.d.ts +141 -13
  3. package/dist/api/apps.d.ts.map +1 -1
  4. package/dist/api/apps.js +448 -30
  5. package/dist/api/apps.js.map +1 -1
  6. package/dist/api/catalog.d.ts +25 -0
  7. package/dist/api/catalog.d.ts.map +1 -1
  8. package/dist/api/catalog.js +41 -0
  9. package/dist/api/catalog.js.map +1 -1
  10. package/dist/api/client.d.ts.map +1 -1
  11. package/dist/api/client.js +36 -6
  12. package/dist/api/client.js.map +1 -1
  13. package/dist/api/payments-app.d.ts +40 -0
  14. package/dist/api/payments-app.d.ts.map +1 -1
  15. package/dist/api/payments-app.js +70 -0
  16. package/dist/api/payments-app.js.map +1 -1
  17. package/dist/api/payments.d.ts +37 -0
  18. package/dist/api/payments.d.ts.map +1 -1
  19. package/dist/api/payments.js +56 -0
  20. package/dist/api/payments.js.map +1 -1
  21. package/dist/bin.js +558 -11
  22. package/dist/bin.js.map +1 -1
  23. package/dist/commands/apps.d.ts +93 -3
  24. package/dist/commands/apps.d.ts.map +1 -1
  25. package/dist/commands/apps.js +442 -15
  26. package/dist/commands/apps.js.map +1 -1
  27. package/dist/commands/catalog.d.ts +31 -0
  28. package/dist/commands/catalog.d.ts.map +1 -0
  29. package/dist/commands/catalog.js +117 -0
  30. package/dist/commands/catalog.js.map +1 -0
  31. package/dist/commands/feedback.js +2 -2
  32. package/dist/commands/feedback.js.map +1 -1
  33. package/dist/commands/payments-app.d.ts +50 -0
  34. package/dist/commands/payments-app.d.ts.map +1 -0
  35. package/dist/commands/payments-app.js +197 -0
  36. package/dist/commands/payments-app.js.map +1 -0
  37. package/dist/commands/payments.d.ts +42 -0
  38. package/dist/commands/payments.d.ts.map +1 -0
  39. package/dist/commands/payments.js +152 -0
  40. package/dist/commands/payments.js.map +1 -0
  41. package/dist/config.d.ts.map +1 -1
  42. package/dist/config.js +9 -1
  43. package/dist/config.js.map +1 -1
  44. package/dist/types.d.ts +573 -5
  45. package/dist/types.d.ts.map +1 -1
  46. package/package.json +5 -3
package/dist/api/apps.js CHANGED
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app
6
6
  */
7
- import { readFileSync } from 'node:fs';
7
+ import { readFileSync, existsSync, statSync } from 'node:fs';
8
8
  import { RustoreApiClient } from './client.js';
9
9
  import { getToken } from './auth.js';
10
10
  /**
@@ -70,71 +70,489 @@ export class AppsApi extends RustoreApiClient {
70
70
  }
71
71
  /**
72
72
  * Создать черновую версию приложения
73
- * POST /public/v1/application/{appId}/draft-version
73
+ * POST /public/v1/application/{packageName}/version
74
74
  *
75
- * Метод позволяет создать черновую версию приложения для последующей загрузки APK/AAB.
75
+ * Метод позволяет создать черновик версии и заполнить его основной информацией.
76
+ * Обязательный параметр: minAndroidVersion (от 1 до 16).
76
77
  *
77
- * @param appId - ID приложения
78
- * @param data - Данные для создания черновой версии (versionName, versionCode)
78
+ * @param packageName - Наименование пакета приложения (например, com.example.app)
79
+ * @param data - Данные для создания черновой версии
79
80
  * @returns Информация о созданной черновой версии
80
81
  *
81
82
  * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/create-draft-version
82
83
  */
83
- async createDraftVersion(appId, data) {
84
- const endpoint = `/public/v1/application/${appId}/draft-version`;
84
+ async createDraftVersion(packageName, data) {
85
+ const endpoint = `/public/v1/application/${packageName}/version`;
85
86
  return this.post(endpoint, data);
86
87
  }
87
88
  /**
88
- * Загрузить APK/AAB файл для версии приложения
89
- * POST /public/v1/application/{appId}/version/{versionId}/apk-file
89
+ * Загрузить APK файл для версии приложения
90
+ * POST /public/v1/application/{packageName}/version/{versionId}/apk
90
91
  *
91
- * Метод позволяет загрузить APK или AAB файл для черновой версии приложения.
92
+ * Метод позволяет загрузить APK файл для версии приложения.
93
+ * Согласно документации API, endpoint использует packageName, а не appId.
92
94
  *
93
- * @param appId - ID приложения
95
+ * @param packageName - Имя пакета приложения (например, com.example.app)
94
96
  * @param versionId - ID версии (полученный из createDraftVersion)
95
- * @param filePath - Путь к APK/AAB файлу
97
+ * @param filePath - Путь к APK файлу
98
+ * @param options - Параметры загрузки (isMainApk - обязательный, servicesType - опциональный)
96
99
  * @returns Информация о загруженном файле
97
100
  *
98
- * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/apk-file-upload
101
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/apk-file-upload/file-upload-apk
99
102
  */
100
- async uploadApkFile(appId, versionId, filePath) {
101
- const endpoint = `/public/v1/application/${appId}/version/${versionId}/apk-file`;
103
+ async uploadApkFile(packageName, versionId, filePath, options) {
104
+ // Формируем query параметры
105
+ const queryParams = new URLSearchParams();
106
+ queryParams.append('isMainApk', String(options.isMainApk));
107
+ if (options.servicesType) {
108
+ queryParams.append('servicesType', options.servicesType);
109
+ }
110
+ else {
111
+ queryParams.append('servicesType', 'Unknown');
112
+ }
113
+ const endpoint = `/public/v1/application/${packageName}/version/${versionId}/apk?${queryParams.toString()}`;
102
114
  // Читаем файл
103
115
  const fileBuffer = readFileSync(filePath);
104
116
  const fileName = filePath.split('/').pop() || 'app.apk';
105
117
  // Создаём FormData для multipart/form-data запроса
118
+ // В Node.js 18+ FormData поддерживается нативно
106
119
  const formData = new FormData();
107
- const blob = new Blob([fileBuffer], {
120
+ // Используем File вместо Blob для лучшей совместимости
121
+ const file = new File([fileBuffer], fileName, {
108
122
  type: 'application/vnd.android.package-archive',
109
123
  });
110
- formData.append('file', blob, fileName);
124
+ formData.append('file', file);
111
125
  // Выполняем запрос с FormData
112
126
  const token = await getToken();
113
127
  const url = `${this.baseUrl}${endpoint}`;
114
128
  if (process.env.DEBUG) {
115
- console.error(`[DEBUG] API Request: ${url} (uploading ${fileName})`);
116
- }
117
- const response = await fetch(url, {
118
- method: 'POST',
119
- headers: {
120
- 'Public-Token': token,
121
- // Не устанавливаем Content-Type - браузер установит автоматически с boundary
122
- },
123
- body: formData,
129
+ const fileSizeMB = (fileBuffer.length / (1024 * 1024)).toFixed(2);
130
+ console.error(`[DEBUG] API Request: ${url} (uploading ${fileName}, size: ${fileSizeMB} MB)`);
131
+ }
132
+ // Проверяем, что файл существует и доступен для чтения
133
+ if (!existsSync(filePath)) {
134
+ throw new Error(`Файл не найден: ${filePath}`);
135
+ }
136
+ const fileStats = statSync(filePath);
137
+ if (process.env.DEBUG) {
138
+ console.error(`[DEBUG] File size: ${(fileStats.size / (1024 * 1024)).toFixed(2)} MB`);
139
+ console.error(`[DEBUG] File readable: ${fileStats.mode & 0o444 ? 'yes' : 'no'}`);
140
+ }
141
+ // Для больших файлов может потребоваться больше времени
142
+ // Используем AbortController с увеличенным таймаутом (30 минут для файлов до 5 ГБ)
143
+ const controller = new AbortController();
144
+ const timeoutId = setTimeout(() => controller.abort(), 30 * 60 * 1000); // 30 минут
145
+ let response;
146
+ try {
147
+ if (process.env.DEBUG) {
148
+ console.error(`[DEBUG] Starting fetch request to: ${url}`);
149
+ console.error(`[DEBUG] FormData entries count: ${formData instanceof FormData ? 'N/A (FormData)' : '0'}`);
150
+ }
151
+ response = await fetch(url, {
152
+ method: 'POST',
153
+ headers: {
154
+ 'Public-Token': token,
155
+ // Не устанавливаем Content-Type - fetch установит автоматически с boundary
156
+ },
157
+ body: formData,
158
+ signal: controller.signal,
159
+ });
160
+ clearTimeout(timeoutId);
161
+ }
162
+ catch (fetchError) {
163
+ clearTimeout(timeoutId);
164
+ if (process.env.DEBUG) {
165
+ console.error(`[DEBUG] Fetch error details:`, {
166
+ name: fetchError instanceof Error ? fetchError.name : 'Unknown',
167
+ message: fetchError instanceof Error ? fetchError.message : String(fetchError),
168
+ stack: fetchError instanceof Error ? fetchError.stack : undefined,
169
+ cause: fetchError instanceof Error ? fetchError.cause : undefined,
170
+ });
171
+ }
172
+ if (fetchError instanceof Error && fetchError.name === 'AbortError') {
173
+ throw new Error('Таймаут загрузки файла. Файл слишком большой или соединение прервано.');
174
+ }
175
+ // Более детальная информация об ошибке
176
+ const errorMessage = fetchError instanceof Error ? fetchError.message : String(fetchError);
177
+ const errorName = fetchError instanceof Error ? fetchError.name : 'UnknownError';
178
+ // Проверяем, является ли это сетевой ошибкой
179
+ if (errorName === 'TypeError' && errorMessage.includes('fetch failed')) {
180
+ throw new Error(`Ошибка сетевого соединения при загрузке файла.\n` +
181
+ `Детали: ${errorMessage}\n` +
182
+ `URL: ${url}\n` +
183
+ `Размер файла: ${(fileStats.size / (1024 * 1024)).toFixed(2)} MB\n` +
184
+ `Проверьте:\n` +
185
+ ` 1. Интернет-соединение\n` +
186
+ ` 2. Доступность API (https://public-api.rustore.ru)\n` +
187
+ ` 3. Размер файла (максимальный размер может быть ограничен)\n` +
188
+ ` 4. Токен авторизации (выполните 'rustore login' если необходимо)`);
189
+ }
190
+ throw new Error(`Ошибка загрузки файла (${errorName}): ${errorMessage}`);
191
+ }
192
+ // Получаем текст ответа для логирования и парсинга
193
+ const responseText = await response.text();
194
+ // Debug: логируем сырой ответ API
195
+ if (process.env.DEBUG) {
196
+ console.error(`[DEBUG] API Response Status: ${response.status} ${response.statusText}`);
197
+ console.error(`[DEBUG] API Response Headers:`, Object.fromEntries(response.headers.entries()));
198
+ console.error(`[DEBUG] API Response Body:`, responseText);
199
+ }
200
+ if (!response.ok) {
201
+ let errorData;
202
+ try {
203
+ errorData = JSON.parse(responseText);
204
+ }
205
+ catch {
206
+ // Игнорируем ошибку парсинга
207
+ }
208
+ const errorMessage = errorData?.message ?? responseText;
209
+ throw new Error(`Ошибка API (${response.status}): ${errorMessage}`);
210
+ }
211
+ // Парсим JSON ответ
212
+ try {
213
+ return JSON.parse(responseText);
214
+ }
215
+ catch (parseError) {
216
+ if (process.env.DEBUG) {
217
+ console.error(`[DEBUG] Failed to parse JSON response:`, parseError);
218
+ }
219
+ throw new Error(`Ошибка парсинга ответа API: ${responseText}`);
220
+ }
221
+ }
222
+ /**
223
+ * Отправить черновую версию приложения на модерацию
224
+ * POST /public/v1/application/{packageName}/version/{versionId}/commit
225
+ *
226
+ * Метод для отправки на модерацию черновика версии приложения.
227
+ * Перед отправкой убедитесь, что загружен хотя бы один основной APK-файл.
228
+ *
229
+ * @param packageName - Имя пакета приложения (например, com.example.app)
230
+ * @param versionId - ID версии (полученный из createDraftVersion)
231
+ * @param options - Параметры отправки (priorityUpdate - опциональный, от 0 до 5)
232
+ * @returns Информация об отправке на модерацию
233
+ *
234
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/send-draft-app-for-moderation
235
+ */
236
+ async sendForModeration(packageName, versionId, options) {
237
+ const queryParams = new URLSearchParams();
238
+ if (options?.priorityUpdate !== undefined) {
239
+ queryParams.append('priorityUpdate', String(options.priorityUpdate));
240
+ }
241
+ const queryString = queryParams.toString();
242
+ const endpoint = queryString
243
+ ? `/public/v1/application/${packageName}/version/${versionId}/commit?${queryString}`
244
+ : `/public/v1/application/${packageName}/version/${versionId}/commit`;
245
+ return this.post(endpoint);
246
+ }
247
+ /**
248
+ * Получить информацию о версии приложения
249
+ * GET /public/v1/application/{packageName}/version/{versionId}
250
+ *
251
+ * Метод позволяет получить детальную информацию о конкретной версии приложения.
252
+ *
253
+ * @param packageName - Имя пакета приложения (например, com.example.app)
254
+ * @param versionId - ID версии
255
+ * @returns Информация о версии приложения
256
+ *
257
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/get-version-info
258
+ */
259
+ async getVersionInfo(packageName, versionId) {
260
+ const endpoint = `/public/v1/application/${packageName}/version/${versionId}`;
261
+ return this.get(endpoint);
262
+ }
263
+ /**
264
+ * Получить список версий приложения
265
+ * GET /public/v1/application/{packageName}/version
266
+ *
267
+ * Метод позволяет получить список всех версий приложения с поддержкой пагинации.
268
+ *
269
+ * @param packageName - Имя пакета приложения (например, com.example.app)
270
+ * @param options - Параметры запроса (continuationToken, pageSize и др.)
271
+ * @returns Список версий приложения
272
+ *
273
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/get-version-list
274
+ */
275
+ async getVersionList(packageName, options) {
276
+ const endpoint = `/public/v1/application/${packageName}/version`;
277
+ // Формируем query параметры
278
+ const queryParams = new URLSearchParams();
279
+ if (options) {
280
+ Object.entries(options).forEach(([key, value]) => {
281
+ if (value !== undefined && value !== null && value !== '') {
282
+ queryParams.append(key, String(value));
283
+ }
284
+ });
285
+ }
286
+ const queryString = queryParams.toString();
287
+ const finalEndpoint = queryString ? `${endpoint}?${queryString}` : endpoint;
288
+ return this.get(finalEndpoint);
289
+ }
290
+ /**
291
+ * Получить список тегов приложений
292
+ * GET /public/v1/application/tag
293
+ *
294
+ * Метод позволяет получить список доступных тегов для приложений.
295
+ * Теги используются при создании черновой версии (seoTagIds).
296
+ *
297
+ * @param options - Параметры запроса (continuationToken, pageSize и др.)
298
+ * @returns Список тегов приложений
299
+ *
300
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/get-app-tag-list
301
+ */
302
+ async getAppTagList(options) {
303
+ const endpoint = '/public/v1/application/tag';
304
+ // Формируем query параметры
305
+ const queryParams = new URLSearchParams();
306
+ if (options) {
307
+ Object.entries(options).forEach(([key, value]) => {
308
+ if (value !== undefined && value !== null && value !== '') {
309
+ queryParams.append(key, String(value));
310
+ }
311
+ });
312
+ }
313
+ const queryString = queryParams.toString();
314
+ const finalEndpoint = queryString ? `${endpoint}?${queryString}` : endpoint;
315
+ return this.get(finalEndpoint);
316
+ }
317
+ /**
318
+ * Загрузить AAB файл для версии приложения
319
+ * POST /public/v1/application/{packageName}/version/{versionId}/aab
320
+ *
321
+ * Метод позволяет загрузить AAB (Android App Bundle) файл для версии приложения.
322
+ * Аналогичен uploadApkFile, но для AAB формата.
323
+ *
324
+ * @param packageName - Имя пакета приложения (например, com.example.app)
325
+ * @param versionId - ID версии (полученный из createDraftVersion)
326
+ * @param filePath - Путь к AAB файлу
327
+ * @param options - Параметры загрузки (isMainApk - обязательный, servicesType - опциональный)
328
+ * @returns Информация о загруженном файле
329
+ *
330
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/apk-file-upload/file-upload-aab
331
+ */
332
+ async uploadAabFile(packageName, versionId, filePath, options) {
333
+ // Формируем query параметры
334
+ const queryParams = new URLSearchParams();
335
+ queryParams.append('isMainApk', String(options.isMainApk));
336
+ if (options.servicesType) {
337
+ queryParams.append('servicesType', options.servicesType);
338
+ }
339
+ else {
340
+ queryParams.append('servicesType', 'Unknown');
341
+ }
342
+ const endpoint = `/public/v1/application/${packageName}/version/${versionId}/aab?${queryParams.toString()}`;
343
+ // Читаем файл
344
+ const fileBuffer = readFileSync(filePath);
345
+ const fileName = filePath.split('/').pop() || 'app.aab';
346
+ // Создаём FormData для multipart/form-data запроса
347
+ const formData = new FormData();
348
+ const file = new File([fileBuffer], fileName, {
349
+ type: 'application/octet-stream', // AAB файлы обычно используют octet-stream
124
350
  });
351
+ formData.append('file', file);
352
+ // Выполняем запрос с FormData
353
+ const token = await getToken();
354
+ const url = `${this.baseUrl}${endpoint}`;
355
+ if (process.env.DEBUG) {
356
+ const fileSizeMB = (fileBuffer.length / (1024 * 1024)).toFixed(2);
357
+ console.error(`[DEBUG] API Request: ${url} (uploading ${fileName}, size: ${fileSizeMB} MB)`);
358
+ }
359
+ // Проверяем, что файл существует и доступен для чтения
360
+ if (!existsSync(filePath)) {
361
+ throw new Error(`Файл не найден: ${filePath}`);
362
+ }
363
+ const fileStats = statSync(filePath);
364
+ if (process.env.DEBUG) {
365
+ console.error(`[DEBUG] File size: ${(fileStats.size / (1024 * 1024)).toFixed(2)} MB`);
366
+ }
367
+ // Для больших файлов может потребоваться больше времени
368
+ const controller = new AbortController();
369
+ const timeoutId = setTimeout(() => controller.abort(), 30 * 60 * 1000); // 30 минут
370
+ let response;
371
+ try {
372
+ response = await fetch(url, {
373
+ method: 'POST',
374
+ headers: {
375
+ 'Public-Token': token,
376
+ },
377
+ body: formData,
378
+ signal: controller.signal,
379
+ });
380
+ clearTimeout(timeoutId);
381
+ }
382
+ catch (fetchError) {
383
+ clearTimeout(timeoutId);
384
+ if (fetchError instanceof Error && fetchError.name === 'AbortError') {
385
+ throw new Error('Таймаут загрузки файла. Файл слишком большой или соединение прервано.');
386
+ }
387
+ const errorMessage = fetchError instanceof Error ? fetchError.message : String(fetchError);
388
+ const errorName = fetchError instanceof Error ? fetchError.name : 'UnknownError';
389
+ if (errorName === 'TypeError' && errorMessage.includes('fetch failed')) {
390
+ throw new Error(`Ошибка сетевого соединения при загрузке файла.\n` +
391
+ `Детали: ${errorMessage}\n` +
392
+ `URL: ${url}\n` +
393
+ `Размер файла: ${(fileStats.size / (1024 * 1024)).toFixed(2)} MB`);
394
+ }
395
+ throw new Error(`Ошибка загрузки файла (${errorName}): ${errorMessage}`);
396
+ }
397
+ const responseText = await response.text();
398
+ if (process.env.DEBUG) {
399
+ console.error(`[DEBUG] API Response Status: ${response.status} ${response.statusText}`);
400
+ console.error(`[DEBUG] API Response Body:`, responseText);
401
+ }
125
402
  if (!response.ok) {
126
- const errorText = await response.text();
127
403
  let errorData;
128
404
  try {
129
- errorData = JSON.parse(errorText);
405
+ errorData = JSON.parse(responseText);
130
406
  }
131
407
  catch {
132
408
  // Игнорируем ошибку парсинга
133
409
  }
134
- const errorMessage = errorData?.message ?? errorText;
410
+ const errorMessage = errorData?.message ?? responseText;
135
411
  throw new Error(`Ошибка API (${response.status}): ${errorMessage}`);
136
412
  }
137
- return (await response.json());
413
+ try {
414
+ return JSON.parse(responseText);
415
+ }
416
+ catch (parseError) {
417
+ if (process.env.DEBUG) {
418
+ console.error(`[DEBUG] Failed to parse JSON response:`, parseError);
419
+ }
420
+ throw new Error(`Ошибка парсинга ответа API: ${responseText}`);
421
+ }
422
+ }
423
+ /**
424
+ * Обновить черновую версию приложения
425
+ * PUT /public/v1/application/{packageName}/version/{versionId}
426
+ *
427
+ * Метод позволяет обновить информацию о черновой версии приложения.
428
+ *
429
+ * @param packageName - Имя пакета приложения (например, com.example.app)
430
+ * @param versionId - ID версии
431
+ * @param data - Данные для обновления черновой версии
432
+ * @returns Информация об обновлённой черновой версии
433
+ *
434
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/update-draft-version
435
+ */
436
+ async updateDraftVersion(packageName, versionId, data) {
437
+ const endpoint = `/public/v1/application/${packageName}/version/${versionId}`;
438
+ return this.put(endpoint, data);
439
+ }
440
+ /**
441
+ * Удалить черновую версию приложения
442
+ * DELETE /public/v1/application/{packageName}/version/{versionId}
443
+ *
444
+ * Метод позволяет удалить черновую версию приложения.
445
+ *
446
+ * @param packageName - Имя пакета приложения (например, com.example.app)
447
+ * @param versionId - ID версии
448
+ * @returns Результат удаления
449
+ *
450
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/delete-draft-version
451
+ */
452
+ async deleteDraftVersion(packageName, versionId) {
453
+ const endpoint = `/public/v1/application/${packageName}/version/${versionId}`;
454
+ return this.delete(endpoint);
455
+ }
456
+ /**
457
+ * Загрузить скриншоты для версии приложения
458
+ * POST /public/v1/application/{packageName}/version/{versionId}/screens
459
+ *
460
+ * Метод позволяет загрузить скриншоты приложения для разных типов устройств.
461
+ *
462
+ * @param packageName - Имя пакета приложения (например, com.example.app)
463
+ * @param versionId - ID версии
464
+ * @param filePaths - Массив путей к файлам скриншотов
465
+ * @param options - Параметры загрузки (deviceType - обязательный)
466
+ * @returns Информация о загруженных скриншотах
467
+ *
468
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/apk-screens-upload
469
+ */
470
+ async uploadScreens(packageName, versionId, filePaths, options) {
471
+ const queryParams = new URLSearchParams();
472
+ queryParams.append('deviceType', options.deviceType);
473
+ const endpoint = `/public/v1/application/${packageName}/version/${versionId}/screens?${queryParams.toString()}`;
474
+ // Создаём FormData для multipart/form-data запроса
475
+ const formData = new FormData();
476
+ // Добавляем все файлы скриншотов
477
+ filePaths.forEach((filePath, index) => {
478
+ if (!existsSync(filePath)) {
479
+ throw new Error(`Файл не найден: ${filePath}`);
480
+ }
481
+ const fileBuffer = readFileSync(filePath);
482
+ const fileName = filePath.split('/').pop() || `screen_${index}.png`;
483
+ const file = new File([fileBuffer], fileName, {
484
+ type: 'image/png', // Предполагаем PNG, но можно определить по расширению
485
+ });
486
+ formData.append('files', file);
487
+ });
488
+ const token = await getToken();
489
+ const url = `${this.baseUrl}${endpoint}`;
490
+ if (process.env.DEBUG) {
491
+ console.error(`[DEBUG] API Request: ${url} (uploading ${filePaths.length} screens, deviceType: ${options.deviceType})`);
492
+ }
493
+ const controller = new AbortController();
494
+ const timeoutId = setTimeout(() => controller.abort(), 10 * 60 * 1000); // 10 минут
495
+ let response;
496
+ try {
497
+ response = await fetch(url, {
498
+ method: 'POST',
499
+ headers: {
500
+ 'Public-Token': token,
501
+ },
502
+ body: formData,
503
+ signal: controller.signal,
504
+ });
505
+ clearTimeout(timeoutId);
506
+ }
507
+ catch (fetchError) {
508
+ clearTimeout(timeoutId);
509
+ if (fetchError instanceof Error && fetchError.name === 'AbortError') {
510
+ throw new Error('Таймаут загрузки скриншотов.');
511
+ }
512
+ const errorMessage = fetchError instanceof Error ? fetchError.message : String(fetchError);
513
+ throw new Error(`Ошибка загрузки скриншотов: ${errorMessage}`);
514
+ }
515
+ const responseText = await response.text();
516
+ if (process.env.DEBUG) {
517
+ console.error(`[DEBUG] API Response Status: ${response.status} ${response.statusText}`);
518
+ console.error(`[DEBUG] API Response Body:`, responseText);
519
+ }
520
+ if (!response.ok) {
521
+ let errorData;
522
+ try {
523
+ errorData = JSON.parse(responseText);
524
+ }
525
+ catch {
526
+ // Игнорируем ошибку парсинга
527
+ }
528
+ const errorMessage = errorData?.message ?? responseText;
529
+ throw new Error(`Ошибка API (${response.status}): ${errorMessage}`);
530
+ }
531
+ try {
532
+ return JSON.parse(responseText);
533
+ }
534
+ catch (parseError) {
535
+ if (process.env.DEBUG) {
536
+ console.error(`[DEBUG] Failed to parse JSON response:`, parseError);
537
+ }
538
+ throw new Error(`Ошибка парсинга ответа API: ${responseText}`);
539
+ }
540
+ }
541
+ /**
542
+ * Получить статус версии приложения
543
+ * GET /public/v1/application/{packageName}/version/{versionId}/status
544
+ *
545
+ * Метод позволяет получить статус модерации версии приложения.
546
+ *
547
+ * @param packageName - Имя пакета приложения (например, com.example.app)
548
+ * @param versionId - ID версии
549
+ * @returns Статус версии приложения
550
+ *
551
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-upload-publication-app/get-version-status
552
+ */
553
+ async getVersionStatus(packageName, versionId) {
554
+ const endpoint = `/public/v1/application/${packageName}/version/${versionId}/status`;
555
+ return this.get(endpoint);
138
556
  }
139
557
  }
140
558
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/api/apps.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,SAAS,CAAC;AACrC,OAAO,EAAC,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAC;AAUnC;;GAEG;AACH,MAAM,OAAO,OAAQ,SAAQ,gBAAgB;IAC3C;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,UAAU,CAAC,OAA2B;QAC1C,sEAAsE;QACtE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;QACjE,MAAM,YAAY,GAAG,cAAc,IAAI,wBAAwB,CAAC;QAEhE,4BAA4B;QAC5B,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;oBAC1D,wDAAwD;oBACxD,mDAAmD;oBACnD,qEAAqE;oBACrE,8DAA8D;oBAC9D,4FAA4F;oBAC5F,oFAAoF;oBACpF,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC/E,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;QAE/E,OAAO,IAAI,CAAC,GAAG,CAAqB,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,UAAU,CACd,OAAsD;QAEtD,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,IAAI,iBAAqC,CAAC;QAE1C,GAAG,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAC,GAAG,OAAO,EAAE,iBAAiB,EAAC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEvC,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACtD,CAAC,QAAQ,iBAAiB,EAAE;QAE5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,kBAAkB,CACtB,KAAa,EACb,IAA+B;QAE/B,MAAM,QAAQ,GAAG,0BAA0B,KAAK,gBAAgB,CAAC;QACjE,OAAO,IAAI,CAAC,IAAI,CAA6B,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,aAAa,CACjB,KAAa,EACb,SAAiB,EACjB,QAAgB;QAEhB,MAAM,QAAQ,GAAG,0BAA0B,KAAK,YAAY,SAAS,WAAW,CAAC;QAEjF,cAAc;QACd,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;QAExD,mDAAmD;QACnD,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE;YAClC,IAAI,EAAE,yCAAyC;SAChD,CAAC,CAAC;QACH,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAExC,8BAA8B;QAC9B,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC;QAEzC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,eAAe,QAAQ,GAAG,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,KAAK;gBACrB,6EAA6E;aAC9E;YACD,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,SAAwD,CAAC;YAE7D,IAAI,CAAC;gBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;YAED,MAAM,YAAY,GAAG,SAAS,EAAE,OAAO,IAAI,SAAS,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,MAAM,YAAY,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0B,CAAC;IAC1D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/api/apps.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,35 @@
5
5
  * @see https://www.rustore.ru/help/work-with-rustore-api/api-catalog
6
6
  */
7
7
  import { RustoreApiClient } from './client.js';
8
+ import type { GetProductsResponse, GetProductsOptions, GetProductResponse } from '../types.js';
8
9
  /**
9
10
  * Клиент для работы с продуктовым каталогом
10
11
  */
11
12
  export declare class CatalogApi extends RustoreApiClient {
13
+ /**
14
+ * Получить список продуктов
15
+ * GET /public/v1/catalog/product
16
+ *
17
+ * Метод позволяет получить список всех продуктов с поддержкой пагинации.
18
+ *
19
+ * @param options - Параметры запроса (continuationToken, pageSize и др.)
20
+ * @returns Список продуктов
21
+ *
22
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-catalog/get-products
23
+ */
24
+ getProducts(options?: GetProductsOptions): Promise<GetProductsResponse>;
25
+ /**
26
+ * Получить информацию о продукте
27
+ * GET /public/v1/catalog/product/{productId}
28
+ *
29
+ * Метод позволяет получить детальную информацию о конкретном продукте.
30
+ *
31
+ * @param productId - ID продукта
32
+ * @returns Информация о продукте
33
+ *
34
+ * @see https://www.rustore.ru/help/work-with-rustore-api/api-catalog/get-product
35
+ */
36
+ getProduct(productId: number): Promise<GetProductResponse>;
12
37
  }
13
38
  /**
14
39
  * Экспортируемый экземпляр клиента для работы с каталогом
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/api/catalog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAE7C;;GAEG;AACH,qBAAa,UAAW,SAAQ,gBAAgB;CAG/C;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,YAAmB,CAAC"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/api/catalog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,qBAAa,UAAW,SAAQ,gBAAgB;IAC9C;;;;;;;;;;OAUG;IACG,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAmB7E;;;;;;;;;;OAUG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAIjE;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,YAAmB,CAAC"}