adapty 0.8.4-beta.1 → 0.8.5

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 (107) hide show
  1. package/README.md +133 -3
  2. package/bin/dev.js +2 -2
  3. package/bin/run.js +2 -2
  4. package/dist/commands/access-levels/create.js +1 -1
  5. package/dist/commands/access-levels/list.d.ts +1 -1
  6. package/dist/commands/apps/create.js +9 -6
  7. package/dist/commands/apps/list.d.ts +1 -1
  8. package/dist/commands/apps/update.js +7 -4
  9. package/dist/commands/asa/ad-groups/create.js +9 -7
  10. package/dist/commands/asa/ad-groups/get.js +3 -2
  11. package/dist/commands/asa/ad-groups/list.d.ts +1 -1
  12. package/dist/commands/asa/ad-groups/list.js +1 -1
  13. package/dist/commands/asa/ad-groups/update.js +22 -12
  14. package/dist/commands/asa/ads/create.js +7 -5
  15. package/dist/commands/asa/ads/get.js +3 -2
  16. package/dist/commands/asa/ads/list.d.ts +1 -1
  17. package/dist/commands/asa/ads/list.js +1 -1
  18. package/dist/commands/asa/ads/update.js +9 -5
  19. package/dist/commands/asa/apps/list.d.ts +1 -1
  20. package/dist/commands/asa/apps/list.js +1 -1
  21. package/dist/commands/asa/automations/create.d.ts +9 -0
  22. package/dist/commands/asa/automations/create.js +26 -7
  23. package/dist/commands/asa/automations/get.js +3 -2
  24. package/dist/commands/asa/automations/list.d.ts +1 -1
  25. package/dist/commands/asa/automations/list.js +1 -1
  26. package/dist/commands/asa/automations/run.js +5 -3
  27. package/dist/commands/asa/automations/runs.d.ts +1 -1
  28. package/dist/commands/asa/automations/runs.js +4 -4
  29. package/dist/commands/asa/automations/update.d.ts +9 -0
  30. package/dist/commands/asa/automations/update.js +36 -12
  31. package/dist/commands/asa/campaigns/bulk-create.js +31 -18
  32. package/dist/commands/asa/campaigns/bulk-list.js +7 -5
  33. package/dist/commands/asa/campaigns/bulk-status.js +3 -2
  34. package/dist/commands/asa/campaigns/create.js +10 -8
  35. package/dist/commands/asa/campaigns/get.js +3 -2
  36. package/dist/commands/asa/campaigns/list.d.ts +1 -1
  37. package/dist/commands/asa/campaigns/list.js +1 -1
  38. package/dist/commands/asa/campaigns/update.js +25 -15
  39. package/dist/commands/asa/competitors/summary.js +5 -5
  40. package/dist/commands/asa/connect.js +5 -3
  41. package/dist/commands/asa/creatives/list.d.ts +1 -1
  42. package/dist/commands/asa/creatives/list.js +1 -1
  43. package/dist/commands/asa/keywords/add.js +13 -10
  44. package/dist/commands/asa/keywords/list.d.ts +1 -1
  45. package/dist/commands/asa/keywords/list.js +1 -1
  46. package/dist/commands/asa/keywords/update.js +15 -10
  47. package/dist/commands/asa/metrics/index.d.ts +6 -3
  48. package/dist/commands/asa/metrics/index.js +38 -14
  49. package/dist/commands/asa/metrics/overview.js +3 -3
  50. package/dist/commands/asa/negative-keywords/add.js +10 -7
  51. package/dist/commands/asa/negative-keywords/list.d.ts +1 -1
  52. package/dist/commands/asa/negative-keywords/list.js +1 -1
  53. package/dist/commands/asa/orgs/list.d.ts +1 -1
  54. package/dist/commands/asa/orgs/list.js +1 -1
  55. package/dist/commands/asa/product-pages/list.d.ts +1 -1
  56. package/dist/commands/asa/product-pages/list.js +1 -1
  57. package/dist/commands/asa/product-pages/sync.js +1 -1
  58. package/dist/commands/asa/search-terms/list.d.ts +1 -1
  59. package/dist/commands/asa/search-terms/list.js +1 -1
  60. package/dist/commands/asa/whoami.js +7 -2
  61. package/dist/commands/auth/login.js +3 -1
  62. package/dist/commands/flows/config/get.js +2 -2
  63. package/dist/commands/flows/config/preview.d.ts +2 -2
  64. package/dist/commands/flows/config/preview.js +6 -4
  65. package/dist/commands/flows/config/update.js +5 -3
  66. package/dist/commands/flows/config/validate.js +5 -3
  67. package/dist/commands/flows/list.d.ts +1 -1
  68. package/dist/commands/flows/media/upload.js +1 -1
  69. package/dist/commands/flows/publish.js +5 -5
  70. package/dist/commands/paywalls/create.js +1 -1
  71. package/dist/commands/paywalls/list.d.ts +1 -1
  72. package/dist/commands/paywalls/placements.d.ts +2 -2
  73. package/dist/commands/paywalls/update.js +1 -1
  74. package/dist/commands/placements/create.js +17 -12
  75. package/dist/commands/placements/list.d.ts +1 -1
  76. package/dist/commands/placements/update.js +20 -15
  77. package/dist/commands/products/create.js +20 -13
  78. package/dist/commands/products/list.d.ts +1 -1
  79. package/dist/commands/products/update.js +1 -1
  80. package/dist/commands/segments/list.d.ts +1 -1
  81. package/dist/lib/api-client.d.ts +10 -6
  82. package/dist/lib/api-client.js +56 -35
  83. package/dist/lib/api-schemas.d.ts +56 -56
  84. package/dist/lib/app-url.js +2 -1
  85. package/dist/lib/asa-client.d.ts +13 -8
  86. package/dist/lib/asa-client.js +9 -4
  87. package/dist/lib/asa-flags.d.ts +37 -13
  88. package/dist/lib/asa-flags.js +87 -20
  89. package/dist/lib/asa-keyword-action.d.ts +18 -0
  90. package/dist/lib/asa-keyword-action.js +175 -0
  91. package/dist/lib/asa-schemas.d.ts +100 -80
  92. package/dist/lib/auth.js +2 -1
  93. package/dist/lib/client-from-config.d.ts +1 -1
  94. package/dist/lib/client-from-config.js +2 -1
  95. package/dist/lib/config.d.ts +2 -2
  96. package/dist/lib/confirm.d.ts +4 -4
  97. package/dist/lib/confirm.js +12 -7
  98. package/dist/lib/errors.d.ts +18 -18
  99. package/dist/lib/errors.js +14 -10
  100. package/dist/lib/flags.d.ts +3 -3
  101. package/dist/lib/flags.js +2 -1
  102. package/dist/lib/flow-help.js +11 -6
  103. package/dist/lib/output.js +23 -12
  104. package/dist/lib/preview.d.ts +5 -5
  105. package/dist/lib/preview.js +2 -1
  106. package/oclif.manifest.json +372 -200
  107. package/package.json +10 -8
