adapty 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/flows/config/validate.d.ts +19 -0
- package/dist/commands/flows/config/validate.js +77 -0
- package/dist/commands/flows/media/upload.d.ts +14 -0
- package/dist/commands/flows/media/upload.js +46 -0
- package/dist/lib/api-schemas.d.ts +23 -0
- package/oclif.manifest.json +303 -193
- package/package.json +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import type { FlowConfigValidationDTO } from '../../../lib/api-schemas.js';
|
|
3
|
+
export default class FlowsConfigValidate extends Command {
|
|
4
|
+
static args: {
|
|
5
|
+
flow_id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static description: string;
|
|
8
|
+
static enableJsonFlag: boolean;
|
|
9
|
+
static examples: string[];
|
|
10
|
+
static flags: {
|
|
11
|
+
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
'config-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
app: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<FlowConfigValidationDTO>;
|
|
16
|
+
private parseJson;
|
|
17
|
+
private readConfig;
|
|
18
|
+
private readStdin;
|
|
19
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { createAuthenticatedClient } from '../../../lib/client-from-config.js';
|
|
4
|
+
import { appFlag, isValidUuid } from '../../../lib/flags.js';
|
|
5
|
+
import { printResponse } from '../../../lib/output.js';
|
|
6
|
+
export default class FlowsConfigValidate extends Command {
|
|
7
|
+
static args = {
|
|
8
|
+
flow_id: Args.string({ description: 'Flow ID (UUID)', required: true }),
|
|
9
|
+
};
|
|
10
|
+
static description = 'Check whether a builder config is publishable (advisory; does not save). Exits non-zero when the config is not publishable.';
|
|
11
|
+
static enableJsonFlag = true;
|
|
12
|
+
static examples = [
|
|
13
|
+
'<%= config.bin %> flows config validate --app UUID FLOW_UUID --config-file config.json',
|
|
14
|
+
'cat config.json | <%= config.bin %> flows config validate --app UUID FLOW_UUID --config-file -',
|
|
15
|
+
'<%= config.bin %> flows config validate --app UUID FLOW_UUID --config \'{"screens":[],"locales":[]}\'',
|
|
16
|
+
];
|
|
17
|
+
static flags = {
|
|
18
|
+
...appFlag,
|
|
19
|
+
config: Flags.string({
|
|
20
|
+
description: 'Builder config as a JSON string',
|
|
21
|
+
exactlyOne: ['config', 'config-file'],
|
|
22
|
+
}),
|
|
23
|
+
'config-file': Flags.string({
|
|
24
|
+
description: 'JSON file with the builder config, or - to read stdin',
|
|
25
|
+
exactlyOne: ['config', 'config-file'],
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
async run() {
|
|
29
|
+
const { args, flags } = await this.parse(FlowsConfigValidate);
|
|
30
|
+
if (!isValidUuid(args.flow_id)) {
|
|
31
|
+
this.error('Invalid flow ID format.', { exit: 2 });
|
|
32
|
+
}
|
|
33
|
+
const config = await this.readConfig(flags);
|
|
34
|
+
const body = { config };
|
|
35
|
+
const client = await createAuthenticatedClient(this.config);
|
|
36
|
+
const result = await client.post(`/apps/${flags.app}/flows/${args.flow_id}/config/validate`, body);
|
|
37
|
+
this.log(result.valid ? 'Config is publishable.' : 'Config is NOT publishable.');
|
|
38
|
+
printResponse(result, this.log.bind(this));
|
|
39
|
+
// Advisory endpoint always returns HTTP 200; surface the verdict as an exit code so scripts and agents
|
|
40
|
+
// can gate on it. The JSON/`valid` field stays the source of truth for programmatic consumers.
|
|
41
|
+
if (!result.valid) {
|
|
42
|
+
process.exitCode = 1;
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
parseJson(raw, label) {
|
|
47
|
+
try {
|
|
48
|
+
return JSON.parse(raw);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
this.error(`Invalid ${label} JSON: ${error instanceof Error ? error.message : String(error)}`, { exit: 2 });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async readConfig(flags) {
|
|
55
|
+
if (flags.config !== undefined) {
|
|
56
|
+
return this.parseJson(flags.config, '--config');
|
|
57
|
+
}
|
|
58
|
+
const path = flags['config-file'];
|
|
59
|
+
if (path === undefined) {
|
|
60
|
+
this.error('Provide --config or --config-file.', { exit: 2 });
|
|
61
|
+
}
|
|
62
|
+
let raw;
|
|
63
|
+
try {
|
|
64
|
+
raw = path === '-' ? await this.readStdin() : await readFile(path, 'utf8');
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
this.error(`Could not read ${path}.`, { exit: 2 });
|
|
68
|
+
}
|
|
69
|
+
return this.parseJson(raw, path);
|
|
70
|
+
}
|
|
71
|
+
async readStdin() {
|
|
72
|
+
const chunks = [];
|
|
73
|
+
for await (const chunk of process.stdin)
|
|
74
|
+
chunks.push(chunk);
|
|
75
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import type { MediaDTO } from '../../../lib/api-schemas.js';
|
|
3
|
+
export default class FlowsMediaUpload extends Command {
|
|
4
|
+
static args: {
|
|
5
|
+
file: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static description: string;
|
|
8
|
+
static enableJsonFlag: boolean;
|
|
9
|
+
static examples: string[];
|
|
10
|
+
static flags: {
|
|
11
|
+
app: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<MediaDTO>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Args, Command } from '@oclif/core';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { basename, extname } from 'node:path';
|
|
4
|
+
import { createAuthenticatedClient } from '../../../lib/client-from-config.js';
|
|
5
|
+
import { appFlag } from '../../../lib/flags.js';
|
|
6
|
+
import { printResponse } from '../../../lib/output.js';
|
|
7
|
+
const IMAGE_MIME_TYPES = {
|
|
8
|
+
'.gif': 'image/gif',
|
|
9
|
+
'.heic': 'image/heic',
|
|
10
|
+
'.jpeg': 'image/jpeg',
|
|
11
|
+
'.jpg': 'image/jpeg',
|
|
12
|
+
'.png': 'image/png',
|
|
13
|
+
'.svg': 'image/svg+xml',
|
|
14
|
+
'.webp': 'image/webp',
|
|
15
|
+
};
|
|
16
|
+
export default class FlowsMediaUpload extends Command {
|
|
17
|
+
static args = {
|
|
18
|
+
file: Args.string({ description: 'Path to the image file to upload', required: true }),
|
|
19
|
+
};
|
|
20
|
+
static description = 'Upload an image as a flow builder asset; prints the CDN URL to reference from a flow config';
|
|
21
|
+
static enableJsonFlag = true;
|
|
22
|
+
static examples = ['<%= config.bin %> flows media upload --app UUID ./onboarding-hero.png'];
|
|
23
|
+
static flags = {
|
|
24
|
+
...appFlag,
|
|
25
|
+
};
|
|
26
|
+
async run() {
|
|
27
|
+
const { args, flags } = await this.parse(FlowsMediaUpload);
|
|
28
|
+
let content;
|
|
29
|
+
try {
|
|
30
|
+
content = await readFile(args.file);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
this.error(`Cannot read file: ${args.file}`, { exit: 2 });
|
|
34
|
+
}
|
|
35
|
+
const name = basename(args.file);
|
|
36
|
+
const type = IMAGE_MIME_TYPES[extname(name).toLowerCase()] ?? 'application/octet-stream';
|
|
37
|
+
const form = new FormData();
|
|
38
|
+
form.append('file', new Blob([new Uint8Array(content)], { type }), name);
|
|
39
|
+
const client = await createAuthenticatedClient(this.config);
|
|
40
|
+
const result = await client.postForm(`/apps/${flags.app}/flows/media/images`, form);
|
|
41
|
+
this.log('Image uploaded!');
|
|
42
|
+
// `preview_base64` is a long data blob with no value in human output; --json still returns it in full.
|
|
43
|
+
printResponse({ id: result.id, name: result.name, url: result.url }, this.log.bind(this));
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -101,6 +101,29 @@ export interface FlowConfigWriteRequestDTO {
|
|
|
101
101
|
expected_updated_at?: null | number;
|
|
102
102
|
remote_configs?: FlowRemoteConfigDTO[];
|
|
103
103
|
}
|
|
104
|
+
export interface FlowConfigValidateRequestDTO {
|
|
105
|
+
config: Record<string, unknown>;
|
|
106
|
+
}
|
|
107
|
+
export interface FlowConfigIssueDTO {
|
|
108
|
+
/** Machine code, relayed from the transformer; absent until it reports path-level diagnostics. */
|
|
109
|
+
code?: null | string;
|
|
110
|
+
message: string;
|
|
111
|
+
/** Location of the issue; absent until the transformer reports path-level diagnostics. */
|
|
112
|
+
path?: null | string;
|
|
113
|
+
severity: string;
|
|
114
|
+
}
|
|
115
|
+
export interface FlowConfigValidationDTO {
|
|
116
|
+
issues: FlowConfigIssueDTO[];
|
|
117
|
+
valid: boolean;
|
|
118
|
+
}
|
|
119
|
+
export interface MediaDTO {
|
|
120
|
+
id: number;
|
|
121
|
+
name: string;
|
|
122
|
+
/** Base64-encoded preview thumbnail; absent when no preview was generated. */
|
|
123
|
+
preview_base64?: null | string;
|
|
124
|
+
/** CDN URL to reference from a flow config. */
|
|
125
|
+
url: string;
|
|
126
|
+
}
|
|
104
127
|
export interface SegmentDTO {
|
|
105
128
|
description: null | string;
|
|
106
129
|
id: string;
|
package/oclif.manifest.json
CHANGED
|
@@ -1322,108 +1322,6 @@
|
|
|
1322
1322
|
"update.js"
|
|
1323
1323
|
]
|
|
1324
1324
|
},
|
|
1325
|
-
"segments:get": {
|
|
1326
|
-
"aliases": [],
|
|
1327
|
-
"args": {
|
|
1328
|
-
"segment_id": {
|
|
1329
|
-
"description": "Segment ID (UUID)",
|
|
1330
|
-
"name": "segment_id",
|
|
1331
|
-
"required": true
|
|
1332
|
-
}
|
|
1333
|
-
},
|
|
1334
|
-
"description": "Get segment details",
|
|
1335
|
-
"examples": [
|
|
1336
|
-
"<%= config.bin %> segments get --app UUID 550e8400-e29b-41d4-a716-446655440000"
|
|
1337
|
-
],
|
|
1338
|
-
"flags": {
|
|
1339
|
-
"json": {
|
|
1340
|
-
"description": "Format output as json.",
|
|
1341
|
-
"helpGroup": "GLOBAL",
|
|
1342
|
-
"name": "json",
|
|
1343
|
-
"allowNo": false,
|
|
1344
|
-
"type": "boolean"
|
|
1345
|
-
},
|
|
1346
|
-
"app": {
|
|
1347
|
-
"description": "App ID (UUID)",
|
|
1348
|
-
"name": "app",
|
|
1349
|
-
"required": true,
|
|
1350
|
-
"hasDynamicHelp": false,
|
|
1351
|
-
"multiple": false,
|
|
1352
|
-
"type": "option"
|
|
1353
|
-
}
|
|
1354
|
-
},
|
|
1355
|
-
"hasDynamicHelp": false,
|
|
1356
|
-
"hiddenAliases": [],
|
|
1357
|
-
"id": "segments:get",
|
|
1358
|
-
"pluginAlias": "adapty",
|
|
1359
|
-
"pluginName": "adapty",
|
|
1360
|
-
"pluginType": "core",
|
|
1361
|
-
"strict": true,
|
|
1362
|
-
"enableJsonFlag": true,
|
|
1363
|
-
"isESM": true,
|
|
1364
|
-
"relativePath": [
|
|
1365
|
-
"dist",
|
|
1366
|
-
"commands",
|
|
1367
|
-
"segments",
|
|
1368
|
-
"get.js"
|
|
1369
|
-
]
|
|
1370
|
-
},
|
|
1371
|
-
"segments:list": {
|
|
1372
|
-
"aliases": [],
|
|
1373
|
-
"args": {},
|
|
1374
|
-
"description": "List segments for an app",
|
|
1375
|
-
"examples": [
|
|
1376
|
-
"<%= config.bin %> segments list --app 550e8400-..."
|
|
1377
|
-
],
|
|
1378
|
-
"flags": {
|
|
1379
|
-
"json": {
|
|
1380
|
-
"description": "Format output as json.",
|
|
1381
|
-
"helpGroup": "GLOBAL",
|
|
1382
|
-
"name": "json",
|
|
1383
|
-
"allowNo": false,
|
|
1384
|
-
"type": "boolean"
|
|
1385
|
-
},
|
|
1386
|
-
"app": {
|
|
1387
|
-
"description": "App ID (UUID)",
|
|
1388
|
-
"name": "app",
|
|
1389
|
-
"required": true,
|
|
1390
|
-
"hasDynamicHelp": false,
|
|
1391
|
-
"multiple": false,
|
|
1392
|
-
"type": "option"
|
|
1393
|
-
},
|
|
1394
|
-
"page": {
|
|
1395
|
-
"description": "Page number",
|
|
1396
|
-
"name": "page",
|
|
1397
|
-
"default": 1,
|
|
1398
|
-
"hasDynamicHelp": false,
|
|
1399
|
-
"multiple": false,
|
|
1400
|
-
"type": "option"
|
|
1401
|
-
},
|
|
1402
|
-
"page-size": {
|
|
1403
|
-
"description": "Items per page (max 100)",
|
|
1404
|
-
"name": "page-size",
|
|
1405
|
-
"default": 20,
|
|
1406
|
-
"hasDynamicHelp": false,
|
|
1407
|
-
"multiple": false,
|
|
1408
|
-
"type": "option"
|
|
1409
|
-
}
|
|
1410
|
-
},
|
|
1411
|
-
"hasDynamicHelp": false,
|
|
1412
|
-
"hiddenAliases": [],
|
|
1413
|
-
"id": "segments:list",
|
|
1414
|
-
"pluginAlias": "adapty",
|
|
1415
|
-
"pluginName": "adapty",
|
|
1416
|
-
"pluginType": "core",
|
|
1417
|
-
"strict": true,
|
|
1418
|
-
"enableJsonFlag": true,
|
|
1419
|
-
"isESM": true,
|
|
1420
|
-
"relativePath": [
|
|
1421
|
-
"dist",
|
|
1422
|
-
"commands",
|
|
1423
|
-
"segments",
|
|
1424
|
-
"list.js"
|
|
1425
|
-
]
|
|
1426
|
-
},
|
|
1427
1325
|
"products:create": {
|
|
1428
1326
|
"aliases": [],
|
|
1429
1327
|
"args": {},
|
|
@@ -1708,6 +1606,108 @@
|
|
|
1708
1606
|
"update.js"
|
|
1709
1607
|
]
|
|
1710
1608
|
},
|
|
1609
|
+
"segments:get": {
|
|
1610
|
+
"aliases": [],
|
|
1611
|
+
"args": {
|
|
1612
|
+
"segment_id": {
|
|
1613
|
+
"description": "Segment ID (UUID)",
|
|
1614
|
+
"name": "segment_id",
|
|
1615
|
+
"required": true
|
|
1616
|
+
}
|
|
1617
|
+
},
|
|
1618
|
+
"description": "Get segment details",
|
|
1619
|
+
"examples": [
|
|
1620
|
+
"<%= config.bin %> segments get --app UUID 550e8400-e29b-41d4-a716-446655440000"
|
|
1621
|
+
],
|
|
1622
|
+
"flags": {
|
|
1623
|
+
"json": {
|
|
1624
|
+
"description": "Format output as json.",
|
|
1625
|
+
"helpGroup": "GLOBAL",
|
|
1626
|
+
"name": "json",
|
|
1627
|
+
"allowNo": false,
|
|
1628
|
+
"type": "boolean"
|
|
1629
|
+
},
|
|
1630
|
+
"app": {
|
|
1631
|
+
"description": "App ID (UUID)",
|
|
1632
|
+
"name": "app",
|
|
1633
|
+
"required": true,
|
|
1634
|
+
"hasDynamicHelp": false,
|
|
1635
|
+
"multiple": false,
|
|
1636
|
+
"type": "option"
|
|
1637
|
+
}
|
|
1638
|
+
},
|
|
1639
|
+
"hasDynamicHelp": false,
|
|
1640
|
+
"hiddenAliases": [],
|
|
1641
|
+
"id": "segments:get",
|
|
1642
|
+
"pluginAlias": "adapty",
|
|
1643
|
+
"pluginName": "adapty",
|
|
1644
|
+
"pluginType": "core",
|
|
1645
|
+
"strict": true,
|
|
1646
|
+
"enableJsonFlag": true,
|
|
1647
|
+
"isESM": true,
|
|
1648
|
+
"relativePath": [
|
|
1649
|
+
"dist",
|
|
1650
|
+
"commands",
|
|
1651
|
+
"segments",
|
|
1652
|
+
"get.js"
|
|
1653
|
+
]
|
|
1654
|
+
},
|
|
1655
|
+
"segments:list": {
|
|
1656
|
+
"aliases": [],
|
|
1657
|
+
"args": {},
|
|
1658
|
+
"description": "List segments for an app",
|
|
1659
|
+
"examples": [
|
|
1660
|
+
"<%= config.bin %> segments list --app 550e8400-..."
|
|
1661
|
+
],
|
|
1662
|
+
"flags": {
|
|
1663
|
+
"json": {
|
|
1664
|
+
"description": "Format output as json.",
|
|
1665
|
+
"helpGroup": "GLOBAL",
|
|
1666
|
+
"name": "json",
|
|
1667
|
+
"allowNo": false,
|
|
1668
|
+
"type": "boolean"
|
|
1669
|
+
},
|
|
1670
|
+
"app": {
|
|
1671
|
+
"description": "App ID (UUID)",
|
|
1672
|
+
"name": "app",
|
|
1673
|
+
"required": true,
|
|
1674
|
+
"hasDynamicHelp": false,
|
|
1675
|
+
"multiple": false,
|
|
1676
|
+
"type": "option"
|
|
1677
|
+
},
|
|
1678
|
+
"page": {
|
|
1679
|
+
"description": "Page number",
|
|
1680
|
+
"name": "page",
|
|
1681
|
+
"default": 1,
|
|
1682
|
+
"hasDynamicHelp": false,
|
|
1683
|
+
"multiple": false,
|
|
1684
|
+
"type": "option"
|
|
1685
|
+
},
|
|
1686
|
+
"page-size": {
|
|
1687
|
+
"description": "Items per page (max 100)",
|
|
1688
|
+
"name": "page-size",
|
|
1689
|
+
"default": 20,
|
|
1690
|
+
"hasDynamicHelp": false,
|
|
1691
|
+
"multiple": false,
|
|
1692
|
+
"type": "option"
|
|
1693
|
+
}
|
|
1694
|
+
},
|
|
1695
|
+
"hasDynamicHelp": false,
|
|
1696
|
+
"hiddenAliases": [],
|
|
1697
|
+
"id": "segments:list",
|
|
1698
|
+
"pluginAlias": "adapty",
|
|
1699
|
+
"pluginName": "adapty",
|
|
1700
|
+
"pluginType": "core",
|
|
1701
|
+
"strict": true,
|
|
1702
|
+
"enableJsonFlag": true,
|
|
1703
|
+
"isESM": true,
|
|
1704
|
+
"relativePath": [
|
|
1705
|
+
"dist",
|
|
1706
|
+
"commands",
|
|
1707
|
+
"segments",
|
|
1708
|
+
"list.js"
|
|
1709
|
+
]
|
|
1710
|
+
},
|
|
1711
1711
|
"asa:ad-groups:create": {
|
|
1712
1712
|
"aliases": [],
|
|
1713
1713
|
"args": {},
|
|
@@ -2762,6 +2762,47 @@
|
|
|
2762
2762
|
"update.js"
|
|
2763
2763
|
]
|
|
2764
2764
|
},
|
|
2765
|
+
"asa:competitors:summary": {
|
|
2766
|
+
"aliases": [],
|
|
2767
|
+
"args": {},
|
|
2768
|
+
"description": "Competitor summary for up to five App Store apps; the server covers the last full month and every country",
|
|
2769
|
+
"examples": [
|
|
2770
|
+
"<%= config.bin %> asa competitors summary --app-ids 1668337467,6503873027"
|
|
2771
|
+
],
|
|
2772
|
+
"flags": {
|
|
2773
|
+
"json": {
|
|
2774
|
+
"description": "Format output as json.",
|
|
2775
|
+
"helpGroup": "GLOBAL",
|
|
2776
|
+
"name": "json",
|
|
2777
|
+
"allowNo": false,
|
|
2778
|
+
"type": "boolean"
|
|
2779
|
+
},
|
|
2780
|
+
"app-ids": {
|
|
2781
|
+
"description": "Apple App Store IDs (adam_id), comma-separated, 1-5 values",
|
|
2782
|
+
"name": "app-ids",
|
|
2783
|
+
"required": true,
|
|
2784
|
+
"hasDynamicHelp": false,
|
|
2785
|
+
"multiple": false,
|
|
2786
|
+
"type": "option"
|
|
2787
|
+
}
|
|
2788
|
+
},
|
|
2789
|
+
"hasDynamicHelp": false,
|
|
2790
|
+
"hiddenAliases": [],
|
|
2791
|
+
"id": "asa:competitors:summary",
|
|
2792
|
+
"pluginAlias": "adapty",
|
|
2793
|
+
"pluginName": "adapty",
|
|
2794
|
+
"pluginType": "core",
|
|
2795
|
+
"strict": true,
|
|
2796
|
+
"enableJsonFlag": true,
|
|
2797
|
+
"isESM": true,
|
|
2798
|
+
"relativePath": [
|
|
2799
|
+
"dist",
|
|
2800
|
+
"commands",
|
|
2801
|
+
"asa",
|
|
2802
|
+
"competitors",
|
|
2803
|
+
"summary.js"
|
|
2804
|
+
]
|
|
2805
|
+
},
|
|
2765
2806
|
"asa:campaigns:bulk-create": {
|
|
2766
2807
|
"aliases": [],
|
|
2767
2808
|
"args": {},
|
|
@@ -3407,47 +3448,6 @@
|
|
|
3407
3448
|
"update.js"
|
|
3408
3449
|
]
|
|
3409
3450
|
},
|
|
3410
|
-
"asa:competitors:summary": {
|
|
3411
|
-
"aliases": [],
|
|
3412
|
-
"args": {},
|
|
3413
|
-
"description": "Competitor summary for up to five App Store apps; the server covers the last full month and every country",
|
|
3414
|
-
"examples": [
|
|
3415
|
-
"<%= config.bin %> asa competitors summary --app-ids 1668337467,6503873027"
|
|
3416
|
-
],
|
|
3417
|
-
"flags": {
|
|
3418
|
-
"json": {
|
|
3419
|
-
"description": "Format output as json.",
|
|
3420
|
-
"helpGroup": "GLOBAL",
|
|
3421
|
-
"name": "json",
|
|
3422
|
-
"allowNo": false,
|
|
3423
|
-
"type": "boolean"
|
|
3424
|
-
},
|
|
3425
|
-
"app-ids": {
|
|
3426
|
-
"description": "Apple App Store IDs (adam_id), comma-separated, 1-5 values",
|
|
3427
|
-
"name": "app-ids",
|
|
3428
|
-
"required": true,
|
|
3429
|
-
"hasDynamicHelp": false,
|
|
3430
|
-
"multiple": false,
|
|
3431
|
-
"type": "option"
|
|
3432
|
-
}
|
|
3433
|
-
},
|
|
3434
|
-
"hasDynamicHelp": false,
|
|
3435
|
-
"hiddenAliases": [],
|
|
3436
|
-
"id": "asa:competitors:summary",
|
|
3437
|
-
"pluginAlias": "adapty",
|
|
3438
|
-
"pluginName": "adapty",
|
|
3439
|
-
"pluginType": "core",
|
|
3440
|
-
"strict": true,
|
|
3441
|
-
"enableJsonFlag": true,
|
|
3442
|
-
"isESM": true,
|
|
3443
|
-
"relativePath": [
|
|
3444
|
-
"dist",
|
|
3445
|
-
"commands",
|
|
3446
|
-
"asa",
|
|
3447
|
-
"competitors",
|
|
3448
|
-
"summary.js"
|
|
3449
|
-
]
|
|
3450
|
-
},
|
|
3451
3451
|
"asa:creatives:list": {
|
|
3452
3452
|
"aliases": [],
|
|
3453
3453
|
"args": {},
|
|
@@ -4247,6 +4247,55 @@
|
|
|
4247
4247
|
"list.js"
|
|
4248
4248
|
]
|
|
4249
4249
|
},
|
|
4250
|
+
"asa:orgs:list": {
|
|
4251
|
+
"aliases": [],
|
|
4252
|
+
"args": {},
|
|
4253
|
+
"description": "List the Apple Search Ads organizations this company can spend from",
|
|
4254
|
+
"examples": [
|
|
4255
|
+
"<%= config.bin %> asa orgs list"
|
|
4256
|
+
],
|
|
4257
|
+
"flags": {
|
|
4258
|
+
"json": {
|
|
4259
|
+
"description": "Format output as json.",
|
|
4260
|
+
"helpGroup": "GLOBAL",
|
|
4261
|
+
"name": "json",
|
|
4262
|
+
"allowNo": false,
|
|
4263
|
+
"type": "boolean"
|
|
4264
|
+
},
|
|
4265
|
+
"page": {
|
|
4266
|
+
"description": "Page number",
|
|
4267
|
+
"name": "page",
|
|
4268
|
+
"default": 1,
|
|
4269
|
+
"hasDynamicHelp": false,
|
|
4270
|
+
"multiple": false,
|
|
4271
|
+
"type": "option"
|
|
4272
|
+
},
|
|
4273
|
+
"page-size": {
|
|
4274
|
+
"description": "Items per page (max 1000); prefer one big page over a pagination loop",
|
|
4275
|
+
"name": "page-size",
|
|
4276
|
+
"default": 100,
|
|
4277
|
+
"hasDynamicHelp": false,
|
|
4278
|
+
"multiple": false,
|
|
4279
|
+
"type": "option"
|
|
4280
|
+
}
|
|
4281
|
+
},
|
|
4282
|
+
"hasDynamicHelp": false,
|
|
4283
|
+
"hiddenAliases": [],
|
|
4284
|
+
"id": "asa:orgs:list",
|
|
4285
|
+
"pluginAlias": "adapty",
|
|
4286
|
+
"pluginName": "adapty",
|
|
4287
|
+
"pluginType": "core",
|
|
4288
|
+
"strict": true,
|
|
4289
|
+
"enableJsonFlag": true,
|
|
4290
|
+
"isESM": true,
|
|
4291
|
+
"relativePath": [
|
|
4292
|
+
"dist",
|
|
4293
|
+
"commands",
|
|
4294
|
+
"asa",
|
|
4295
|
+
"orgs",
|
|
4296
|
+
"list.js"
|
|
4297
|
+
]
|
|
4298
|
+
},
|
|
4250
4299
|
"asa:product-pages:list": {
|
|
4251
4300
|
"aliases": [],
|
|
4252
4301
|
"args": {},
|
|
@@ -4465,55 +4514,6 @@
|
|
|
4465
4514
|
"list.js"
|
|
4466
4515
|
]
|
|
4467
4516
|
},
|
|
4468
|
-
"asa:orgs:list": {
|
|
4469
|
-
"aliases": [],
|
|
4470
|
-
"args": {},
|
|
4471
|
-
"description": "List the Apple Search Ads organizations this company can spend from",
|
|
4472
|
-
"examples": [
|
|
4473
|
-
"<%= config.bin %> asa orgs list"
|
|
4474
|
-
],
|
|
4475
|
-
"flags": {
|
|
4476
|
-
"json": {
|
|
4477
|
-
"description": "Format output as json.",
|
|
4478
|
-
"helpGroup": "GLOBAL",
|
|
4479
|
-
"name": "json",
|
|
4480
|
-
"allowNo": false,
|
|
4481
|
-
"type": "boolean"
|
|
4482
|
-
},
|
|
4483
|
-
"page": {
|
|
4484
|
-
"description": "Page number",
|
|
4485
|
-
"name": "page",
|
|
4486
|
-
"default": 1,
|
|
4487
|
-
"hasDynamicHelp": false,
|
|
4488
|
-
"multiple": false,
|
|
4489
|
-
"type": "option"
|
|
4490
|
-
},
|
|
4491
|
-
"page-size": {
|
|
4492
|
-
"description": "Items per page (max 1000); prefer one big page over a pagination loop",
|
|
4493
|
-
"name": "page-size",
|
|
4494
|
-
"default": 100,
|
|
4495
|
-
"hasDynamicHelp": false,
|
|
4496
|
-
"multiple": false,
|
|
4497
|
-
"type": "option"
|
|
4498
|
-
}
|
|
4499
|
-
},
|
|
4500
|
-
"hasDynamicHelp": false,
|
|
4501
|
-
"hiddenAliases": [],
|
|
4502
|
-
"id": "asa:orgs:list",
|
|
4503
|
-
"pluginAlias": "adapty",
|
|
4504
|
-
"pluginName": "adapty",
|
|
4505
|
-
"pluginType": "core",
|
|
4506
|
-
"strict": true,
|
|
4507
|
-
"enableJsonFlag": true,
|
|
4508
|
-
"isESM": true,
|
|
4509
|
-
"relativePath": [
|
|
4510
|
-
"dist",
|
|
4511
|
-
"commands",
|
|
4512
|
-
"asa",
|
|
4513
|
-
"orgs",
|
|
4514
|
-
"list.js"
|
|
4515
|
-
]
|
|
4516
|
-
},
|
|
4517
4517
|
"flows:config:get": {
|
|
4518
4518
|
"aliases": [],
|
|
4519
4519
|
"args": {
|
|
@@ -4706,7 +4706,117 @@
|
|
|
4706
4706
|
"config",
|
|
4707
4707
|
"update.js"
|
|
4708
4708
|
]
|
|
4709
|
+
},
|
|
4710
|
+
"flows:config:validate": {
|
|
4711
|
+
"aliases": [],
|
|
4712
|
+
"args": {
|
|
4713
|
+
"flow_id": {
|
|
4714
|
+
"description": "Flow ID (UUID)",
|
|
4715
|
+
"name": "flow_id",
|
|
4716
|
+
"required": true
|
|
4717
|
+
}
|
|
4718
|
+
},
|
|
4719
|
+
"description": "Check whether a builder config is publishable (advisory; does not save). Exits non-zero when the config is not publishable.",
|
|
4720
|
+
"examples": [
|
|
4721
|
+
"<%= config.bin %> flows config validate --app UUID FLOW_UUID --config-file config.json",
|
|
4722
|
+
"cat config.json | <%= config.bin %> flows config validate --app UUID FLOW_UUID --config-file -",
|
|
4723
|
+
"<%= config.bin %> flows config validate --app UUID FLOW_UUID --config '{\"screens\":[],\"locales\":[]}'"
|
|
4724
|
+
],
|
|
4725
|
+
"flags": {
|
|
4726
|
+
"json": {
|
|
4727
|
+
"description": "Format output as json.",
|
|
4728
|
+
"helpGroup": "GLOBAL",
|
|
4729
|
+
"name": "json",
|
|
4730
|
+
"allowNo": false,
|
|
4731
|
+
"type": "boolean"
|
|
4732
|
+
},
|
|
4733
|
+
"app": {
|
|
4734
|
+
"description": "App ID (UUID)",
|
|
4735
|
+
"name": "app",
|
|
4736
|
+
"required": true,
|
|
4737
|
+
"hasDynamicHelp": false,
|
|
4738
|
+
"multiple": false,
|
|
4739
|
+
"type": "option"
|
|
4740
|
+
},
|
|
4741
|
+
"config": {
|
|
4742
|
+
"description": "Builder config as a JSON string",
|
|
4743
|
+
"name": "config",
|
|
4744
|
+
"hasDynamicHelp": false,
|
|
4745
|
+
"multiple": false,
|
|
4746
|
+
"type": "option"
|
|
4747
|
+
},
|
|
4748
|
+
"config-file": {
|
|
4749
|
+
"description": "JSON file with the builder config, or - to read stdin",
|
|
4750
|
+
"name": "config-file",
|
|
4751
|
+
"hasDynamicHelp": false,
|
|
4752
|
+
"multiple": false,
|
|
4753
|
+
"type": "option"
|
|
4754
|
+
}
|
|
4755
|
+
},
|
|
4756
|
+
"hasDynamicHelp": false,
|
|
4757
|
+
"hiddenAliases": [],
|
|
4758
|
+
"id": "flows:config:validate",
|
|
4759
|
+
"pluginAlias": "adapty",
|
|
4760
|
+
"pluginName": "adapty",
|
|
4761
|
+
"pluginType": "core",
|
|
4762
|
+
"strict": true,
|
|
4763
|
+
"enableJsonFlag": true,
|
|
4764
|
+
"isESM": true,
|
|
4765
|
+
"relativePath": [
|
|
4766
|
+
"dist",
|
|
4767
|
+
"commands",
|
|
4768
|
+
"flows",
|
|
4769
|
+
"config",
|
|
4770
|
+
"validate.js"
|
|
4771
|
+
]
|
|
4772
|
+
},
|
|
4773
|
+
"flows:media:upload": {
|
|
4774
|
+
"aliases": [],
|
|
4775
|
+
"args": {
|
|
4776
|
+
"file": {
|
|
4777
|
+
"description": "Path to the image file to upload",
|
|
4778
|
+
"name": "file",
|
|
4779
|
+
"required": true
|
|
4780
|
+
}
|
|
4781
|
+
},
|
|
4782
|
+
"description": "Upload an image as a flow builder asset; prints the CDN URL to reference from a flow config",
|
|
4783
|
+
"examples": [
|
|
4784
|
+
"<%= config.bin %> flows media upload --app UUID ./onboarding-hero.png"
|
|
4785
|
+
],
|
|
4786
|
+
"flags": {
|
|
4787
|
+
"json": {
|
|
4788
|
+
"description": "Format output as json.",
|
|
4789
|
+
"helpGroup": "GLOBAL",
|
|
4790
|
+
"name": "json",
|
|
4791
|
+
"allowNo": false,
|
|
4792
|
+
"type": "boolean"
|
|
4793
|
+
},
|
|
4794
|
+
"app": {
|
|
4795
|
+
"description": "App ID (UUID)",
|
|
4796
|
+
"name": "app",
|
|
4797
|
+
"required": true,
|
|
4798
|
+
"hasDynamicHelp": false,
|
|
4799
|
+
"multiple": false,
|
|
4800
|
+
"type": "option"
|
|
4801
|
+
}
|
|
4802
|
+
},
|
|
4803
|
+
"hasDynamicHelp": false,
|
|
4804
|
+
"hiddenAliases": [],
|
|
4805
|
+
"id": "flows:media:upload",
|
|
4806
|
+
"pluginAlias": "adapty",
|
|
4807
|
+
"pluginName": "adapty",
|
|
4808
|
+
"pluginType": "core",
|
|
4809
|
+
"strict": true,
|
|
4810
|
+
"enableJsonFlag": true,
|
|
4811
|
+
"isESM": true,
|
|
4812
|
+
"relativePath": [
|
|
4813
|
+
"dist",
|
|
4814
|
+
"commands",
|
|
4815
|
+
"flows",
|
|
4816
|
+
"media",
|
|
4817
|
+
"upload.js"
|
|
4818
|
+
]
|
|
4709
4819
|
}
|
|
4710
4820
|
},
|
|
4711
|
-
"version": "0.
|
|
4821
|
+
"version": "0.8.0"
|
|
4712
4822
|
}
|