@koda-sl/baker-cli 0.455.0 → 0.456.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.
Files changed (474) hide show
  1. package/README.md +100 -17
  2. package/dist/{account-2OBWFPRG.js → account-AO6PNNPO.js} +6 -6
  3. package/dist/account-reads-W3XO7CIW.js +218 -0
  4. package/dist/account-reads-W3XO7CIW.js.map +1 -0
  5. package/dist/{accounts-TDTME6RQ.js → accounts-4TM4UZEJ.js} +5 -5
  6. package/dist/{accounts-TZQVAJ3V.js → accounts-XDC26KK6.js} +7 -7
  7. package/dist/{actions-FHYESJEE.js → actions-CJB4GZYA.js} +18 -18
  8. package/dist/{add-Q6YFHEOR.js → add-BP4CUUKB.js} +4 -4
  9. package/dist/{add-7XB5X3D3.js → add-RYR3QGOP.js} +5 -5
  10. package/dist/{ads-PGTFZA5Q.js → ads-GII5LEOH.js} +6 -6
  11. package/dist/{ads-6UEDYT3O.js → ads-SATXH4OD.js} +9 -9
  12. package/dist/{adsets-Q5DWGANV.js → adsets-PMXNW3EG.js} +8 -8
  13. package/dist/{advertisers-RKWQDCOI.js → advertisers-GM5UFI44.js} +7 -7
  14. package/dist/{analytics-DEJKJNLN.js → analytics-4CD7CH7H.js} +5 -5
  15. package/dist/{analytics-U5TTTX7K.js → analytics-JDPRLCHQ.js} +15 -15
  16. package/dist/{assign-RHUKQWH2.js → assign-XI4HIIIM.js} +5 -5
  17. package/dist/{audience-size-ICEKQRE4.js → audience-size-DHZ65PGA.js} +5 -5
  18. package/dist/{audiences-AMRFZRZ7.js → audiences-D7CXP3ZF.js} +3 -3
  19. package/dist/{audit-GWLQVB4A.js → audit-M7BZYBIS.js} +5 -5
  20. package/dist/{autocomplete-NAEVFMKZ.js → autocomplete-B45I26R4.js} +7 -7
  21. package/dist/{avatars-PMV6IMFV.js → avatars-75BALNB7.js} +4 -4
  22. package/dist/{bid-pricing-XF3LD65L.js → bid-pricing-4RCP24BE.js} +5 -5
  23. package/dist/{brand-ZC5HDP7B.js → brand-2TOLKYDY.js} +2 -2
  24. package/dist/{brief-3EZ2JS5F.js → brief-5G4NEZ4O.js} +16 -16
  25. package/dist/{campaign-groups-JSHBFYDG.js → campaign-groups-G7B26V7K.js} +10 -10
  26. package/dist/{campaign-writes-5PHXENPN.js → campaign-writes-HZ7ART7W.js} +5 -5
  27. package/dist/{campaigns-D6B6Z67Y.js → campaigns-MEEM3CNC.js} +8 -8
  28. package/dist/{campaigns-HPRQVXTH.js → campaigns-OIJGTO7W.js} +5 -5
  29. package/dist/{campaigns-LQXELRHZ.js → campaigns-RW3QJQ2F.js} +13 -13
  30. package/dist/{canvas-4NVEZNW5.js → canvas-LXRLDE5G.js} +12 -12
  31. package/dist/{capabilities-VQRNPBOZ.js → capabilities-BWSB7IFT.js} +5 -5
  32. package/dist/{changes-TP7ZZHB3.js → changes-AYLNY6KN.js} +5 -5
  33. package/dist/{chatgpt-QNUN63YS.js → chatgpt-TNSRA3L3.js} +1 -1
  34. package/dist/{chats-Q4QPA3OQ.js → chats-MMHBJQFM.js} +5 -5
  35. package/dist/{chunk-RXGR63TP.js → chunk-24GELJP3.js} +2 -2
  36. package/dist/{chunk-ZKYNGME7.js → chunk-2D4ASTGN.js} +3 -3
  37. package/dist/{chunk-PRIHMSJH.js → chunk-2K4LMCV2.js} +2 -2
  38. package/dist/{chunk-4GACYQUI.js → chunk-2YJL6MEB.js} +3 -3
  39. package/dist/{chunk-L27H2R2N.js → chunk-2ZY7HON7.js} +2 -2
  40. package/dist/{chunk-RZTNH2TX.js → chunk-45OQOUJA.js} +2 -2
  41. package/dist/{chunk-LLOOWRBB.js → chunk-4KCKNAVW.js} +189 -20
  42. package/dist/chunk-4KCKNAVW.js.map +1 -0
  43. package/dist/{chunk-GX6VAHY7.js → chunk-5FWMRTNB.js} +31 -15
  44. package/dist/chunk-5FWMRTNB.js.map +1 -0
  45. package/dist/{chunk-YT2BSTD3.js → chunk-7TNPEURJ.js} +2 -2
  46. package/dist/chunk-7VHPAGPK.js +228 -0
  47. package/dist/chunk-7VHPAGPK.js.map +1 -0
  48. package/dist/{chunk-WKS6ZDUP.js → chunk-BSOWFWEU.js} +7 -7
  49. package/dist/{chunk-X5ECCSHP.js → chunk-D23EKXOP.js} +2 -2
  50. package/dist/{chunk-FC3U5XKS.js → chunk-D7PFF6UC.js} +4 -4
  51. package/dist/{chunk-OU5YA2QX.js → chunk-DT2XXF6O.js} +2 -2
  52. package/dist/{chunk-ARBKEE6E.js → chunk-DYOI4FQ7.js} +2 -2
  53. package/dist/{chunk-4EVLVA2R.js → chunk-EFM7OODQ.js} +2 -2
  54. package/dist/{chunk-P6KWFODZ.js → chunk-EIIANSBX.js} +2 -2
  55. package/dist/{chunk-HJMRWBR5.js → chunk-EYK6G4XE.js} +2 -2
  56. package/dist/{chunk-PKC6QBYJ.js → chunk-EZWYX343.js} +4 -4
  57. package/dist/{chunk-LIQ4SQ2T.js → chunk-FEELV5IV.js} +2 -2
  58. package/dist/{chunk-YCWIGXH6.js → chunk-GP7QUF5A.js} +2 -2
  59. package/dist/{chunk-ZGGGA3JR.js → chunk-HOXZOOVA.js} +8 -8
  60. package/dist/{chunk-CYEO5ZIO.js → chunk-JPK34QPS.js} +3 -2
  61. package/dist/{chunk-CYEO5ZIO.js.map → chunk-JPK34QPS.js.map} +1 -1
  62. package/dist/{chunk-TJOGO2MK.js → chunk-JU7FIHQ2.js} +2 -2
  63. package/dist/{chunk-MVYLY2SF.js → chunk-KN7DFVKW.js} +2 -2
  64. package/dist/{chunk-K5H3XOYQ.js → chunk-LI6PGY3L.js} +2 -2
  65. package/dist/{chunk-3KEWXALS.js → chunk-MCWYIEWI.js} +3 -3
  66. package/dist/{chunk-LIWBVGRE.js → chunk-MFQ5SUJT.js} +3 -3
  67. package/dist/{credentials-4V55RYZ6.js → chunk-ML7DLFFY.js} +3421 -249
  68. package/dist/chunk-ML7DLFFY.js.map +1 -0
  69. package/dist/{chunk-HEOWTR7Z.js → chunk-OW4XDJV2.js} +2 -2
  70. package/dist/{chunk-KYR4EG3E.js → chunk-PHEEJUFL.js} +2 -2
  71. package/dist/chunk-QM6T4BFA.js +76 -0
  72. package/dist/chunk-QM6T4BFA.js.map +1 -0
  73. package/dist/{chunk-KHV5GALI.js → chunk-QNDLOCAI.js} +2 -2
  74. package/dist/{chunk-GQ7JE7A7.js → chunk-UZUHXN7H.js} +2 -2
  75. package/dist/{chunk-YWK4UBVU.js → chunk-V5QJBDBC.js} +2 -2
  76. package/dist/{chunk-LP2QDRO4.js → chunk-WBUMUELD.js} +7 -7
  77. package/dist/{chunk-EP5TYLNV.js → chunk-WEU6GKUQ.js} +3 -3
  78. package/dist/{chunk-46TPPYCI.js → chunk-X5VHGXFB.js} +2 -2
  79. package/dist/{chunk-3V57D7GE.js → chunk-XJRBFLBD.js} +2 -2
  80. package/dist/{query-IEZRY6HV.js → chunk-XPOIIQCI.js} +406 -148
  81. package/dist/chunk-XPOIIQCI.js.map +1 -0
  82. package/dist/{chunk-ZJWUBJYQ.js → chunk-XQIOCIDO.js} +1 -1
  83. package/dist/chunk-XQIOCIDO.js.map +1 -0
  84. package/dist/{chunk-T4DD5YMP.js → chunk-XY7BZSDQ.js} +12 -12
  85. package/dist/{chunk-T4DD5YMP.js.map → chunk-XY7BZSDQ.js.map} +1 -1
  86. package/dist/{chunk-QS2BDKFL.js → chunk-Y63Y4QSY.js} +2 -2
  87. package/dist/{chunk-PAQ3T6OT.js → chunk-YRVDCIJ2.js} +2 -2
  88. package/dist/{claim-RHZVTMQZ.js → claim-UDNXCJIU.js} +5 -5
  89. package/dist/cli.js +29 -29
  90. package/dist/{companies-LIKSVYSR.js → companies-RPZN4JTR.js} +5 -5
  91. package/dist/{complete-OM7R6VOC.js → complete-HLSRQE3N.js} +5 -5
  92. package/dist/{connect-AVX3NKP6.js → connect-TIJZO7OV.js} +8 -8
  93. package/dist/{conversation-3HGRWXKO.js → conversation-BS7TF6LZ.js} +5 -5
  94. package/dist/{conversion-upload-command-AUF3LNTH.js → conversion-upload-command-CSD344BY.js} +6 -6
  95. package/dist/{conversions-XADFSQ4W.js → conversions-FEWAX64H.js} +9 -9
  96. package/dist/{create-PQSDE4J3.js → create-4SH4BZXP.js} +5 -5
  97. package/dist/{create-BWHYYATN.js → create-B4UVIJZI.js} +4 -4
  98. package/dist/{create-Z4JLLTPG.js → create-F5FNHJKE.js} +5 -5
  99. package/dist/{create-3I64N6RJ.js → create-L3JHP6J4.js} +5 -5
  100. package/dist/{creatives-WPRN6CU4.js → creatives-LK2NZHRX.js} +10 -10
  101. package/dist/{creatives-UEPLNCPN.js → creatives-RQ2DFHGI.js} +3 -3
  102. package/dist/{creatives-6Z7CEW5O.js → creatives-UILBPOKO.js} +10 -10
  103. package/dist/credentials-GC34ZPYP.js +287 -0
  104. package/dist/credentials-GC34ZPYP.js.map +1 -0
  105. package/dist/{critique-M5TMIG2D.js → critique-FAOH4FCP.js} +7 -7
  106. package/dist/{critique-K632OHFP.js → critique-X7HYYEJ4.js} +5 -5
  107. package/dist/{crm-CWT6BMMX.js → crm-RB5TVV3M.js} +6 -6
  108. package/dist/{crm-Q2QK4ZMS.js → crm-XEQDSU2U.js} +6 -6
  109. package/dist/{currency-XCGKQ7FE.js → currency-47QHFHDA.js} +4 -4
  110. package/dist/{custom-conversions-2VLJGPRV.js → custom-conversions-7HOWR6X6.js} +2 -2
  111. package/dist/{customers-7TS64ZM5.js → customers-P5WOUY6G.js} +7 -7
  112. package/dist/{delete-H7W3V6QG.js → delete-DLQ2ZZDA.js} +4 -4
  113. package/dist/{delete-BPSOLCGB.js → delete-GZKGPBBD.js} +5 -5
  114. package/dist/{delete-RIY5VUTU.js → delete-SW5OSIGN.js} +5 -5
  115. package/dist/{demographics-NHGM4QP7.js → demographics-ZLZOIWUE.js} +5 -5
  116. package/dist/{discard-IBMOGEYB.js → discard-VNVNJWNX.js} +5 -5
  117. package/dist/{discover-BJPZNXUQ.js → discover-P6TUGZ45.js} +4 -4
  118. package/dist/{domain-Y3N2UY5I.js → domain-OBICRJP3.js} +5 -5
  119. package/dist/draft-666YKA3P.js +307 -0
  120. package/dist/draft-666YKA3P.js.map +1 -0
  121. package/dist/{draft-322ZG6JG.js → draft-UECMJ6B4.js} +5 -5
  122. package/dist/{draft-6KBILDJK.js → draft-V75RBORX.js} +5 -5
  123. package/dist/{draft-P5T2QHCY.js → draft-Z3VUQ4LJ.js} +7 -7
  124. package/dist/{facets-3SDK42HY.js → facets-7J66L3NK.js} +5 -5
  125. package/dist/{feedback-P2JZTJY5.js → feedback-3LDG4WVJ.js} +2 -2
  126. package/dist/{feedback-record-5O6UUWTZ.js → feedback-record-CTAUHLMF.js} +9 -9
  127. package/dist/{fetch-LN5W3J4E.js → fetch-4RXXZGO4.js} +5 -5
  128. package/dist/{flows-MN26KBWB.js → flows-GGB46DLH.js} +12 -12
  129. package/dist/{fonts-7TXPTNCS.js → fonts-S3GWKOUJ.js} +7 -7
  130. package/dist/{forecast-ZHBKYQFP.js → forecast-6JVKXNFB.js} +5 -5
  131. package/dist/forecast-SVD3LMMY.js +168 -0
  132. package/dist/forecast-SVD3LMMY.js.map +1 -0
  133. package/dist/{funnel-UAXVM7JN.js → funnel-RCQOIQZ5.js} +6 -6
  134. package/dist/{ga4-DV2AXCSL.js → ga4-U6DMJ6K4.js} +1 -1
  135. package/dist/{get-EKYSQHNB.js → get-KQSM2MXM.js} +5 -5
  136. package/dist/{get-P7SSZ46N.js → get-MN2GRXGZ.js} +5 -5
  137. package/dist/{google-M7KEXVK5.js → google-CI2AMJKN.js} +1518 -200
  138. package/dist/google-CI2AMJKN.js.map +1 -0
  139. package/dist/{google-ads-LZDXDFPW.js → google-ads-YAJ33LTW.js} +5 -5
  140. package/dist/{history-BFGVCJ4J.js → history-QWYLRQBO.js} +5 -5
  141. package/dist/{hubspot-I3PNNF3E.js → hubspot-DDONLJ7R.js} +9 -9
  142. package/dist/{ideas-ZNP5BOGE.js → ideas-N44Z2SIT.js} +4 -4
  143. package/dist/{images-MWWGN672.js → images-BKHCBCE7.js} +4 -4
  144. package/dist/{ingest-H7BWHY7L.js → ingest-HBECWLOB.js} +4 -4
  145. package/dist/{ingest-NYP2ZAAK.js → ingest-VNRTFD4Y.js} +5 -5
  146. package/dist/{inspect-FNNDBZQX.js → inspect-7GGJDJBJ.js} +5 -5
  147. package/dist/{inspiration-S3DU4CMQ.js → inspiration-CGM3NK6X.js} +1 -1
  148. package/dist/{intent-E3UIVZBN.js → intent-HKNBXEDS.js} +4 -4
  149. package/dist/{keyword-gap-BG6M665A.js → keyword-gap-HUSP6MOT.js} +4 -4
  150. package/dist/{keyword-metrics-WG5LLBUW.js → keyword-metrics-2C3VFGDQ.js} +7 -7
  151. package/dist/{keywords-for-site-HVEAAODA.js → keywords-for-site-4GV4KS4X.js} +7 -7
  152. package/dist/{landing-G5MLO4CZ.js → landing-V2FMPQOK.js} +3 -3
  153. package/dist/{languages-HORKPDNH.js → languages-75YJZAHL.js} +4 -4
  154. package/dist/{leads-XCAE4OVV.js → leads-DTULNGMU.js} +5 -5
  155. package/dist/{leads-ARUWPHBM.js → leads-OPRVJBQG.js} +4 -4
  156. package/dist/{learn-5WSN4PT5.js → learn-EW2CKOFS.js} +9 -9
  157. package/dist/{line-item-writes-4EOQBQSC.js → line-item-writes-EF3BJ5KV.js} +5 -5
  158. package/dist/{line-items-45X5BVQW.js → line-items-G467XOZF.js} +5 -5
  159. package/dist/{link-XAXNBIKU.js → link-5SU4MR6M.js} +5 -5
  160. package/dist/{linkedin-62HOT3HB.js → linkedin-OFM3VVOB.js} +29 -29
  161. package/dist/{list-PLWORN75.js → list-HEWXAVCL.js} +4 -4
  162. package/dist/{list-NYTQ3DBH.js → list-SUTCQLGI.js} +5 -5
  163. package/dist/{list-H4SN4QYE.js → list-VFZPXFMA.js} +5 -5
  164. package/dist/{locations-J4G5RNPH.js → locations-6XADFU3V.js} +4 -4
  165. package/dist/{log-S7TEGEPL.js → log-I3MAU44R.js} +5 -5
  166. package/dist/{make-F6FOFAS4.js → make-ALBJZKJZ.js} +21 -21
  167. package/dist/{map-V3YC6Y5I.js → map-OT6F33VF.js} +6 -6
  168. package/dist/{mcp-3R3FOL2H.js → mcp-LC3L2JQO.js} +4 -4
  169. package/dist/{media-53DJRC4N.js → media-MYZ5I7WK.js} +2 -2
  170. package/dist/{media-sources-356UORTR.js → media-sources-RK6EJYBQ.js} +2 -2
  171. package/dist/{members-KATLJNPJ.js → members-7CHDHW7H.js} +5 -5
  172. package/dist/{meta-A7KM6TF5.js → meta-7XP5AWYU.js} +10 -10
  173. package/dist/{metrics-SQDJ5NQO.js → metrics-73LI743C.js} +4 -4
  174. package/dist/{normalize-RUPEDCAV.js → normalize-CXMYHNSA.js} +5 -5
  175. package/dist/{options-SCYGSRQX.js → options-E4IO5SR5.js} +8 -8
  176. package/dist/{performance-U3MA6YXN.js → performance-UQLSBPYN.js} +6 -6
  177. package/dist/{plan-4QP2G7GV.js → plan-NBFLYAOW.js} +2 -2
  178. package/dist/{promoted-tweet-writes-5UMGETBC.js → promoted-tweet-writes-ZW3FUPFG.js} +5 -5
  179. package/dist/{promoted-tweets-A3V53KZI.js → promoted-tweets-ZLQ6GZD5.js} +3 -3
  180. package/dist/{publish-V22K43GA.js → publish-H2PBR5XN.js} +5 -5
  181. package/dist/query-GDUTZ4R7.js +61 -0
  182. package/dist/{reddit-UACCQN3B.js → reddit-TGQYQUNZ.js} +6 -6
  183. package/dist/{refresh-PSXGRCJE.js → refresh-HVBCC2ZI.js} +4 -4
  184. package/dist/{release-S2X7UL4U.js → release-VI3JT6O6.js} +5 -5
  185. package/dist/{relevant-pages-OWMNUCP7.js → relevant-pages-2FW3E5KD.js} +4 -4
  186. package/dist/{remove-4GTKRBUW.js → remove-4EE7STMS.js} +4 -4
  187. package/dist/{reopen-3KUS6UZ2.js → reopen-LEGLAOMA.js} +5 -5
  188. package/dist/{rerun-ZHD7C4W2.js → rerun-A5DPZFOO.js} +14 -14
  189. package/dist/{research-7LO3G3EP.js → research-O6YMV2TG.js} +13 -13
  190. package/dist/{research-UF6PKQPH.js → research-WOJELJ4K.js} +4 -4
  191. package/dist/{reset-PVXTS3FZ.js → reset-PQHURJDC.js} +4 -4
  192. package/dist/{reset-PU57HTAP.js → reset-V2X7DFHD.js} +4 -4
  193. package/dist/{resolve-KBIYWRF7.js → resolve-Q4AACDIC.js} +5 -5
  194. package/dist/{retry-HKWNIGON.js → retry-BB6NJBC4.js} +4 -4
  195. package/dist/{retry-LSCVGZM5.js → retry-WMGEUJPB.js} +4 -4
  196. package/dist/{run-HMFS4KQZ.js → run-OBYA2F3E.js} +14 -14
  197. package/dist/{run-DU6RVXPA.js → run-V6E36GXW.js} +5 -5
  198. package/dist/{scaffold-ad-SLUGKZIW.js → scaffold-ad-KKYI7FZJ.js} +10 -10
  199. package/dist/{scaffold-static-ad-NRFAA5HL.js → scaffold-static-ad-R5UE4YIZ.js} +16 -16
  200. package/dist/{scaffold-video-Q7BSFVS4.js → scaffold-video-Y2BWXZSX.js} +12 -12
  201. package/dist/{schedule-VNTGMFLQ.js → schedule-EO27AZTT.js} +4 -4
  202. package/dist/{scheduled-agents-6TNWXJVH.js → scheduled-agents-OIJBX7OO.js} +11 -11
  203. package/dist/{schema-ZEOL467O.js → schema-7GSCTQIC.js} +6 -6
  204. package/dist/{search-XUINK3C2.js → search-Q7PAV7NY.js} +4 -4
  205. package/dist/{select-U3DVKV72.js → select-ASR5SBYE.js} +9 -9
  206. package/dist/{set-prompt-EQIVJ5LR.js → set-prompt-I32464V4.js} +7 -7
  207. package/dist/{setup-links-CLPE6UUM.js → setup-links-NP2HULRC.js} +5 -5
  208. package/dist/{site-GIZB7NWB.js → site-PTIYQQ3Z.js} +6 -6
  209. package/dist/{sources-7RGXA35S.js → sources-5FRMFKDA.js} +6 -6
  210. package/dist/{sources-2PG4U4BC.js → sources-FJLCIG6X.js} +8 -8
  211. package/dist/{stale-ODM7IOO2.js → stale-YUYMETFC.js} +8 -8
  212. package/dist/{stats-NNXZMPZR.js → stats-F5JZVPYG.js} +1 -1
  213. package/dist/{status-HKCIXG7P.js → status-UYIQFC7L.js} +5 -5
  214. package/dist/{studio-EKIPLLHD.js → studio-6ZL76TZR.js} +1 -1
  215. package/dist/{sync-LGDTHM6C.js → sync-527ZCA4A.js} +4 -4
  216. package/dist/{sync-definition-6WBQN4Q3.js → sync-definition-M4KRPGTN.js} +9 -9
  217. package/dist/sync-definition-M4KRPGTN.js.map +1 -0
  218. package/dist/{tags-BQFPK55V.js → tags-2MX3332V.js} +5 -5
  219. package/dist/{tags-N72F6AMR.js → tags-7767I2D6.js} +4 -4
  220. package/dist/{tags-DRZ7GPP4.js → tags-J3BGX3E6.js} +5 -5
  221. package/dist/{tags-Q5NWILJO.js → tags-O27SK3YX.js} +4 -4
  222. package/dist/{tags-4NICM2LC.js → tags-VAYVSQM6.js} +5 -5
  223. package/dist/{targeting-criteria-DXHMEEC2.js → targeting-criteria-GOTI75Y4.js} +3 -3
  224. package/dist/{targets-A325AP5G.js → targets-FC7CGFRD.js} +5 -5
  225. package/dist/{templates-WWY4ZVKR.js → templates-EF5LOWP5.js} +5 -5
  226. package/dist/{testimonials-YVHSZTWW.js → testimonials-MRMRWF2T.js} +6 -6
  227. package/dist/themes-2ZV7OCJ3.js +94 -0
  228. package/dist/themes-2ZV7OCJ3.js.map +1 -0
  229. package/dist/{top-companies-S2Y4I5HF.js → top-companies-VTLR6GTW.js} +5 -5
  230. package/dist/{translate-BTUMXQSK.js → translate-UMTKAUJ3.js} +15 -15
  231. package/dist/{triggers-T47AIYVB.js → triggers-Y7ZMMY3C.js} +5 -5
  232. package/dist/{unlink-XRKX6DVP.js → unlink-HZCFLXH4.js} +5 -5
  233. package/dist/{unstage-77RAGX3F.js → unstage-562HOOE7.js} +5 -5
  234. package/dist/{update-R3QSTHUD.js → update-ATSXY5UN.js} +5 -5
  235. package/dist/{update-RJLMUP7I.js → update-DKU2UDFA.js} +4 -4
  236. package/dist/{update-YRO5IHDX.js → update-I5A5TOZJ.js} +5 -5
  237. package/dist/{update-NQIRRGOW.js → update-ZF3VFYLB.js} +5 -5
  238. package/dist/{upload-KWFKNKAF.js → upload-SIAI6NMH.js} +5 -5
  239. package/dist/{url-options-GGXAL3J4.js → url-options-JSX6HBZL.js} +10 -7
  240. package/dist/url-options-JSX6HBZL.js.map +1 -0
  241. package/dist/{url-params-IMC43AIM.js → url-params-AZUI3CW3.js} +5 -5
  242. package/dist/{validate-Y6R6F5T3.js → validate-MC4EIQI5.js} +7 -7
  243. package/dist/{videos-U2FPMNFS.js → videos-S7BYFSU3.js} +5 -5
  244. package/dist/{web-AHTOJNQY.js → web-5R7LHKIT.js} +5 -5
  245. package/dist/{winning-ads-TUYN2BST.js → winning-ads-PDCY4YW5.js} +2 -2
  246. package/dist/{write-commands-CT74VHH6.js → write-commands-MFRZD6Q6.js} +4 -4
  247. package/dist/{write-commands-2XFNH4BW.js → write-commands-VXL5QKMT.js} +7 -7
  248. package/dist/{x-5GDVUJ2I.js → x-22PKVRYX.js} +7 -7
  249. package/package.json +1 -1
  250. package/dist/chunk-GX6VAHY7.js.map +0 -1
  251. package/dist/chunk-LLOOWRBB.js.map +0 -1
  252. package/dist/chunk-NE4F3FHN.js +0 -1854
  253. package/dist/chunk-NE4F3FHN.js.map +0 -1
  254. package/dist/chunk-XCM6XWOB.js +0 -417
  255. package/dist/chunk-XCM6XWOB.js.map +0 -1
  256. package/dist/chunk-ZJWUBJYQ.js.map +0 -1
  257. package/dist/credentials-4V55RYZ6.js.map +0 -1
  258. package/dist/draft-5YAYCEYY.js +0 -107
  259. package/dist/draft-5YAYCEYY.js.map +0 -1
  260. package/dist/google-M7KEXVK5.js.map +0 -1
  261. package/dist/query-IEZRY6HV.js.map +0 -1
  262. package/dist/url-options-GGXAL3J4.js.map +0 -1
  263. /package/dist/{account-2OBWFPRG.js.map → account-AO6PNNPO.js.map} +0 -0
  264. /package/dist/{accounts-TDTME6RQ.js.map → accounts-4TM4UZEJ.js.map} +0 -0
  265. /package/dist/{accounts-TZQVAJ3V.js.map → accounts-XDC26KK6.js.map} +0 -0
  266. /package/dist/{actions-FHYESJEE.js.map → actions-CJB4GZYA.js.map} +0 -0
  267. /package/dist/{add-Q6YFHEOR.js.map → add-BP4CUUKB.js.map} +0 -0
  268. /package/dist/{add-7XB5X3D3.js.map → add-RYR3QGOP.js.map} +0 -0
  269. /package/dist/{ads-PGTFZA5Q.js.map → ads-GII5LEOH.js.map} +0 -0
  270. /package/dist/{ads-6UEDYT3O.js.map → ads-SATXH4OD.js.map} +0 -0
  271. /package/dist/{adsets-Q5DWGANV.js.map → adsets-PMXNW3EG.js.map} +0 -0
  272. /package/dist/{advertisers-RKWQDCOI.js.map → advertisers-GM5UFI44.js.map} +0 -0
  273. /package/dist/{analytics-DEJKJNLN.js.map → analytics-4CD7CH7H.js.map} +0 -0
  274. /package/dist/{analytics-U5TTTX7K.js.map → analytics-JDPRLCHQ.js.map} +0 -0
  275. /package/dist/{assign-RHUKQWH2.js.map → assign-XI4HIIIM.js.map} +0 -0
  276. /package/dist/{audience-size-ICEKQRE4.js.map → audience-size-DHZ65PGA.js.map} +0 -0
  277. /package/dist/{audiences-AMRFZRZ7.js.map → audiences-D7CXP3ZF.js.map} +0 -0
  278. /package/dist/{audit-GWLQVB4A.js.map → audit-M7BZYBIS.js.map} +0 -0
  279. /package/dist/{autocomplete-NAEVFMKZ.js.map → autocomplete-B45I26R4.js.map} +0 -0
  280. /package/dist/{avatars-PMV6IMFV.js.map → avatars-75BALNB7.js.map} +0 -0
  281. /package/dist/{bid-pricing-XF3LD65L.js.map → bid-pricing-4RCP24BE.js.map} +0 -0
  282. /package/dist/{brand-ZC5HDP7B.js.map → brand-2TOLKYDY.js.map} +0 -0
  283. /package/dist/{brief-3EZ2JS5F.js.map → brief-5G4NEZ4O.js.map} +0 -0
  284. /package/dist/{campaign-groups-JSHBFYDG.js.map → campaign-groups-G7B26V7K.js.map} +0 -0
  285. /package/dist/{campaign-writes-5PHXENPN.js.map → campaign-writes-HZ7ART7W.js.map} +0 -0
  286. /package/dist/{campaigns-D6B6Z67Y.js.map → campaigns-MEEM3CNC.js.map} +0 -0
  287. /package/dist/{campaigns-HPRQVXTH.js.map → campaigns-OIJGTO7W.js.map} +0 -0
  288. /package/dist/{campaigns-LQXELRHZ.js.map → campaigns-RW3QJQ2F.js.map} +0 -0
  289. /package/dist/{canvas-4NVEZNW5.js.map → canvas-LXRLDE5G.js.map} +0 -0
  290. /package/dist/{capabilities-VQRNPBOZ.js.map → capabilities-BWSB7IFT.js.map} +0 -0
  291. /package/dist/{changes-TP7ZZHB3.js.map → changes-AYLNY6KN.js.map} +0 -0
  292. /package/dist/{chatgpt-QNUN63YS.js.map → chatgpt-TNSRA3L3.js.map} +0 -0
  293. /package/dist/{chats-Q4QPA3OQ.js.map → chats-MMHBJQFM.js.map} +0 -0
  294. /package/dist/{chunk-RXGR63TP.js.map → chunk-24GELJP3.js.map} +0 -0
  295. /package/dist/{chunk-ZKYNGME7.js.map → chunk-2D4ASTGN.js.map} +0 -0
  296. /package/dist/{chunk-PRIHMSJH.js.map → chunk-2K4LMCV2.js.map} +0 -0
  297. /package/dist/{chunk-4GACYQUI.js.map → chunk-2YJL6MEB.js.map} +0 -0
  298. /package/dist/{chunk-L27H2R2N.js.map → chunk-2ZY7HON7.js.map} +0 -0
  299. /package/dist/{chunk-RZTNH2TX.js.map → chunk-45OQOUJA.js.map} +0 -0
  300. /package/dist/{chunk-YT2BSTD3.js.map → chunk-7TNPEURJ.js.map} +0 -0
  301. /package/dist/{chunk-WKS6ZDUP.js.map → chunk-BSOWFWEU.js.map} +0 -0
  302. /package/dist/{chunk-X5ECCSHP.js.map → chunk-D23EKXOP.js.map} +0 -0
  303. /package/dist/{chunk-FC3U5XKS.js.map → chunk-D7PFF6UC.js.map} +0 -0
  304. /package/dist/{chunk-OU5YA2QX.js.map → chunk-DT2XXF6O.js.map} +0 -0
  305. /package/dist/{chunk-ARBKEE6E.js.map → chunk-DYOI4FQ7.js.map} +0 -0
  306. /package/dist/{chunk-4EVLVA2R.js.map → chunk-EFM7OODQ.js.map} +0 -0
  307. /package/dist/{chunk-P6KWFODZ.js.map → chunk-EIIANSBX.js.map} +0 -0
  308. /package/dist/{chunk-HJMRWBR5.js.map → chunk-EYK6G4XE.js.map} +0 -0
  309. /package/dist/{chunk-PKC6QBYJ.js.map → chunk-EZWYX343.js.map} +0 -0
  310. /package/dist/{chunk-LIQ4SQ2T.js.map → chunk-FEELV5IV.js.map} +0 -0
  311. /package/dist/{chunk-YCWIGXH6.js.map → chunk-GP7QUF5A.js.map} +0 -0
  312. /package/dist/{chunk-ZGGGA3JR.js.map → chunk-HOXZOOVA.js.map} +0 -0
  313. /package/dist/{chunk-TJOGO2MK.js.map → chunk-JU7FIHQ2.js.map} +0 -0
  314. /package/dist/{chunk-MVYLY2SF.js.map → chunk-KN7DFVKW.js.map} +0 -0
  315. /package/dist/{chunk-K5H3XOYQ.js.map → chunk-LI6PGY3L.js.map} +0 -0
  316. /package/dist/{chunk-3KEWXALS.js.map → chunk-MCWYIEWI.js.map} +0 -0
  317. /package/dist/{chunk-LIWBVGRE.js.map → chunk-MFQ5SUJT.js.map} +0 -0
  318. /package/dist/{chunk-HEOWTR7Z.js.map → chunk-OW4XDJV2.js.map} +0 -0
  319. /package/dist/{chunk-KYR4EG3E.js.map → chunk-PHEEJUFL.js.map} +0 -0
  320. /package/dist/{chunk-KHV5GALI.js.map → chunk-QNDLOCAI.js.map} +0 -0
  321. /package/dist/{chunk-GQ7JE7A7.js.map → chunk-UZUHXN7H.js.map} +0 -0
  322. /package/dist/{chunk-YWK4UBVU.js.map → chunk-V5QJBDBC.js.map} +0 -0
  323. /package/dist/{chunk-LP2QDRO4.js.map → chunk-WBUMUELD.js.map} +0 -0
  324. /package/dist/{chunk-EP5TYLNV.js.map → chunk-WEU6GKUQ.js.map} +0 -0
  325. /package/dist/{chunk-46TPPYCI.js.map → chunk-X5VHGXFB.js.map} +0 -0
  326. /package/dist/{chunk-3V57D7GE.js.map → chunk-XJRBFLBD.js.map} +0 -0
  327. /package/dist/{chunk-QS2BDKFL.js.map → chunk-Y63Y4QSY.js.map} +0 -0
  328. /package/dist/{chunk-PAQ3T6OT.js.map → chunk-YRVDCIJ2.js.map} +0 -0
  329. /package/dist/{claim-RHZVTMQZ.js.map → claim-UDNXCJIU.js.map} +0 -0
  330. /package/dist/{companies-LIKSVYSR.js.map → companies-RPZN4JTR.js.map} +0 -0
  331. /package/dist/{complete-OM7R6VOC.js.map → complete-HLSRQE3N.js.map} +0 -0
  332. /package/dist/{connect-AVX3NKP6.js.map → connect-TIJZO7OV.js.map} +0 -0
  333. /package/dist/{conversation-3HGRWXKO.js.map → conversation-BS7TF6LZ.js.map} +0 -0
  334. /package/dist/{conversion-upload-command-AUF3LNTH.js.map → conversion-upload-command-CSD344BY.js.map} +0 -0
  335. /package/dist/{conversions-XADFSQ4W.js.map → conversions-FEWAX64H.js.map} +0 -0
  336. /package/dist/{create-PQSDE4J3.js.map → create-4SH4BZXP.js.map} +0 -0
  337. /package/dist/{create-BWHYYATN.js.map → create-B4UVIJZI.js.map} +0 -0
  338. /package/dist/{create-Z4JLLTPG.js.map → create-F5FNHJKE.js.map} +0 -0
  339. /package/dist/{create-3I64N6RJ.js.map → create-L3JHP6J4.js.map} +0 -0
  340. /package/dist/{creatives-WPRN6CU4.js.map → creatives-LK2NZHRX.js.map} +0 -0
  341. /package/dist/{creatives-UEPLNCPN.js.map → creatives-RQ2DFHGI.js.map} +0 -0
  342. /package/dist/{creatives-6Z7CEW5O.js.map → creatives-UILBPOKO.js.map} +0 -0
  343. /package/dist/{critique-M5TMIG2D.js.map → critique-FAOH4FCP.js.map} +0 -0
  344. /package/dist/{critique-K632OHFP.js.map → critique-X7HYYEJ4.js.map} +0 -0
  345. /package/dist/{crm-CWT6BMMX.js.map → crm-RB5TVV3M.js.map} +0 -0
  346. /package/dist/{crm-Q2QK4ZMS.js.map → crm-XEQDSU2U.js.map} +0 -0
  347. /package/dist/{currency-XCGKQ7FE.js.map → currency-47QHFHDA.js.map} +0 -0
  348. /package/dist/{custom-conversions-2VLJGPRV.js.map → custom-conversions-7HOWR6X6.js.map} +0 -0
  349. /package/dist/{customers-7TS64ZM5.js.map → customers-P5WOUY6G.js.map} +0 -0
  350. /package/dist/{delete-H7W3V6QG.js.map → delete-DLQ2ZZDA.js.map} +0 -0
  351. /package/dist/{delete-BPSOLCGB.js.map → delete-GZKGPBBD.js.map} +0 -0
  352. /package/dist/{delete-RIY5VUTU.js.map → delete-SW5OSIGN.js.map} +0 -0
  353. /package/dist/{demographics-NHGM4QP7.js.map → demographics-ZLZOIWUE.js.map} +0 -0
  354. /package/dist/{discard-IBMOGEYB.js.map → discard-VNVNJWNX.js.map} +0 -0
  355. /package/dist/{discover-BJPZNXUQ.js.map → discover-P6TUGZ45.js.map} +0 -0
  356. /package/dist/{domain-Y3N2UY5I.js.map → domain-OBICRJP3.js.map} +0 -0
  357. /package/dist/{draft-322ZG6JG.js.map → draft-UECMJ6B4.js.map} +0 -0
  358. /package/dist/{draft-6KBILDJK.js.map → draft-V75RBORX.js.map} +0 -0
  359. /package/dist/{draft-P5T2QHCY.js.map → draft-Z3VUQ4LJ.js.map} +0 -0
  360. /package/dist/{facets-3SDK42HY.js.map → facets-7J66L3NK.js.map} +0 -0
  361. /package/dist/{feedback-P2JZTJY5.js.map → feedback-3LDG4WVJ.js.map} +0 -0
  362. /package/dist/{feedback-record-5O6UUWTZ.js.map → feedback-record-CTAUHLMF.js.map} +0 -0
  363. /package/dist/{fetch-LN5W3J4E.js.map → fetch-4RXXZGO4.js.map} +0 -0
  364. /package/dist/{flows-MN26KBWB.js.map → flows-GGB46DLH.js.map} +0 -0
  365. /package/dist/{fonts-7TXPTNCS.js.map → fonts-S3GWKOUJ.js.map} +0 -0
  366. /package/dist/{forecast-ZHBKYQFP.js.map → forecast-6JVKXNFB.js.map} +0 -0
  367. /package/dist/{funnel-UAXVM7JN.js.map → funnel-RCQOIQZ5.js.map} +0 -0
  368. /package/dist/{ga4-DV2AXCSL.js.map → ga4-U6DMJ6K4.js.map} +0 -0
  369. /package/dist/{get-EKYSQHNB.js.map → get-KQSM2MXM.js.map} +0 -0
  370. /package/dist/{get-P7SSZ46N.js.map → get-MN2GRXGZ.js.map} +0 -0
  371. /package/dist/{google-ads-LZDXDFPW.js.map → google-ads-YAJ33LTW.js.map} +0 -0
  372. /package/dist/{history-BFGVCJ4J.js.map → history-QWYLRQBO.js.map} +0 -0
  373. /package/dist/{hubspot-I3PNNF3E.js.map → hubspot-DDONLJ7R.js.map} +0 -0
  374. /package/dist/{ideas-ZNP5BOGE.js.map → ideas-N44Z2SIT.js.map} +0 -0
  375. /package/dist/{images-MWWGN672.js.map → images-BKHCBCE7.js.map} +0 -0
  376. /package/dist/{ingest-H7BWHY7L.js.map → ingest-HBECWLOB.js.map} +0 -0
  377. /package/dist/{ingest-NYP2ZAAK.js.map → ingest-VNRTFD4Y.js.map} +0 -0
  378. /package/dist/{inspect-FNNDBZQX.js.map → inspect-7GGJDJBJ.js.map} +0 -0
  379. /package/dist/{inspiration-S3DU4CMQ.js.map → inspiration-CGM3NK6X.js.map} +0 -0
  380. /package/dist/{intent-E3UIVZBN.js.map → intent-HKNBXEDS.js.map} +0 -0
  381. /package/dist/{keyword-gap-BG6M665A.js.map → keyword-gap-HUSP6MOT.js.map} +0 -0
  382. /package/dist/{keyword-metrics-WG5LLBUW.js.map → keyword-metrics-2C3VFGDQ.js.map} +0 -0
  383. /package/dist/{keywords-for-site-HVEAAODA.js.map → keywords-for-site-4GV4KS4X.js.map} +0 -0
  384. /package/dist/{landing-G5MLO4CZ.js.map → landing-V2FMPQOK.js.map} +0 -0
  385. /package/dist/{languages-HORKPDNH.js.map → languages-75YJZAHL.js.map} +0 -0
  386. /package/dist/{leads-XCAE4OVV.js.map → leads-DTULNGMU.js.map} +0 -0
  387. /package/dist/{leads-ARUWPHBM.js.map → leads-OPRVJBQG.js.map} +0 -0
  388. /package/dist/{learn-5WSN4PT5.js.map → learn-EW2CKOFS.js.map} +0 -0
  389. /package/dist/{line-item-writes-4EOQBQSC.js.map → line-item-writes-EF3BJ5KV.js.map} +0 -0
  390. /package/dist/{line-items-45X5BVQW.js.map → line-items-G467XOZF.js.map} +0 -0
  391. /package/dist/{link-XAXNBIKU.js.map → link-5SU4MR6M.js.map} +0 -0
  392. /package/dist/{linkedin-62HOT3HB.js.map → linkedin-OFM3VVOB.js.map} +0 -0
  393. /package/dist/{list-PLWORN75.js.map → list-HEWXAVCL.js.map} +0 -0
  394. /package/dist/{list-NYTQ3DBH.js.map → list-SUTCQLGI.js.map} +0 -0
  395. /package/dist/{list-H4SN4QYE.js.map → list-VFZPXFMA.js.map} +0 -0
  396. /package/dist/{locations-J4G5RNPH.js.map → locations-6XADFU3V.js.map} +0 -0
  397. /package/dist/{log-S7TEGEPL.js.map → log-I3MAU44R.js.map} +0 -0
  398. /package/dist/{make-F6FOFAS4.js.map → make-ALBJZKJZ.js.map} +0 -0
  399. /package/dist/{map-V3YC6Y5I.js.map → map-OT6F33VF.js.map} +0 -0
  400. /package/dist/{mcp-3R3FOL2H.js.map → mcp-LC3L2JQO.js.map} +0 -0
  401. /package/dist/{media-53DJRC4N.js.map → media-MYZ5I7WK.js.map} +0 -0
  402. /package/dist/{media-sources-356UORTR.js.map → media-sources-RK6EJYBQ.js.map} +0 -0
  403. /package/dist/{members-KATLJNPJ.js.map → members-7CHDHW7H.js.map} +0 -0
  404. /package/dist/{meta-A7KM6TF5.js.map → meta-7XP5AWYU.js.map} +0 -0
  405. /package/dist/{metrics-SQDJ5NQO.js.map → metrics-73LI743C.js.map} +0 -0
  406. /package/dist/{normalize-RUPEDCAV.js.map → normalize-CXMYHNSA.js.map} +0 -0
  407. /package/dist/{options-SCYGSRQX.js.map → options-E4IO5SR5.js.map} +0 -0
  408. /package/dist/{performance-U3MA6YXN.js.map → performance-UQLSBPYN.js.map} +0 -0
  409. /package/dist/{plan-4QP2G7GV.js.map → plan-NBFLYAOW.js.map} +0 -0
  410. /package/dist/{promoted-tweet-writes-5UMGETBC.js.map → promoted-tweet-writes-ZW3FUPFG.js.map} +0 -0
  411. /package/dist/{promoted-tweets-A3V53KZI.js.map → promoted-tweets-ZLQ6GZD5.js.map} +0 -0
  412. /package/dist/{publish-V22K43GA.js.map → publish-H2PBR5XN.js.map} +0 -0
  413. /package/dist/{reddit-UACCQN3B.js.map → query-GDUTZ4R7.js.map} +0 -0
  414. /package/dist/{run-HMFS4KQZ.js.map → reddit-TGQYQUNZ.js.map} +0 -0
  415. /package/dist/{refresh-PSXGRCJE.js.map → refresh-HVBCC2ZI.js.map} +0 -0
  416. /package/dist/{release-S2X7UL4U.js.map → release-VI3JT6O6.js.map} +0 -0
  417. /package/dist/{relevant-pages-OWMNUCP7.js.map → relevant-pages-2FW3E5KD.js.map} +0 -0
  418. /package/dist/{remove-4GTKRBUW.js.map → remove-4EE7STMS.js.map} +0 -0
  419. /package/dist/{reopen-3KUS6UZ2.js.map → reopen-LEGLAOMA.js.map} +0 -0
  420. /package/dist/{rerun-ZHD7C4W2.js.map → rerun-A5DPZFOO.js.map} +0 -0
  421. /package/dist/{research-7LO3G3EP.js.map → research-O6YMV2TG.js.map} +0 -0
  422. /package/dist/{research-UF6PKQPH.js.map → research-WOJELJ4K.js.map} +0 -0
  423. /package/dist/{reset-PVXTS3FZ.js.map → reset-PQHURJDC.js.map} +0 -0
  424. /package/dist/{reset-PU57HTAP.js.map → reset-V2X7DFHD.js.map} +0 -0
  425. /package/dist/{resolve-KBIYWRF7.js.map → resolve-Q4AACDIC.js.map} +0 -0
  426. /package/dist/{retry-HKWNIGON.js.map → retry-BB6NJBC4.js.map} +0 -0
  427. /package/dist/{retry-LSCVGZM5.js.map → retry-WMGEUJPB.js.map} +0 -0
  428. /package/dist/{sync-definition-6WBQN4Q3.js.map → run-OBYA2F3E.js.map} +0 -0
  429. /package/dist/{run-DU6RVXPA.js.map → run-V6E36GXW.js.map} +0 -0
  430. /package/dist/{scaffold-ad-SLUGKZIW.js.map → scaffold-ad-KKYI7FZJ.js.map} +0 -0
  431. /package/dist/{scaffold-static-ad-NRFAA5HL.js.map → scaffold-static-ad-R5UE4YIZ.js.map} +0 -0
  432. /package/dist/{scaffold-video-Q7BSFVS4.js.map → scaffold-video-Y2BWXZSX.js.map} +0 -0
  433. /package/dist/{schedule-VNTGMFLQ.js.map → schedule-EO27AZTT.js.map} +0 -0
  434. /package/dist/{scheduled-agents-6TNWXJVH.js.map → scheduled-agents-OIJBX7OO.js.map} +0 -0
  435. /package/dist/{schema-ZEOL467O.js.map → schema-7GSCTQIC.js.map} +0 -0
  436. /package/dist/{search-XUINK3C2.js.map → search-Q7PAV7NY.js.map} +0 -0
  437. /package/dist/{select-U3DVKV72.js.map → select-ASR5SBYE.js.map} +0 -0
  438. /package/dist/{set-prompt-EQIVJ5LR.js.map → set-prompt-I32464V4.js.map} +0 -0
  439. /package/dist/{setup-links-CLPE6UUM.js.map → setup-links-NP2HULRC.js.map} +0 -0
  440. /package/dist/{site-GIZB7NWB.js.map → site-PTIYQQ3Z.js.map} +0 -0
  441. /package/dist/{sources-7RGXA35S.js.map → sources-5FRMFKDA.js.map} +0 -0
  442. /package/dist/{sources-2PG4U4BC.js.map → sources-FJLCIG6X.js.map} +0 -0
  443. /package/dist/{stale-ODM7IOO2.js.map → stale-YUYMETFC.js.map} +0 -0
  444. /package/dist/{stats-NNXZMPZR.js.map → stats-F5JZVPYG.js.map} +0 -0
  445. /package/dist/{status-HKCIXG7P.js.map → status-UYIQFC7L.js.map} +0 -0
  446. /package/dist/{studio-EKIPLLHD.js.map → studio-6ZL76TZR.js.map} +0 -0
  447. /package/dist/{sync-LGDTHM6C.js.map → sync-527ZCA4A.js.map} +0 -0
  448. /package/dist/{tags-BQFPK55V.js.map → tags-2MX3332V.js.map} +0 -0
  449. /package/dist/{tags-N72F6AMR.js.map → tags-7767I2D6.js.map} +0 -0
  450. /package/dist/{tags-DRZ7GPP4.js.map → tags-J3BGX3E6.js.map} +0 -0
  451. /package/dist/{tags-Q5NWILJO.js.map → tags-O27SK3YX.js.map} +0 -0
  452. /package/dist/{tags-4NICM2LC.js.map → tags-VAYVSQM6.js.map} +0 -0
  453. /package/dist/{targeting-criteria-DXHMEEC2.js.map → targeting-criteria-GOTI75Y4.js.map} +0 -0
  454. /package/dist/{targets-A325AP5G.js.map → targets-FC7CGFRD.js.map} +0 -0
  455. /package/dist/{templates-WWY4ZVKR.js.map → templates-EF5LOWP5.js.map} +0 -0
  456. /package/dist/{testimonials-YVHSZTWW.js.map → testimonials-MRMRWF2T.js.map} +0 -0
  457. /package/dist/{top-companies-S2Y4I5HF.js.map → top-companies-VTLR6GTW.js.map} +0 -0
  458. /package/dist/{translate-BTUMXQSK.js.map → translate-UMTKAUJ3.js.map} +0 -0
  459. /package/dist/{triggers-T47AIYVB.js.map → triggers-Y7ZMMY3C.js.map} +0 -0
  460. /package/dist/{unlink-XRKX6DVP.js.map → unlink-HZCFLXH4.js.map} +0 -0
  461. /package/dist/{unstage-77RAGX3F.js.map → unstage-562HOOE7.js.map} +0 -0
  462. /package/dist/{update-R3QSTHUD.js.map → update-ATSXY5UN.js.map} +0 -0
  463. /package/dist/{update-RJLMUP7I.js.map → update-DKU2UDFA.js.map} +0 -0
  464. /package/dist/{update-YRO5IHDX.js.map → update-I5A5TOZJ.js.map} +0 -0
  465. /package/dist/{update-NQIRRGOW.js.map → update-ZF3VFYLB.js.map} +0 -0
  466. /package/dist/{upload-KWFKNKAF.js.map → upload-SIAI6NMH.js.map} +0 -0
  467. /package/dist/{url-params-IMC43AIM.js.map → url-params-AZUI3CW3.js.map} +0 -0
  468. /package/dist/{validate-Y6R6F5T3.js.map → validate-MC4EIQI5.js.map} +0 -0
  469. /package/dist/{videos-U2FPMNFS.js.map → videos-S7BYFSU3.js.map} +0 -0
  470. /package/dist/{web-AHTOJNQY.js.map → web-5R7LHKIT.js.map} +0 -0
  471. /package/dist/{winning-ads-TUYN2BST.js.map → winning-ads-PDCY4YW5.js.map} +0 -0
  472. /package/dist/{write-commands-CT74VHH6.js.map → write-commands-MFRZD6Q6.js.map} +0 -0
  473. /package/dist/{write-commands-2XFNH4BW.js.map → write-commands-VXL5QKMT.js.map} +0 -0
  474. /package/dist/{x-5GDVUJ2I.js.map → x-22PKVRYX.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getFieldDescriptions
3
- } from "./chunk-CYEO5ZIO.js";
3
+ } from "./chunk-JPK34QPS.js";
4
4
  import {
5
5
  LIST_FIELDS,
6
6
  duringLiteralExplanation,
@@ -8,8 +8,7 @@ import {
8
8
  isDuringLiteral,
9
9
  listFieldGuidance,
10
10
  parseApiError
11
- } from "./chunk-GX6VAHY7.js";
12
- import "./chunk-XCM6XWOB.js";
11
+ } from "./chunk-5FWMRTNB.js";
13
12
  import {
14
13
  buildQueryCacheKey,
15
14
  cacheGet,
@@ -22,17 +21,14 @@ import {
22
21
  } from "./chunk-VFIOJD5M.js";
23
22
  import {
24
23
  GOOGLE_ADS_QUERY_MAX_PAGE_SIZE
25
- } from "./chunk-NE4F3FHN.js";
24
+ } from "./chunk-ML7DLFFY.js";
26
25
  import {
27
26
  ApiError,
28
27
  apiPost
29
28
  } from "./chunk-XBOK23HI.js";