@@ -425,36 +425,59 @@
425
425
  "update.js"
426
426
  ]
427
427
  },
428
- "auth:login": {
428
+ "asa:connect": {
429
429
  "aliases": [],
430
430
  "args": {},
431
- "description": "Authenticate with Adapty via browser",
431
+ "description": "Connect an Apple Search Ads account to this company",
432
432
  "examples": [
433
- "<%= config.bin %> auth login"
433
+ "<%= config.bin %> asa connect",
434
+ "<%= config.bin %> asa connect --no-wait"
434
435
  ],
435
- "flags": {},
436
+ "flags": {
437
+ "json": {
438
+ "description": "Format output as json.",
439
+ "helpGroup": "GLOBAL",
440
+ "name": "json",
441
+ "allowNo": false,
442
+ "type": "boolean"
443
+ },
444
+ "timeout": {
445
+ "description": "Seconds to wait for the browser step",
446
+ "name": "timeout",
447
+ "default": 300,
448
+ "hasDynamicHelp": false,
449
+ "multiple": false,
450
+ "type": "option"
451
+ },
452
+ "wait": {
453
+ "description": "Wait until Apple Ads reports as connected",
454
+ "name": "wait",
455
+ "allowNo": true,
456
+ "type": "boolean"
457
+ }
458
+ },
436
459
  "hasDynamicHelp": false,
437
460
  "hiddenAliases": [],
438
- "id": "auth:login",
461
+ "id": "asa:connect",
439
462
  "pluginAlias": "adapty",
440
463
  "pluginName": "adapty",
441
464
  "pluginType": "core",
442
465
  "strict": true,
443
- "enableJsonFlag": false,
466
+ "enableJsonFlag": true,
444
467
  "isESM": true,
445
468
  "relativePath": [
446
469
  "dist",
447
470
  "commands",
448
- "auth",
449
- "login.js"
471
+ "asa",
472
+ "connect.js"
450
473
  ]
451
474
  },
452
- "auth:logout": {
475
+ "asa:whoami": {
453
476
  "aliases": [],
454
477
  "args": {},
455
- "description": "Remove stored authentication token",
478
+ "description": "Show which company the token unlocks, whether Apple Ads is connected, and the request budgets it gets\n\nLimits are raised per company, so read them here rather than assuming the defaults: metrics_limit_per_minute\nand metrics_burst_limit govern asa metrics, keywords_read_limit_per_minute the keyword lists,\nmetrics_inflight_limit how many analytics calls may overlap, and max_breakdown_rows_per_page the size a\ngrouped page may project to before it is refused.",
456
479
  "examples": [
457
- "<%= config.bin %> auth logout"
480
+ "<%= config.bin %> asa whoami"
458
481
  ],
459
482
  "flags": {
460
483
  "json": {
@@ -467,7 +490,7 @@
467
490
  },
468
491
  "hasDynamicHelp": false,
469
492
  "hiddenAliases": [],
470
- "id": "auth:logout",
493
+ "id": "asa:whoami",
471
494
  "pluginAlias": "adapty",
472
495
  "pluginName": "adapty",
473
496
  "pluginType": "core",
@@ -477,48 +500,40 @@
477
500
  "relativePath": [
478
501
  "dist",
479
502
  "commands",
480
- "auth",
481
- "logout.js"
503
+ "asa",
504
+ "whoami.js"
482
505
  ]
483
506
  },
484
- "auth:revoke": {
507
+ "auth:login": {
485
508
  "aliases": [],
486
509
  "args": {},
487
- "description": "Revoke the current authentication token",
510
+ "description": "Authenticate with Adapty via browser",
488
511
  "examples": [
489
- "<%= config.bin %> auth revoke"
512
+ "<%= config.bin %> auth login"
490
513
  ],
491
- "flags": {
492
- "json": {
493
- "description": "Format output as json.",
494
- "helpGroup": "GLOBAL",
495
- "name": "json",
496
- "allowNo": false,
497
- "type": "boolean"
498
- }
499
- },
514
+ "flags": {},
500
515
  "hasDynamicHelp": false,
501
516
  "hiddenAliases": [],
502
- "id": "auth:revoke",
517
+ "id": "auth:login",
503
518
  "pluginAlias": "adapty",
504
519
  "pluginName": "adapty",
505
520
  "pluginType": "core",
506
521
  "strict": true,
507
- "enableJsonFlag": true,
522
+ "enableJsonFlag": false,
508
523
  "isESM": true,
509
524
  "relativePath": [
510
525
  "dist",
511
526
  "commands",
512
527
  "auth",
513
- "revoke.js"
528
+ "login.js"
514
529
  ]
515
530
  },
516
- "auth:status": {
531
+ "auth:logout": {
517
532
  "aliases": [],
518
533
  "args": {},
519
- "description": "Show current authentication state (local only)",
534
+ "description": "Remove stored authentication token",
520
535
  "examples": [
521
- "<%= config.bin %> auth status"
536
+ "<%= config.bin %> auth logout"
522
537
  ],
523
538
  "flags": {
524
539
  "json": {
@@ -531,7 +546,7 @@
531
546
  },
532
547
  "hasDynamicHelp": false,
533
548
  "hiddenAliases": [],
534
- "id": "auth:status",
549
+ "id": "auth:logout",
535
550
  "pluginAlias": "adapty",
536
551
  "pluginName": "adapty",
537
552
  "pluginType": "core",
@@ -542,15 +557,15 @@
542
557
  "dist",
543
558
  "commands",
544
559
  "auth",
545
- "status.js"
560
+ "logout.js"
546
561
  ]
547
562
  },
548
- "auth:whoami": {
563
+ "auth:revoke": {
549
564
  "aliases": [],
550
565
  "args": {},
551
- "description": "Show current user info from server (verifies token)",
566
+ "description": "Revoke the current authentication token",
552
567
  "examples": [
553
- "<%= config.bin %> auth whoami"
568
+ "<%= config.bin %> auth revoke"
554
569
  ],
555
570
  "flags": {
556
571
  "json": {
@@ -563,7 +578,7 @@
563
578
  },
564
579
  "hasDynamicHelp": false,
565
580
  "hiddenAliases": [],
566
- "id": "auth:whoami",
581
+ "id": "auth:revoke",
567
582
  "pluginAlias": "adapty",
568
583
  "pluginName": "adapty",
569
584
  "pluginType": "core",
@@ -574,16 +589,15 @@
574
589
  "dist",
575
590
  "commands",
576
591
  "auth",
577
- "whoami.js"
592
+ "revoke.js"
578
593
  ]
579
594
  },
580
- "asa:connect": {
595
+ "auth:status": {
581
596
  "aliases": [],
582
597
  "args": {},
583
- "description": "Connect an Apple Search Ads account to this company",
598
+ "description": "Show current authentication state (local only)",
584
599
  "examples": [
585
- "<%= config.bin %> asa connect",
586
- "<%= config.bin %> asa connect --no-wait"
600
+ "<%= config.bin %> auth status"
587
601
  ],
588
602
  "flags": {
589
603
  "json": {
@@ -592,25 +606,11 @@
592
606
  "name": "json",
593
607
  "allowNo": false,
594
608
  "type": "boolean"
595
- },
596
- "timeout": {
597
- "description": "Seconds to wait for the browser step",
598
- "name": "timeout",
599
- "default": 300,
600
- "hasDynamicHelp": false,
601
- "multiple": false,
602
- "type": "option"
603
- },
604
- "wait": {
605
- "description": "Wait until Apple Ads reports as connected",
606
- "name": "wait",
607
- "allowNo": true,
608
- "type": "boolean"
609
609
  }
610
610
  },
611
611
  "hasDynamicHelp": false,
612
612
  "hiddenAliases": [],
613
- "id": "asa:connect",
613
+ "id": "auth:status",
614
614
  "pluginAlias": "adapty",
615
615
  "pluginName": "adapty",
616
616
  "pluginType": "core",
@@ -620,16 +620,16 @@
620
620
  "relativePath": [
621
621
  "dist",
622
622
  "commands",
623
- "asa",
624
- "connect.js"
623
+ "auth",
624
+ "status.js"
625
625
  ]
626
626
  },
627
- "asa:whoami": {
627
+ "auth:whoami": {
628
628
  "aliases": [],
629
629
  "args": {},
630
- "description": "Show which company the token unlocks and whether Apple Ads is connected",
630
+ "description": "Show current user info from server (verifies token)",
631
631
  "examples": [
632
- "<%= config.bin %> asa whoami"
632
+ "<%= config.bin %> auth whoami"
633
633
  ],
634
634
  "flags": {
635
635
  "json": {
@@ -642,7 +642,7 @@
642
642
  },
643
643
  "hasDynamicHelp": false,
644
644
  "hiddenAliases": [],
645
- "id": "asa:whoami",
645
+ "id": "auth:whoami",
646
646
  "pluginAlias": "adapty",
647
647
  "pluginName": "adapty",
648
648
  "pluginType": "core",
@@ -652,7 +652,7 @@
652
652
  "relativePath": [
653
653
  "dist",
654
654
  "commands",
655
- "asa",
655
+ "auth",
656
656
  "whoami.js"
657
657
  ]
658
658
  },
@@ -2198,56 +2198,6 @@
2198
2198
  "update.js"
2199
2199
  ]
2200
2200
  },
2201
- "asa:apps:list": {
2202
- "aliases": [],
2203
- "args": {},
2204
- "description": "List the apps promoted by this company in Apple Search Ads",
2205
- "examples": [
2206
- "<%= config.bin %> asa apps list",
2207
- "<%= config.bin %> asa apps list --page 2 --page-size 50"
2208
- ],
2209
- "flags": {
2210
- "json": {
2211
- "description": "Format output as json.",
2212
- "helpGroup": "GLOBAL",
2213
- "name": "json",
2214
- "allowNo": false,
2215
- "type": "boolean"
2216
- },
2217
- "page": {
2218
- "description": "Page number",
2219
- "name": "page",
2220
- "default": 1,
2221
- "hasDynamicHelp": false,
2222
- "multiple": false,
2223
- "type": "option"
2224
- },
2225
- "page-size": {
2226
- "description": "Items per page (max 1000); prefer one big page over a pagination loop",
2227
- "name": "page-size",
2228
- "default": 100,
2229
- "hasDynamicHelp": false,
2230
- "multiple": false,
2231
- "type": "option"
2232
- }
2233
- },
2234
- "hasDynamicHelp": false,
2235
- "hiddenAliases": [],
2236
- "id": "asa:apps:list",
2237
- "pluginAlias": "adapty",
2238
- "pluginName": "adapty",
2239
- "pluginType": "core",
2240
- "strict": true,
2241
- "enableJsonFlag": true,
2242
- "isESM": true,
2243
- "relativePath": [
2244
- "dist",
2245
- "commands",
2246
- "asa",
2247
- "apps",
2248
- "list.js"
2249
- ]
2250
- },
2251
2201
  "asa:ads:create": {
2252
2202
  "aliases": [],
2253
2203
  "args": {},
@@ -2529,13 +2479,65 @@
2529
2479
  "update.js"
2530
2480
  ]
2531
2481
  },
2482
+ "asa:apps:list": {
2483
+ "aliases": [],
2484
+ "args": {},
2485
+ "description": "List the apps promoted by this company in Apple Search Ads",
2486
+ "examples": [
2487
+ "<%= config.bin %> asa apps list",
2488
+ "<%= config.bin %> asa apps list --page 2 --page-size 50"
2489
+ ],
2490
+ "flags": {
2491
+ "json": {
2492
+ "description": "Format output as json.",
2493
+ "helpGroup": "GLOBAL",
2494
+ "name": "json",
2495
+ "allowNo": false,
2496
+ "type": "boolean"
2497
+ },
2498
+ "page": {
2499
+ "description": "Page number",
2500
+ "name": "page",
2501
+ "default": 1,
2502
+ "hasDynamicHelp": false,
2503
+ "multiple": false,
2504
+ "type": "option"
2505
+ },
2506
+ "page-size": {
2507
+ "description": "Items per page (max 1000); prefer one big page over a pagination loop",
2508
+ "name": "page-size",
2509
+ "default": 100,
2510
+ "hasDynamicHelp": false,
2511
+ "multiple": false,
2512
+ "type": "option"
2513
+ }
2514
+ },
2515
+ "hasDynamicHelp": false,
2516
+ "hiddenAliases": [],
2517
+ "id": "asa:apps:list",
2518
+ "pluginAlias": "adapty",
2519
+ "pluginName": "adapty",
2520
+ "pluginType": "core",
2521
+ "strict": true,
2522
+ "enableJsonFlag": true,
2523
+ "isESM": true,
2524
+ "relativePath": [
2525
+ "dist",
2526
+ "commands",
2527
+ "asa",
2528
+ "apps",
2529
+ "list.js"
2530
+ ]
2531
+ },
2532
2532
  "asa:automations:create": {
2533
2533
  "aliases": [],
2534
2534
  "args": {},
2535
- "description": "Create an automation rule from a JSON rule file",
2535
+ "description": "Create an automation rule from a JSON rule file. The add-as-keyword action flags fill in or override actions[0].params, so the bid, the match type and the target ad groups need no hand-written JSON.",
2536
2536
  "examples": [
2537
2537
  "<%= config.bin %> asa automations create --file rule.json",
2538
- "<%= config.bin %> asa automations create --file rule.json --run-now"
2538
+ "<%= config.bin %> asa automations create --file rule.json --run-now",
2539
+ "<%= config.bin %> asa automations create --file rule.json --target-ad-group AD_GROUP_ID --match-type EXACT --cpt-bid-type search_term_current_cpt",
2540
+ "<%= config.bin %> asa automations create --file rule.json --target-ad-group AD_GROUP_ID --match-type EXACT --cpt-bid-type set_to --cpt-bid 1.50 --negate ad-group"
2539
2541
  ],
2540
2542
  "flags": {
2541
2543
  "json": {
@@ -2545,6 +2547,79 @@
2545
2547
  "allowNo": false,
2546
2548
  "type": "boolean"
2547
2549
  },
2550
+ "cpt-bid": {
2551
+ "description": "cpt_bid.value: the bid itself with --cpt-bid-type set_to, or a percent markup on the entity bid with search_term_current_cpt / keyword_current_bid; not accepted with ad_group_default_bid",
2552
+ "name": "cpt-bid",
2553
+ "hasDynamicHelp": false,
2554
+ "multiple": false,
2555
+ "type": "option"
2556
+ },
2557
+ "cpt-bid-type": {
2558
+ "description": "Where the bid of the created keyword comes from; the API has no default",
2559
+ "name": "cpt-bid-type",
2560
+ "hasDynamicHelp": false,
2561
+ "multiple": false,
2562
+ "options": [
2563
+ "ad_group_default_bid",
2564
+ "keyword_current_bid",
2565
+ "search_term_current_cpt",
2566
+ "set_to"
2567
+ ],
2568
+ "type": "option"
2569
+ },
2570
+ "match-type": {
2571
+ "description": "Match type of the created keyword; the API has no default",
2572
+ "name": "match-type",
2573
+ "hasDynamicHelp": false,
2574
+ "multiple": false,
2575
+ "options": [
2576
+ "BROAD",
2577
+ "EXACT"
2578
+ ],
2579
+ "type": "option"
2580
+ },
2581
+ "negate": {
2582
+ "description": "Also add the search term as a negative keyword at this level (search-term rules)",
2583
+ "exclusive": [
2584
+ "no-negate"
2585
+ ],
2586
+ "name": "negate",
2587
+ "hasDynamicHelp": false,
2588
+ "multiple": false,
2589
+ "options": [
2590
+ "ad-group",
2591
+ "campaign"
2592
+ ],
2593
+ "type": "option"
2594
+ },
2595
+ "no-negate": {
2596
+ "description": "Leave no negative keyword behind (search-term rules)",
2597
+ "exclusive": [
2598
+ "negate"
2599
+ ],
2600
+ "name": "no-negate",
2601
+ "allowNo": false,
2602
+ "type": "boolean"
2603
+ },
2604
+ "pause-original": {
2605
+ "description": "Pause the source keyword in its own ad group (targeting-keyword rules)",
2606
+ "name": "pause-original",
2607
+ "allowNo": true,
2608
+ "type": "boolean"
2609
+ },
2610
+ "skip-enable-duplicates": {
2611
+ "description": "Skip a keyword that already exists in the target ad group instead of enabling it (search-term rules)",
2612
+ "name": "skip-enable-duplicates",
2613
+ "allowNo": true,
2614
+ "type": "boolean"
2615
+ },
2616
+ "target-ad-group": {
2617
+ "description": "Ad group the keyword is added to (UUID), repeatable; a rule without one does nothing",
2618
+ "name": "target-ad-group",
2619
+ "hasDynamicHelp": false,
2620
+ "multiple": true,
2621
+ "type": "option"
2622
+ },
2548
2623
  "yes": {
2549
2624
  "char": "y",
2550
2625
  "description": "Apply without asking; required when the output is piped or --json is used",
@@ -2803,10 +2878,11 @@
2803
2878
  "required": true
2804
2879
  }
2805
2880
  },
2806
- "description": "Change an automation rule: stop it, rename it, or replace parts of the rule",
2881
+ "description": "Change an automation rule: stop it, rename it, or replace parts of the rule. An add-as-keyword action flag turns the call into a read-modify-write: the rule is read, actions[0].params is rebuilt from the flags and the whole actions list is written back — an edit someone makes in the dashboard in between is overwritten. This is also the way to repair a rule whose stored params carry the wrong shape.",
2807
2882
  "examples": [
2808
2883
  "<%= config.bin %> asa automations update UUID --stop",
2809
- "<%= config.bin %> asa automations update UUID --file rule.json"
2884
+ "<%= config.bin %> asa automations update UUID --file rule.json",
2885
+ "<%= config.bin %> asa automations update UUID --target-ad-group AD_GROUP_ID --match-type EXACT --cpt-bid-type search_term_current_cpt"
2810
2886
  ],
2811
2887
  "flags": {
2812
2888
  "json": {
@@ -2816,6 +2892,79 @@
2816
2892
  "allowNo": false,
2817
2893
  "type": "boolean"
2818
2894
  },
2895
+ "cpt-bid": {
2896
+ "description": "cpt_bid.value: the bid itself with --cpt-bid-type set_to, or a percent markup on the entity bid with search_term_current_cpt / keyword_current_bid; not accepted with ad_group_default_bid",
2897
+ "name": "cpt-bid",
2898
+ "hasDynamicHelp": false,
2899
+ "multiple": false,
2900
+ "type": "option"
2901
+ },
2902
+ "cpt-bid-type": {
2903
+ "description": "Where the bid of the created keyword comes from; the API has no default",
2904
+ "name": "cpt-bid-type",
2905
+ "hasDynamicHelp": false,
2906
+ "multiple": false,
2907
+ "options": [
2908
+ "ad_group_default_bid",
2909
+ "keyword_current_bid",
2910
+ "search_term_current_cpt",
2911
+ "set_to"
2912
+ ],
2913
+ "type": "option"
2914
+ },
2915
+ "match-type": {
2916
+ "description": "Match type of the created keyword; the API has no default",
2917
+ "name": "match-type",
2918
+ "hasDynamicHelp": false,
2919
+ "multiple": false,
2920
+ "options": [
2921
+ "BROAD",
2922
+ "EXACT"
2923
+ ],
2924
+ "type": "option"
2925
+ },
2926
+ "negate": {
2927
+ "description": "Also add the search term as a negative keyword at this level (search-term rules)",
2928
+ "exclusive": [
2929
+ "no-negate"
2930
+ ],
2931
+ "name": "negate",
2932
+ "hasDynamicHelp": false,
2933
+ "multiple": false,
2934
+ "options": [
2935
+ "ad-group",
2936
+ "campaign"
2937
+ ],
2938
+ "type": "option"
2939
+ },
2940
+ "no-negate": {
2941
+ "description": "Leave no negative keyword behind (search-term rules)",
2942
+ "exclusive": [
2943
+ "negate"
2944
+ ],
2945
+ "name": "no-negate",
2946
+ "allowNo": false,
2947
+ "type": "boolean"
2948
+ },
2949
+ "pause-original": {
2950
+ "description": "Pause the source keyword in its own ad group (targeting-keyword rules)",
2951
+ "name": "pause-original",
2952
+ "allowNo": true,
2953
+ "type": "boolean"
2954
+ },
2955
+ "skip-enable-duplicates": {
2956
+ "description": "Skip a keyword that already exists in the target ad group instead of enabling it (search-term rules)",
2957
+ "name": "skip-enable-duplicates",
2958
+ "allowNo": true,
2959
+ "type": "boolean"
2960
+ },
2961
+ "target-ad-group": {
2962
+ "description": "Ad group the keyword is added to (UUID), repeatable; a rule without one does nothing",
2963
+ "name": "target-ad-group",
2964
+ "hasDynamicHelp": false,
2965
+ "multiple": true,
2966
+ "type": "option"
2967
+ },
2819
2968
  "yes": {
2820
2969
  "char": "y",
2821
2970
  "description": "Apply without asking; required when the output is piped or --json is used",
@@ -2880,47 +3029,6 @@
2880
3029
  "update.js"
2881
3030
  ]
2882
3031
  },
2883
- "asa:competitors:summary": {
2884
- "aliases": [],
2885
- "args": {},
2886
- "description": "Competitor summary for up to five App Store apps; the server covers the last full month and every country",
2887
- "examples": [
2888
- "<%= config.bin %> asa competitors summary --app-ids 1668337467,6503873027"
2889
- ],
2890
- "flags": {
2891
- "json": {
2892
- "description": "Format output as json.",
2893
- "helpGroup": "GLOBAL",
2894
- "name": "json",
2895
- "allowNo": false,
2896
- "type": "boolean"
2897
- },
2898
- "app-ids": {
2899
- "description": "Apple App Store IDs (adam_id), comma-separated, 1-5 values",
2900
- "name": "app-ids",
2901
- "required": true,
2902
- "hasDynamicHelp": false,
2903
- "multiple": false,
2904
- "type": "option"
2905
- }
2906
- },
2907
- "hasDynamicHelp": false,
2908
- "hiddenAliases": [],
2909
- "id": "asa:competitors:summary",
2910
- "pluginAlias": "adapty",
2911
- "pluginName": "adapty",
2912
- "pluginType": "core",
2913
- "strict": true,
2914
- "enableJsonFlag": true,
2915
- "isESM": true,
2916
- "relativePath": [
2917
- "dist",
2918
- "commands",
2919
- "asa",
2920
- "competitors",
2921
- "summary.js"
2922
- ]
2923
- },
2924
3032
  "asa:campaigns:bulk-create": {
2925
3033
  "aliases": [],
2926
3034
  "args": {},
@@ -3639,13 +3747,12 @@
3639
3747
  "update.js"
3640
3748
  ]
3641
3749
  },
3642
- "asa:creatives:list": {
3750
+ "asa:competitors:summary": {
3643
3751
  "aliases": [],
3644
3752
  "args": {},
3645
- "description": "List creatives; creative_id is what `asa ads create` needs",
3753
+ "description": "Competitor summary for up to five App Store apps; the server covers the last full month and every country",
3646
3754
  "examples": [
3647
- "<%= config.bin %> asa creatives list",
3648
- "<%= config.bin %> asa creatives list --app APP_UUID"
3755
+ "<%= config.bin %> asa competitors summary --app-ids 1668337467,6503873027"
3649
3756
  ],
3650
3757
  "flags": {
3651
3758
  "json": {
@@ -3655,40 +3762,18 @@
3655
3762
  "allowNo": false,
3656
3763
  "type": "boolean"
3657
3764
  },
3658
- "page": {
3659
- "description": "Page number",
3660
- "name": "page",
3661
- "default": 1,
3662
- "hasDynamicHelp": false,
3663
- "multiple": false,
3664
- "type": "option"
3665
- },
3666
- "page-size": {
3667
- "description": "Items per page (max 1000); prefer one big page over a pagination loop",
3668
- "name": "page-size",
3669
- "default": 100,
3765
+ "app-ids": {
3766
+ "description": "Apple App Store IDs (adam_id), comma-separated, 1-5 values",
3767
+ "name": "app-ids",
3768
+ "required": true,
3670
3769
  "hasDynamicHelp": false,
3671
3770
  "multiple": false,
3672
3771
  "type": "option"
3673
- },
3674
- "app": {
3675
- "description": "Keep only rows in this app; repeatable",
3676
- "name": "app",
3677
- "hasDynamicHelp": false,
3678
- "multiple": true,
3679
- "type": "option"
3680
- },
3681
- "campaign-group": {
3682
- "description": "Keep only rows in this campaign group; repeatable",
3683
- "name": "campaign-group",
3684
- "hasDynamicHelp": false,
3685
- "multiple": true,
3686
- "type": "option"
3687
3772
  }
3688
3773
  },
3689
3774
  "hasDynamicHelp": false,
3690
3775
  "hiddenAliases": [],
3691
- "id": "asa:creatives:list",
3776
+ "id": "asa:competitors:summary",
3692
3777
  "pluginAlias": "adapty",
3693
3778
  "pluginName": "adapty",
3694
3779
  "pluginType": "core",
@@ -3699,8 +3784,8 @@
3699
3784
  "dist",
3700
3785
  "commands",
3701
3786
  "asa",
3702
- "creatives",
3703
- "list.js"
3787
+ "competitors",
3788
+ "summary.js"
3704
3789
  ]
3705
3790
  },
3706
3791
  "asa:keywords:add": {
@@ -4009,13 +4094,14 @@
4009
4094
  "asa:metrics": {
4010
4095
  "aliases": [],
4011
4096
  "args": {},
4012
- "description": "Query metrics for any level of the account over a date range\n\nOne row per entity, already aggregated server-side and sorted by --order-by, so a top-N question is one\ncall with --order-by and --page-size N — never sum pages yourself. Account-level totals are one call to\nasa metrics overview instead. The date window is capped by the finest --group-by period: 28 days when\nday is grouped, 90 with no period grouping, 180 by week, 365 by month and coarser — widen the window by\ncoarsening the grouping, not by splitting into more calls. Each page is also capped at 20000 breakdown\nrows (entities × countries × periods); over it the call fails with 422 cli_response_too_large — coarsen\nthe grouping, narrow the window, or reduce page[size]. Budget: 5 metrics calls per minute, at most\n2 per 10 seconds, one at a time.",
4097
+ "description": "Query metrics for any level of the account over a date range\n\nOne row per entity, already aggregated server-side and sorted by --order-by, so a top-N question is one\ncall with --order-by and --page-size N — never sum pages yourself. Account-level totals are one call to\nasa metrics overview instead. The date window is capped by the finest --group-by period: 28 days when\nday is grouped, 90 with no period grouping, 180 by week, 365 by month and coarser — widen the window by\ncoarsening the grouping, not by splitting into more calls. Each page is also capped at a breakdown-row\ncount (entities × countries × periods); over it the call fails with 422 cli_response_too_large naming the\npage[size] that fits — coarsen the grouping, narrow the window, or reduce page[size].\n\nMoney columns are in the campaign group currency, not USD, and spend and local_spend carry the same\nfigure; the currency itself comes from asa orgs list. Rate budgets and the breakdown-row cap are set per\ncompany: read the current ones with asa whoami rather than assuming a default. meta.pagination.count is\nthe full entity count behind the filters, so take inventory from there instead of counting the rows on a\npage. meta.max_valid_day says how many days the youngest cohort in the window has lived — any --by-days\nwindow above it repeats the last real figure because that time has not passed yet, so treat those as\nunreached rather than as a plateau.\n\n--metric is required and every metric named is computed over the whole entity set, so ask for the\ncolumns you actually read. subscribers and paid_subscribers (and arppu / arpas, which derive from them)\ncount unique profiles per entity and cost roughly seventeen times the rest; whatever the --entity, they\nare refused unless --campaign or --ad-group scopes the call. Those scope flags are also the cheapest way\nto make any call fast, since cost follows the number of entities aggregated, not the page size.",
4013
4098
  "examples": [
4014
- "<%= config.bin %> asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31",
4015
- "<%= config.bin %> asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31 --order-by spend --page-size 5",
4016
- "<%= config.bin %> asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31 --group-by country --page-size 1000",
4099
+ "<%= config.bin %> asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31 --metric spend --metric adapty_installs",
4100
+ "<%= config.bin %> asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31 --metric spend --order-by spend --page-size 5",
4101
+ "<%= config.bin %> asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31 --metric spend --group-by country --page-size 1000",
4017
4102
  "<%= config.bin %> asa metrics --entity keyword --date-from 2026-07-01 --date-to 2026-07-31 --metric spend --metric roas",
4018
- "<%= config.bin %> asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31 --metric roas --by-days 7 --by-days 90"
4103
+ "<%= config.bin %> asa metrics --entity campaign --date-from 2026-07-01 --date-to 2026-07-31 --metric roas --by-days 7 --by-days 90",
4104
+ "<%= config.bin %> asa metrics --entity keyword --date-from 2026-07-01 --date-to 2026-07-31 --metric arpas --campaign 0f0e..."
4019
4105
  ],
4020
4106
  "flags": {
4021
4107
  "json": {
@@ -4048,6 +4134,27 @@
4048
4134
  "multiple": true,
4049
4135
  "type": "option"
4050
4136
  },
4137
+ "ad-group": {
4138
+ "description": "Keep only rows in this ad group; repeatable",
4139
+ "name": "ad-group",
4140
+ "hasDynamicHelp": false,
4141
+ "multiple": true,
4142
+ "type": "option"
4143
+ },
4144
+ "app": {
4145
+ "description": "Keep only rows in this app; repeatable",
4146
+ "name": "app",
4147
+ "hasDynamicHelp": false,
4148
+ "multiple": true,
4149
+ "type": "option"
4150
+ },
4151
+ "campaign": {
4152
+ "description": "Keep only rows in this campaign; repeatable",
4153
+ "name": "campaign",
4154
+ "hasDynamicHelp": false,
4155
+ "multiple": true,
4156
+ "type": "option"
4157
+ },
4051
4158
  "date-from": {
4052
4159
  "description": "Start of the period (YYYY-MM-DD)",
4053
4160
  "name": "date-from",
@@ -4094,8 +4201,9 @@
4094
4201
  "type": "option"
4095
4202
  },
4096
4203
  "metric": {
4097
- "description": "Metric name (dashboard nomenclature, e.g. spend, taps, gross_roas), repeatable; omit for every metric; a wrong name fails listing all valid ones",
4204
+ "description": "Metric name (dashboard nomenclature, e.g. spend, taps, gross_roas), repeatable and required; every metric asked for is computed over the whole entity set, so list only what you read; a wrong name fails listing all valid ones",
4098
4205
  "name": "metric",
4206
+ "required": true,
4099
4207
  "hasDynamicHelp": false,
4100
4208
  "multiple": true,
4101
4209
  "type": "option"
@@ -4705,6 +4813,70 @@
4705
4813
  "list.js"
4706
4814
  ]
4707
4815
  },
4816
+ "asa:creatives:list": {
4817
+ "aliases": [],
4818
+ "args": {},
4819
+ "description": "List creatives; creative_id is what `asa ads create` needs",
4820
+ "examples": [
4821
+ "<%= config.bin %> asa creatives list",
4822
+ "<%= config.bin %> asa creatives list --app APP_UUID"
4823
+ ],
4824
+ "flags": {
4825
+ "json": {
4826
+ "description": "Format output as json.",
4827
+ "helpGroup": "GLOBAL",
4828
+ "name": "json",
4829
+ "allowNo": false,
4830
+ "type": "boolean"
4831
+ },
4832
+ "page": {
4833
+ "description": "Page number",
4834
+ "name": "page",
4835
+ "default": 1,
4836
+ "hasDynamicHelp": false,
4837
+ "multiple": false,
4838
+ "type": "option"
4839
+ },
4840
+ "page-size": {
4841
+ "description": "Items per page (max 1000); prefer one big page over a pagination loop",
4842
+ "name": "page-size",
4843
+ "default": 100,
4844
+ "hasDynamicHelp": false,
4845
+ "multiple": false,
4846
+ "type": "option"
4847
+ },
4848
+ "app": {
4849
+ "description": "Keep only rows in this app; repeatable",
4850
+ "name": "app",
4851
+ "hasDynamicHelp": false,
4852
+ "multiple": true,
4853
+ "type": "option"
4854
+ },
4855
+ "campaign-group": {
4856
+ "description": "Keep only rows in this campaign group; repeatable",
4857
+ "name": "campaign-group",
4858
+ "hasDynamicHelp": false,
4859
+ "multiple": true,
4860
+ "type": "option"
4861
+ }
4862
+ },
4863
+ "hasDynamicHelp": false,
4864
+ "hiddenAliases": [],
4865
+ "id": "asa:creatives:list",
4866
+ "pluginAlias": "adapty",
4867
+ "pluginName": "adapty",
4868
+ "pluginType": "core",
4869
+ "strict": true,
4870
+ "enableJsonFlag": true,
4871
+ "isESM": true,
4872
+ "relativePath": [
4873
+ "dist",
4874
+ "commands",
4875
+ "asa",
4876
+ "creatives",
4877
+ "list.js"
4878
+ ]
4879
+ },
4708
4880
  "flows:config:get": {
4709
4881
  "aliases": [],
4710
4882
  "args": {
@@ -5009,5 +5181,5 @@
5009
5181
  ]
5010
5182
  }
5011
5183
  },
5012
- "version": "0.8.4-beta.1"
5184
+ "version": "0.8.5"
5013
5185
  }