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/bin.js
CHANGED
|
@@ -4,8 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Command } from 'commander';
|
|
6
6
|
import { loginCommand, logoutCommand, whoamiCommand } from './commands/auth.js';
|
|
7
|
-
import { listAppsCommand, createDraftVersionCommand, uploadApkFileCommand, } from './commands/apps.js';
|
|
7
|
+
import { listAppsCommand, createDraftVersionCommand, uploadApkFileCommand, sendForModerationCommand, getVersionInfoCommand, getVersionListCommand, getAppTagListCommand, uploadAabFileCommand, updateDraftVersionCommand, deleteDraftVersionCommand, uploadScreensCommand, getVersionStatusCommand, } from './commands/apps.js';
|
|
8
8
|
import { getFeedbackCommand, createFeedbackAnswerCommand, getFeedbackAnswerStatusCommand, updateFeedbackAnswerCommand, deleteFeedbackAnswerCommand, } from './commands/feedback.js';
|
|
9
|
+
import { getPaymentCommand, getSubscriptionCommand, getSubscriptionListCommand, } from './commands/payments.js';
|
|
10
|
+
import { getInvoicesCommand, getPurchaseCommand, getPurchaseListCommand, } from './commands/payments-app.js';
|
|
11
|
+
import { getProductsCommand, getProductCommand } from './commands/catalog.js';
|
|
9
12
|
import { readFileSync } from 'node:fs';
|
|
10
13
|
import { fileURLToPath } from 'node:url';
|
|
11
14
|
import { dirname, join } from 'node:path';
|
|
@@ -136,13 +139,54 @@ appsCommand
|
|
|
136
139
|
appsCommand
|
|
137
140
|
.command('create-draft')
|
|
138
141
|
.description('Создать черновую версию приложения')
|
|
139
|
-
.
|
|
140
|
-
.
|
|
141
|
-
.requiredOption('--
|
|
142
|
+
.allowUnknownOption() // Разрешаем произвольные параметры для поддержки всех параметров API
|
|
143
|
+
.allowExcessArguments()
|
|
144
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
145
|
+
.requiredOption('--minAndroidVersion <version>', 'Минимальная версия Android (1-16)', parseInt)
|
|
142
146
|
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
143
147
|
.action(async (options) => {
|
|
144
148
|
try {
|
|
145
|
-
|
|
149
|
+
// Собираем все параметры из CLI, исключая известные опции
|
|
150
|
+
const knownOptions = ['packageName', 'minAndroidVersion', 'json'];
|
|
151
|
+
const apiParams = {
|
|
152
|
+
minAndroidVersion: options.minAndroidVersion,
|
|
153
|
+
};
|
|
154
|
+
// Парсим неизвестные опции из process.argv
|
|
155
|
+
const createDraftIndex = process.argv.indexOf('create-draft');
|
|
156
|
+
if (createDraftIndex >= 0) {
|
|
157
|
+
for (let i = createDraftIndex + 1; i < process.argv.length; i++) {
|
|
158
|
+
const arg = process.argv[i];
|
|
159
|
+
if (arg?.startsWith('--') && !knownOptions.some(opt => arg.includes(opt))) {
|
|
160
|
+
const key = arg.replace(/^--/, '');
|
|
161
|
+
const value = process.argv[i + 1];
|
|
162
|
+
if (value && !value.startsWith('--')) {
|
|
163
|
+
// Парсим значение
|
|
164
|
+
let parsedValue = value;
|
|
165
|
+
const lowerValue = value.toLowerCase();
|
|
166
|
+
if (lowerValue === 'true') {
|
|
167
|
+
parsedValue = true;
|
|
168
|
+
}
|
|
169
|
+
else if (lowerValue === 'false') {
|
|
170
|
+
parsedValue = false;
|
|
171
|
+
}
|
|
172
|
+
else if (!isNaN(Number(value)) && value.trim() !== '') {
|
|
173
|
+
parsedValue = Number(value);
|
|
174
|
+
}
|
|
175
|
+
else if (value.startsWith('[') || value.startsWith('{')) {
|
|
176
|
+
try {
|
|
177
|
+
parsedValue = JSON.parse(value);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
parsedValue = value;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
apiParams[key] = parsedValue;
|
|
184
|
+
i++;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
await createDraftVersionCommand(options.packageName, apiParams, options.json);
|
|
146
190
|
}
|
|
147
191
|
catch (error) {
|
|
148
192
|
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
@@ -151,14 +195,280 @@ appsCommand
|
|
|
151
195
|
});
|
|
152
196
|
appsCommand
|
|
153
197
|
.command('upload-apk')
|
|
154
|
-
.description('Загрузить APK
|
|
155
|
-
.
|
|
156
|
-
.
|
|
157
|
-
.requiredOption('--
|
|
198
|
+
.description('Загрузить APK файл для версии приложения')
|
|
199
|
+
.allowUnknownOption() // Разрешаем произвольные параметры
|
|
200
|
+
.allowExcessArguments()
|
|
201
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
202
|
+
.requiredOption('--versionId <id>', 'ID версии (из create-draft)', parseInt)
|
|
203
|
+
.requiredOption('--file <path>', 'Путь к APK файлу')
|
|
204
|
+
.requiredOption('--isMainApk <true|false>', 'Признак основного APK-файла (true - основной, false - дополнительный)', (value) => {
|
|
205
|
+
const lower = value.toLowerCase();
|
|
206
|
+
if (lower === 'true')
|
|
207
|
+
return true;
|
|
208
|
+
if (lower === 'false')
|
|
209
|
+
return false;
|
|
210
|
+
throw new Error('isMainApk должен быть true или false');
|
|
211
|
+
})
|
|
212
|
+
.option('--servicesType <type>', 'Тип сервиса (HMS - для Huawei Mobile Services, Unknown - по умолчанию)', (value) => {
|
|
213
|
+
if (value === 'HMS' || value === 'Unknown')
|
|
214
|
+
return value;
|
|
215
|
+
throw new Error('servicesType должен быть HMS или Unknown');
|
|
216
|
+
})
|
|
217
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
218
|
+
.action(async (options) => {
|
|
219
|
+
try {
|
|
220
|
+
await uploadApkFileCommand(options.packageName, options.versionId, options.file, options.isMainApk, options.servicesType, options.json);
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
appsCommand
|
|
228
|
+
.command('send-for-moderation')
|
|
229
|
+
.description('Отправить черновую версию приложения на модерацию')
|
|
230
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
231
|
+
.requiredOption('--versionId <id>', 'ID версии (из create-draft)', parseInt)
|
|
232
|
+
.option('--priorityUpdate <priority>', 'Приоритет обновления (0-5, где 0 - минимальный, 5 - максимальный)', parseInt)
|
|
233
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
234
|
+
.action(async (options) => {
|
|
235
|
+
try {
|
|
236
|
+
await sendForModerationCommand(options.packageName, options.versionId, options.priorityUpdate, options.json);
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
240
|
+
process.exit(1);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
appsCommand
|
|
244
|
+
.command('upload-aab')
|
|
245
|
+
.description('Загрузить AAB файл для версии приложения')
|
|
246
|
+
.allowUnknownOption()
|
|
247
|
+
.allowExcessArguments()
|
|
248
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
249
|
+
.requiredOption('--versionId <id>', 'ID версии (из create-draft)', parseInt)
|
|
250
|
+
.requiredOption('--file <path>', 'Путь к AAB файлу')
|
|
251
|
+
.requiredOption('--isMainApk <true|false>', 'Признак основного AAB-файла (true - основной, false - дополнительный)', (value) => {
|
|
252
|
+
const lower = value.toLowerCase();
|
|
253
|
+
if (lower === 'true')
|
|
254
|
+
return true;
|
|
255
|
+
if (lower === 'false')
|
|
256
|
+
return false;
|
|
257
|
+
throw new Error('isMainApk должен быть true или false');
|
|
258
|
+
})
|
|
259
|
+
.option('--servicesType <type>', 'Тип сервиса (HMS - для Huawei Mobile Services, Unknown - по умолчанию)', (value) => {
|
|
260
|
+
if (value === 'HMS' || value === 'Unknown')
|
|
261
|
+
return value;
|
|
262
|
+
throw new Error('servicesType должен быть HMS или Unknown');
|
|
263
|
+
})
|
|
158
264
|
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
159
265
|
.action(async (options) => {
|
|
160
266
|
try {
|
|
161
|
-
await
|
|
267
|
+
await uploadAabFileCommand(options.packageName, options.versionId, options.file, options.isMainApk, options.servicesType, options.json);
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
appsCommand
|
|
275
|
+
.command('update-draft')
|
|
276
|
+
.description('Обновить черновую версию приложения')
|
|
277
|
+
.allowUnknownOption()
|
|
278
|
+
.allowExcessArguments()
|
|
279
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
280
|
+
.requiredOption('--versionId <id>', 'ID версии', parseInt)
|
|
281
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
282
|
+
.action(async (options) => {
|
|
283
|
+
try {
|
|
284
|
+
const knownOptions = ['packageName', 'versionId', 'json'];
|
|
285
|
+
const apiParams = {};
|
|
286
|
+
// Парсим все параметры из CLI
|
|
287
|
+
const updateDraftIndex = process.argv.indexOf('update-draft');
|
|
288
|
+
if (updateDraftIndex >= 0) {
|
|
289
|
+
for (let i = updateDraftIndex + 1; i < process.argv.length; i++) {
|
|
290
|
+
const arg = process.argv[i];
|
|
291
|
+
if (arg?.startsWith('--') && !knownOptions.some(opt => arg.includes(opt))) {
|
|
292
|
+
const key = arg.replace(/^--/, '');
|
|
293
|
+
const value = process.argv[i + 1];
|
|
294
|
+
if (value && !value.startsWith('--')) {
|
|
295
|
+
let parsedValue = value;
|
|
296
|
+
const lowerValue = value.toLowerCase();
|
|
297
|
+
if (lowerValue === 'true') {
|
|
298
|
+
parsedValue = true;
|
|
299
|
+
}
|
|
300
|
+
else if (lowerValue === 'false') {
|
|
301
|
+
parsedValue = false;
|
|
302
|
+
}
|
|
303
|
+
else if (!isNaN(Number(value)) && value.trim() !== '') {
|
|
304
|
+
parsedValue = Number(value);
|
|
305
|
+
}
|
|
306
|
+
else if (value.startsWith('[') || value.startsWith('{')) {
|
|
307
|
+
try {
|
|
308
|
+
parsedValue = JSON.parse(value);
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
parsedValue = value;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
apiParams[key] = parsedValue;
|
|
315
|
+
i++;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
await updateDraftVersionCommand(options.packageName, options.versionId, apiParams, options.json);
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
324
|
+
process.exit(1);
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
appsCommand
|
|
328
|
+
.command('delete-draft')
|
|
329
|
+
.description('Удалить черновую версию приложения')
|
|
330
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
331
|
+
.requiredOption('--versionId <id>', 'ID версии', parseInt)
|
|
332
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
333
|
+
.action(async (options) => {
|
|
334
|
+
try {
|
|
335
|
+
await deleteDraftVersionCommand(options.packageName, options.versionId, options.json);
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
339
|
+
process.exit(1);
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
appsCommand
|
|
343
|
+
.command('upload-screens')
|
|
344
|
+
.description('Загрузить скриншоты для версии приложения')
|
|
345
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
346
|
+
.requiredOption('--versionId <id>', 'ID версии', parseInt)
|
|
347
|
+
.requiredOption('--files <paths>', 'Пути к файлам скриншотов (через запятую)', (value) => value.split(',').map(p => p.trim()))
|
|
348
|
+
.requiredOption('--deviceType <type>', 'Тип устройства (PHONE, TABLET, TV)', (value) => {
|
|
349
|
+
const upper = value.toUpperCase();
|
|
350
|
+
if (upper === 'PHONE' || upper === 'TABLET' || upper === 'TV') {
|
|
351
|
+
return upper;
|
|
352
|
+
}
|
|
353
|
+
throw new Error('deviceType должен быть PHONE, TABLET или TV');
|
|
354
|
+
})
|
|
355
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
356
|
+
.action(async (options) => {
|
|
357
|
+
try {
|
|
358
|
+
await uploadScreensCommand(options.packageName, options.versionId, options.files, options.deviceType, options.json);
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
362
|
+
process.exit(1);
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
appsCommand
|
|
366
|
+
.command('version-status')
|
|
367
|
+
.description('Получить статус версии приложения')
|
|
368
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
369
|
+
.requiredOption('--versionId <id>', 'ID версии', parseInt)
|
|
370
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
371
|
+
.action(async (options) => {
|
|
372
|
+
try {
|
|
373
|
+
await getVersionStatusCommand(options.packageName, options.versionId, options.json);
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
377
|
+
process.exit(1);
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
appsCommand
|
|
381
|
+
.command('version-info')
|
|
382
|
+
.description('Получить информацию о версии приложения')
|
|
383
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
384
|
+
.requiredOption('--versionId <id>', 'ID версии', parseInt)
|
|
385
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
386
|
+
.action(async (options) => {
|
|
387
|
+
try {
|
|
388
|
+
await getVersionInfoCommand(options.packageName, options.versionId, options.json);
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
392
|
+
process.exit(1);
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
appsCommand
|
|
396
|
+
.command('version-list')
|
|
397
|
+
.description('Получить список версий приложения')
|
|
398
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
399
|
+
.allowUnknownOption()
|
|
400
|
+
.allowExcessArguments()
|
|
401
|
+
.option('-a, --all', 'Получить все версии (с пагинацией)')
|
|
402
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
403
|
+
.option('--page-size <size>', 'Размер страницы', parseInt)
|
|
404
|
+
.action(async (options) => {
|
|
405
|
+
try {
|
|
406
|
+
// Парсим неизвестные опции для передачи в API
|
|
407
|
+
const unknownOptions = {};
|
|
408
|
+
const args = process.argv.slice(process.argv.indexOf('version-list') + 1);
|
|
409
|
+
for (let i = 0; i < args.length; i += 2) {
|
|
410
|
+
const arg = args[i];
|
|
411
|
+
const nextArg = args[i + 1];
|
|
412
|
+
if (arg?.startsWith('--') && nextArg) {
|
|
413
|
+
const key = arg.replace('--', '');
|
|
414
|
+
const value = nextArg;
|
|
415
|
+
// Пытаемся определить тип значения
|
|
416
|
+
if (value === 'true' || value === 'false') {
|
|
417
|
+
unknownOptions[key] = value === 'true';
|
|
418
|
+
}
|
|
419
|
+
else if (!isNaN(Number(value))) {
|
|
420
|
+
unknownOptions[key] = Number(value);
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
unknownOptions[key] = value;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
await getVersionListCommand(options.packageName, {
|
|
428
|
+
...options,
|
|
429
|
+
...unknownOptions,
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
catch (error) {
|
|
433
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
434
|
+
process.exit(1);
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
appsCommand
|
|
438
|
+
.command('tag-list')
|
|
439
|
+
.description('Получить список тегов приложений')
|
|
440
|
+
.allowUnknownOption()
|
|
441
|
+
.allowExcessArguments()
|
|
442
|
+
.option('-a, --all', 'Получить все теги (с пагинацией)')
|
|
443
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
444
|
+
.option('--page-size <size>', 'Размер страницы', parseInt)
|
|
445
|
+
.action(async (options) => {
|
|
446
|
+
try {
|
|
447
|
+
// Парсим неизвестные опции для передачи в API
|
|
448
|
+
const unknownOptions = {};
|
|
449
|
+
const args = process.argv.slice(process.argv.indexOf('tag-list') + 1);
|
|
450
|
+
for (let i = 0; i < args.length; i += 2) {
|
|
451
|
+
const arg = args[i];
|
|
452
|
+
const nextArg = args[i + 1];
|
|
453
|
+
if (arg?.startsWith('--') && nextArg) {
|
|
454
|
+
const key = arg.replace('--', '');
|
|
455
|
+
const value = nextArg;
|
|
456
|
+
// Пытаемся определить тип значения
|
|
457
|
+
if (value === 'true' || value === 'false') {
|
|
458
|
+
unknownOptions[key] = value === 'true';
|
|
459
|
+
}
|
|
460
|
+
else if (!isNaN(Number(value))) {
|
|
461
|
+
unknownOptions[key] = Number(value);
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
unknownOptions[key] = value;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
await getAppTagListCommand({
|
|
469
|
+
...options,
|
|
470
|
+
...unknownOptions,
|
|
471
|
+
});
|
|
162
472
|
}
|
|
163
473
|
catch (error) {
|
|
164
474
|
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
@@ -178,7 +488,9 @@ feedbackCommand
|
|
|
178
488
|
.option('--page-size <size>', 'Размер страницы', parseInt)
|
|
179
489
|
.action(async (options) => {
|
|
180
490
|
try {
|
|
181
|
-
|
|
491
|
+
// Извлекаем packageName и передаем остальные опции отдельно
|
|
492
|
+
const { packageName, ...restOptions } = options;
|
|
493
|
+
await getFeedbackCommand(packageName, restOptions);
|
|
182
494
|
}
|
|
183
495
|
catch (error) {
|
|
184
496
|
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
@@ -247,6 +559,241 @@ feedbackCommand
|
|
|
247
559
|
process.exit(1);
|
|
248
560
|
}
|
|
249
561
|
});
|
|
562
|
+
// Команды для работы с платежами и подписками (общие методы)
|
|
563
|
+
const paymentsCommand = program
|
|
564
|
+
.command('payments')
|
|
565
|
+
.description('Работа с платежами и подписками (общие методы)');
|
|
566
|
+
paymentsCommand
|
|
567
|
+
.command('get')
|
|
568
|
+
.description('Получить информацию о платеже')
|
|
569
|
+
.requiredOption('--paymentId <id>', 'ID платежа', parseInt)
|
|
570
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
571
|
+
.action(async (options) => {
|
|
572
|
+
try {
|
|
573
|
+
await getPaymentCommand(options.paymentId, options.json);
|
|
574
|
+
}
|
|
575
|
+
catch (error) {
|
|
576
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
577
|
+
process.exit(1);
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
paymentsCommand
|
|
581
|
+
.command('subscription')
|
|
582
|
+
.description('Получить информацию о подписке')
|
|
583
|
+
.requiredOption('--subscriptionId <id>', 'ID подписки', parseInt)
|
|
584
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
585
|
+
.action(async (options) => {
|
|
586
|
+
try {
|
|
587
|
+
await getSubscriptionCommand(options.subscriptionId, options.json);
|
|
588
|
+
}
|
|
589
|
+
catch (error) {
|
|
590
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
591
|
+
process.exit(1);
|
|
592
|
+
}
|
|
593
|
+
});
|
|
594
|
+
paymentsCommand
|
|
595
|
+
.command('subscription-list')
|
|
596
|
+
.description('Получить список подписок')
|
|
597
|
+
.allowUnknownOption()
|
|
598
|
+
.allowExcessArguments()
|
|
599
|
+
.option('-a, --all', 'Получить все подписки (с пагинацией)')
|
|
600
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
601
|
+
.option('--page-size <size>', 'Размер страницы', parseInt)
|
|
602
|
+
.action(async (options) => {
|
|
603
|
+
try {
|
|
604
|
+
// Парсим неизвестные опции для передачи в API
|
|
605
|
+
const unknownOptions = {};
|
|
606
|
+
const args = process.argv.slice(process.argv.indexOf('subscription-list') + 1);
|
|
607
|
+
for (let i = 0; i < args.length; i += 2) {
|
|
608
|
+
const arg = args[i];
|
|
609
|
+
const nextArg = args[i + 1];
|
|
610
|
+
if (arg?.startsWith('--') && nextArg) {
|
|
611
|
+
const key = arg.replace('--', '');
|
|
612
|
+
const value = nextArg;
|
|
613
|
+
// Пытаемся определить тип значения
|
|
614
|
+
if (value === 'true' || value === 'false') {
|
|
615
|
+
unknownOptions[key] = value === 'true';
|
|
616
|
+
}
|
|
617
|
+
else if (!isNaN(Number(value))) {
|
|
618
|
+
unknownOptions[key] = Number(value);
|
|
619
|
+
}
|
|
620
|
+
else {
|
|
621
|
+
unknownOptions[key] = value;
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
await getSubscriptionListCommand({
|
|
626
|
+
...options,
|
|
627
|
+
...unknownOptions,
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
catch (error) {
|
|
631
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
632
|
+
process.exit(1);
|
|
633
|
+
}
|
|
634
|
+
});
|
|
635
|
+
// Команды для работы с платежами и подписками (методы приложений)
|
|
636
|
+
const paymentsAppCommand = program
|
|
637
|
+
.command('payments-app')
|
|
638
|
+
.description('Работа с платежами и подписками (методы приложений)');
|
|
639
|
+
paymentsAppCommand
|
|
640
|
+
.command('invoices')
|
|
641
|
+
.description('Получить список счетов приложения')
|
|
642
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
643
|
+
.allowUnknownOption()
|
|
644
|
+
.allowExcessArguments()
|
|
645
|
+
.option('-a, --all', 'Получить все счета (с пагинацией)')
|
|
646
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
647
|
+
.option('--page-size <size>', 'Размер страницы', parseInt)
|
|
648
|
+
.action(async (options) => {
|
|
649
|
+
try {
|
|
650
|
+
// Парсим неизвестные опции для передачи в API
|
|
651
|
+
const unknownOptions = {};
|
|
652
|
+
const args = process.argv.slice(process.argv.indexOf('invoices') + 1);
|
|
653
|
+
for (let i = 0; i < args.length; i += 2) {
|
|
654
|
+
const arg = args[i];
|
|
655
|
+
const nextArg = args[i + 1];
|
|
656
|
+
if (arg?.startsWith('--') && nextArg) {
|
|
657
|
+
const key = arg.replace('--', '');
|
|
658
|
+
const value = nextArg;
|
|
659
|
+
// Пытаемся определить тип значения
|
|
660
|
+
if (value === 'true' || value === 'false') {
|
|
661
|
+
unknownOptions[key] = value === 'true';
|
|
662
|
+
}
|
|
663
|
+
else if (!isNaN(Number(value))) {
|
|
664
|
+
unknownOptions[key] = Number(value);
|
|
665
|
+
}
|
|
666
|
+
else {
|
|
667
|
+
unknownOptions[key] = value;
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
await getInvoicesCommand(options.packageName, {
|
|
672
|
+
...options,
|
|
673
|
+
...unknownOptions,
|
|
674
|
+
});
|
|
675
|
+
}
|
|
676
|
+
catch (error) {
|
|
677
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
678
|
+
process.exit(1);
|
|
679
|
+
}
|
|
680
|
+
});
|
|
681
|
+
paymentsAppCommand
|
|
682
|
+
.command('purchase')
|
|
683
|
+
.description('Получить информацию о покупке')
|
|
684
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
685
|
+
.requiredOption('--purchaseId <id>', 'ID покупки', parseInt)
|
|
686
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
687
|
+
.action(async (options) => {
|
|
688
|
+
try {
|
|
689
|
+
await getPurchaseCommand(options.packageName, options.purchaseId, options.json);
|
|
690
|
+
}
|
|
691
|
+
catch (error) {
|
|
692
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
693
|
+
process.exit(1);
|
|
694
|
+
}
|
|
695
|
+
});
|
|
696
|
+
paymentsAppCommand
|
|
697
|
+
.command('purchase-list')
|
|
698
|
+
.description('Получить список покупок приложения')
|
|
699
|
+
.requiredOption('--packageName <name>', 'Имя пакета приложения (например, com.example.app)')
|
|
700
|
+
.allowUnknownOption()
|
|
701
|
+
.allowExcessArguments()
|
|
702
|
+
.option('-a, --all', 'Получить все покупки (с пагинацией)')
|
|
703
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
704
|
+
.option('--page-size <size>', 'Размер страницы', parseInt)
|
|
705
|
+
.action(async (options) => {
|
|
706
|
+
try {
|
|
707
|
+
// Парсим неизвестные опции для передачи в API
|
|
708
|
+
const unknownOptions = {};
|
|
709
|
+
const args = process.argv.slice(process.argv.indexOf('purchase-list') + 1);
|
|
710
|
+
for (let i = 0; i < args.length; i += 2) {
|
|
711
|
+
const arg = args[i];
|
|
712
|
+
const nextArg = args[i + 1];
|
|
713
|
+
if (arg?.startsWith('--') && nextArg) {
|
|
714
|
+
const key = arg.replace('--', '');
|
|
715
|
+
const value = nextArg;
|
|
716
|
+
// Пытаемся определить тип значения
|
|
717
|
+
if (value === 'true' || value === 'false') {
|
|
718
|
+
unknownOptions[key] = value === 'true';
|
|
719
|
+
}
|
|
720
|
+
else if (!isNaN(Number(value))) {
|
|
721
|
+
unknownOptions[key] = Number(value);
|
|
722
|
+
}
|
|
723
|
+
else {
|
|
724
|
+
unknownOptions[key] = value;
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
await getPurchaseListCommand(options.packageName, {
|
|
729
|
+
...options,
|
|
730
|
+
...unknownOptions,
|
|
731
|
+
});
|
|
732
|
+
}
|
|
733
|
+
catch (error) {
|
|
734
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
735
|
+
process.exit(1);
|
|
736
|
+
}
|
|
737
|
+
});
|
|
738
|
+
// Команды для работы с продуктовым каталогом
|
|
739
|
+
const catalogCommand = program
|
|
740
|
+
.command('catalog')
|
|
741
|
+
.description('Работа с продуктовым каталогом');
|
|
742
|
+
catalogCommand
|
|
743
|
+
.command('list')
|
|
744
|
+
.description('Получить список продуктов')
|
|
745
|
+
.allowUnknownOption()
|
|
746
|
+
.allowExcessArguments()
|
|
747
|
+
.option('-a, --all', 'Получить все продукты (с пагинацией)')
|
|
748
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
749
|
+
.option('--page-size <size>', 'Размер страницы', parseInt)
|
|
750
|
+
.action(async (options) => {
|
|
751
|
+
try {
|
|
752
|
+
// Парсим неизвестные опции для передачи в API
|
|
753
|
+
const unknownOptions = {};
|
|
754
|
+
const args = process.argv.slice(process.argv.indexOf('list') + 1);
|
|
755
|
+
for (let i = 0; i < args.length; i += 2) {
|
|
756
|
+
const arg = args[i];
|
|
757
|
+
const nextArg = args[i + 1];
|
|
758
|
+
if (arg?.startsWith('--') && nextArg) {
|
|
759
|
+
const key = arg.replace('--', '');
|
|
760
|
+
const value = nextArg;
|
|
761
|
+
// Пытаемся определить тип значения
|
|
762
|
+
if (value === 'true' || value === 'false') {
|
|
763
|
+
unknownOptions[key] = value === 'true';
|
|
764
|
+
}
|
|
765
|
+
else if (!isNaN(Number(value))) {
|
|
766
|
+
unknownOptions[key] = Number(value);
|
|
767
|
+
}
|
|
768
|
+
else {
|
|
769
|
+
unknownOptions[key] = value;
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
await getProductsCommand({
|
|
774
|
+
...options,
|
|
775
|
+
...unknownOptions,
|
|
776
|
+
});
|
|
777
|
+
}
|
|
778
|
+
catch (error) {
|
|
779
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
780
|
+
process.exit(1);
|
|
781
|
+
}
|
|
782
|
+
});
|
|
783
|
+
catalogCommand
|
|
784
|
+
.command('get')
|
|
785
|
+
.description('Получить информацию о продукте')
|
|
786
|
+
.requiredOption('--productId <id>', 'ID продукта', parseInt)
|
|
787
|
+
.option('-j, --json', 'Вывести результат в формате JSON')
|
|
788
|
+
.action(async (options) => {
|
|
789
|
+
try {
|
|
790
|
+
await getProductCommand(options.productId, options.json);
|
|
791
|
+
}
|
|
792
|
+
catch (error) {
|
|
793
|
+
console.error('Ошибка:', error instanceof Error ? error.message : String(error));
|
|
794
|
+
process.exit(1);
|
|
795
|
+
}
|
|
796
|
+
});
|
|
250
797
|
// Показываем помощь, если команда не указана
|
|
251
798
|
if (process.argv.length === 2) {
|
|
252
799
|
program.help();
|