30
- import "./chunk-IFWP3ZDO.js";
31
- import "./chunk-NAWWC5I3.js";
32
29
  import {
33
30
  registerSchema
34
31
  } from "./chunk-NU7JSWVA.js";
35
- import "./chunk-YQSBHWOI.js";
36
32
 
37
33
  // src/commands/ads/google/query.ts
38
34
  import { appendFileSync, existsSync, readFileSync, writeFileSync } from "fs";
@@ -67,11 +63,11 @@ var SERVING_CHAINS = {
67
63
  campaign_asset: ["campaign.status", "campaign_asset.status"],
68
64
  ad_group_asset: ["campaign.status", "ad_group.status", "ad_group_asset.status"]
69
65
  };
70
- var PRESETS = [
66
+ var CORE_PRESETS = [
71
67
  {
72
68
  name: "campaign-performance",
73
69
  description: "Campaign-level metrics overview",
74
- gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, campaign.advertising_channel_type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.conversions_value, metrics.ctr, metrics.average_cpc FROM campaign WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC LIMIT {limit}`,
70
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, campaign.advertising_channel_type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.conversions_value, metrics.ctr, metrics.average_cpc FROM campaign WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC`,
75
71
  defaultDateRange: "LAST_30_DAYS",
76
72
  defaultLimit: 200,
77
73
  statusFields: ["campaign.status"]
@@ -79,7 +75,7 @@ var PRESETS = [
79
75
  {
80
76
  name: "budget-limited",
81
77
  description: "Campaigns Google reports as limited by budget, with each one's bid target next to its actual cost per conversion \u2014 the state where a target above actual now drives delivery up to the target instead of holding recent cost",
82
- gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, campaign.advertising_channel_type, campaign.bidding_strategy_type, campaign.primary_status, campaign.primary_status_reasons, campaign.target_cpa.target_cpa_micros, campaign.maximize_conversions.target_cpa_micros, campaign.target_roas.target_roas, campaign.maximize_conversion_value.target_roas, campaign.target_cpc.target_cpc_micros, campaign_budget.amount_micros, metrics.cost_micros, metrics.conversions, metrics.conversions_value, metrics.cost_per_conversion, metrics.search_budget_lost_impression_share FROM campaign WHERE campaign.primary_status_reasons CONTAINS ANY (BUDGET_CONSTRAINED) AND segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC LIMIT {limit}`,
78
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, campaign.advertising_channel_type, campaign.bidding_strategy_type, campaign.primary_status, campaign.primary_status_reasons, campaign.target_cpa.target_cpa_micros, campaign.maximize_conversions.target_cpa_micros, campaign.target_roas.target_roas, campaign.maximize_conversion_value.target_roas, campaign.target_cpc.target_cpc_micros, campaign_budget.amount_micros, metrics.cost_micros, metrics.conversions, metrics.conversions_value, metrics.cost_per_conversion, metrics.search_budget_lost_impression_share FROM campaign WHERE campaign.primary_status_reasons CONTAINS ANY (BUDGET_CONSTRAINED) AND segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC`,
83
79
  defaultDateRange: "LAST_30_DAYS",
84
80
  defaultLimit: 200,
85
81
  statusFields: ["campaign.status"]
@@ -87,7 +83,7 @@ var PRESETS = [
87
83
  {
88
84
  name: "conversions-by-action",
89
85
  description: "Which conversion action each campaign's conversions actually are \u2014 the read that says whether two campaigns' conversion rates are measuring the same event",
90
- gaqlTemplate: `SELECT campaign.id, campaign.name, segments.conversion_action_name, segments.conversion_action_category, metrics.conversions, metrics.all_conversions FROM campaign WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.conversions DESC LIMIT {limit}`,
86
+ gaqlTemplate: `SELECT campaign.id, campaign.name, segments.conversion_action_name, segments.conversion_action_category, metrics.conversions, metrics.all_conversions FROM campaign WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.conversions DESC`,
91
87
  defaultDateRange: "LAST_30_DAYS",
92
88
  defaultLimit: 200,
93
89
  statusFields: ["campaign.status"]
@@ -95,7 +91,7 @@ var PRESETS = [
95
91
  {
96
92
  name: "keyword-analysis",
97
93
  description: "Keyword performance with match type and quality",
98
- gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.status, ad_group_criterion.quality_info.quality_score, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.ctr FROM keyword_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC LIMIT {limit}`,
94
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.status, ad_group_criterion.quality_info.quality_score, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.ctr FROM keyword_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC`,
99
95
  defaultDateRange: "LAST_30_DAYS",
100
96
  defaultLimit: 200,
101
97
  statusFields: ["campaign.status", "ad_group.status", "ad_group_criterion.status"]
@@ -103,7 +99,7 @@ var PRESETS = [
103
99
  {
104
100
  name: "keyword-serving",
105
101
  description: "Why a keyword is limited \u2014 Google Ads' 'Eligible (Limited) / Below first page bid' column, with the first-page bid estimate, the current max CPC and quality score",
106
- gaqlTemplate: `SELECT campaign.id, campaign.name, ad_group.id, ad_group.name, ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.status, ad_group_criterion.primary_status, ad_group_criterion.primary_status_reasons, ad_group_criterion.system_serving_status, ad_group_criterion.approval_status, ad_group_criterion.effective_cpc_bid_micros, ad_group_criterion.effective_cpc_bid_source, ad_group_criterion.position_estimates.first_page_cpc_micros, ad_group_criterion.position_estimates.top_of_page_cpc_micros, ad_group_criterion.quality_info.quality_score, ad_group_criterion.quality_info.creative_quality_score, ad_group_criterion.quality_info.post_click_quality_score, ad_group_criterion.quality_info.search_predicted_ctr FROM ad_group_criterion WHERE ad_group_criterion.type = 'KEYWORD' AND ad_group_criterion.negative = FALSE{statusScope} ORDER BY campaign.name LIMIT {limit}`,
102
+ gaqlTemplate: `SELECT campaign.id, campaign.name, ad_group.id, ad_group.name, ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.status, ad_group_criterion.primary_status, ad_group_criterion.primary_status_reasons, ad_group_criterion.system_serving_status, ad_group_criterion.approval_status, ad_group_criterion.effective_cpc_bid_micros, ad_group_criterion.effective_cpc_bid_source, ad_group_criterion.position_estimates.first_page_cpc_micros, ad_group_criterion.position_estimates.top_of_page_cpc_micros, ad_group_criterion.quality_info.quality_score, ad_group_criterion.quality_info.creative_quality_score, ad_group_criterion.quality_info.post_click_quality_score, ad_group_criterion.quality_info.search_predicted_ctr FROM ad_group_criterion WHERE ad_group_criterion.type = 'KEYWORD' AND ad_group_criterion.negative = FALSE{statusScope} ORDER BY campaign.name`,
107
103
  defaultDateRange: "ALL_TIME",
108
104
  defaultLimit: 500,
109
105
  statusFields: ["campaign.status", "ad_group.status", "ad_group_criterion.status"]
@@ -111,7 +107,7 @@ var PRESETS = [
111
107
  {
112
108
  name: "positive-keywords",
113
109
  description: "Positive (targeting) keywords only \u2014 excludes negatives",
114
- gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.status, ad_group_criterion.negative FROM ad_group_criterion WHERE ad_group_criterion.type = 'KEYWORD' AND ad_group_criterion.negative = FALSE{statusScope} ORDER BY campaign.name LIMIT {limit}`,
110
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.status, ad_group_criterion.negative FROM ad_group_criterion WHERE ad_group_criterion.type = 'KEYWORD' AND ad_group_criterion.negative = FALSE{statusScope} ORDER BY campaign.name`,
115
111
  defaultDateRange: "ALL_TIME",
116
112
  defaultLimit: 500,
117
113
  statusFields: ["campaign.status", "ad_group.status", "ad_group_criterion.status"]
@@ -119,28 +115,28 @@ var PRESETS = [
119
115
  {
120
116
  name: "negative-keywords",
121
117
  description: "Negative keywords only \u2014 campaign and ad group level",
122
- gaqlTemplate: `SELECT campaign.id, campaign.name, ad_group.name, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.negative FROM ad_group_criterion WHERE ad_group_criterion.type = 'KEYWORD' AND ad_group_criterion.negative = TRUE AND campaign.status != 'REMOVED' ORDER BY campaign.name LIMIT {limit}`,
118
+ gaqlTemplate: `SELECT campaign.id, campaign.name, ad_group.name, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.negative FROM ad_group_criterion WHERE ad_group_criterion.type = 'KEYWORD' AND ad_group_criterion.negative = TRUE AND campaign.status != 'REMOVED' ORDER BY campaign.name`,
123
119
  defaultDateRange: "ALL_TIME",
124
120
  defaultLimit: 500
125
121
  },
126
122
  {
127
123
  name: "negative-keyword-lists",
128
- description: "Shared negative keyword lists and the terms inside them (SharedSet members)",
129
- gaqlTemplate: `SELECT shared_set.id, shared_set.name, shared_criterion.keyword.text, shared_criterion.keyword.match_type FROM shared_criterion WHERE shared_set.type = 'NEGATIVE_KEYWORDS' AND shared_set.status = 'ENABLED' ORDER BY shared_set.name LIMIT {limit}`,
124
+ description: "Shared negative keyword lists and the terms inside them (SharedSet members), with each member's resource name \u2014 what `negative-keywords remove` / a list-member removal takes",
125
+ gaqlTemplate: `SELECT shared_set.id, shared_set.name, shared_criterion.resource_name, shared_criterion.criterion_id, shared_criterion.keyword.text, shared_criterion.keyword.match_type FROM shared_criterion WHERE shared_set.type = 'NEGATIVE_KEYWORDS' AND shared_set.status = 'ENABLED' ORDER BY shared_set.name`,
130
126
  defaultDateRange: "ALL_TIME",
131
127
  defaultLimit: 500
132
128
  },
133
129
  {
134
130
  name: "negative-list-attachments",
135
131
  description: "Which campaigns each shared negative keyword list is attached to",
136
- gaqlTemplate: `SELECT campaign.id, campaign.name, shared_set.id, shared_set.name FROM campaign_shared_set WHERE shared_set.type = 'NEGATIVE_KEYWORDS' AND campaign_shared_set.status = 'ENABLED' ORDER BY campaign.name LIMIT {limit}`,
132
+ gaqlTemplate: `SELECT campaign.id, campaign.name, shared_set.id, shared_set.name FROM campaign_shared_set WHERE shared_set.type = 'NEGATIVE_KEYWORDS' AND campaign_shared_set.status = 'ENABLED' ORDER BY campaign.name`,
137
133
  defaultDateRange: "ALL_TIME",
138
134
  defaultLimit: 500
139
135
  },
140
136
  {
141
137
  name: "search-terms",
142
138
  description: "Actual user search queries triggering ads",
143
- gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.name, ad_group.status, search_term_view.search_term, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM search_term_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC LIMIT {limit}`,
139
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.name, ad_group.status, search_term_view.search_term, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM search_term_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC`,
144
140
  defaultDateRange: "LAST_7_DAYS",
145
141
  defaultLimit: 200,
146
142
  statusFields: ["campaign.status", "ad_group.status"]
@@ -148,15 +144,17 @@ var PRESETS = [
148
144
  {
149
145
  name: "ad-copy-performance",
150
146
  description: "Ad headline and description effectiveness",
151
- gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.status, ad_group_ad.status, ad_group_ad.ad.responsive_search_ad.headlines, ad_group_ad.ad.responsive_search_ad.descriptions, ad_group_ad.ad.final_urls, metrics.impressions, metrics.clicks, metrics.conversions, metrics.ctr FROM ad_group_ad WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC LIMIT {limit}`,
147
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.status, ad_group_ad.status, ad_group_ad.ad.responsive_search_ad.headlines, ad_group_ad.ad.responsive_search_ad.descriptions, ad_group_ad.ad.final_urls, metrics.impressions, metrics.clicks, metrics.conversions, metrics.ctr FROM ad_group_ad WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC`,
152
148
  defaultDateRange: "LAST_30_DAYS",
153
149
  defaultLimit: 200,
154
150
  statusFields: ["campaign.status", "ad_group.status", "ad_group_ad.status"]
155
151
  },
156
152
  {
157
153
  name: "asset-performance",
158
- description: "Performance Max asset performance labels",
159
- gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, asset_group.name, asset_group.status, asset_group_asset.status, asset_group_asset.field_type, asset_group_asset.performance_label, asset.type, asset.text_asset.text, asset.image_asset.full_size.url FROM asset_group_asset WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX' AND segments.date DURING {dateRange}{statusScope} LIMIT {limit}`,
154
+ // `asset_group_asset.performance_label` is gone (v25 answers UNRECOGNIZED_FIELD): Google retired
155
+ // the BEST/GOOD/LOW label, so the read is each asset's serving status and its own metrics.
156
+ description: "Performance Max assets: serving status and metrics per asset",
157
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, asset_group.name, asset_group.status, asset_group_asset.status, asset_group_asset.field_type, asset_group_asset.primary_status, asset_group_asset.primary_status_reasons, asset.type, asset.text_asset.text, asset.image_asset.full_size.url, metrics.impressions, metrics.clicks, metrics.conversions, metrics.cost_micros FROM asset_group_asset WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX' AND segments.date DURING {dateRange}{statusScope}`,
160
158
  defaultDateRange: "LAST_30_DAYS",
161
159
  defaultLimit: 200,
162
160
  statusFields: ["campaign.status", "asset_group.status", "asset_group_asset.status"]
@@ -164,7 +162,7 @@ var PRESETS = [
164
162
  {
165
163
  name: "shopping-products",
166
164
  description: "Product-level shopping performance metrics",
167
- gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, segments.product_title, segments.product_item_id, segments.product_brand, segments.product_type_l1, metrics.clicks, metrics.impressions, metrics.cost_micros, metrics.conversions FROM shopping_performance_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC LIMIT {limit}`,
165
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, segments.product_title, segments.product_item_id, segments.product_brand, segments.product_type_l1, metrics.clicks, metrics.impressions, metrics.cost_micros, metrics.conversions FROM shopping_performance_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC`,
168
166
  defaultDateRange: "LAST_30_DAYS",
169
167
  defaultLimit: 200,
170
168
  statusFields: ["campaign.status"]
@@ -177,6 +175,253 @@ var PRESETS = [
177
175
  defaultLimit: 1
178
176
  }
179
177
  ];
178
+ var REPORT_PRESETS = [
179
+ {
180
+ name: "pmax-channels",
181
+ description: "Performance Max spend and results split by channel (Search, YouTube, Display, Discover, Gmail, Maps\u2026) \u2014 segments.ad_network_type per campaign",
182
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, segments.ad_network_type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.conversions_value FROM campaign WHERE campaign.advertising_channel_type = 'PERFORMANCE_MAX' AND segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC`,
183
+ defaultDateRange: "LAST_30_DAYS",
184
+ defaultLimit: 200,
185
+ statusFields: ["campaign.status"]
186
+ },
187
+ {
188
+ name: "pmax-placements",
189
+ description: "Where Performance Max ads showed on Display / YouTube / apps (Google reports impressions only for these)",
190
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, performance_max_placement_view.display_name, performance_max_placement_view.placement, performance_max_placement_view.placement_type, performance_max_placement_view.target_url, metrics.impressions FROM performance_max_placement_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC`,
191
+ defaultDateRange: "LAST_30_DAYS",
192
+ defaultLimit: 200,
193
+ statusFields: ["campaign.status"]
194
+ },
195
+ {
196
+ name: "placements",
197
+ description: "Where Display, Video and Demand Gen ads showed \u2014 each website, app or YouTube video, with cost and conversions (exclusion candidates)",
198
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, detail_placement_view.display_name, detail_placement_view.placement, detail_placement_view.placement_type, detail_placement_view.target_url, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM detail_placement_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC`,
199
+ defaultDateRange: "LAST_30_DAYS",
200
+ defaultLimit: 200,
201
+ statusFields: ["campaign.status", "ad_group.status"]
202
+ },
203
+ {
204
+ name: "rsa-assets",
205
+ description: "Each responsive search ad headline and description: its text, pin, whether it is enabled, its approval and its own impressions/clicks/conversions",
206
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ad_group_ad.ad.id, ad_group_ad.status, ad_group_ad_asset_view.field_type, ad_group_ad_asset_view.pinned_field, ad_group_ad_asset_view.enabled, ad_group_ad_asset_view.policy_summary, asset.id, asset.text_asset.text, metrics.impressions, metrics.clicks, metrics.conversions FROM ad_group_ad_asset_view WHERE ad_group_ad.ad.type = 'RESPONSIVE_SEARCH_AD' AND segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC`,
207
+ defaultDateRange: "LAST_30_DAYS",
208
+ defaultLimit: 500,
209
+ statusFields: ["campaign.status", "ad_group.status", "ad_group_ad.status"]
210
+ },
211
+ {
212
+ name: "landing-pages",
213
+ description: "Final URLs as written on the ads, with clicks, cost, conversions, mobile-friendly click share and speed score",
214
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, landing_page_view.unexpanded_final_url, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.mobile_friendly_clicks_percentage, metrics.speed_score FROM landing_page_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.clicks DESC`,
215
+ defaultDateRange: "LAST_30_DAYS",
216
+ defaultLimit: 200,
217
+ statusFields: ["campaign.status"]
218
+ },
219
+ {
220
+ name: "geo-performance",
221
+ description: "Results by country and location type (people IN vs INTERESTED IN the place) per campaign \u2014 the read behind a Presence vs Presence-or-interest decision",
222
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, geographic_view.country_criterion_id, geographic_view.location_type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM geographic_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC`,
223
+ defaultDateRange: "LAST_30_DAYS",
224
+ defaultLimit: 200,
225
+ statusFields: ["campaign.status"]
226
+ },
227
+ {
228
+ name: "age-performance",
229
+ description: "Results by age range per ad group",
230
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ad_group_criterion.age_range.type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM age_range_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC`,
231
+ defaultDateRange: "LAST_30_DAYS",
232
+ defaultLimit: 200,
233
+ statusFields: ["campaign.status", "ad_group.status"]
234
+ },
235
+ {
236
+ name: "gender-performance",
237
+ description: "Results by gender per ad group",
238
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ad_group_criterion.gender.type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM gender_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC`,
239
+ defaultDateRange: "LAST_30_DAYS",
240
+ defaultLimit: 200,
241
+ statusFields: ["campaign.status", "ad_group.status"]
242
+ },
243
+ {
244
+ name: "ai-max-search-terms",
245
+ description: "AI Max for Search: each search term with the headline and landing page Google generated or chose for it, with results",
246
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ai_max_search_term_ad_combination_view.search_term, ai_max_search_term_ad_combination_view.headline, ai_max_search_term_ad_combination_view.landing_page, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM ai_max_search_term_ad_combination_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC`,
247
+ defaultDateRange: "LAST_30_DAYS",
248
+ defaultLimit: 200,
249
+ statusFields: ["campaign.status", "ad_group.status"]
250
+ },
251
+ {
252
+ name: "account-budget",
253
+ description: "The account budget (invoiced billing): approved spending limit, served amount, dates and any pending change \u2014 read-only",
254
+ gaqlTemplate: `SELECT account_budget.id, account_budget.name, account_budget.status, account_budget.billing_setup, account_budget.approved_spending_limit_micros, account_budget.approved_spending_limit_type, account_budget.amount_served_micros, account_budget.total_adjustments_micros, account_budget.approved_start_date_time, account_budget.approved_end_date_time, account_budget.pending_proposal.proposal_type, account_budget.pending_proposal.spending_limit_micros FROM account_budget ORDER BY account_budget.approved_start_date_time DESC`,
255
+ defaultDateRange: "ALL_TIME",
256
+ defaultLimit: 50
257
+ },
258
+ {
259
+ name: "recommendations",
260
+ description: "Google's open recommendations (not dismissed): type, the campaign/ad group it targets, and its estimated impact",
261
+ gaqlTemplate: `SELECT recommendation.resource_name, recommendation.type, recommendation.campaign, recommendation.ad_group, recommendation.impact FROM recommendation WHERE recommendation.dismissed = FALSE`,
262
+ defaultDateRange: "ALL_TIME",
263
+ defaultLimit: 200
264
+ },
265
+ {
266
+ name: "campaign-simulations",
267
+ description: "Google's what-if curves per campaign \u2014 budget, target CPA / ROAS, CPC bid or target impression share against the clicks, cost and conversions Google predicts",
268
+ gaqlTemplate: `SELECT campaign_simulation.campaign_id, campaign_simulation.type, campaign_simulation.modification_method, campaign_simulation.start_date, campaign_simulation.end_date, campaign_simulation.budget_point_list.points, campaign_simulation.target_cpa_point_list.points, campaign_simulation.target_roas_point_list.points, campaign_simulation.cpc_bid_point_list.points, campaign_simulation.target_impression_share_point_list.points FROM campaign_simulation`,
269
+ defaultDateRange: "ALL_TIME",
270
+ defaultLimit: 200
271
+ },
272
+ {
273
+ name: "keyword-bid-simulations",
274
+ description: "Google's what-if curve per keyword: CPC bid against predicted clicks, cost and impressions",
275
+ gaqlTemplate: `SELECT ad_group_criterion_simulation.ad_group_id, ad_group_criterion_simulation.criterion_id, ad_group_criterion_simulation.type, ad_group_criterion_simulation.start_date, ad_group_criterion_simulation.end_date, ad_group_criterion_simulation.cpc_bid_point_list.points FROM ad_group_criterion_simulation`,
276
+ defaultDateRange: "ALL_TIME",
277
+ defaultLimit: 200
278
+ }
279
+ ];
280
+ var INVENTORY_PRESETS = [
281
+ {
282
+ name: "campaigns",
283
+ description: "Every campaign: id, name, status, channel, bidding, budget and dates",
284
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, campaign.primary_status, campaign.advertising_channel_type, campaign.advertising_channel_sub_type, campaign.bidding_strategy_type, campaign.bidding_strategy, campaign.campaign_budget, campaign_budget.amount_micros, campaign.start_date_time, campaign.end_date_time FROM campaign{statusWhere} ORDER BY campaign.name`,
285
+ defaultDateRange: "ALL_TIME",
286
+ defaultLimit: 200,
287
+ statusFields: ["campaign.status"]
288
+ },
289
+ {
290
+ name: "budgets",
291
+ description: "Every campaign budget: id, name, daily amount, delivery, whether it is shared and how many campaigns use it",
292
+ gaqlTemplate: `SELECT campaign_budget.id, campaign_budget.name, campaign_budget.status, campaign_budget.amount_micros, campaign_budget.delivery_method, campaign_budget.explicitly_shared, campaign_budget.reference_count FROM campaign_budget WHERE campaign_budget.status != 'REMOVED' ORDER BY campaign_budget.name`,
293
+ defaultDateRange: "ALL_TIME",
294
+ defaultLimit: 200
295
+ },
296
+ {
297
+ name: "ad-groups",
298
+ description: "Every ad group: id, name, status, type and default CPC bid, under its campaign",
299
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ad_group.type, ad_group.cpc_bid_micros FROM ad_group{statusWhere} ORDER BY campaign.name`,
300
+ defaultDateRange: "ALL_TIME",
301
+ defaultLimit: 500,
302
+ statusFields: ["campaign.status", "ad_group.status"]
303
+ },
304
+ {
305
+ name: "keywords",
306
+ description: "Every positive keyword: resource name, text, match type, status, bid and final URL \u2014 `keywords update|remove` take the resource name",
307
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ad_group_criterion.resource_name, ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.status, ad_group_criterion.negative, ad_group_criterion.cpc_bid_micros, ad_group_criterion.final_urls FROM ad_group_criterion WHERE ad_group_criterion.type = 'KEYWORD' AND ad_group_criterion.negative = FALSE{statusScope} ORDER BY campaign.name`,
308
+ defaultDateRange: "ALL_TIME",
309
+ defaultLimit: 500,
310
+ statusFields: ["campaign.status", "ad_group.status", "ad_group_criterion.status"]
311
+ },
312
+ {
313
+ name: "campaign-negative-keywords",
314
+ description: "Campaign-level negative keywords with the resource name `negative-keywords remove` takes",
315
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, campaign_criterion.resource_name, campaign_criterion.keyword.text, campaign_criterion.keyword.match_type FROM campaign_criterion WHERE campaign_criterion.type = 'KEYWORD' AND campaign_criterion.negative = TRUE AND campaign_criterion.status != 'REMOVED' AND campaign.status != 'REMOVED' ORDER BY campaign.name`,
316
+ defaultDateRange: "ALL_TIME",
317
+ defaultLimit: 500
318
+ },
319
+ {
320
+ name: "ad-group-negative-keywords",
321
+ description: "Ad-group-level negative keywords with the resource name `negative-keywords remove` takes",
322
+ gaqlTemplate: `SELECT campaign.id, campaign.name, ad_group.id, ad_group.name, ad_group_criterion.resource_name, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.negative FROM ad_group_criterion WHERE ad_group_criterion.type = 'KEYWORD' AND ad_group_criterion.negative = TRUE AND ad_group_criterion.status != 'REMOVED' AND ad_group.status != 'REMOVED' AND campaign.status != 'REMOVED' ORDER BY campaign.name`,
323
+ defaultDateRange: "ALL_TIME",
324
+ defaultLimit: 500
325
+ },
326
+ {
327
+ name: "shared-sets",
328
+ description: "Every shared list (negative keyword / placement lists): id, name, type, member count and how many campaigns use it",
329
+ gaqlTemplate: `SELECT shared_set.id, shared_set.name, shared_set.type, shared_set.status, shared_set.member_count, shared_set.reference_count FROM shared_set WHERE shared_set.status != 'REMOVED' ORDER BY shared_set.name`,
330
+ defaultDateRange: "ALL_TIME",
331
+ defaultLimit: 200
332
+ },
333
+ {
334
+ name: "ads",
335
+ description: "Every ad: id, type, name, status, approval and final URLs, under its ad group",
336
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.id, ad_group.name, ad_group.status, ad_group_ad.resource_name, ad_group_ad.ad.id, ad_group_ad.ad.type, ad_group_ad.ad.name, ad_group_ad.status, ad_group_ad.policy_summary.approval_status, ad_group_ad.ad.final_urls FROM ad_group_ad{statusWhere} ORDER BY campaign.name`,
337
+ defaultDateRange: "ALL_TIME",
338
+ defaultLimit: 500,
339
+ statusFields: ["campaign.status", "ad_group.status", "ad_group_ad.status"]
340
+ },
341
+ {
342
+ name: "assets",
343
+ description: "Every asset in the account library: id, name, type, text and final URLs",
344
+ gaqlTemplate: `SELECT asset.id, asset.name, asset.type, asset.text_asset.text, asset.sitelink_asset.link_text, asset.callout_asset.callout_text, asset.image_asset.full_size.url, asset.youtube_video_asset.youtube_video_id, asset.final_urls FROM asset ORDER BY asset.type`,
345
+ defaultDateRange: "ALL_TIME",
346
+ defaultLimit: 500
347
+ },
348
+ {
349
+ name: "asset-groups",
350
+ description: "Every Performance Max asset group: id, name, status, final URLs and strength, under its campaign",
351
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, asset_group.resource_name, asset_group.id, asset_group.name, asset_group.status, asset_group.final_urls, asset_group.ad_strength FROM asset_group{statusWhere} ORDER BY campaign.name`,
352
+ defaultDateRange: "ALL_TIME",
353
+ defaultLimit: 200,
354
+ statusFields: ["campaign.status", "asset_group.status"]
355
+ },
356
+ {
357
+ name: "audiences",
358
+ description: "Every audience (user list): id, name, type, membership status, size on search and display, membership duration",
359
+ gaqlTemplate: `SELECT user_list.id, user_list.name, user_list.type, user_list.membership_status, user_list.size_for_search, user_list.size_for_display, user_list.membership_life_span, user_list.eligible_for_search, user_list.eligible_for_display FROM user_list ORDER BY user_list.name`,
360
+ defaultDateRange: "ALL_TIME",
361
+ defaultLimit: 200
362
+ },
363
+ {
364
+ name: "conversion-actions",
365
+ description: "Every conversion action: id, name, type, category, origin, status, primary or secondary, counting",
366
+ gaqlTemplate: `SELECT conversion_action.id, conversion_action.name, conversion_action.type, conversion_action.category, conversion_action.origin, conversion_action.status, conversion_action.primary_for_goal, conversion_action.counting_type FROM conversion_action WHERE conversion_action.status != 'REMOVED' ORDER BY conversion_action.name`,
367
+ defaultDateRange: "ALL_TIME",
368
+ defaultLimit: 200
369
+ },
370
+ {
371
+ name: "bidding-strategies",
372
+ description: "Every portfolio bidding strategy: id, name, type, status and how many campaigns use it",
373
+ gaqlTemplate: `SELECT bidding_strategy.id, bidding_strategy.name, bidding_strategy.type, bidding_strategy.status, bidding_strategy.campaign_count FROM bidding_strategy WHERE bidding_strategy.status != 'REMOVED' ORDER BY bidding_strategy.name`,
374
+ defaultDateRange: "ALL_TIME",
375
+ defaultLimit: 200
376
+ },
377
+ {
378
+ name: "labels",
379
+ description: "Every label: id, name, colour and description",
380
+ gaqlTemplate: `SELECT label.id, label.name, label.status, label.text_label.background_color, label.text_label.description FROM label WHERE label.status != 'REMOVED' ORDER BY label.name`,
381
+ defaultDateRange: "ALL_TIME",
382
+ defaultLimit: 200
383
+ },
384
+ {
385
+ name: "merchant-center",
386
+ description: "Merchant Center accounts linked to this Google Ads account \u2014 the merchantId a Shopping or retail Performance Max campaign names",
387
+ gaqlTemplate: `SELECT product_link.resource_name, product_link.product_link_id, product_link.type, product_link.merchant_center.merchant_center_id FROM product_link WHERE product_link.type = 'MERCHANT_CENTER'`,
388
+ defaultDateRange: "ALL_TIME",
389
+ defaultLimit: 200
390
+ },
391
+ {
392
+ name: "campaign-criteria",
393
+ description: "Every campaign targeting criterion and exclusion \u2014 locations, languages, devices, ad schedules, radius, carriers, operating systems, placements, topics, demographics, content types, IP addresses, web pages, brand lists, audiences \u2014 with the resource name `campaign-criteria update|remove` takes",
394
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, campaign.advertising_channel_type, campaign_criterion.resource_name, campaign_criterion.type, campaign_criterion.negative, campaign_criterion.bid_modifier, campaign_criterion.location.geo_target_constant, campaign_criterion.language.language_constant, campaign_criterion.device.type, campaign_criterion.ad_schedule.day_of_week, campaign_criterion.ad_schedule.start_hour, campaign_criterion.ad_schedule.end_hour, campaign_criterion.proximity.radius, campaign_criterion.placement.url, campaign_criterion.mobile_application.app_id, campaign_criterion.youtube_channel.channel_id, campaign_criterion.youtube_video.video_id, campaign_criterion.topic.topic_constant, campaign_criterion.age_range.type, campaign_criterion.gender.type, campaign_criterion.income_range.type, campaign_criterion.parental_status.type, campaign_criterion.content_label.type, campaign_criterion.ip_block.ip_address, campaign_criterion.webpage.criterion_name, campaign_criterion.brand_list.shared_set, campaign_criterion.carrier.carrier_constant, campaign_criterion.operating_system_version.operating_system_version_constant, campaign_criterion.user_list.user_list, campaign_criterion.user_interest.user_interest_category FROM campaign_criterion WHERE campaign_criterion.type != 'KEYWORD' AND campaign_criterion.status != 'REMOVED' AND campaign.status != 'REMOVED' ORDER BY campaign.name`,
395
+ defaultDateRange: "ALL_TIME",
396
+ defaultLimit: 500
397
+ },
398
+ {
399
+ name: "ad-group-criteria",
400
+ description: "Every ad group targeting criterion and exclusion other than keywords \u2014 placements, apps, YouTube, topics, demographics, web pages, Demand Gen locations, languages and audience, audiences \u2014 with its bid adjustment, max CPC, status and the resource name `ad-group-criteria update|remove` takes",
401
+ gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, campaign.advertising_channel_type, ad_group.id, ad_group.name, ad_group.status, ad_group_criterion.resource_name, ad_group_criterion.type, ad_group_criterion.negative, ad_group_criterion.status, ad_group_criterion.bid_modifier, ad_group_criterion.cpc_bid_micros, ad_group_criterion.placement.url, ad_group_criterion.mobile_application.app_id, ad_group_criterion.youtube_channel.channel_id, ad_group_criterion.youtube_video.video_id, ad_group_criterion.topic.topic_constant, ad_group_criterion.age_range.type, ad_group_criterion.gender.type, ad_group_criterion.parental_status.type, ad_group_criterion.income_range.type, ad_group_criterion.webpage.criterion_name, ad_group_criterion.location.geo_target_constant, ad_group_criterion.language.language_constant, ad_group_criterion.audience.audience, ad_group_criterion.brand_list.shared_set, ad_group_criterion.user_list.user_list, ad_group_criterion.user_interest.user_interest_category FROM ad_group_criterion WHERE ad_group_criterion.type NOT IN ('KEYWORD', 'LISTING_GROUP'){statusScope} ORDER BY campaign.name`,
402
+ defaultDateRange: "ALL_TIME",
403
+ defaultLimit: 500,
404
+ statusFields: ["campaign.status", "ad_group.status", "ad_group_criterion.status"]
405
+ },
406
+ {
407
+ name: "account-exclusions",
408
+ description: "Every account-wide exclusion \u2014 sites, apps, app categories, YouTube, content types, IP addresses, account negative keyword lists \u2014 with the resource name `account-exclusions remove` takes",
409
+ gaqlTemplate: `SELECT customer_negative_criterion.resource_name, customer_negative_criterion.type, customer_negative_criterion.placement.url, customer_negative_criterion.mobile_application.app_id, customer_negative_criterion.mobile_app_category.mobile_app_category_constant, customer_negative_criterion.youtube_channel.channel_id, customer_negative_criterion.youtube_video.video_id, customer_negative_criterion.content_label.type, customer_negative_criterion.ip_block.ip_address, customer_negative_criterion.negative_keyword_list.shared_set FROM customer_negative_criterion`,
410
+ defaultDateRange: "ALL_TIME",
411
+ defaultLimit: 500
412
+ },
413
+ {
414
+ name: "ad-group-bid-modifiers",
415
+ description: "Every ad group's own device bid adjustment, with the resource name `ad-group-bid-modifiers update|remove` takes",
416
+ gaqlTemplate: `SELECT campaign.id, campaign.name, ad_group.id, ad_group.name, ad_group_bid_modifier.resource_name, ad_group_bid_modifier.device.type, ad_group_bid_modifier.bid_modifier FROM ad_group_bid_modifier WHERE campaign.status != 'REMOVED' AND ad_group.status != 'REMOVED' ORDER BY campaign.name`,
417
+ defaultDateRange: "ALL_TIME",
418
+ defaultLimit: 500
419
+ }
420
+ ];
421
+ var PRESETS = [...CORE_PRESETS, ...REPORT_PRESETS, ...INVENTORY_PRESETS];
422
+ function isInventoryPreset(name) {
423
+ return INVENTORY_PRESETS.some((preset) => preset.name === name);
424
+ }
180
425
  function getPreset(name) {
181
426
  return PRESETS.find((p) => p.name === name);
182
427
  }
@@ -187,13 +432,12 @@ function buildStatusScope(statusFields, includePaused) {
187
432
  }
188
433
  function expandPreset(preset, params, now = /* @__PURE__ */ new Date()) {
189
434
  const dateRange = params.dateRange ?? preset.defaultDateRange;
190
- const limit = params.limit ?? preset.defaultLimit;
191
435
  if (preset.gaqlTemplate.includes("{dateRange}") && !isValidDateRange(dateRange)) {
192
436
  return { query: "", dateRangeError: dateRangeError(dateRange, now) };
193
437
  }
194
438
  const statusScope = buildStatusScope(preset.statusFields, params.includePaused ?? false);
195
439
  const range = dateRange.trim();
196
- const query = preset.gaqlTemplate.replace(/DURING\s+\{dateRange\}/g, BETWEEN_RE.test(range) ? range : `DURING ${range}`).replace(/\{dateRange\}/g, range).replace(/\{limit\}/g, String(limit)).replace(/\{statusScope\}/g, statusScope);
440
+ const query = preset.gaqlTemplate.replace(/DURING\s+\{dateRange\}/g, BETWEEN_RE.test(range) ? range : `DURING ${range}`).replace(/\{dateRange\}/g, range).replace(/\{statusScope\}/g, statusScope).replace(/\{statusWhere\}/g, statusScope ? ` WHERE${statusScope.replace(/^ AND/, "")}` : "");
197
441
  return { query };
198
442
  }
199
443
 
@@ -313,7 +557,7 @@ function addRequiredAncestorFields(query) {
313
557
  ]
314
558
  };
315
559
  }
316
- function applyAutoFixes(query, limit) {
560
+ function applyAutoFixes(query) {
317
561
  let corrected = query;
318
562
  const warnings = [];
319
563
  if (/(?<![\w.])keyword\.text\b/.test(corrected)) {
@@ -343,13 +587,6 @@ function applyAutoFixes(query, limit) {
343
587
  corrected = corrected.replace(/ad_group\.status\s*=\s*'ACTIVE'/gi, "ad_group.status = 'ENABLED'");
344
588
  warnings.push({ code: "ENUM_CORRECTED", message: "ad_group.status ACTIVE \u2192 ENABLED" });
345
589
  }
346
- if (!/\bLIMIT\b/i.test(corrected)) {
347
- const effectiveLimit = limit ?? 200;
348
- corrected = `${corrected.trimEnd()} LIMIT ${effectiveLimit}`;
349
- if (!isSingleRowRead(corrected)) {
350
- warnings.push({ code: "AUTO_LIMIT", message: `Added LIMIT ${effectiveLimit}. Use --limit to override.` });
351
- }
352
- }
353
590
  return { query: corrected, warnings };
354
591
  }
355
592
  var DURING_CLAUSE = /(?<=[a-z_]\.[a-z_.]+\s+)DURING\s+([A-Za-z0-9_]+)/gi;
@@ -377,24 +614,6 @@ function rejectUnsupportedDuring(query, customerId) {
377
614
  }
378
615
  };
379
616
  }
380
- function rejectOversizedLimit(query, customerId) {
381
- const match = query.match(/\bLIMIT\s+(\d+)\s*$/i);
382
- if (!match || Number(match[1]) <= GOOGLE_ADS_QUERY_MAX_PAGE_SIZE) return null;
383
- const fixed = query.replace(/\bLIMIT\s+\d+\s*$/i, `LIMIT ${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE}`);
384
- return {
385
- ok: false,
386
- error: {
387
- code: "VALIDATION_ERROR",
388
- message: `LIMIT ${match[1]} is more rows than one read can return (${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE}).`,
389
- fix: {
390
- action: "retry_with_flag",
391
- correctedCommand: buildCommand(fixed, customerId),
392
- explanation: `One query returns at most ${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE} rows. For more, split the read into narrower queries \u2014 a shorter BETWEEN range each, or one campaign each \u2014 write each with --out, and combine the files.`
393
- },
394
- retryable: false
395
- }
396
- };
397
- }
398
617
  var WHERE_OPERATOR = /(?<![\w.])([a-z_]+(?:\.[a-z_]+)+)\s*(CONTAINS\s+(?:ALL|ANY|NONE)|IS\s+NOT\s+NULL|IS\s+NULL|NOT\s+LIKE|NOT\s+IN|NOT\s+REGEXP_MATCH|REGEXP_MATCH|LIKE|IN|BETWEEN|DURING|!=|<=|>=|=|<|>)/gi;
399
618
  function escapeRegExp(text) {
400
619
  return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -462,7 +681,7 @@ function rejectContainsCall(query, customerId) {
462
681
  }
463
682
  };
464
683
  }
465
- function validatePreflight(query, customerId, limit) {
684
+ function validatePreflight(query, customerId) {
466
685
  const warnings = [];
467
686
  const corrected = query;
468
687
  const firstWord = corrected.trim().split(/\s+/)[0]?.toUpperCase();
@@ -510,7 +729,7 @@ function validatePreflight(query, customerId, limit) {
510
729
  }
511
730
  };
512
731
  }
513
- for (const reject of [rejectContainsCall, rejectListFieldOperator, rejectUnsupportedDuring, rejectOversizedLimit]) {
732
+ for (const reject of [rejectContainsCall, rejectListFieldOperator, rejectUnsupportedDuring]) {
514
733
  const rejection2 = reject(corrected, customerId);
515
734
  if (rejection2) return { valid: false, warnings: [], error: rejection2 };
516
735
  }
@@ -538,7 +757,7 @@ function validatePreflight(query, customerId, limit) {
538
757
  message: "ad_group_criterion returns BOTH positive and negative keywords. Add ad_group_criterion.negative to SELECT or filter with WHERE ad_group_criterion.negative = FALSE (positives) / TRUE (negatives). Use --preset positive-keywords or negative-keywords instead."
539
758
  });
540
759
  }
541
- const { query: autoFixed, warnings: autoFixWarnings } = applyAutoFixes(corrected, limit);
760
+ const { query: autoFixed, warnings: autoFixWarnings } = applyAutoFixes(corrected);
542
761
  warnings.push(...autoFixWarnings);
543
762
  const analysis = analyzeServingChain(autoFixed);
544
763
  if (!analysis) return { valid: true, correctedQuery: autoFixed, warnings };
@@ -707,9 +926,14 @@ function keywordServingWarnings(rows, options) {
707
926
  // src/commands/ads/google/query.ts
708
927
  registerSchema({
709
928
  command: "ads.google.query",
710
- description: "Run a GAQL (Google Ads Query Language) query. The most powerful command \u2014 supports any valid SELECT statement. Use --preset for common queries without writing GAQL.",
929
+ description: "Run a GAQL (Google Ads Query Language) query, one page at a time. Start here: `baker ads google query --preset campaign-performance` (--list-presets for all). Each read returns one page of --limit rows and, when the account holds more, `pagination.cursor` \u2014 pass it back with --cursor for the next page, or use --all --out <file> to read every page. A LIMIT in your own GAQL caps the whole read.",
711
930
  args: {
712
- query: { type: "string", description: "GAQL SELECT query string", required: false },
931
+ query: { type: "positional", description: "GAQL SELECT statement (or pass it with --gaql)", required: false },
932
+ gaql: {
933
+ type: "string",
934
+ description: 'GAQL SELECT statement as a flag \u2014 same as the positional, for when quoting a positional is awkward: --gaql "SELECT campaign.name FROM campaign"',
935
+ required: false
936
+ },
713
937
  "customer-id": {
714
938
  type: "string",
715
939
  description: "Google Ads customer ID (10 digits, no dashes). Falls back to BAKER_GOOGLE_ADS_CUSTOMER_ID env var.",
@@ -717,7 +941,7 @@ registerSchema({
717
941
  },
718
942
  preset: {
719
943
  type: "string",
720
- description: "Named query preset. Reads (campaign-performance, conversions-by-action, keyword-analysis, keyword-serving, positive-keywords, negative-keywords, negative-keyword-lists, negative-list-attachments, search-terms, ad-copy-performance, asset-performance, shopping-products, account-summary). Presets return only actually-serving entities (enabled campaign AND ad group AND ad) by default \u2014 pass --include-paused to include paused ones.",
944
+ description: `Named query preset (--list-presets shows each one's GAQL and page size): ${PRESETS.map((p) => p.name).join(", ")}. Presets return only actually-serving entities (enabled campaign AND ad group AND ad) by default \u2014 pass --include-paused to include paused ones.`,
721
945
  required: false
722
946
  },
723
947
  "date-range": {
@@ -732,15 +956,18 @@ registerSchema({
732
956
  },
733
957
  limit: {
734
958
  type: "number",
735
- description: "Max rows in ONE page (default 200), AND the LIMIT added to a query that has none \u2014 so it caps the whole read with --all too. Values up to 8192 are accepted \u2014 the most one read can return. Any read that fills this cap comes back flagged TRUNCATED_RESULTS \u2014 never count or total from one.",
736
- required: false,
737
- default: 200
959
+ description: `Rows per page (default: the preset's page size, else 200; at most ${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE}). A page size, not a cap: when more rows exist the read returns a cursor, and --all keeps paging.`,
960
+ required: false
738
961
  },
739
962
  "list-presets": { type: "boolean", description: "List all available query presets", required: false },
740
- cursor: { type: "string", description: "Pagination cursor from previous response", required: false },
963
+ cursor: {
964
+ type: "string",
965
+ description: "Resume after a previous page: pass its pagination.cursor with the same query and --limit",
966
+ required: false
967
+ },
741
968
  all: {
742
969
  type: "boolean",
743
- description: "Follow every page until the data set is exhausted (use with --out for large datasets). Needed for a read you may count or total, but not sufficient: it exhausts the pages, not the statement's LIMIT, so pair it with a LIMIT in the statement above the row count you expect (at most 8192 \u2014 split bigger reads into narrower queries) and check the read came back without TRUNCATED_RESULTS.",
970
+ description: "Follow every page until the account has no more rows (use with --out for large reads). Needed for any read you will count or total. Only a LIMIT written in the GAQL itself can stop it early.",
744
971
  required: false
745
972
  },
746
973
  out: {
@@ -807,12 +1034,10 @@ function writeRowsToFile(filePath, rows, fields, append) {
807
1034
  writeFileSync(filePath, JSON.stringify(rows, null, 2), "utf-8");
808
1035
  }
809
1036
  }
810
- function effectiveRowLimit(finalQuery, limit, all = false) {
1037
+ function effectiveRowLimit(finalQuery) {
811
1038
  if (isSingleRowRead(finalQuery)) return void 0;
812
1039
  const match = finalQuery.match(/\bLIMIT\s+(\d+)/i);
813
- const statementLimit = match?.[1] ? Number(match[1]) : void 0;
814
- if (all) return statementLimit;
815
- return statementLimit === void 0 ? limit : Math.min(limit, statementLimit);
1040
+ return match?.[1] ? Number(match[1]) : void 0;
816
1041
  }
817
1042
  function warningLines(warnings, format) {
818
1043
  return warnings.map((w) => {
@@ -826,9 +1051,13 @@ function completenessWarnings(read) {
826
1051
  const cap = read.effectiveLimit;
827
1052
  const filledTheCap = cap !== void 0 && cap > 0 && read.rowCount >= cap;
828
1053
  if (!read.hasMore && !filledTheCap) return [];
829
- const cause = read.hasMore ? `More rows are waiting: the account returned a next-page cursor this run did not follow.` : `The ${read.rowCount} rows returned exactly fill the row cap in force (${cap}).`;
830
- const atPageCap = cap !== void 0 && cap >= GOOGLE_ADS_QUERY_MAX_PAGE_SIZE;
831
- const fix = atPageCap ? `${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE} rows is the most one read can return \u2014 split it into narrower queries (a shorter BETWEEN range each, or one campaign each), write each with --out, and combine the files.` : read.all ? `Every page was followed, so the cap is the LIMIT in the statement itself \u2014 raise it above ${cap}, or drop it and pass a larger --limit (up to ${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE}), then re-run.` : `Re-run with --all --out <file> to page through everything, or raise --limit above ${cap} (up to ${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE}).`;
1054
+ const [cause, fix] = read.hasMore ? [
1055
+ "More rows are waiting: the account returned a next-page cursor this run did not follow.",
1056
+ "Re-run with --all --out <file> to read every page, or pass --cursor <pagination.cursor> (same query, same --limit) for the next page."
1057
+ ] : [
1058
+ `The ${read.rowCount} rows returned exactly fill the LIMIT in the statement (${cap}).`,
1059
+ `Raise the LIMIT in the statement above ${cap}, or drop it \u2014 without a LIMIT, --all pages through every row.`
1060
+ ];
832
1061
  return [
833
1062
  {
834
1063
  code: "TRUNCATED_RESULTS",
@@ -913,7 +1142,6 @@ function outputResults(rows, fieldDescs, warnings, args, cached, read) {
913
1142
  ...completenessWarnings({
914
1143
  rowCount: rows.length,
915
1144
  effectiveLimit: read.effectiveLimit,
916
- all: read.all,
917
1145
  hasMore: Boolean(read.nextCursor)
918
1146
  })
919
1147
  ];
@@ -930,7 +1158,15 @@ function outputResults(rows, fieldDescs, warnings, args, cached, read) {
930
1158
  }
931
1159
  writeRows(format, rows, resultColumns(read.gaql, rows), warningLines(allWarnings, format));
932
1160
  }
933
- function resolveGaql(args, limit) {
1161
+ function resolveGaqlInput(args) {
1162
+ const positional = typeof args.query === "string" ? args.query.trim() : "";
1163
+ const flag = typeof args.gaql === "string" ? args.gaql.trim() : "";
1164
+ if (positional && flag && positional !== flag) {
1165
+ return { ok: false, message: "Pass the GAQL statement once \u2014 as the positional or as --gaql, not both." };
1166
+ }
1167
+ return { ok: true, gaql: positional || flag };
1168
+ }
1169
+ function resolveGaql(args) {
934
1170
  if (args.preset) {
935
1171
  const preset = getPreset(args.preset);
936
1172
  if (!preset) {
@@ -943,7 +1179,6 @@ function resolveGaql(args, limit) {
943
1179
  }
944
1180
  const expanded = expandPreset(preset, {
945
1181
  dateRange: args["date-range"],
946
- limit,
947
1182
  includePaused: Boolean(args["include-paused"])
948
1183
  });
949
1184
  if (expanded.dateRangeError) {
@@ -955,18 +1190,18 @@ function resolveGaql(args, limit) {
955
1190
  }
956
1191
  return expanded.query;
957
1192
  }
958
- const gaql = args.query ?? "";
959
- if (!gaql) {
1193
+ const input = resolveGaqlInput(args);
1194
+ if (!input.ok || !input.gaql) {
960
1195
  writeAdsJson({
961
1196
  ok: false,
962
1197
  error: {
963
1198
  code: "VALIDATION_ERROR",
964
- message: "Provide a GAQL query or use --preset. Run --list-presets to see options."
1199
+ message: input.ok ? "Provide a GAQL query (positional or --gaql) or use --preset. Run --list-presets to see options." : input.message
965
1200
  }
966
1201
  });
967
1202
  return null;
968
1203
  }
969
- return gaql;
1204
+ return input.gaql;
970
1205
  }
971
1206
  var SERVING_HIERARCHY_RESOURCES = [
972
1207
  "campaign",
@@ -990,7 +1225,8 @@ function whereClause3(upperQuery) {
990
1225
  }
991
1226
  function servingScopeWarnings(args, finalQuery) {
992
1227
  if (args.preset) {
993
- if (!args["include-paused"]) return [];
1228
+ const name = String(args.preset);
1229
+ if (!args["include-paused"] || isInventoryPreset(name) || !getPreset(name)?.statusFields?.length) return [];
994
1230
  return [
995
1231
  {
996
1232
  code: "SERVING_SCOPE",
@@ -1100,11 +1336,13 @@ async function fetchAllPages(gaql, body, args, servingOptions) {
1100
1336
  fileColumns: fileColumns ?? []
1101
1337
  };
1102
1338
  }
1339
+ function pageCacheKey(customerId, query, pageSize, cursor) {
1340
+ return buildQueryCacheKey(customerId, `${query}\0page=${pageSize}\0cursor=${cursor ?? ""}`);
1341
+ }
1103
1342
  async function executeQuery(finalQuery, args, customerId, limit, warnings, useCache, cacheKey) {
1104
1343
  const body = { customerId, query: finalQuery, pageSize: limit };
1105
1344
  const managerId = getManagerIdForCustomer(customerId);
1106
1345
  if (managerId) body.managerId = managerId;
1107
- if (args.cursor) body.pageToken = args.cursor;
1108
1346
  if (!useCache) body.skipCache = true;
1109
1347
  const servingOptions = keywordServingOptions(finalQuery);
1110
1348
  const { allRows, lastPageToken, totalRowsWritten, keywordLimits, observedFields, fileColumns } = await fetchAllPages(
@@ -1116,8 +1354,7 @@ async function executeQuery(finalQuery, args, customerId, limit, warnings, useCa
1116
1354
  if (args.out) {
1117
1355
  const truncation = completenessWarnings({
1118
1356
  rowCount: totalRowsWritten,
1119
- effectiveLimit: effectiveRowLimit(finalQuery, limit, Boolean(args.all)),
1120
- all: Boolean(args.all),
1357
+ effectiveLimit: effectiveRowLimit(finalQuery),
1121
1358
  hasMore: Boolean(lastPageToken)
1122
1359
  });
1123
1360
  const fileWarnings = [
@@ -1140,9 +1377,9 @@ async function executeQuery(finalQuery, args, customerId, limit, warnings, useCa
1140
1377
  );
1141
1378
  return;
1142
1379
  }
1143
- if (useCache && allRows.length > 0) {
1144
- const fields2 = extractFields(allRows);
1145
- cacheSet("queries", cacheKey, allRows, getQueryTtl(finalQuery), getFieldDescriptions(fields2));
1380
+ if (useCache && !args.all && allRows.length > 0) {
1381
+ const page = { rows: allRows, ...lastPageToken ? { cursor: lastPageToken } : {} };
1382
+ cacheSet("queries", cacheKey, page, getQueryTtl(finalQuery), getFieldDescriptions(extractFields(allRows)));
1146
1383
  }
1147
1384
  const fields = extractFields(allRows);
1148
1385
  outputResults(
@@ -1158,18 +1395,17 @@ async function executeQuery(finalQuery, args, customerId, limit, warnings, useCa
1158
1395
  false,
1159
1396
  {
1160
1397
  gaql: finalQuery,
1161
- effectiveLimit: effectiveRowLimit(finalQuery, limit, Boolean(args.all)),
1162
- all: Boolean(args.all),
1398
+ effectiveLimit: effectiveRowLimit(finalQuery),
1163
1399
  nextCursor: lastPageToken
1164
1400
  }
1165
1401
  );
1166
1402
  }
1167
1403
  function shouldReadCache(args) {
1168
- return !args["no-cache"] && !args.out;
1404
+ return !args["no-cache"] && !args.out && !args.all;
1169
1405
  }
1170
1406
  var DEFAULT_QUERY_LIMIT = 200;
1171
- function parseQueryLimit(raw) {
1172
- if (raw === void 0 || raw === null || raw === "") return { ok: true, limit: DEFAULT_QUERY_LIMIT };
1407
+ function parseQueryLimit(raw, fallback = DEFAULT_QUERY_LIMIT) {
1408
+ if (raw === void 0 || raw === null || raw === "") return { ok: true, limit: fallback };
1173
1409
  const limit = Number(raw);
1174
1410
  if (Number.isInteger(limit) && limit >= 1 && limit <= GOOGLE_ADS_QUERY_MAX_PAGE_SIZE) return { ok: true, limit };
1175
1411
  return {
@@ -1181,26 +1417,30 @@ function parseQueryLimit(raw) {
1181
1417
  message: `--limit must be a whole number from 1 to ${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE}, got '${String(raw)}'.`,
1182
1418
  fix: {
1183
1419
  action: "retry_with_flag",
1184
- explanation: `One read returns at most ${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE} rows. For more, split the read into narrower queries (a shorter BETWEEN range each, or one campaign each), write each with --out, and combine the files.`
1420
+ explanation: `--limit is the size of one page, at most ${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE} rows. For more rows, keep the page size and add --all --out <file>: it reads every page.`
1185
1421
  },
1186
1422
  retryable: false
1187
1423
  }
1188
1424
  }
1189
1425
  };
1190
1426
  }
1427
+ function queryPageSize(args) {
1428
+ const preset = typeof args.preset === "string" ? getPreset(args.preset) : void 0;
1429
+ return parseQueryLimit(args.limit, preset?.defaultLimit ?? DEFAULT_QUERY_LIMIT);
1430
+ }
1191
1431
  async function validateArgs(args) {
1192
- const parsedLimit = parseQueryLimit(args.limit);
1432
+ const parsedLimit = queryPageSize(args);
1193
1433
  if (!parsedLimit.ok) {
1194
1434
  writeAdsJson(parsedLimit.error);
1195
1435
  process.exit(1);
1196
1436
  }
1197
1437
  const { limit } = parsedLimit;
1198
1438
  const customerId = await resolveCustomerId(args);
1199
- const gaql = resolveGaql(args, limit);
1439
+ const gaql = resolveGaql(args);
1200
1440
  if (!gaql) {
1201
1441
  process.exit(1);
1202
1442
  }
1203
- const preflight = validatePreflight(gaql, customerId, limit);
1443
+ const preflight = validatePreflight(gaql, customerId);
1204
1444
  if (!preflight.valid && preflight.error) {
1205
1445
  writeAdsJson(preflight.error);
1206
1446
  process.exit(1);
@@ -1212,7 +1452,7 @@ async function validateArgs(args) {
1212
1452
  finalQuery,
1213
1453
  warnings: [...preflight.warnings, ...servingScopeWarnings(args, finalQuery)],
1214
1454
  useCache: !args["no-cache"],
1215
- cacheKey: buildQueryCacheKey(customerId, finalQuery)
1455
+ cacheKey: pageCacheKey(customerId, finalQuery, limit, args.cursor)
1216
1456
  };
1217
1457
  }
1218
1458
  function handleQueryError(err, finalQuery, customerId) {
@@ -1234,19 +1474,62 @@ function handleQueryError(err, finalQuery, customerId) {
1234
1474
  });
1235
1475
  process.exit(1);
1236
1476
  }
1477
+ async function runQuery(args) {
1478
+ const validated = await validateArgs(args);
1479
+ if (!validated) return;
1480
+ const { customerId, limit, finalQuery, warnings, useCache, cacheKey } = validated;
1481
+ if (shouldReadCache(args)) {
1482
+ const cached = cacheGet("queries", cacheKey);
1483
+ if (cached && Array.isArray(cached.data.rows)) {
1484
+ const rows = cached.data.rows;
1485
+ outputResults(
1486
+ rows,
1487
+ cached.fields ?? getFieldDescriptions(extractFields(rows)),
1488
+ [
1489
+ ...warnings,
1490
+ ...missingFieldWarnings(finalQuery, rows),
1491
+ ...keywordServingWarnings(rows, keywordServingOptions(finalQuery)),
1492
+ ...conversionMixWarnings(finalQuery)
1493
+ ],
1494
+ args,
1495
+ true,
1496
+ { gaql: finalQuery, effectiveLimit: effectiveRowLimit(finalQuery), nextCursor: cached.data.cursor }
1497
+ );
1498
+ return;
1499
+ }
1500
+ }
1501
+ try {
1502
+ await executeQuery(finalQuery, args, customerId, limit, warnings, useCache, cacheKey);
1503
+ } catch (err) {
1504
+ handleQueryError(err, finalQuery, customerId);
1505
+ }
1506
+ }
1237
1507
  var queryCommand = defineCommand({
1238
1508
  meta: {
1239
1509
  name: "query",
1240
- description: `Run GAQL queries against Google Ads. Supports raw GAQL, presets, pagination, file export, and caching.
1510
+ description: `Run GAQL against Google Ads, one page at a time. Supports raw GAQL, presets, paging, file export, and caching.
1511
+
1512
+ Start here:
1513
+ baker ads google query --list-presets
1514
+ baker ads google query --preset campaign-performance --customer-id 1234567890
1515
+
1516
+ Each read returns one page (--limit rows; the preset's page size by default, else 200). When the
1517
+ account holds more, the envelope carries pagination.cursor: pass it with --cursor for the next page,
1518
+ or read everything with --all --out <file>. A LIMIT written in the GAQL caps the whole read.
1241
1519
 
1242
1520
  Examples:
1243
1521
  baker ads google query "SELECT campaign.name, metrics.clicks FROM campaign WHERE segments.date DURING LAST_7_DAYS" --customer-id 1234567890
1244
- baker ads google query --preset campaign-performance --customer-id 1234567890
1245
- baker ads google query --preset search-terms --customer-id 1234567890 --date-range LAST_7_DAYS --out results.csv
1246
- baker ads google query --list-presets`
1522
+ baker ads google query --gaql "SELECT ad_group.name FROM ad_group WHERE ad_group.status = 'ENABLED'" --customer-id 1234567890
1523
+ baker ads google query --preset search-terms --customer-id 1234567890 --date-range LAST_7_DAYS --all --out terms.csv
1524
+ baker ads google query --preset keyword-serving --customer-id 1234567890 --cursor <pagination.cursor>`
1247
1525
  },
1248
1526
  args: {
1249
- query: { type: "positional", description: "GAQL query string", required: false },
1527
+ query: { type: "positional", description: "GAQL SELECT statement", required: false },
1528
+ gaql: {
1529
+ type: "string",
1530
+ description: "GAQL SELECT statement as a flag (instead of the positional)",
1531
+ required: false
1532
+ },
1250
1533
  "customer-id": { type: "string", description: "Google Ads customer ID (10 digits, no dashes)", required: false },
1251
1534
  preset: { type: "string", description: "Named query preset", required: false },
1252
1535
  "date-range": { type: "string", description: "Date range override for presets", required: false },
@@ -1257,12 +1540,12 @@ Examples:
1257
1540
  },
1258
1541
  limit: {
1259
1542
  type: "string",
1260
- description: "Max rows in one page (default 200); without --all the read stops there",
1543
+ description: "Rows per page (default: the preset's page size, else 200)",
1261
1544
  required: false
1262
1545
  },
1263
1546
  "list-presets": { type: "boolean", description: "List available presets", required: false },
1264
- cursor: { type: "string", description: "Pagination cursor", required: false },
1265
- all: { type: "boolean", description: "Follow every page (use with --out for large datasets)", required: false },
1547
+ cursor: { type: "string", description: "pagination.cursor from the previous page", required: false },
1548
+ all: { type: "boolean", description: "Follow every page (use with --out for large reads)", required: false },
1266
1549
  out: { type: "string", description: "File path for output", required: false },
1267
1550
  append: { type: "boolean", description: "Append to file", required: false },
1268
1551
  output: { type: "string", description: "Format: json|csv|jsonl|md", required: false, default: "json" },
@@ -1277,65 +1560,40 @@ Examples:
1277
1560
  name: p.name,
1278
1561
  description: p.description,
1279
1562
  defaultDateRange: p.defaultDateRange,
1563
+ pageSize: p.defaultLimit,
1280
1564
  servingOnly: (p.statusFields?.length ?? 0) > 0,
1281
1565
  gaql: expandPreset(p, {}).query
1282
1566
  }))
1283
1567
  });
1284
1568
  return;
1285
1569
  }
1286
- const validated = await validateArgs(args);
1287
- if (!validated) return;
1288
- const { customerId, limit, finalQuery, warnings, useCache, cacheKey } = validated;
1289
- if (shouldReadCache(args)) {
1290
- const cached = cacheGet("queries", cacheKey);
1291
- if (cached) {
1292
- const fields = extractFields(cached.data);
1293
- outputResults(
1294
- cached.data,
1295
- cached.fields ?? getFieldDescriptions(fields),
1296
- [
1297
- ...warnings,
1298
- ...missingFieldWarnings(finalQuery, cached.data),
1299
- ...keywordServingWarnings(cached.data, keywordServingOptions(finalQuery)),
1300
- ...conversionMixWarnings(finalQuery)
1301
- ],
1302
- args,
1303
- true,
1304
- {
1305
- gaql: finalQuery,
1306
- effectiveLimit: effectiveRowLimit(finalQuery, limit, Boolean(args.all)),
1307
- all: Boolean(args.all)
1308
- }
1309
- );
1310
- return;
1311
- }
1312
- }
1313
- try {
1314
- await executeQuery(finalQuery, args, customerId, limit, warnings, useCache, cacheKey);
1315
- } catch (err) {
1316
- handleQueryError(err, finalQuery, customerId);
1317
- }
1570
+ await runQuery(args);
1318
1571
  }
1319
1572
  });
1573
+
1320
1574
  export {
1321
- buildFileSummary,
1322
- buildQueryEnvelope,
1323
- completenessWarnings,
1575
+ resultColumns,
1324
1576
  effectiveRowLimit,
1325
- keywordServingOptions,
1326
- missingFieldWarnings,
1327
- missingFieldWarningsFor,
1577
+ warningLines,
1578
+ completenessWarnings,
1579
+ buildQueryEnvelope,
1580
+ summariseWarnings,
1581
+ buildFileSummary,
1328
1582
  outputResults,
1329
- parseQueryLimit,
1330
- parseSelectedFields,
1331
- queryCommand,
1332
- resultColumns,
1583
+ resolveGaqlInput,
1333
1584
  servingScopeWarnings,
1334
- shouldReadCache,
1335
- summariseWarnings,
1336
- unobservedFields,
1585
+ parseSelectedFields,
1337
1586
  unobservedSelectedFields,
1587
+ unobservedFields,
1588
+ missingFieldWarnings,
1589
+ missingFieldWarningsFor,
1338
1590
  unwrittenColumnWarnings,
1339
- warningLines
1591
+ keywordServingOptions,
1592
+ pageCacheKey,
1593
+ shouldReadCache,
1594
+ parseQueryLimit,
1595
+ queryPageSize,
1596
+ runQuery,
1597
+ queryCommand
1340
1598
  };
1341
- //# sourceMappingURL=query-IEZRY6HV.js.map
1599
+ //# sourceMappingURL=chunk-XPOIIQCI.js.map