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.
- package/README.md +125 -12
- package/dist/api/apps.d.ts +141 -13
- package/dist/api/apps.d.ts.map +1 -1
- package/dist/api/apps.js +448 -30
- package/dist/api/apps.js.map +1 -1
- package/dist/api/catalog.d.ts +25 -0
- package/dist/api/catalog.d.ts.map +1 -1
- package/dist/api/catalog.js +41 -0
- package/dist/api/catalog.js.map +1 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +36 -6
- package/dist/api/client.js.map +1 -1
- package/dist/api/payments-app.d.ts +40 -0
- package/dist/api/payments-app.d.ts.map +1 -1
- package/dist/api/payments-app.js +70 -0
- package/dist/api/payments-app.js.map +1 -1
- package/dist/api/payments.d.ts +37 -0
- package/dist/api/payments.d.ts.map +1 -1
- package/dist/api/payments.js +56 -0
- package/dist/api/payments.js.map +1 -1
- package/dist/bin.js +558 -11
- package/dist/bin.js.map +1 -1
- package/dist/commands/apps.d.ts +93 -3
- package/dist/commands/apps.d.ts.map +1 -1
- package/dist/commands/apps.js +442 -15
- package/dist/commands/apps.js.map +1 -1
- package/dist/commands/catalog.d.ts +31 -0
- package/dist/commands/catalog.d.ts.map +1 -0
- package/dist/commands/catalog.js +117 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/feedback.js +2 -2
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/payments-app.d.ts +50 -0
- package/dist/commands/payments-app.d.ts.map +1 -0
- package/dist/commands/payments-app.js +197 -0
- package/dist/commands/payments-app.js.map +1 -0
- package/dist/commands/payments.d.ts +42 -0
- package/dist/commands/payments.d.ts.map +1 -0
- package/dist/commands/payments.js +152 -0
- package/dist/commands/payments.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -1
- package/dist/config.js.map +1 -1
- package/dist/types.d.ts +573 -5
- package/dist/types.d.ts.map +1 -1
- 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/{
|
|
73
|
+
* POST /public/v1/application/{packageName}/version
|
|
74
74
|
*
|
|
75
|
-
* Метод позволяет создать
|
|
75
|
+
* Метод позволяет создать черновик версии и заполнить его основной информацией.
|
|
76
|
+
* Обязательный параметр: minAndroidVersion (от 1 до 16).
|
|
76
77
|
*
|
|
77
|
-
* @param
|
|
78
|
-
* @param data - Данные для создания черновой версии
|
|
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(
|
|
84
|
-
const endpoint = `/public/v1/application/${
|
|
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
|
|
89
|
-
* POST /public/v1/application/{
|
|
89
|
+
* Загрузить APK файл для версии приложения
|
|
90
|
+
* POST /public/v1/application/{packageName}/version/{versionId}/apk
|
|
90
91
|
*
|
|
91
|
-
* Метод позволяет загрузить APK
|
|
92
|
+
* Метод позволяет загрузить APK файл для версии приложения.
|
|
93
|
+
* Согласно документации API, endpoint использует packageName, а не appId.
|
|
92
94
|
*
|
|
93
|
-
* @param
|
|
95
|
+
* @param packageName - Имя пакета приложения (например, com.example.app)
|
|
94
96
|
* @param versionId - ID версии (полученный из createDraftVersion)
|
|
95
|
-
* @param filePath - Путь к APK
|
|
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(
|
|
101
|
-
|
|
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
|
-
|
|
120
|
+
// Используем File вместо Blob для лучшей совместимости
|
|
121
|
+
const file = new File([fileBuffer], fileName, {
|
|
108
122
|
type: 'application/vnd.android.package-archive',
|
|
109
123
|
});
|
|
110
|
-
formData.append('file',
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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(
|
|
405
|
+
errorData = JSON.parse(responseText);
|
|
130
406
|
}
|
|
131
407
|
catch {
|
|
132
408
|
// Игнорируем ошибку парсинга
|
|
133
409
|
}
|
|
134
|
-
const errorMessage = errorData?.message ??
|
|
410
|
+
const errorMessage = errorData?.message ?? responseText;
|
|
135
411
|
throw new Error(`Ошибка API (${response.status}): ${errorMessage}`);
|
|
136
412
|
}
|
|
137
|
-
|
|
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
|
/**
|
package/dist/api/apps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/api/apps.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/api/apps.ts"],"names":[],"mappings":"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"}
|
package/dist/api/catalog.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|