@koda-sl/baker-cli 0.536.0 → 0.538.0-dev.fc2958a1d

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 (1523) hide show
  1. package/README.md +8 -4
  2. package/dist/account-2RNYGT6E.js +82 -0
  3. package/dist/account-3IA3PYDJ.js +139 -0
  4. package/dist/account-T26J6HSJ.js +82 -0
  5. package/dist/account-assets-BVEEUGDA.js +290 -0
  6. package/dist/account-level-J37UFQY6.js +611 -0
  7. package/dist/account-reads-P2WXB3NZ.js +219 -0
  8. package/dist/account-users-REWJY2TN.js +64 -0
  9. package/dist/account-writes-QEZQCU46.js +68 -0
  10. package/dist/accounts-FX6V37GX.js +115 -0
  11. package/dist/accounts-GXJPLMHU.js +114 -0
  12. package/dist/accounts-HNZWMTRM.js +76 -0
  13. package/dist/accounts-MJ7AGPOW.js +701 -0
  14. package/dist/accounts-PGSNRUNV.js +80 -0
  15. package/dist/actions-NGBCTPNG.js +55 -0
  16. package/dist/active-entities-YIOKHGWY.js +103 -0
  17. package/dist/activecampaign-ASE4IVTD.js +938 -0
  18. package/dist/activities-FXYVPCRJ.js +75 -0
  19. package/dist/ad-group-writes-MVQKICSC.js +172 -0
  20. package/dist/ad-groups-5OGD7PJ7.js +70 -0
  21. package/dist/ad-writes-OVD6EESQ.js +176 -0
  22. package/dist/add-3EEREVFI.js +80 -0
  23. package/dist/add-FGB7KM6P.js +148 -0
  24. package/dist/add-FKINXOC2.js +97 -0
  25. package/dist/add-MTYT3Q4T.js +81 -0
  26. package/dist/add-QBEF2C7Z.js +107 -0
  27. package/dist/add-YJP43JWJ.js +305 -0
  28. package/dist/add-accounts-WCDQRXRO.js +91 -0
  29. package/dist/ads-4O4TPDAU.js +120 -0
  30. package/dist/ads-GF7QLKBX.js +48 -0
  31. package/dist/ads-SCWCG2YI.js +79 -0
  32. package/dist/ads-YRV2YERG.js +128 -0
  33. package/dist/adsets-OVFVN5NX.js +182 -0
  34. package/dist/advertisers-663V2F2T.js +125 -0
  35. package/dist/advertisers-SUZT4NRJ.js +123 -0
  36. package/dist/analytics-NJBF3U54.js +2437 -0
  37. package/dist/analytics-PI6SXDW4.js +447 -0
  38. package/dist/animate-HV2QJWVE.js +480 -0
  39. package/dist/approved-RFZLJZJH.js +73 -0
  40. package/dist/asset-writes-ZMSJSFTD.js +50 -0
  41. package/dist/assign-6YG56OCM.js +80 -0
  42. package/dist/audience-size-5X3BHQ6Q.js +76 -0
  43. package/dist/audience-writes-BUWFC5W4.js +327 -0
  44. package/dist/audiences-6N5B7CA2.js +280 -0
  45. package/dist/audiences-GD2EPPJJ.js +85 -0
  46. package/dist/audiences-O464BZ6J.js +86 -0
  47. package/dist/audiences-O464BZ6J.js.map +1 -0
  48. package/dist/audit-DQYC4R74.js +88 -0
  49. package/dist/audit-PLXF2NAS.js +154 -0
  50. package/dist/autocomplete-YJSDRTMT.js +114 -0
  51. package/dist/avatars-BDQWTQKY.js +38 -0
  52. package/dist/bid-pricing-BUNOVWUB.js +103 -0
  53. package/dist/brand-MHFSUXWN.js +22 -0
  54. package/dist/brief-A5AEZBZL.js +543 -0
  55. package/dist/businesses-IPSDIWUU.js +54 -0
  56. package/dist/businesses-IPSDIWUU.js.map +1 -0
  57. package/dist/campaign-groups-UYNINWXX.js +99 -0
  58. package/dist/campaign-writes-RCA52SAP.js +168 -0
  59. package/dist/campaign-writes-TFRV62VN.js +176 -0
  60. package/dist/campaigns-CIQIZ46G.js +113 -0
  61. package/dist/campaigns-EETR5UJR.js +111 -0
  62. package/dist/campaigns-KPUA4GP2.js +78 -0
  63. package/dist/campaigns-N75G2BDU.js +130 -0
  64. package/dist/canvas-M3RXWJ2T.js +46 -0
  65. package/dist/capabilities-XFLST37G.js +147 -0
  66. package/dist/cards-TTQTPLCO.js +85 -0
  67. package/dist/catalog-JVBRY2U6.js +66 -0
  68. package/dist/catalogs-LI7NG57R.js +781 -0
  69. package/dist/catalogs-QYAAPTMV.js +130 -0
  70. package/dist/changes-Y4NAQ2IV.js +135 -0
  71. package/dist/chatgpt-KJAUJBRK.js +47 -0
  72. package/dist/chats-5BNHZWO7.js +384 -0
  73. package/dist/check-ESD3QPIZ.js +107 -0
  74. package/dist/chunk-2EVHGBQY.js +319 -0
  75. package/dist/chunk-2JFCDUZO.js +156 -0
  76. package/dist/chunk-2MAQKELK.js +494 -0
  77. package/dist/chunk-2OCUXPWT.js +1919 -0
  78. package/dist/chunk-35FLLWSQ.js +100 -0
  79. package/dist/chunk-3ANPDWU7.js +438 -0
  80. package/dist/chunk-3C3IR2F6.js +2209 -0
  81. package/dist/chunk-3GMJEM4C.js +377 -0
  82. package/dist/chunk-3PG7O3ZW.js +52 -0
  83. package/dist/chunk-4GQJOHJY.js +69 -0
  84. package/dist/chunk-4OY6SHHM.js +35 -0
  85. package/dist/chunk-4QLVMG63.js +191 -0
  86. package/dist/chunk-4YWSFFOP.js +831 -0
  87. package/dist/chunk-5JG77PP3.js +57 -0
  88. package/dist/chunk-5TWI6FFY.js +344 -0
  89. package/dist/chunk-65HTWFKN.js +224 -0
  90. package/dist/chunk-6KWPAPFL.js +714 -0
  91. package/dist/chunk-6OIKNJ7G.js +26 -0
  92. package/dist/chunk-6RUHIXVA.js +455 -0
  93. package/dist/chunk-6X4XAANZ.js +191 -0
  94. package/dist/chunk-6Z32HS4D.js +91 -0
  95. package/dist/chunk-7MK4TND6.js +163 -0
  96. package/dist/chunk-7ZYXRMSM.js +188 -0
  97. package/dist/chunk-AUO4QNMI.js +148 -0
  98. package/dist/chunk-AXSSATJW.js +1744 -0
  99. package/dist/chunk-B52GKPH2.js +106 -0
  100. package/dist/chunk-B6WOWVAA.js +285 -0
  101. package/dist/chunk-BBGKZJXP.js +69 -0
  102. package/dist/chunk-BF32BRMX.js +98 -0
  103. package/dist/chunk-BIFK5OGB.js +249 -0
  104. package/dist/chunk-BNO3EFGR.js +4266 -0
  105. package/dist/chunk-BNO3EFGR.js.map +1 -0
  106. package/dist/chunk-BUXPBPAP.js +142 -0
  107. package/dist/chunk-C35UMKYG.js +229 -0
  108. package/dist/chunk-CDRS2QAP.js +392 -0
  109. package/dist/chunk-CFVVZKSU.js +387 -0
  110. package/dist/chunk-CM2LECNX.js +136 -0
  111. package/dist/chunk-D2F73AUY.js +64 -0
  112. package/dist/chunk-D3KWV63D.js +19 -0
  113. package/dist/chunk-D5LV3ECR.js +23 -0
  114. package/dist/chunk-DBLOEIJ2.js +5368 -0
  115. package/dist/chunk-DNRXEP4A.js +296 -0
  116. package/dist/chunk-DQIPDAPH.js +274 -0
  117. package/dist/chunk-DR4TIYTE.js +45 -0
  118. package/dist/chunk-EAHBTBVR.js +324 -0
  119. package/dist/chunk-EFBJ35ZS.js +930 -0
  120. package/dist/chunk-ELAYD7O3.js +215 -0
  121. package/dist/chunk-EMXBMLQ4.js +91 -0
  122. package/dist/chunk-EZVRXFCC.js +169 -0
  123. package/dist/chunk-F3CZFUXZ.js +3187 -0
  124. package/dist/chunk-F3CZFUXZ.js.map +1 -0
  125. package/dist/chunk-FRUOWEWZ.js +97 -0
  126. package/dist/chunk-GCFC2MNR.js +228 -0
  127. package/dist/chunk-GQ4D3BT6.js +207 -0
  128. package/dist/chunk-HMFIOE4P.js +63 -0
  129. package/dist/chunk-HXLCETLB.js +3510 -0
  130. package/dist/chunk-ITKTTDC2.js +225 -0
  131. package/dist/chunk-JD4DSJPT.js +76 -0
  132. package/dist/chunk-JQSN5K5B.js +94 -0
  133. package/dist/chunk-JUFABKU4.js +73 -0
  134. package/dist/chunk-JZ6XRIXG.js +846 -0
  135. package/dist/chunk-KAJXOGQ2.js +58 -0
  136. package/dist/chunk-KAUW3OFC.js +843 -0
  137. package/dist/chunk-KDDHMKTU.js +217 -0
  138. package/dist/chunk-KFHW5TCM.js +167 -0
  139. package/dist/chunk-KG7WIVNG.js +111 -0
  140. package/dist/chunk-LBIF6FJY.js +476 -0
  141. package/dist/chunk-LXV2U4MI.js +25 -0
  142. package/dist/chunk-M7FP7DKN.js +39 -0
  143. package/dist/chunk-MFAFGQ7Z.js +200 -0
  144. package/dist/chunk-MHRFRSQ6.js +676 -0
  145. package/dist/chunk-MM6CCIL7.js +166 -0
  146. package/dist/chunk-MQZXGTGI.js +479 -0
  147. package/dist/chunk-MWJNFGV6.js +42 -0
  148. package/dist/chunk-NNNMTRGI.js +547 -0
  149. package/dist/chunk-NQF5U6FX.js +150 -0
  150. package/dist/chunk-NRMJWNX3.js +97 -0
  151. package/dist/chunk-OROWRGRJ.js +170 -0
  152. package/dist/chunk-OTGHCGLW.js +125 -0
  153. package/dist/chunk-OWJGBIQ2.js +1646 -0
  154. package/dist/chunk-OYYAR5TD.js +333 -0
  155. package/dist/chunk-PAU4VS7H.js +103 -0
  156. package/dist/chunk-PEGRQV66.js +106 -0
  157. package/dist/chunk-PQN4PIC6.js +76 -0
  158. package/dist/chunk-PTGC7CVG.js +429 -0
  159. package/dist/chunk-RAO7FTMY.js +64 -0
  160. package/dist/chunk-RGSSKOTZ.js +56 -0
  161. package/dist/chunk-RM5T4MA6.js +783 -0
  162. package/dist/chunk-RP2PU3CA.js +275 -0
  163. package/dist/chunk-RSKU45CU.js +89 -0
  164. package/dist/chunk-S4JAHRIW.js +139 -0
  165. package/dist/chunk-S6KZ4GDL.js +207 -0
  166. package/dist/chunk-SA6XZ3FP.js +1902 -0
  167. package/dist/chunk-SBSFCKOC.js +149 -0
  168. package/dist/chunk-SIKCVWM3.js +76 -0
  169. package/dist/chunk-SPQHISWX.js +8954 -0
  170. package/dist/chunk-SQVT243W.js +51 -0
  171. package/dist/chunk-T267DS5U.js +297 -0
  172. package/dist/chunk-TFN7L5H3.js +66 -0
  173. package/dist/chunk-TRXGJZDL.js +2503 -0
  174. package/dist/chunk-TRXGJZDL.js.map +1 -0
  175. package/dist/chunk-U4CYQMG5.js +138 -0
  176. package/dist/chunk-UMQCYEAL.js +98 -0
  177. package/dist/chunk-UQKDP46G.js +197 -0
  178. package/dist/chunk-UT4OM34H.js +46 -0
  179. package/dist/chunk-UVVOG5A7.js +61 -0
  180. package/dist/chunk-UZGZS35I.js +592 -0
  181. package/dist/chunk-VPHHCOYS.js +544 -0
  182. package/dist/chunk-W3PJ7V4W.js +84 -0
  183. package/dist/chunk-W7BORINM.js +66 -0
  184. package/dist/chunk-WI3TCYEA.js +74 -0
  185. package/dist/chunk-WM6JHUPY.js +5471 -0
  186. package/dist/chunk-WQQ7SH3M.js +84 -0
  187. package/dist/chunk-WTODFKZR.js +219 -0
  188. package/dist/chunk-XBMZNFN7.js +203 -0
  189. package/dist/chunk-XHW24Q5Q.js +910 -0
  190. package/dist/chunk-XMHTLWWE.js +225 -0
  191. package/dist/chunk-XPXHJ6EP.js +24026 -0
  192. package/dist/chunk-XPXHJ6EP.js.map +1 -0
  193. package/dist/chunk-XXS6SUVM.js +7712 -0
  194. package/dist/chunk-Y3ESEQRI.js +46 -0
  195. package/dist/chunk-YAX5CGUY.js +638 -0
  196. package/dist/chunk-Z4BU2JVK.js +287 -0
  197. package/dist/chunk-ZCN2XUPQ.js +604 -0
  198. package/dist/chunk-ZI7CLQB5.js +26 -0
  199. package/dist/chunk-ZJOXRK2G.js +1518 -0
  200. package/dist/chunk-ZPF253G5.js +75 -0
  201. package/dist/chunk-ZPHHJPDG.js +131 -0
  202. package/dist/claim-NM5T33W6.js +200 -0
  203. package/dist/cli.js +307 -46
  204. package/dist/cli.js.map +1 -1
  205. package/dist/client-SZ4N5NCP.js +19 -0
  206. package/dist/code-RZXUOVH3.js +76 -0
  207. package/dist/companies-VBNBS6LR.js +198 -0
  208. package/dist/company-3KOV3TJT.js +308 -0
  209. package/dist/complete-TVY4F5YX.js +84 -0
  210. package/dist/config-7RX352G2.js +88 -0
  211. package/dist/connect-W6H3DT2C.js +45 -0
  212. package/dist/content-BOERUNX4.js +85 -0
  213. package/dist/conversation-LCGWNPUG.js +96 -0
  214. package/dist/conversion-report-GK2FUT2R.js +127 -0
  215. package/dist/conversion-upload-command-Q7LZFFZL.js +439 -0
  216. package/dist/conversion-writes-STESFLTB.js +122 -0
  217. package/dist/conversions-D2RPIL3I.js +140 -0
  218. package/dist/conversions-JBRU7CGB.js +78 -0
  219. package/dist/copy-writes-PVWZEU4S.js +170 -0
  220. package/dist/countries-Z4IQIMWQ.js +82 -0
  221. package/dist/create-DHIXUD4Q.js +135 -0
  222. package/dist/create-OW2BLTBE.js +239 -0
  223. package/dist/create-TYG5SAQE.js +210 -0
  224. package/dist/create-XGDJKMDB.js +62 -0
  225. package/dist/creatives-3ZPFUAKL.js +58 -0
  226. package/dist/creatives-HRA4X22I.js +89 -0
  227. package/dist/creatives-HRA4X22I.js.map +1 -0
  228. package/dist/creatives-PN6EQYVU.js +223 -0
  229. package/dist/credentials-AVRHDGM5.js +290 -0
  230. package/dist/critique-76EMERXI.js +1451 -0
  231. package/dist/critique-SZSKQYUL.js +232 -0
  232. package/dist/crm-4O65STFF.js +227 -0
  233. package/dist/crm-JMIIB55O.js +323 -0
  234. package/dist/crop-JRVHX3PX.js +113 -0
  235. package/dist/currency-HQW6FJS5.js +88 -0
  236. package/dist/custom-conversions-OVUDN3HH.js +128 -0
  237. package/dist/custom-conversions-OVUDN3HH.js.map +1 -0
  238. package/dist/customers-GV3AD6B6.js +59 -0
  239. package/dist/decide-MPNAZFAK.js +199 -0
  240. package/dist/delete-CJGW5MKC.js +69 -0
  241. package/dist/delete-FWPYWUNU.js +85 -0
  242. package/dist/delete-ISAOQTI5.js +57 -0
  243. package/dist/delete-JPSIBQXR.js +71 -0
  244. package/dist/delete-RLLRUSGR.js +69 -0
  245. package/dist/delete-WFF5EVIL.js +67 -0
  246. package/dist/demographics-XSMD6KI4.js +141 -0
  247. package/dist/describe-OUYPLJJE.js +97 -0
  248. package/dist/describe-XQGFIM2Z.js +97 -0
  249. package/dist/dimensions-MMVCXOFJ.js +101 -0
  250. package/dist/discard-B5QMX35Q.js +69 -0
  251. package/dist/discover-DLGO3VW6.js +172 -0
  252. package/dist/discover-Z6NS3BP6.js +93 -0
  253. package/dist/domain-WA4HAHCE.js +101 -0
  254. package/dist/download-3JW2NTQZ.js +299 -0
  255. package/dist/download-67IB5DPC.js +172 -0
  256. package/dist/draft-4MKYX4VU.js +396 -0
  257. package/dist/draft-DSWC37IW.js +103 -0
  258. package/dist/draft-I7HIRQ6F.js +283 -0
  259. package/dist/draft-KWXV5YOG.js +240 -0
  260. package/dist/draft-NXGJ3DD4.js +220 -0
  261. package/dist/draft-P73N5PT4.js +310 -0
  262. package/dist/draft-QAPMXYBR.js +335 -0
  263. package/dist/draft-UMNPM5KA.js +100 -0
  264. package/dist/engine/index.js +15 -15
  265. package/dist/env-O2JJK34F.js +53 -0
  266. package/dist/experiment-2TTMKPVC.js +1397 -0
  267. package/dist/experiments-YEI3HSBU.js +236 -0
  268. package/dist/export-LRPJXAFA.js +168 -0
  269. package/dist/extract-7IAAZ6RS.js +121 -0
  270. package/dist/extract-7IAAZ6RS.js.map +1 -0
  271. package/dist/facets-EQLEOMDT.js +117 -0
  272. package/dist/favorites-UXNAI5XW.js +178 -0
  273. package/dist/feed-OTUTIGJ6.js +177 -0
  274. package/dist/feedback-JNSHN7DE.js +115 -0
  275. package/dist/feedback-record-JV43NSJI.js +269 -0
  276. package/dist/fetch-AG7JJ4BI.js +139 -0
  277. package/dist/fetch-O4EYJVMN.js +179 -0
  278. package/dist/find-JH5OMTGJ.js +143 -0
  279. package/dist/fit-7N7AHYQF.js +65 -0
  280. package/dist/flows-DTZGIGZS.js +250 -0
  281. package/dist/follow-WHLTIJPM.js +94 -0
  282. package/dist/follow-competitors-DO7RVQXT.js +112 -0
  283. package/dist/following-ZL34FZ32.js +113 -0
  284. package/dist/fonts-TYDQXRIU.js +39 -0
  285. package/dist/forecast-AODSMD7S.js +169 -0
  286. package/dist/forecast-VO7XY46L.js +121 -0
  287. package/dist/funding-55XBHYY6.js +85 -0
  288. package/dist/funnel-CV4DZXUS.js +397 -0
  289. package/dist/ga4-WIOBF5HW.js +55 -0
  290. package/dist/generate-HSDSCKDW.js +263 -0
  291. package/dist/get-4S4XRZ2J.js +82 -0
  292. package/dist/get-FDZZEB5R.js +59 -0
  293. package/dist/get-IGXC3JQ5.js +92 -0
  294. package/dist/get-P5Z274DM.js +38 -0
  295. package/dist/get-QA333Q5J.js +62 -0
  296. package/dist/get-TXVHONYI.js +59 -0
  297. package/dist/get-WEWFUNWZ.js +56 -0
  298. package/dist/get-Z46N7LBR.js +66 -0
  299. package/dist/gif-TD37CRTZ.js +110 -0
  300. package/dist/gif-TD37CRTZ.js.map +1 -0
  301. package/dist/google-6A3YLR3K.js +144 -0
  302. package/dist/google-6A3YLR3K.js.map +1 -0
  303. package/dist/google-DPBZJ3TV.js +3267 -0
  304. package/dist/google-ads-EPFX2NA4.js +198 -0
  305. package/dist/group-6ENUPDYO.js +43 -0
  306. package/dist/group-EYF34B3P.js +43 -0
  307. package/dist/gsc-KDE2DTH2.js +30 -0
  308. package/dist/history-7UJW5TRO.js +102 -0
  309. package/dist/history-JCLXT3AO.js +136 -0
  310. package/dist/history-SHQVK5I7.js +69 -0
  311. package/dist/hubspot-J6372OWH.js +782 -0
  312. package/dist/icon-N77IGSXP.js +137 -0
  313. package/dist/ideas-TKMMQ557.js +45 -0
  314. package/dist/images-J7LJETPR.js +92 -0
  315. package/dist/improve-BKFZOBXI.js +86 -0
  316. package/dist/ingest-LVAH5OF5.js +123 -0
  317. package/dist/ingest-UBP7TEXU.js +27 -0
  318. package/dist/insights-UMPXHRKD.js +132 -0
  319. package/dist/insights-UOO6OK3U.js +439 -0
  320. package/dist/insights-UOO6OK3U.js.map +1 -0
  321. package/dist/inspect-22G3OPFK.js +192 -0
  322. package/dist/inspiration-SQUEBO2K.js +53 -0
  323. package/dist/instant-experiences-3E6RRUHF.js +263 -0
  324. package/dist/instant-experiences-3E6RRUHF.js.map +1 -0
  325. package/dist/intent-NBP5IDND.js +95 -0
  326. package/dist/job-B6UEZLTA.js +202 -0
  327. package/dist/job-create-WM27NOGZ.js +109 -0
  328. package/dist/job-status-6V7DVVYL.js +74 -0
  329. package/dist/keep-ACLZB7KL.js +78 -0
  330. package/dist/keyword-gap-67UJ2LDD.js +130 -0
  331. package/dist/keyword-metrics-QP5ZNOC6.js +200 -0
  332. package/dist/keywords-for-site-QTE332T7.js +131 -0
  333. package/dist/knowledge-5VEMAHG7.js +195 -0
  334. package/dist/landing-TOYYCWFX.js +28 -0
  335. package/dist/landings-Q7T2HSYK.js +151 -0
  336. package/dist/languages-HWMPAPQN.js +55 -0
  337. package/dist/languages-TM7SHGRO.js +40 -0
  338. package/dist/launches-4HI65M3C.js +19 -0
  339. package/dist/layerize-HXML3KQX.js +190 -0
  340. package/dist/lead-routes-Q2T3RQXN.js +733 -0
  341. package/dist/leads-FTWBDLBQ.js +115 -0
  342. package/dist/leads-GZ7RFM7D.js +540 -0
  343. package/dist/leads-GZ7RFM7D.js.map +1 -0
  344. package/dist/learn-3N7M3UHA.js +207 -0
  345. package/dist/library-OVX3OUYV.js +211 -0
  346. package/dist/lighthouse-2TDPDU7J.js +75 -0
  347. package/dist/line-item-writes-VFPXT4W6.js +211 -0
  348. package/dist/line-items-HB2N7RKO.js +107 -0
  349. package/dist/link-KAY6VYFH.js +67 -0
  350. package/dist/linkedin-CDSEMSCF.js +1328 -0
  351. package/dist/linkedin-person-HR6HKFUU.js +139 -0
  352. package/dist/list-AAQISQHE.js +65 -0
  353. package/dist/list-INU27RQJ.js +306 -0
  354. package/dist/list-QWCU77C3.js +67 -0
  355. package/dist/list-QYUU66YV.js +93 -0
  356. package/dist/list-SDHECXK5.js +57 -0
  357. package/dist/list-U3ZABSGW.js +76 -0
  358. package/dist/list-UF7Y4FDE.js +50 -0
  359. package/dist/list-VJ3CVEDW.js +154 -0
  360. package/dist/list-VO473W6E.js +51 -0
  361. package/dist/locations-HAXZUHJP.js +40 -0
  362. package/dist/locations-JFBM4XBL.js +69 -0
  363. package/dist/log-AUN4NOPP.js +95 -0
  364. package/dist/logo-2NDZ2EVN.js +18 -0
  365. package/dist/lookup-UFVB2ZZF.js +23 -0
  366. package/dist/make-B5HDRFCX.js +1367 -0
  367. package/dist/map-CCBSITK7.js +436 -0
  368. package/dist/mcp-45YWYNYM.js +729 -0
  369. package/dist/media-3M3PVSEZ.js +89 -0
  370. package/dist/media-5XRMDMKD.js +18 -0
  371. package/dist/media-sources-N7MBY3GE.js +35 -0
  372. package/dist/members-2P2QCBJO.js +47 -0
  373. package/dist/meme-EOAFE4FS.js +100 -0
  374. package/dist/meta-CTKXBVXT.js +122 -0
  375. package/dist/metrics-XWHE4LYQ.js +152 -0
  376. package/dist/models-3C6BWHEC.js +155 -0
  377. package/dist/normalize-MLRJ6IYU.js +144 -0
  378. package/dist/normalize-NDBXU6UO.js +806 -0
  379. package/dist/options-6QAJ67XB.js +125 -0
  380. package/dist/organization-P5LAMNMT.js +949 -0
  381. package/dist/output-KIQWBKKA.js +24 -0
  382. package/dist/page-GGT3KZ5E.js +105 -0
  383. package/dist/page-photos-FKWHLNWM.js +118 -0
  384. package/dist/pages-JALRE36R.js +67 -0
  385. package/dist/pages-JALRE36R.js.map +1 -0
  386. package/dist/performance-3PH7UYQN.js +27 -0
  387. package/dist/performance-6BMFU6IJ.js +5565 -0
  388. package/dist/pinterest-KURR4GJJ.js +104 -0
  389. package/dist/pinterest-KURR4GJJ.js.map +1 -0
  390. package/dist/pixels-6PKYGSQ4.js +109 -0
  391. package/dist/pixels-6PKYGSQ4.js.map +1 -0
  392. package/dist/pixels-PMPL63ON.js +62 -0
  393. package/dist/plan-223DL4HG.js +208 -0
  394. package/dist/posts-YPW4NHWM.js +36 -0
  395. package/dist/preview-CD2QADBJ.js +218 -0
  396. package/dist/profile-7KUWZTJR.js +159 -0
  397. package/dist/promoted-tweet-writes-EPXZFIUP.js +183 -0
  398. package/dist/promoted-tweets-Q46HUYN6.js +119 -0
  399. package/dist/properties-LCZX4UJH.js +101 -0
  400. package/dist/publish-DHDRUTXM.js +344 -0
  401. package/dist/query-IR3LCFON.js +62 -0
  402. package/dist/query-RKJS3QOS.js +231 -0
  403. package/dist/query-WX3K7ZDY.js +236 -0
  404. package/dist/questionnaire-CCDUSEI3.js +94 -0
  405. package/dist/read-JTJQSEVB.js +141 -0
  406. package/dist/reddit-2FQOS3B3.js +29 -0
  407. package/dist/refresh-H4DETVS5.js +42 -0
  408. package/dist/refresh-VJPKAPJM.js +97 -0
  409. package/dist/release-O233BAQA.js +63 -0
  410. package/dist/relevant-pages-NPUSAV3K.js +99 -0
  411. package/dist/remove-5FMNASGC.js +49 -0
  412. package/dist/remove-HNSOYQVB.js +53 -0
  413. package/dist/reopen-B7KHVN5X.js +66 -0
  414. package/dist/rerun-KAB7AXTY.js +96 -0
  415. package/dist/research-I4ZQ4YQ3.js +72 -0
  416. package/dist/research-Z2SE775C.js +265 -0
  417. package/dist/reset-4T6XUNOO.js +57 -0
  418. package/dist/reset-YHEMD5N5.js +57 -0
  419. package/dist/resolve-5RJD2ELK.js +124 -0
  420. package/dist/retry-S3EC6FCA.js +65 -0
  421. package/dist/retry-WKYMY2KB.js +63 -0
  422. package/dist/retry-failed-DSVEAY3T.js +45 -0
  423. package/dist/revenue-C4E4PRLL.js +91 -0
  424. package/dist/rule-writes-XSNS3XYK.js +525 -0
  425. package/dist/rules-GHGEVCBQ.js +217 -0
  426. package/dist/rules-JGTKFXM3.js +99 -0
  427. package/dist/rules-add-3DTRLVGR.js +465 -0
  428. package/dist/run-2TKYHCN2.js +71 -0
  429. package/dist/run-TYJLOJW7.js +69 -0
  430. package/dist/scaffold-ad-RFRUPUKW.js +1513 -0
  431. package/dist/scaffold-static-ad-N5QCJFGP.js +1011 -0
  432. package/dist/scaffold-video-VAG3WN5W.js +885 -0
  433. package/dist/schedule-6UYJLE5K.js +64 -0
  434. package/dist/schedule-Z2AQXR7W.js +67 -0
  435. package/dist/scheduled-agents-YEHJ4XIB.js +55 -0
  436. package/dist/schema-BCCCNVNO.js +135 -0
  437. package/dist/schema-BDZA64GZ.js +121 -0
  438. package/dist/scrape-CTE5SNQN.js +2241 -0
  439. package/dist/screenshot-ELJYTIM7.js +102 -0
  440. package/dist/search-5B5AXN5V.js +91 -0
  441. package/dist/search-7ELGWNMH.js +26 -0
  442. package/dist/search-J43ZG7W3.js +177 -0
  443. package/dist/search-KBIF5NZX.js +224 -0
  444. package/dist/search-OF6LTOK6.js +51 -0
  445. package/dist/search-XO5UPSBF.js +92 -0
  446. package/dist/search-copy-DDRY6HPI.js +168 -0
  447. package/dist/seeds-HH5E7GCS.js +101 -0
  448. package/dist/select-I2UPGGZ5.js +110 -0
  449. package/dist/sends-CEZAPEQN.js +349 -0
  450. package/dist/sends-CEZAPEQN.js.map +1 -0
  451. package/dist/sequences-V4STPHGV.js +146 -0
  452. package/dist/set-prompt-SU7YM7FW.js +199 -0
  453. package/dist/setup-links-VWK4MBI3.js +144 -0
  454. package/dist/shared-P2PFNNJF.js +32 -0
  455. package/dist/shopify-6KNHPC4R.js +3958 -0
  456. package/dist/site-PHTJ5VI3.js +180 -0
  457. package/dist/sitemaps-KMRWAKNK.js +77 -0
  458. package/dist/sites-3QZDCQRG.js +97 -0
  459. package/dist/skills-KV4X22KQ.js +47 -0
  460. package/dist/sources-255OGK6K.js +30 -0
  461. package/dist/sources-52N253A7.js +457 -0
  462. package/dist/sources-52N253A7.js.map +1 -0
  463. package/dist/stale-KN2ZOJ5T.js +90 -0
  464. package/dist/stats-3TAUG3Q3.js +34 -0
  465. package/dist/status-BJH7ODU4.js +65 -0
  466. package/dist/sticker-SH6VUPFR.js +102 -0
  467. package/dist/sticker-SH6VUPFR.js.map +1 -0
  468. package/dist/stock-IICCY3IQ.js +187 -0
  469. package/dist/stock-IICCY3IQ.js.map +1 -0
  470. package/dist/studies-A52C544C.js +250 -0
  471. package/dist/studio-C2UVCTDD.js +49 -0
  472. package/dist/study-writes-3R4D6C3F.js +470 -0
  473. package/dist/suggest-3CFMURUH.js +66 -0
  474. package/dist/sync-H4XVXITS.js +55 -0
  475. package/dist/sync-MIKA6IM6.js +57 -0
  476. package/dist/sync-TJ7MGFIE.js +279 -0
  477. package/dist/sync-definition-LO425HBD.js +70 -0
  478. package/dist/tag-6WIQLRDW.js +57 -0
  479. package/dist/tag-manager-KWITWX6Y.js +43 -0
  480. package/dist/tags-DKSJ4E7E.js +227 -0
  481. package/dist/tags-JEGCEFMZ.js +23 -0
  482. package/dist/tags-MNHBZ7FH.js +23 -0
  483. package/dist/tags-S5XY63D3.js +23 -0
  484. package/dist/tags-VVO3BT66.js +26 -0
  485. package/dist/targeting-II4CQUPW.js +762 -0
  486. package/dist/targeting-constants-2EHTMIMX.js +118 -0
  487. package/dist/targeting-criteria-BIIGZTLQ.js +113 -0
  488. package/dist/targets-SX3NMYQ3.js +106 -0
  489. package/dist/terms-URBA2IXT.js +102 -0
  490. package/dist/testimonials-U3KBI3VU.js +32 -0
  491. package/dist/themes-32CUPT4M.js +95 -0
  492. package/dist/top-companies-DFM4F2SE.js +111 -0
  493. package/dist/transcript-4BSUSOQ4.js +165 -0
  494. package/dist/translate-JE7CZJ26.js +603 -0
  495. package/dist/triggers-SRI27OAP.js +144 -0
  496. package/dist/tweets-LECORASF.js +123 -0
  497. package/dist/unfollow-DBV2F7YP.js +46 -0
  498. package/dist/unlink-U7HZ4CYW.js +70 -0
  499. package/dist/unstage-JJGZJVHT.js +88 -0
  500. package/dist/unstage-XCH4VBM2.js +96 -0
  501. package/dist/update-JDFJPQ3O.js +81 -0
  502. package/dist/update-JN75LN32.js +66 -0
  503. package/dist/update-PU5LSQ7W.js +192 -0
  504. package/dist/update-PUWD5HX4.js +101 -0
  505. package/dist/update-R4EEEWT4.js +155 -0
  506. package/dist/upload-4CUPZI3X.js +130 -0
  507. package/dist/upload-B27ZJMMZ.js +150 -0
  508. package/dist/upscale-QMBV3AGN.js +109 -0
  509. package/dist/url-options-P3UTLYUY.js +131 -0
  510. package/dist/url-params-V7KQMWK3.js +101 -0
  511. package/dist/use-TBDI3OAN.js +111 -0
  512. package/dist/validate-6GRMJKZI.js +125 -0
  513. package/dist/variant-2A5GOOJF.js +338 -0
  514. package/dist/videos-6ZZ6LLTL.js +41 -0
  515. package/dist/view-GNNIJGGN.js +121 -0
  516. package/dist/viewer-check-B36TNSZI.js +83 -0
  517. package/dist/web-H5CWLHRA.js +143 -0
  518. package/dist/winners-6CW4CWZI.js +113 -0
  519. package/dist/winning-ads-SHNXPIYB.js +86 -0
  520. package/dist/write-commands-3G5WDFH3.js +206 -0
  521. package/dist/write-commands-RI6UP4YG.js +1525 -0
  522. package/dist/write-commands-TPPJHGMT.js +1172 -0
  523. package/dist/write-commands-UW5LKCAP.js +713 -0
  524. package/dist/x-CI2XPNBR.js +47 -0
  525. package/package.json +1 -1
  526. package/dist/account-44L7SBXK.js +0 -82
  527. package/dist/account-6Q2YV7BN.js +0 -139
  528. package/dist/account-LHBLGRZM.js +0 -82
  529. package/dist/account-assets-VJ5RZH4I.js +0 -290
  530. package/dist/account-level-KI4TEG3G.js +0 -611
  531. package/dist/account-reads-5MA52GNG.js +0 -219
  532. package/dist/account-users-GSZHY6MD.js +0 -64
  533. package/dist/account-writes-LLRPQU2K.js +0 -68
  534. package/dist/accounts-A2SGFRZP.js +0 -114
  535. package/dist/accounts-ASUFY2DV.js +0 -115
  536. package/dist/accounts-CALGHTYG.js +0 -701
  537. package/dist/accounts-PFZVWNOW.js +0 -80
  538. package/dist/accounts-QVZR4OMQ.js +0 -76
  539. package/dist/actions-WF2UAXBI.js +0 -55
  540. package/dist/active-entities-EJCLPIKJ.js +0 -103
  541. package/dist/activecampaign-KXBLSP7W.js +0 -938
  542. package/dist/activities-U7RC275G.js +0 -75
  543. package/dist/ad-group-writes-OWJ4ATKU.js +0 -172
  544. package/dist/ad-groups-IFF4G7CK.js +0 -70
  545. package/dist/ad-writes-OB7BRW5T.js +0 -176
  546. package/dist/add-7DCTX6MT.js +0 -107
  547. package/dist/add-HLDASH6G.js +0 -148
  548. package/dist/add-LBER2JD6.js +0 -81
  549. package/dist/add-M6CZVT62.js +0 -80
  550. package/dist/add-MYRZZDLQ.js +0 -97
  551. package/dist/add-PVXWIATJ.js +0 -305
  552. package/dist/add-accounts-HUIKYKRU.js +0 -91
  553. package/dist/ads-24GB65HI.js +0 -79
  554. package/dist/ads-325CHQN5.js +0 -128
  555. package/dist/ads-AVR7RXZ3.js +0 -48
  556. package/dist/ads-MFXNLNPB.js +0 -120
  557. package/dist/adsets-7ARHJS2F.js +0 -182
  558. package/dist/advertisers-BA2P57UC.js +0 -123
  559. package/dist/advertisers-LELAFRUF.js +0 -125
  560. package/dist/analytics-2U6LDRUK.js +0 -2437
  561. package/dist/analytics-AESUTVLA.js +0 -447
  562. package/dist/animate-YTC37USA.js +0 -480
  563. package/dist/approved-KKCTQLK7.js +0 -73
  564. package/dist/asset-writes-HAELVVBJ.js +0 -50
  565. package/dist/assign-V7NKDZDJ.js +0 -80
  566. package/dist/audience-size-CLYCWKP4.js +0 -76
  567. package/dist/audience-writes-XQMSCRQM.js +0 -327
  568. package/dist/audiences-FO3RP6I5.js +0 -86
  569. package/dist/audiences-FO3RP6I5.js.map +0 -1
  570. package/dist/audiences-RLOXMBLX.js +0 -280
  571. package/dist/audiences-ZCGMMUXF.js +0 -85
  572. package/dist/audit-LLXV6ER5.js +0 -88
  573. package/dist/audit-Q55ELJAJ.js +0 -154
  574. package/dist/autocomplete-JVWFM7O6.js +0 -114
  575. package/dist/avatars-DPSMG4ZW.js +0 -38
  576. package/dist/bid-pricing-WBXWNNFJ.js +0 -103
  577. package/dist/brand-QP7KJX2G.js +0 -22
  578. package/dist/brief-SGSBNQXB.js +0 -543
  579. package/dist/businesses-VXPITYFC.js +0 -54
  580. package/dist/businesses-VXPITYFC.js.map +0 -1
  581. package/dist/campaign-groups-ZOW2ZUXW.js +0 -99
  582. package/dist/campaign-writes-JWHRXUZZ.js +0 -176
  583. package/dist/campaign-writes-O2NFEUIB.js +0 -168
  584. package/dist/campaigns-5UI2LNQN.js +0 -130
  585. package/dist/campaigns-DDUR3MM2.js +0 -113
  586. package/dist/campaigns-KUN7KPBU.js +0 -78
  587. package/dist/campaigns-STLBC2FS.js +0 -111
  588. package/dist/canvas-PBA4WVTE.js +0 -46
  589. package/dist/capabilities-D24VR23Q.js +0 -147
  590. package/dist/cards-3DLNTDSG.js +0 -85
  591. package/dist/catalog-4HOTBBN6.js +0 -66
  592. package/dist/catalogs-GDDFWLKE.js +0 -130
  593. package/dist/catalogs-NU7SKAUB.js +0 -781
  594. package/dist/changes-O2YKPBPS.js +0 -135
  595. package/dist/chatgpt-QEV72AO4.js +0 -47
  596. package/dist/chats-56GDTBZ4.js +0 -384
  597. package/dist/check-KH6KVV47.js +0 -107
  598. package/dist/chunk-3DKEESUG.js +0 -98
  599. package/dist/chunk-3FEOMQUT.js +0 -106
  600. package/dist/chunk-3LH5ANM4.js +0 -7712
  601. package/dist/chunk-3PRPX5L7.js +0 -167
  602. package/dist/chunk-3RWSYI6N.js +0 -63
  603. package/dist/chunk-42LB2PZM.js +0 -377
  604. package/dist/chunk-4ZPR265V.js +0 -274
  605. package/dist/chunk-532FZFV2.js +0 -46
  606. package/dist/chunk-57BVBRCH.js +0 -224
  607. package/dist/chunk-5CXLLV7A.js +0 -219
  608. package/dist/chunk-5XRUOJOO.js +0 -203
  609. package/dist/chunk-66O7GGOB.js +0 -131
  610. package/dist/chunk-6LU64W5J.js +0 -333
  611. package/dist/chunk-6THXOWAP.js +0 -476
  612. package/dist/chunk-6ZX3Q4X7.js +0 -217
  613. package/dist/chunk-72ORDZYV.js +0 -1902
  614. package/dist/chunk-7BJZF77Q.js +0 -1919
  615. package/dist/chunk-7UTWZGIV.js +0 -296
  616. package/dist/chunk-AA3WWPX2.js +0 -392
  617. package/dist/chunk-AIOKWGMO.js +0 -75
  618. package/dist/chunk-AYZICIKF.js +0 -287
  619. package/dist/chunk-BEYH7G2K.js +0 -831
  620. package/dist/chunk-BLXFCH3B.js +0 -42
  621. package/dist/chunk-C4PD5NES.js +0 -26
  622. package/dist/chunk-CHOCMV4I.js +0 -24026
  623. package/dist/chunk-CHOCMV4I.js.map +0 -1
  624. package/dist/chunk-CN7IH2EV.js +0 -344
  625. package/dist/chunk-CTZY7QMT.js +0 -111
  626. package/dist/chunk-CV35AJYT.js +0 -57
  627. package/dist/chunk-CW2RHRH5.js +0 -46
  628. package/dist/chunk-CXRP4X3D.js +0 -56
  629. package/dist/chunk-D4GOSMER.js +0 -8954
  630. package/dist/chunk-EDIDGJ6Y.js +0 -285
  631. package/dist/chunk-EJBHZ7AQ.js +0 -387
  632. package/dist/chunk-EJWTQDKA.js +0 -1744
  633. package/dist/chunk-EKQCHHZW.js +0 -319
  634. package/dist/chunk-EPSAWDYY.js +0 -76
  635. package/dist/chunk-FQLY6JHV.js +0 -910
  636. package/dist/chunk-FQTMVJEO.js +0 -98
  637. package/dist/chunk-FR3M23HS.js +0 -149
  638. package/dist/chunk-FUC6WHQM.js +0 -225
  639. package/dist/chunk-FWIQZEJ4.js +0 -188
  640. package/dist/chunk-GSIK23IJ.js +0 -455
  641. package/dist/chunk-GTV62WIS.js +0 -479
  642. package/dist/chunk-H23ZPEIQ.js +0 -64
  643. package/dist/chunk-H4T5EMYZ.js +0 -163
  644. package/dist/chunk-HCOMTRSN.js +0 -207
  645. package/dist/chunk-HF73QMN2.js +0 -97
  646. package/dist/chunk-HHQYP6RM.js +0 -783
  647. package/dist/chunk-HWZZ2TYO.js +0 -170
  648. package/dist/chunk-IC2X5X7J.js +0 -5368
  649. package/dist/chunk-IPMOG2RC.js +0 -138
  650. package/dist/chunk-IW4JBXYF.js +0 -76
  651. package/dist/chunk-JAC6JVCI.js +0 -26
  652. package/dist/chunk-JBQXHR3O.js +0 -58
  653. package/dist/chunk-JE3RHIQE.js +0 -97
  654. package/dist/chunk-JRX25GPP.js +0 -139
  655. package/dist/chunk-K6XAVINT.js +0 -156
  656. package/dist/chunk-KDQWUSG4.js +0 -84
  657. package/dist/chunk-KE2YPOO2.js +0 -676
  658. package/dist/chunk-KGTDEZBS.js +0 -64
  659. package/dist/chunk-KI6K5VPD.js +0 -142
  660. package/dist/chunk-KNA2ALN6.js +0 -494
  661. package/dist/chunk-L54IDADW.js +0 -429
  662. package/dist/chunk-LIYXELOX.js +0 -89
  663. package/dist/chunk-LLJW5F2C.js +0 -148
  664. package/dist/chunk-LTXL475T.js +0 -544
  665. package/dist/chunk-MCJ5I5LR.js +0 -3187
  666. package/dist/chunk-MCJ5I5LR.js.map +0 -1
  667. package/dist/chunk-MFUZ5DBT.js +0 -604
  668. package/dist/chunk-MZPS46OR.js +0 -76
  669. package/dist/chunk-N43JGOTU.js +0 -438
  670. package/dist/chunk-N64IH7FU.js +0 -166
  671. package/dist/chunk-NT4KXGNJ.js +0 -200
  672. package/dist/chunk-NZSOGF3W.js +0 -297
  673. package/dist/chunk-O57XNXSN.js +0 -52
  674. package/dist/chunk-OQ4PTNNH.js +0 -1518
  675. package/dist/chunk-P7WISPGE.js +0 -61
  676. package/dist/chunk-PBWJBEK7.js +0 -19
  677. package/dist/chunk-PDOP76SF.js +0 -3510
  678. package/dist/chunk-PGRN62MU.js +0 -51
  679. package/dist/chunk-PL4RLWSQ.js +0 -225
  680. package/dist/chunk-PL6LQH6G.js +0 -23
  681. package/dist/chunk-RCNCHRMS.js +0 -197
  682. package/dist/chunk-RD63FPG6.js +0 -150
  683. package/dist/chunk-RJ675DP3.js +0 -84
  684. package/dist/chunk-RPFZLVPG.js +0 -35
  685. package/dist/chunk-S4XSCFFN.js +0 -45
  686. package/dist/chunk-S6WPMD3V.js +0 -2466
  687. package/dist/chunk-S6WPMD3V.js.map +0 -1
  688. package/dist/chunk-SBFNGJ4C.js +0 -324
  689. package/dist/chunk-SBO3MOWQ.js +0 -74
  690. package/dist/chunk-SFG42QU6.js +0 -547
  691. package/dist/chunk-SM3RFN3C.js +0 -66
  692. package/dist/chunk-SNWMC4G5.js +0 -169
  693. package/dist/chunk-SRQ7MXQQ.js +0 -846
  694. package/dist/chunk-SZJO23QQ.js +0 -91
  695. package/dist/chunk-TGTQIYST.js +0 -191
  696. package/dist/chunk-TI4UL56R.js +0 -4266
  697. package/dist/chunk-TI4UL56R.js.map +0 -1
  698. package/dist/chunk-TM5UTSE4.js +0 -215
  699. package/dist/chunk-TWXL3GA7.js +0 -73
  700. package/dist/chunk-TZOCQWKP.js +0 -930
  701. package/dist/chunk-UBTGSMWE.js +0 -5471
  702. package/dist/chunk-UI5JOOIW.js +0 -592
  703. package/dist/chunk-UIPSSTMA.js +0 -228
  704. package/dist/chunk-UODX4YIA.js +0 -714
  705. package/dist/chunk-UWNTAWFF.js +0 -103
  706. package/dist/chunk-V3YJ3BTV.js +0 -25
  707. package/dist/chunk-V6F2QWUZ.js +0 -136
  708. package/dist/chunk-VEWMX5XZ.js +0 -94
  709. package/dist/chunk-VR6OMSSP.js +0 -69
  710. package/dist/chunk-VVQZ4MIX.js +0 -66
  711. package/dist/chunk-VWOKRMUG.js +0 -125
  712. package/dist/chunk-WZTSS4SH.js +0 -100
  713. package/dist/chunk-X2DV2ZLG.js +0 -191
  714. package/dist/chunk-X3QG3PKT.js +0 -207
  715. package/dist/chunk-X6AHLUC7.js +0 -229
  716. package/dist/chunk-XA63GPQB.js +0 -91
  717. package/dist/chunk-XARGXZ7V.js +0 -249
  718. package/dist/chunk-XMLYBQ3R.js +0 -1646
  719. package/dist/chunk-Y3SGBJN7.js +0 -69
  720. package/dist/chunk-YD5ZAA56.js +0 -275
  721. package/dist/chunk-YQIURUEL.js +0 -638
  722. package/dist/chunk-Z56NDBOQ.js +0 -2209
  723. package/dist/chunk-ZHHRXHWD.js +0 -106
  724. package/dist/chunk-ZN22VDFS.js +0 -843
  725. package/dist/chunk-ZYWER6HE.js +0 -39
  726. package/dist/claim-E3VMPNOA.js +0 -200
  727. package/dist/client-IILD75KL.js +0 -19
  728. package/dist/code-OWFBQYZS.js +0 -76
  729. package/dist/companies-QLJDMR4I.js +0 -198
  730. package/dist/company-PXTBJJ3S.js +0 -308
  731. package/dist/complete-G6HV7C35.js +0 -84
  732. package/dist/config-JPA4ZHN2.js +0 -88
  733. package/dist/connect-CPXBAHGN.js +0 -45
  734. package/dist/content-SOGZTYNO.js +0 -85
  735. package/dist/conversation-4DTR72EP.js +0 -96
  736. package/dist/conversion-report-ABOKPW3U.js +0 -127
  737. package/dist/conversion-upload-command-6AACG4M4.js +0 -439
  738. package/dist/conversion-writes-2HEJ5SYB.js +0 -122
  739. package/dist/conversions-QIOEYCTC.js +0 -140
  740. package/dist/conversions-UNYDKOB3.js +0 -78
  741. package/dist/copy-writes-RF7MUAWA.js +0 -170
  742. package/dist/countries-4XNZESRQ.js +0 -82
  743. package/dist/create-23ASG5LC.js +0 -135
  744. package/dist/create-3TCFE7K5.js +0 -239
  745. package/dist/create-SASK6SVG.js +0 -62
  746. package/dist/create-YKAVNBVZ.js +0 -210
  747. package/dist/creatives-6MXQKT6W.js +0 -89
  748. package/dist/creatives-6MXQKT6W.js.map +0 -1
  749. package/dist/creatives-HUCADOCQ.js +0 -58
  750. package/dist/creatives-OLTNYQ3S.js +0 -223
  751. package/dist/credentials-TR2ALV5Y.js +0 -290
  752. package/dist/critique-HTQQZRI7.js +0 -232
  753. package/dist/critique-OC7DOMSC.js +0 -1451
  754. package/dist/crm-Q4QTSEQF.js +0 -323
  755. package/dist/crm-Y66JWDMN.js +0 -227
  756. package/dist/crop-L3ALN7OW.js +0 -113
  757. package/dist/currency-CTZT5LYI.js +0 -88
  758. package/dist/custom-conversions-XJJ5V2RR.js +0 -128
  759. package/dist/custom-conversions-XJJ5V2RR.js.map +0 -1
  760. package/dist/customers-BGRY3D6Q.js +0 -59
  761. package/dist/decide-LE7542FR.js +0 -199
  762. package/dist/delete-35NTMQY5.js +0 -85
  763. package/dist/delete-BGTXQRZM.js +0 -57
  764. package/dist/delete-CL3N2FD6.js +0 -69
  765. package/dist/delete-HJZYARS4.js +0 -71
  766. package/dist/delete-J4CAABB6.js +0 -67
  767. package/dist/delete-TW5C6KGR.js +0 -69
  768. package/dist/demographics-D563ESMR.js +0 -141
  769. package/dist/describe-PP7D2RE5.js +0 -97
  770. package/dist/describe-VXQA5AHV.js +0 -97
  771. package/dist/dimensions-WUQGLVX6.js +0 -101
  772. package/dist/discard-K3Z3QTTZ.js +0 -69
  773. package/dist/discover-2A4MEOTK.js +0 -172
  774. package/dist/discover-PDVS3ITO.js +0 -93
  775. package/dist/domain-XLWTTMU3.js +0 -101
  776. package/dist/download-FZJLCOSU.js +0 -299
  777. package/dist/download-R4WCZVKX.js +0 -172
  778. package/dist/draft-4HU72A2M.js +0 -240
  779. package/dist/draft-4LQYKYES.js +0 -310
  780. package/dist/draft-BDGZ4KD2.js +0 -220
  781. package/dist/draft-J3ZLBKSO.js +0 -335
  782. package/dist/draft-QC5U3HH7.js +0 -103
  783. package/dist/draft-QK7WP6KI.js +0 -100
  784. package/dist/draft-RBWJ2KMU.js +0 -283
  785. package/dist/draft-WCAPGXNE.js +0 -396
  786. package/dist/env-KCFPWDRZ.js +0 -53
  787. package/dist/experiment-55H6NBF4.js +0 -1397
  788. package/dist/experiments-TMODWKCS.js +0 -236
  789. package/dist/export-JSQ62QLT.js +0 -168
  790. package/dist/extract-HPO5NCJM.js +0 -113
  791. package/dist/extract-HPO5NCJM.js.map +0 -1
  792. package/dist/facets-3Y65YKG5.js +0 -117
  793. package/dist/favorites-PZIXDJTK.js +0 -178
  794. package/dist/feed-GTJWBM3A.js +0 -177
  795. package/dist/feedback-R6WPR37D.js +0 -115
  796. package/dist/feedback-record-Y5BRNVIA.js +0 -269
  797. package/dist/fetch-DH3FYWNG.js +0 -139
  798. package/dist/fetch-LRYGBGF6.js +0 -179
  799. package/dist/find-Q6YSXK5B.js +0 -143
  800. package/dist/fit-TWZLNDRE.js +0 -65
  801. package/dist/flows-KXICZCG7.js +0 -250
  802. package/dist/follow-B5LYKQYZ.js +0 -94
  803. package/dist/follow-competitors-7NHOQPC6.js +0 -112
  804. package/dist/following-2M4SVFML.js +0 -113
  805. package/dist/fonts-GPCFB77E.js +0 -39
  806. package/dist/forecast-GJOJBT66.js +0 -121
  807. package/dist/forecast-Q2VWQYXH.js +0 -169
  808. package/dist/funding-7KPXTSSF.js +0 -85
  809. package/dist/funnel-DTJNGHJ7.js +0 -397
  810. package/dist/ga4-IHDHHB4A.js +0 -55
  811. package/dist/generate-LR4TZ635.js +0 -263
  812. package/dist/get-5LL6Z5NR.js +0 -82
  813. package/dist/get-B3B6FRQ2.js +0 -59
  814. package/dist/get-B4DL3RSO.js +0 -56
  815. package/dist/get-BLLJDQK7.js +0 -62
  816. package/dist/get-EBGMLBMQ.js +0 -66
  817. package/dist/get-L643OWL6.js +0 -92
  818. package/dist/get-UOSUCNQL.js +0 -59
  819. package/dist/get-X7CWNYQT.js +0 -38
  820. package/dist/gif-YOFNJCMU.js +0 -102
  821. package/dist/gif-YOFNJCMU.js.map +0 -1
  822. package/dist/google-5FWAGGXI.js +0 -136
  823. package/dist/google-5FWAGGXI.js.map +0 -1
  824. package/dist/google-63IGLMTD.js +0 -3267
  825. package/dist/google-ads-FZP75XOY.js +0 -198
  826. package/dist/group-B7MU5SKI.js +0 -43
  827. package/dist/group-WU4LKKX7.js +0 -43
  828. package/dist/gsc-TP5PZHZG.js +0 -30
  829. package/dist/history-K7DLRT7S.js +0 -136
  830. package/dist/history-P7EZPAMT.js +0 -102
  831. package/dist/history-RZ5ZPPYD.js +0 -69
  832. package/dist/hubspot-GXPNTPXH.js +0 -782
  833. package/dist/icon-6BMRXD4X.js +0 -137
  834. package/dist/ideas-TQGXXWNX.js +0 -45
  835. package/dist/images-KWYSLR3Q.js +0 -92
  836. package/dist/improve-IX6E7OYO.js +0 -86
  837. package/dist/ingest-LPIQYOC2.js +0 -123
  838. package/dist/ingest-MAWKAVR2.js +0 -27
  839. package/dist/insights-LSXXRRIR.js +0 -439
  840. package/dist/insights-LSXXRRIR.js.map +0 -1
  841. package/dist/insights-NYWJYDS6.js +0 -132
  842. package/dist/inspect-BDRWXLXE.js +0 -192
  843. package/dist/inspiration-3EXSU5HR.js +0 -53
  844. package/dist/instant-experiences-S6KD7GHP.js +0 -260
  845. package/dist/instant-experiences-S6KD7GHP.js.map +0 -1
  846. package/dist/intent-42QMV4N5.js +0 -95
  847. package/dist/job-LE5AG6HJ.js +0 -202
  848. package/dist/job-create-QKYEPYNE.js +0 -109
  849. package/dist/job-status-OG7S2LFM.js +0 -74
  850. package/dist/keep-WG3T4MKZ.js +0 -78
  851. package/dist/keyword-gap-57UOL233.js +0 -130
  852. package/dist/keyword-metrics-ZE27BDSD.js +0 -200
  853. package/dist/keywords-for-site-E4L5FEOZ.js +0 -131
  854. package/dist/knowledge-IIWKDS45.js +0 -195
  855. package/dist/landing-S7L2JT7T.js +0 -28
  856. package/dist/landings-2CNV325Q.js +0 -151
  857. package/dist/languages-5LHOEANO.js +0 -55
  858. package/dist/languages-7AYGAQ5R.js +0 -40
  859. package/dist/launches-EWT3LHCQ.js +0 -19
  860. package/dist/layerize-QXALSA7Q.js +0 -190
  861. package/dist/lead-routes-FAG5FOZK.js +0 -733
  862. package/dist/leads-37USR6KI.js +0 -115
  863. package/dist/leads-6U26QP2Q.js +0 -540
  864. package/dist/leads-6U26QP2Q.js.map +0 -1
  865. package/dist/learn-23DQ72LC.js +0 -207
  866. package/dist/library-5XZP2W22.js +0 -211
  867. package/dist/lighthouse-KAMY3KYG.js +0 -75
  868. package/dist/line-item-writes-2WYNROS7.js +0 -211
  869. package/dist/line-items-RL7T3Q5Q.js +0 -107
  870. package/dist/link-OQSTKOOH.js +0 -67
  871. package/dist/linkedin-KP6ZMWEG.js +0 -1328
  872. package/dist/linkedin-person-7EMQIMT7.js +0 -139
  873. package/dist/list-4VJY4BCV.js +0 -51
  874. package/dist/list-6J7RPP4F.js +0 -306
  875. package/dist/list-AL2HOLWI.js +0 -76
  876. package/dist/list-AZEHYDU7.js +0 -93
  877. package/dist/list-F5P3KZNF.js +0 -67
  878. package/dist/list-GHV6665E.js +0 -50
  879. package/dist/list-PBGDATAC.js +0 -57
  880. package/dist/list-SRY3XZOE.js +0 -65
  881. package/dist/list-XXNAKZGF.js +0 -154
  882. package/dist/locations-DXTRXR4N.js +0 -40
  883. package/dist/locations-LRDYJ43Z.js +0 -69
  884. package/dist/log-KNVINDDV.js +0 -95
  885. package/dist/logo-DBIXKWDV.js +0 -18
  886. package/dist/lookup-CNAZI7WN.js +0 -23
  887. package/dist/make-WHI2U6TV.js +0 -1367
  888. package/dist/map-YODJNTXD.js +0 -436
  889. package/dist/mcp-UCM35H3L.js +0 -729
  890. package/dist/media-7UAKHZZT.js +0 -18
  891. package/dist/media-JESBPCT4.js +0 -89
  892. package/dist/media-sources-BOPQHX2H.js +0 -35
  893. package/dist/members-SQ5CYHJX.js +0 -47
  894. package/dist/meme-QC4B2UOE.js +0 -100
  895. package/dist/meta-RKKGFD2Q.js +0 -122
  896. package/dist/metrics-A52UDO7T.js +0 -152
  897. package/dist/models-6N3BB77L.js +0 -155
  898. package/dist/normalize-ALERW32M.js +0 -144
  899. package/dist/normalize-TGEEW5J4.js +0 -806
  900. package/dist/options-YHKD2OAJ.js +0 -125
  901. package/dist/organization-WERAMD2V.js +0 -949
  902. package/dist/output-LTK2VAI2.js +0 -24
  903. package/dist/page-O7HY2KDR.js +0 -105
  904. package/dist/page-photos-IIBLD2M4.js +0 -118
  905. package/dist/pages-JYYYRADM.js +0 -67
  906. package/dist/pages-JYYYRADM.js.map +0 -1
  907. package/dist/performance-C35V2HKD.js +0 -5565
  908. package/dist/performance-NG24WWKY.js +0 -27
  909. package/dist/pinterest-P5LS6IM7.js +0 -96
  910. package/dist/pinterest-P5LS6IM7.js.map +0 -1
  911. package/dist/pixels-TAVUGXVE.js +0 -109
  912. package/dist/pixels-TAVUGXVE.js.map +0 -1
  913. package/dist/pixels-XXBXR2V6.js +0 -62
  914. package/dist/plan-XJX4BAFS.js +0 -208
  915. package/dist/posts-QEJH7VY4.js +0 -36
  916. package/dist/preview-KMBPUIKX.js +0 -218
  917. package/dist/profile-HH657NFJ.js +0 -159
  918. package/dist/promoted-tweet-writes-Y4F3CAFN.js +0 -183
  919. package/dist/promoted-tweets-NDH4WRMU.js +0 -119
  920. package/dist/properties-2BEJQW4Y.js +0 -101
  921. package/dist/publish-ZSBU22A6.js +0 -344
  922. package/dist/query-ACPWBVYY.js +0 -62
  923. package/dist/query-CBSXU3D6.js +0 -236
  924. package/dist/query-SMIKGUVW.js +0 -231
  925. package/dist/questionnaire-3WSXQF24.js +0 -94
  926. package/dist/read-HZC3NDNN.js +0 -141
  927. package/dist/reddit-VGQJ5DWZ.js +0 -29
  928. package/dist/refresh-I5A3NECZ.js +0 -42
  929. package/dist/refresh-UQ4R2OAO.js +0 -97
  930. package/dist/release-QA2ORVMR.js +0 -63
  931. package/dist/relevant-pages-X5BKPX2Z.js +0 -99
  932. package/dist/remove-2ZGE2W4H.js +0 -49
  933. package/dist/remove-W44KVKX2.js +0 -53
  934. package/dist/reopen-66OCNU76.js +0 -66
  935. package/dist/rerun-OUXGA2IC.js +0 -96
  936. package/dist/research-4CO77ZDY.js +0 -72
  937. package/dist/research-KMDJE2UR.js +0 -265
  938. package/dist/reset-VIRLB7WH.js +0 -57
  939. package/dist/reset-VSPTKCIP.js +0 -57
  940. package/dist/resolve-3X75F7YR.js +0 -124
  941. package/dist/retry-SFLHBLLT.js +0 -63
  942. package/dist/retry-USOR5FLJ.js +0 -65
  943. package/dist/retry-failed-2P7FOFXN.js +0 -45
  944. package/dist/revenue-YJO5LJQX.js +0 -91
  945. package/dist/rule-writes-EWHP53UU.js +0 -525
  946. package/dist/rules-GVOTFQFK.js +0 -217
  947. package/dist/rules-VOPVGGYY.js +0 -99
  948. package/dist/rules-add-CC4ACCSS.js +0 -465
  949. package/dist/run-MDMDSMNK.js +0 -69
  950. package/dist/run-WQH6WOKA.js +0 -71
  951. package/dist/scaffold-ad-ZIEQDGKR.js +0 -1513
  952. package/dist/scaffold-static-ad-PCZYRIKR.js +0 -1011
  953. package/dist/scaffold-video-53QXTSK2.js +0 -885
  954. package/dist/schedule-HJW5MV6M.js +0 -64
  955. package/dist/schedule-UQZFDY2R.js +0 -67
  956. package/dist/scheduled-agents-HGCQPOSI.js +0 -55
  957. package/dist/schema-GHGIFDA5.js +0 -121
  958. package/dist/schema-VNADOIC7.js +0 -135
  959. package/dist/scrape-KJHI7ZGT.js +0 -2241
  960. package/dist/screenshot-R5WU2CP3.js +0 -102
  961. package/dist/search-4ZC63BDO.js +0 -91
  962. package/dist/search-ASEODLC6.js +0 -51
  963. package/dist/search-HU3BLSA5.js +0 -26
  964. package/dist/search-KKAJLNGJ.js +0 -177
  965. package/dist/search-YIS3DVFC.js +0 -92
  966. package/dist/search-Z4PXKQXY.js +0 -224
  967. package/dist/search-copy-TFHTB6R3.js +0 -168
  968. package/dist/seeds-SMIOGN5B.js +0 -101
  969. package/dist/select-PDZUPAUK.js +0 -110
  970. package/dist/sends-E7Z65VUV.js +0 -349
  971. package/dist/sends-E7Z65VUV.js.map +0 -1
  972. package/dist/sequences-T5M7T6HY.js +0 -146
  973. package/dist/set-prompt-6KEYR56T.js +0 -199
  974. package/dist/setup-links-ALKFPGLK.js +0 -144
  975. package/dist/shared-INNJML54.js +0 -32
  976. package/dist/shopify-XQ2XMPG4.js +0 -3958
  977. package/dist/site-GDBA47KZ.js +0 -180
  978. package/dist/sitemaps-JXHJMTLU.js +0 -77
  979. package/dist/sites-UXBWI7WO.js +0 -97
  980. package/dist/skills-X5XTXI7E.js +0 -47
  981. package/dist/sources-FXELSMSA.js +0 -30
  982. package/dist/sources-QBNLC54L.js +0 -457
  983. package/dist/sources-QBNLC54L.js.map +0 -1
  984. package/dist/stale-GU4IAYSH.js +0 -90
  985. package/dist/stats-KWP52SMV.js +0 -34
  986. package/dist/status-TMO67UTC.js +0 -65
  987. package/dist/sticker-XIP3YQHG.js +0 -94
  988. package/dist/sticker-XIP3YQHG.js.map +0 -1
  989. package/dist/stock-LB7DKL3L.js +0 -179
  990. package/dist/stock-LB7DKL3L.js.map +0 -1
  991. package/dist/studies-C6XQBKI6.js +0 -250
  992. package/dist/studio-HGMO77PU.js +0 -49
  993. package/dist/study-writes-XD4CWHMA.js +0 -470
  994. package/dist/suggest-EY4X3CGR.js +0 -66
  995. package/dist/sync-KEWFMT6D.js +0 -279
  996. package/dist/sync-PKJ5A4BI.js +0 -57
  997. package/dist/sync-Y3OXWX3C.js +0 -55
  998. package/dist/sync-definition-RDZPTA2Q.js +0 -70
  999. package/dist/tag-OHLDMOIE.js +0 -57
  1000. package/dist/tag-manager-45NZFX7I.js +0 -43
  1001. package/dist/tags-CP37ODLW.js +0 -227
  1002. package/dist/tags-CPQHAS25.js +0 -23
  1003. package/dist/tags-FHRIXW7Q.js +0 -23
  1004. package/dist/tags-GYQKFHMA.js +0 -26
  1005. package/dist/tags-SOGILVIL.js +0 -23
  1006. package/dist/targeting-WMQ5D3FI.js +0 -762
  1007. package/dist/targeting-constants-25MFBDE2.js +0 -118
  1008. package/dist/targeting-criteria-HV7NBKI3.js +0 -113
  1009. package/dist/targets-3VSPGEY7.js +0 -106
  1010. package/dist/terms-IDRQZRWC.js +0 -102
  1011. package/dist/testimonials-ILMBPPLT.js +0 -32
  1012. package/dist/themes-5YBSJEKZ.js +0 -95
  1013. package/dist/top-companies-P43VHHMU.js +0 -111
  1014. package/dist/transcript-DIAZ2OU4.js +0 -165
  1015. package/dist/translate-IFQFBJYY.js +0 -603
  1016. package/dist/triggers-WULRME4T.js +0 -144
  1017. package/dist/tweets-7LDBHP3Y.js +0 -123
  1018. package/dist/unfollow-76PLUWRU.js +0 -46
  1019. package/dist/unlink-DZH2GXFZ.js +0 -70
  1020. package/dist/unstage-GKI2IQOY.js +0 -88
  1021. package/dist/unstage-PHH5WTTH.js +0 -96
  1022. package/dist/update-6I36ZCNL.js +0 -66
  1023. package/dist/update-HBQCEZ47.js +0 -81
  1024. package/dist/update-NN6ELVGG.js +0 -155
  1025. package/dist/update-RD374IU2.js +0 -101
  1026. package/dist/update-VBFHKFFH.js +0 -192
  1027. package/dist/upload-2OD3BTNT.js +0 -130
  1028. package/dist/upload-HQVNSAQX.js +0 -150
  1029. package/dist/upscale-DRLDP2PM.js +0 -109
  1030. package/dist/url-options-KOL2WHJ3.js +0 -131
  1031. package/dist/url-params-YTY4TEMU.js +0 -101
  1032. package/dist/use-WKSR3Y2T.js +0 -111
  1033. package/dist/validate-KEYC2TPH.js +0 -125
  1034. package/dist/variant-DMGNLXWH.js +0 -338
  1035. package/dist/videos-76QPF2ZI.js +0 -41
  1036. package/dist/view-O6PUTSFE.js +0 -121
  1037. package/dist/viewer-check-SUMQQQVA.js +0 -83
  1038. package/dist/web-EKRCCW4A.js +0 -143
  1039. package/dist/winners-T4AWAVNU.js +0 -113
  1040. package/dist/winning-ads-N4VTILRO.js +0 -86
  1041. package/dist/write-commands-6GIGWSF4.js +0 -206
  1042. package/dist/write-commands-AD7DBJKY.js +0 -1525
  1043. package/dist/write-commands-HMMBM5OC.js +0 -1172
  1044. package/dist/write-commands-KYMBIZ7U.js +0 -713
  1045. package/dist/x-3W5KUAMR.js +0 -47
  1046. /package/dist/{account-LHBLGRZM.js.map → account-2RNYGT6E.js.map} +0 -0
  1047. /package/dist/{account-6Q2YV7BN.js.map → account-3IA3PYDJ.js.map} +0 -0
  1048. /package/dist/{account-44L7SBXK.js.map → account-T26J6HSJ.js.map} +0 -0
  1049. /package/dist/{account-assets-VJ5RZH4I.js.map → account-assets-BVEEUGDA.js.map} +0 -0
  1050. /package/dist/{account-level-KI4TEG3G.js.map → account-level-J37UFQY6.js.map} +0 -0
  1051. /package/dist/{account-reads-5MA52GNG.js.map → account-reads-P2WXB3NZ.js.map} +0 -0
  1052. /package/dist/{account-users-GSZHY6MD.js.map → account-users-REWJY2TN.js.map} +0 -0
  1053. /package/dist/{account-writes-LLRPQU2K.js.map → account-writes-QEZQCU46.js.map} +0 -0
  1054. /package/dist/{accounts-ASUFY2DV.js.map → accounts-FX6V37GX.js.map} +0 -0
  1055. /package/dist/{accounts-A2SGFRZP.js.map → accounts-GXJPLMHU.js.map} +0 -0
  1056. /package/dist/{accounts-QVZR4OMQ.js.map → accounts-HNZWMTRM.js.map} +0 -0
  1057. /package/dist/{accounts-CALGHTYG.js.map → accounts-MJ7AGPOW.js.map} +0 -0
  1058. /package/dist/{accounts-PFZVWNOW.js.map → accounts-PGSNRUNV.js.map} +0 -0
  1059. /package/dist/{actions-WF2UAXBI.js.map → actions-NGBCTPNG.js.map} +0 -0
  1060. /package/dist/{active-entities-EJCLPIKJ.js.map → active-entities-YIOKHGWY.js.map} +0 -0
  1061. /package/dist/{activecampaign-KXBLSP7W.js.map → activecampaign-ASE4IVTD.js.map} +0 -0
  1062. /package/dist/{activities-U7RC275G.js.map → activities-FXYVPCRJ.js.map} +0 -0
  1063. /package/dist/{ad-group-writes-OWJ4ATKU.js.map → ad-group-writes-MVQKICSC.js.map} +0 -0
  1064. /package/dist/{ad-groups-IFF4G7CK.js.map → ad-groups-5OGD7PJ7.js.map} +0 -0
  1065. /package/dist/{ad-writes-OB7BRW5T.js.map → ad-writes-OVD6EESQ.js.map} +0 -0
  1066. /package/dist/{add-M6CZVT62.js.map → add-3EEREVFI.js.map} +0 -0
  1067. /package/dist/{add-HLDASH6G.js.map → add-FGB7KM6P.js.map} +0 -0
  1068. /package/dist/{add-MYRZZDLQ.js.map → add-FKINXOC2.js.map} +0 -0
  1069. /package/dist/{add-LBER2JD6.js.map → add-MTYT3Q4T.js.map} +0 -0
  1070. /package/dist/{add-7DCTX6MT.js.map → add-QBEF2C7Z.js.map} +0 -0
  1071. /package/dist/{add-PVXWIATJ.js.map → add-YJP43JWJ.js.map} +0 -0
  1072. /package/dist/{add-accounts-HUIKYKRU.js.map → add-accounts-WCDQRXRO.js.map} +0 -0
  1073. /package/dist/{ads-MFXNLNPB.js.map → ads-4O4TPDAU.js.map} +0 -0
  1074. /package/dist/{ads-AVR7RXZ3.js.map → ads-GF7QLKBX.js.map} +0 -0
  1075. /package/dist/{ads-24GB65HI.js.map → ads-SCWCG2YI.js.map} +0 -0
  1076. /package/dist/{ads-325CHQN5.js.map → ads-YRV2YERG.js.map} +0 -0
  1077. /package/dist/{adsets-7ARHJS2F.js.map → adsets-OVFVN5NX.js.map} +0 -0
  1078. /package/dist/{advertisers-LELAFRUF.js.map → advertisers-663V2F2T.js.map} +0 -0
  1079. /package/dist/{advertisers-BA2P57UC.js.map → advertisers-SUZT4NRJ.js.map} +0 -0
  1080. /package/dist/{analytics-2U6LDRUK.js.map → analytics-NJBF3U54.js.map} +0 -0
  1081. /package/dist/{analytics-AESUTVLA.js.map → analytics-PI6SXDW4.js.map} +0 -0
  1082. /package/dist/{animate-YTC37USA.js.map → animate-HV2QJWVE.js.map} +0 -0
  1083. /package/dist/{approved-KKCTQLK7.js.map → approved-RFZLJZJH.js.map} +0 -0
  1084. /package/dist/{asset-writes-HAELVVBJ.js.map → asset-writes-ZMSJSFTD.js.map} +0 -0
  1085. /package/dist/{assign-V7NKDZDJ.js.map → assign-6YG56OCM.js.map} +0 -0
  1086. /package/dist/{audience-size-CLYCWKP4.js.map → audience-size-5X3BHQ6Q.js.map} +0 -0
  1087. /package/dist/{audience-writes-XQMSCRQM.js.map → audience-writes-BUWFC5W4.js.map} +0 -0
  1088. /package/dist/{audiences-RLOXMBLX.js.map → audiences-6N5B7CA2.js.map} +0 -0
  1089. /package/dist/{audiences-ZCGMMUXF.js.map → audiences-GD2EPPJJ.js.map} +0 -0
  1090. /package/dist/{audit-LLXV6ER5.js.map → audit-DQYC4R74.js.map} +0 -0
  1091. /package/dist/{audit-Q55ELJAJ.js.map → audit-PLXF2NAS.js.map} +0 -0
  1092. /package/dist/{autocomplete-JVWFM7O6.js.map → autocomplete-YJSDRTMT.js.map} +0 -0
  1093. /package/dist/{avatars-DPSMG4ZW.js.map → avatars-BDQWTQKY.js.map} +0 -0
  1094. /package/dist/{bid-pricing-WBXWNNFJ.js.map → bid-pricing-BUNOVWUB.js.map} +0 -0
  1095. /package/dist/{brand-QP7KJX2G.js.map → brand-MHFSUXWN.js.map} +0 -0
  1096. /package/dist/{brief-SGSBNQXB.js.map → brief-A5AEZBZL.js.map} +0 -0
  1097. /package/dist/{campaign-groups-ZOW2ZUXW.js.map → campaign-groups-UYNINWXX.js.map} +0 -0
  1098. /package/dist/{campaign-writes-O2NFEUIB.js.map → campaign-writes-RCA52SAP.js.map} +0 -0
  1099. /package/dist/{campaign-writes-JWHRXUZZ.js.map → campaign-writes-TFRV62VN.js.map} +0 -0
  1100. /package/dist/{campaigns-DDUR3MM2.js.map → campaigns-CIQIZ46G.js.map} +0 -0
  1101. /package/dist/{campaigns-STLBC2FS.js.map → campaigns-EETR5UJR.js.map} +0 -0
  1102. /package/dist/{campaigns-KUN7KPBU.js.map → campaigns-KPUA4GP2.js.map} +0 -0
  1103. /package/dist/{campaigns-5UI2LNQN.js.map → campaigns-N75G2BDU.js.map} +0 -0
  1104. /package/dist/{canvas-PBA4WVTE.js.map → canvas-M3RXWJ2T.js.map} +0 -0
  1105. /package/dist/{capabilities-D24VR23Q.js.map → capabilities-XFLST37G.js.map} +0 -0
  1106. /package/dist/{cards-3DLNTDSG.js.map → cards-TTQTPLCO.js.map} +0 -0
  1107. /package/dist/{catalog-4HOTBBN6.js.map → catalog-JVBRY2U6.js.map} +0 -0
  1108. /package/dist/{catalogs-NU7SKAUB.js.map → catalogs-LI7NG57R.js.map} +0 -0
  1109. /package/dist/{catalogs-GDDFWLKE.js.map → catalogs-QYAAPTMV.js.map} +0 -0
  1110. /package/dist/{changes-O2YKPBPS.js.map → changes-Y4NAQ2IV.js.map} +0 -0
  1111. /package/dist/{chatgpt-QEV72AO4.js.map → chatgpt-KJAUJBRK.js.map} +0 -0
  1112. /package/dist/{chats-56GDTBZ4.js.map → chats-5BNHZWO7.js.map} +0 -0
  1113. /package/dist/{check-KH6KVV47.js.map → check-ESD3QPIZ.js.map} +0 -0
  1114. /package/dist/{chunk-EKQCHHZW.js.map → chunk-2EVHGBQY.js.map} +0 -0
  1115. /package/dist/{chunk-K6XAVINT.js.map → chunk-2JFCDUZO.js.map} +0 -0
  1116. /package/dist/{chunk-KNA2ALN6.js.map → chunk-2MAQKELK.js.map} +0 -0
  1117. /package/dist/{chunk-7BJZF77Q.js.map → chunk-2OCUXPWT.js.map} +0 -0
  1118. /package/dist/{chunk-WZTSS4SH.js.map → chunk-35FLLWSQ.js.map} +0 -0
  1119. /package/dist/{chunk-N43JGOTU.js.map → chunk-3ANPDWU7.js.map} +0 -0
  1120. /package/dist/{chunk-Z56NDBOQ.js.map → chunk-3C3IR2F6.js.map} +0 -0
  1121. /package/dist/{chunk-42LB2PZM.js.map → chunk-3GMJEM4C.js.map} +0 -0
  1122. /package/dist/{chunk-O57XNXSN.js.map → chunk-3PG7O3ZW.js.map} +0 -0
  1123. /package/dist/{chunk-VR6OMSSP.js.map → chunk-4GQJOHJY.js.map} +0 -0
  1124. /package/dist/{chunk-RPFZLVPG.js.map → chunk-4OY6SHHM.js.map} +0 -0
  1125. /package/dist/{chunk-TGTQIYST.js.map → chunk-4QLVMG63.js.map} +0 -0
  1126. /package/dist/{chunk-BEYH7G2K.js.map → chunk-4YWSFFOP.js.map} +0 -0
  1127. /package/dist/{chunk-CV35AJYT.js.map → chunk-5JG77PP3.js.map} +0 -0
  1128. /package/dist/{chunk-CN7IH2EV.js.map → chunk-5TWI6FFY.js.map} +0 -0
  1129. /package/dist/{chunk-57BVBRCH.js.map → chunk-65HTWFKN.js.map} +0 -0
  1130. /package/dist/{chunk-UODX4YIA.js.map → chunk-6KWPAPFL.js.map} +0 -0
  1131. /package/dist/{chunk-JAC6JVCI.js.map → chunk-6OIKNJ7G.js.map} +0 -0
  1132. /package/dist/{chunk-GSIK23IJ.js.map → chunk-6RUHIXVA.js.map} +0 -0
  1133. /package/dist/{chunk-X2DV2ZLG.js.map → chunk-6X4XAANZ.js.map} +0 -0
  1134. /package/dist/{chunk-XA63GPQB.js.map → chunk-6Z32HS4D.js.map} +0 -0
  1135. /package/dist/{chunk-H4T5EMYZ.js.map → chunk-7MK4TND6.js.map} +0 -0
  1136. /package/dist/{chunk-FWIQZEJ4.js.map → chunk-7ZYXRMSM.js.map} +0 -0
  1137. /package/dist/{chunk-LLJW5F2C.js.map → chunk-AUO4QNMI.js.map} +0 -0
  1138. /package/dist/{chunk-EJWTQDKA.js.map → chunk-AXSSATJW.js.map} +0 -0
  1139. /package/dist/{chunk-3FEOMQUT.js.map → chunk-B52GKPH2.js.map} +0 -0
  1140. /package/dist/{chunk-EDIDGJ6Y.js.map → chunk-B6WOWVAA.js.map} +0 -0
  1141. /package/dist/{chunk-Y3SGBJN7.js.map → chunk-BBGKZJXP.js.map} +0 -0
  1142. /package/dist/{chunk-3DKEESUG.js.map → chunk-BF32BRMX.js.map} +0 -0
  1143. /package/dist/{chunk-XARGXZ7V.js.map → chunk-BIFK5OGB.js.map} +0 -0
  1144. /package/dist/{chunk-KI6K5VPD.js.map → chunk-BUXPBPAP.js.map} +0 -0
  1145. /package/dist/{chunk-X6AHLUC7.js.map → chunk-C35UMKYG.js.map} +0 -0
  1146. /package/dist/{chunk-AA3WWPX2.js.map → chunk-CDRS2QAP.js.map} +0 -0
  1147. /package/dist/{chunk-EJBHZ7AQ.js.map → chunk-CFVVZKSU.js.map} +0 -0
  1148. /package/dist/{chunk-V6F2QWUZ.js.map → chunk-CM2LECNX.js.map} +0 -0
  1149. /package/dist/{chunk-KGTDEZBS.js.map → chunk-D2F73AUY.js.map} +0 -0
  1150. /package/dist/{chunk-PBWJBEK7.js.map → chunk-D3KWV63D.js.map} +0 -0
  1151. /package/dist/{chunk-PL6LQH6G.js.map → chunk-D5LV3ECR.js.map} +0 -0
  1152. /package/dist/{chunk-IC2X5X7J.js.map → chunk-DBLOEIJ2.js.map} +0 -0
  1153. /package/dist/{chunk-7UTWZGIV.js.map → chunk-DNRXEP4A.js.map} +0 -0
  1154. /package/dist/{chunk-4ZPR265V.js.map → chunk-DQIPDAPH.js.map} +0 -0
  1155. /package/dist/{chunk-S4XSCFFN.js.map → chunk-DR4TIYTE.js.map} +0 -0
  1156. /package/dist/{chunk-SBFNGJ4C.js.map → chunk-EAHBTBVR.js.map} +0 -0
  1157. /package/dist/{chunk-TZOCQWKP.js.map → chunk-EFBJ35ZS.js.map} +0 -0
  1158. /package/dist/{chunk-TM5UTSE4.js.map → chunk-ELAYD7O3.js.map} +0 -0
  1159. /package/dist/{chunk-SZJO23QQ.js.map → chunk-EMXBMLQ4.js.map} +0 -0
  1160. /package/dist/{chunk-SNWMC4G5.js.map → chunk-EZVRXFCC.js.map} +0 -0
  1161. /package/dist/{chunk-HF73QMN2.js.map → chunk-FRUOWEWZ.js.map} +0 -0
  1162. /package/dist/{chunk-UIPSSTMA.js.map → chunk-GCFC2MNR.js.map} +0 -0
  1163. /package/dist/{chunk-HCOMTRSN.js.map → chunk-GQ4D3BT6.js.map} +0 -0
  1164. /package/dist/{chunk-3RWSYI6N.js.map → chunk-HMFIOE4P.js.map} +0 -0
  1165. /package/dist/{chunk-PDOP76SF.js.map → chunk-HXLCETLB.js.map} +0 -0
  1166. /package/dist/{chunk-PL4RLWSQ.js.map → chunk-ITKTTDC2.js.map} +0 -0
  1167. /package/dist/{chunk-EPSAWDYY.js.map → chunk-JD4DSJPT.js.map} +0 -0
  1168. /package/dist/{chunk-VEWMX5XZ.js.map → chunk-JQSN5K5B.js.map} +0 -0
  1169. /package/dist/{chunk-TWXL3GA7.js.map → chunk-JUFABKU4.js.map} +0 -0
  1170. /package/dist/{chunk-SRQ7MXQQ.js.map → chunk-JZ6XRIXG.js.map} +0 -0
  1171. /package/dist/{chunk-JBQXHR3O.js.map → chunk-KAJXOGQ2.js.map} +0 -0
  1172. /package/dist/{chunk-ZN22VDFS.js.map → chunk-KAUW3OFC.js.map} +0 -0
  1173. /package/dist/{chunk-6ZX3Q4X7.js.map → chunk-KDDHMKTU.js.map} +0 -0
  1174. /package/dist/{chunk-3PRPX5L7.js.map → chunk-KFHW5TCM.js.map} +0 -0
  1175. /package/dist/{chunk-CTZY7QMT.js.map → chunk-KG7WIVNG.js.map} +0 -0
  1176. /package/dist/{chunk-6THXOWAP.js.map → chunk-LBIF6FJY.js.map} +0 -0
  1177. /package/dist/{chunk-V3YJ3BTV.js.map → chunk-LXV2U4MI.js.map} +0 -0
  1178. /package/dist/{chunk-ZYWER6HE.js.map → chunk-M7FP7DKN.js.map} +0 -0
  1179. /package/dist/{chunk-NT4KXGNJ.js.map → chunk-MFAFGQ7Z.js.map} +0 -0
  1180. /package/dist/{chunk-KE2YPOO2.js.map → chunk-MHRFRSQ6.js.map} +0 -0
  1181. /package/dist/{chunk-N64IH7FU.js.map → chunk-MM6CCIL7.js.map} +0 -0
  1182. /package/dist/{chunk-GTV62WIS.js.map → chunk-MQZXGTGI.js.map} +0 -0
  1183. /package/dist/{chunk-BLXFCH3B.js.map → chunk-MWJNFGV6.js.map} +0 -0
  1184. /package/dist/{chunk-SFG42QU6.js.map → chunk-NNNMTRGI.js.map} +0 -0
  1185. /package/dist/{chunk-RD63FPG6.js.map → chunk-NQF5U6FX.js.map} +0 -0
  1186. /package/dist/{chunk-JE3RHIQE.js.map → chunk-NRMJWNX3.js.map} +0 -0
  1187. /package/dist/{chunk-HWZZ2TYO.js.map → chunk-OROWRGRJ.js.map} +0 -0
  1188. /package/dist/{chunk-VWOKRMUG.js.map → chunk-OTGHCGLW.js.map} +0 -0
  1189. /package/dist/{chunk-XMLYBQ3R.js.map → chunk-OWJGBIQ2.js.map} +0 -0
  1190. /package/dist/{chunk-6LU64W5J.js.map → chunk-OYYAR5TD.js.map} +0 -0
  1191. /package/dist/{chunk-UWNTAWFF.js.map → chunk-PAU4VS7H.js.map} +0 -0
  1192. /package/dist/{chunk-ZHHRXHWD.js.map → chunk-PEGRQV66.js.map} +0 -0
  1193. /package/dist/{chunk-IW4JBXYF.js.map → chunk-PQN4PIC6.js.map} +0 -0
  1194. /package/dist/{chunk-L54IDADW.js.map → chunk-PTGC7CVG.js.map} +0 -0
  1195. /package/dist/{chunk-H23ZPEIQ.js.map → chunk-RAO7FTMY.js.map} +0 -0
  1196. /package/dist/{chunk-CXRP4X3D.js.map → chunk-RGSSKOTZ.js.map} +0 -0
  1197. /package/dist/{chunk-HHQYP6RM.js.map → chunk-RM5T4MA6.js.map} +0 -0
  1198. /package/dist/{chunk-YD5ZAA56.js.map → chunk-RP2PU3CA.js.map} +0 -0
  1199. /package/dist/{chunk-LIYXELOX.js.map → chunk-RSKU45CU.js.map} +0 -0
  1200. /package/dist/{chunk-JRX25GPP.js.map → chunk-S4JAHRIW.js.map} +0 -0
  1201. /package/dist/{chunk-X3QG3PKT.js.map → chunk-S6KZ4GDL.js.map} +0 -0
  1202. /package/dist/{chunk-72ORDZYV.js.map → chunk-SA6XZ3FP.js.map} +0 -0
  1203. /package/dist/{chunk-FR3M23HS.js.map → chunk-SBSFCKOC.js.map} +0 -0
  1204. /package/dist/{chunk-MZPS46OR.js.map → chunk-SIKCVWM3.js.map} +0 -0
  1205. /package/dist/{chunk-D4GOSMER.js.map → chunk-SPQHISWX.js.map} +0 -0
  1206. /package/dist/{chunk-PGRN62MU.js.map → chunk-SQVT243W.js.map} +0 -0
  1207. /package/dist/{chunk-NZSOGF3W.js.map → chunk-T267DS5U.js.map} +0 -0
  1208. /package/dist/{chunk-SM3RFN3C.js.map → chunk-TFN7L5H3.js.map} +0 -0
  1209. /package/dist/{chunk-IPMOG2RC.js.map → chunk-U4CYQMG5.js.map} +0 -0
  1210. /package/dist/{chunk-FQTMVJEO.js.map → chunk-UMQCYEAL.js.map} +0 -0
  1211. /package/dist/{chunk-RCNCHRMS.js.map → chunk-UQKDP46G.js.map} +0 -0
  1212. /package/dist/{chunk-532FZFV2.js.map → chunk-UT4OM34H.js.map} +0 -0
  1213. /package/dist/{chunk-P7WISPGE.js.map → chunk-UVVOG5A7.js.map} +0 -0
  1214. /package/dist/{chunk-UI5JOOIW.js.map → chunk-UZGZS35I.js.map} +0 -0
  1215. /package/dist/{chunk-LTXL475T.js.map → chunk-VPHHCOYS.js.map} +0 -0
  1216. /package/dist/{chunk-RJ675DP3.js.map → chunk-W3PJ7V4W.js.map} +0 -0
  1217. /package/dist/{chunk-VVQZ4MIX.js.map → chunk-W7BORINM.js.map} +0 -0
  1218. /package/dist/{chunk-SBO3MOWQ.js.map → chunk-WI3TCYEA.js.map} +0 -0
  1219. /package/dist/{chunk-UBTGSMWE.js.map → chunk-WM6JHUPY.js.map} +0 -0
  1220. /package/dist/{chunk-KDQWUSG4.js.map → chunk-WQQ7SH3M.js.map} +0 -0
  1221. /package/dist/{chunk-5CXLLV7A.js.map → chunk-WTODFKZR.js.map} +0 -0
  1222. /package/dist/{chunk-5XRUOJOO.js.map → chunk-XBMZNFN7.js.map} +0 -0
  1223. /package/dist/{chunk-FQLY6JHV.js.map → chunk-XHW24Q5Q.js.map} +0 -0
  1224. /package/dist/{chunk-FUC6WHQM.js.map → chunk-XMHTLWWE.js.map} +0 -0
  1225. /package/dist/{chunk-3LH5ANM4.js.map → chunk-XXS6SUVM.js.map} +0 -0
  1226. /package/dist/{chunk-CW2RHRH5.js.map → chunk-Y3ESEQRI.js.map} +0 -0
  1227. /package/dist/{chunk-YQIURUEL.js.map → chunk-YAX5CGUY.js.map} +0 -0
  1228. /package/dist/{chunk-AYZICIKF.js.map → chunk-Z4BU2JVK.js.map} +0 -0
  1229. /package/dist/{chunk-MFUZ5DBT.js.map → chunk-ZCN2XUPQ.js.map} +0 -0
  1230. /package/dist/{chunk-C4PD5NES.js.map → chunk-ZI7CLQB5.js.map} +0 -0
  1231. /package/dist/{chunk-OQ4PTNNH.js.map → chunk-ZJOXRK2G.js.map} +0 -0
  1232. /package/dist/{chunk-AIOKWGMO.js.map → chunk-ZPF253G5.js.map} +0 -0
  1233. /package/dist/{chunk-66O7GGOB.js.map → chunk-ZPHHJPDG.js.map} +0 -0
  1234. /package/dist/{claim-E3VMPNOA.js.map → claim-NM5T33W6.js.map} +0 -0
  1235. /package/dist/{client-IILD75KL.js.map → client-SZ4N5NCP.js.map} +0 -0
  1236. /package/dist/{code-OWFBQYZS.js.map → code-RZXUOVH3.js.map} +0 -0
  1237. /package/dist/{companies-QLJDMR4I.js.map → companies-VBNBS6LR.js.map} +0 -0
  1238. /package/dist/{company-PXTBJJ3S.js.map → company-3KOV3TJT.js.map} +0 -0
  1239. /package/dist/{complete-G6HV7C35.js.map → complete-TVY4F5YX.js.map} +0 -0
  1240. /package/dist/{config-JPA4ZHN2.js.map → config-7RX352G2.js.map} +0 -0
  1241. /package/dist/{connect-CPXBAHGN.js.map → connect-W6H3DT2C.js.map} +0 -0
  1242. /package/dist/{content-SOGZTYNO.js.map → content-BOERUNX4.js.map} +0 -0
  1243. /package/dist/{conversation-4DTR72EP.js.map → conversation-LCGWNPUG.js.map} +0 -0
  1244. /package/dist/{conversion-report-ABOKPW3U.js.map → conversion-report-GK2FUT2R.js.map} +0 -0
  1245. /package/dist/{conversion-upload-command-6AACG4M4.js.map → conversion-upload-command-Q7LZFFZL.js.map} +0 -0
  1246. /package/dist/{conversion-writes-2HEJ5SYB.js.map → conversion-writes-STESFLTB.js.map} +0 -0
  1247. /package/dist/{conversions-QIOEYCTC.js.map → conversions-D2RPIL3I.js.map} +0 -0
  1248. /package/dist/{conversions-UNYDKOB3.js.map → conversions-JBRU7CGB.js.map} +0 -0
  1249. /package/dist/{copy-writes-RF7MUAWA.js.map → copy-writes-PVWZEU4S.js.map} +0 -0
  1250. /package/dist/{countries-4XNZESRQ.js.map → countries-Z4IQIMWQ.js.map} +0 -0
  1251. /package/dist/{create-23ASG5LC.js.map → create-DHIXUD4Q.js.map} +0 -0
  1252. /package/dist/{create-3TCFE7K5.js.map → create-OW2BLTBE.js.map} +0 -0
  1253. /package/dist/{create-YKAVNBVZ.js.map → create-TYG5SAQE.js.map} +0 -0
  1254. /package/dist/{create-SASK6SVG.js.map → create-XGDJKMDB.js.map} +0 -0
  1255. /package/dist/{creatives-HUCADOCQ.js.map → creatives-3ZPFUAKL.js.map} +0 -0
  1256. /package/dist/{creatives-OLTNYQ3S.js.map → creatives-PN6EQYVU.js.map} +0 -0
  1257. /package/dist/{credentials-TR2ALV5Y.js.map → credentials-AVRHDGM5.js.map} +0 -0
  1258. /package/dist/{critique-OC7DOMSC.js.map → critique-76EMERXI.js.map} +0 -0
  1259. /package/dist/{critique-HTQQZRI7.js.map → critique-SZSKQYUL.js.map} +0 -0
  1260. /package/dist/{crm-Y66JWDMN.js.map → crm-4O65STFF.js.map} +0 -0
  1261. /package/dist/{crm-Q4QTSEQF.js.map → crm-JMIIB55O.js.map} +0 -0
  1262. /package/dist/{crop-L3ALN7OW.js.map → crop-JRVHX3PX.js.map} +0 -0
  1263. /package/dist/{currency-CTZT5LYI.js.map → currency-HQW6FJS5.js.map} +0 -0
  1264. /package/dist/{customers-BGRY3D6Q.js.map → customers-GV3AD6B6.js.map} +0 -0
  1265. /package/dist/{decide-LE7542FR.js.map → decide-MPNAZFAK.js.map} +0 -0
  1266. /package/dist/{delete-TW5C6KGR.js.map → delete-CJGW5MKC.js.map} +0 -0
  1267. /package/dist/{delete-35NTMQY5.js.map → delete-FWPYWUNU.js.map} +0 -0
  1268. /package/dist/{delete-BGTXQRZM.js.map → delete-ISAOQTI5.js.map} +0 -0
  1269. /package/dist/{delete-HJZYARS4.js.map → delete-JPSIBQXR.js.map} +0 -0
  1270. /package/dist/{delete-CL3N2FD6.js.map → delete-RLLRUSGR.js.map} +0 -0
  1271. /package/dist/{delete-J4CAABB6.js.map → delete-WFF5EVIL.js.map} +0 -0
  1272. /package/dist/{demographics-D563ESMR.js.map → demographics-XSMD6KI4.js.map} +0 -0
  1273. /package/dist/{describe-PP7D2RE5.js.map → describe-OUYPLJJE.js.map} +0 -0
  1274. /package/dist/{describe-VXQA5AHV.js.map → describe-XQGFIM2Z.js.map} +0 -0
  1275. /package/dist/{dimensions-WUQGLVX6.js.map → dimensions-MMVCXOFJ.js.map} +0 -0
  1276. /package/dist/{discard-K3Z3QTTZ.js.map → discard-B5QMX35Q.js.map} +0 -0
  1277. /package/dist/{discover-2A4MEOTK.js.map → discover-DLGO3VW6.js.map} +0 -0
  1278. /package/dist/{discover-PDVS3ITO.js.map → discover-Z6NS3BP6.js.map} +0 -0
  1279. /package/dist/{domain-XLWTTMU3.js.map → domain-WA4HAHCE.js.map} +0 -0
  1280. /package/dist/{download-FZJLCOSU.js.map → download-3JW2NTQZ.js.map} +0 -0
  1281. /package/dist/{download-R4WCZVKX.js.map → download-67IB5DPC.js.map} +0 -0
  1282. /package/dist/{draft-WCAPGXNE.js.map → draft-4MKYX4VU.js.map} +0 -0
  1283. /package/dist/{draft-QC5U3HH7.js.map → draft-DSWC37IW.js.map} +0 -0
  1284. /package/dist/{draft-RBWJ2KMU.js.map → draft-I7HIRQ6F.js.map} +0 -0
  1285. /package/dist/{draft-4HU72A2M.js.map → draft-KWXV5YOG.js.map} +0 -0
  1286. /package/dist/{draft-BDGZ4KD2.js.map → draft-NXGJ3DD4.js.map} +0 -0
  1287. /package/dist/{draft-4LQYKYES.js.map → draft-P73N5PT4.js.map} +0 -0
  1288. /package/dist/{draft-J3ZLBKSO.js.map → draft-QAPMXYBR.js.map} +0 -0
  1289. /package/dist/{draft-QK7WP6KI.js.map → draft-UMNPM5KA.js.map} +0 -0
  1290. /package/dist/{env-KCFPWDRZ.js.map → env-O2JJK34F.js.map} +0 -0
  1291. /package/dist/{experiment-55H6NBF4.js.map → experiment-2TTMKPVC.js.map} +0 -0
  1292. /package/dist/{experiments-TMODWKCS.js.map → experiments-YEI3HSBU.js.map} +0 -0
  1293. /package/dist/{export-JSQ62QLT.js.map → export-LRPJXAFA.js.map} +0 -0
  1294. /package/dist/{facets-3Y65YKG5.js.map → facets-EQLEOMDT.js.map} +0 -0
  1295. /package/dist/{favorites-PZIXDJTK.js.map → favorites-UXNAI5XW.js.map} +0 -0
  1296. /package/dist/{feed-GTJWBM3A.js.map → feed-OTUTIGJ6.js.map} +0 -0
  1297. /package/dist/{feedback-R6WPR37D.js.map → feedback-JNSHN7DE.js.map} +0 -0
  1298. /package/dist/{feedback-record-Y5BRNVIA.js.map → feedback-record-JV43NSJI.js.map} +0 -0
  1299. /package/dist/{fetch-DH3FYWNG.js.map → fetch-AG7JJ4BI.js.map} +0 -0
  1300. /package/dist/{fetch-LRYGBGF6.js.map → fetch-O4EYJVMN.js.map} +0 -0
  1301. /package/dist/{find-Q6YSXK5B.js.map → find-JH5OMTGJ.js.map} +0 -0
  1302. /package/dist/{fit-TWZLNDRE.js.map → fit-7N7AHYQF.js.map} +0 -0
  1303. /package/dist/{flows-KXICZCG7.js.map → flows-DTZGIGZS.js.map} +0 -0
  1304. /package/dist/{follow-B5LYKQYZ.js.map → follow-WHLTIJPM.js.map} +0 -0
  1305. /package/dist/{follow-competitors-7NHOQPC6.js.map → follow-competitors-DO7RVQXT.js.map} +0 -0
  1306. /package/dist/{following-2M4SVFML.js.map → following-ZL34FZ32.js.map} +0 -0
  1307. /package/dist/{fonts-GPCFB77E.js.map → fonts-TYDQXRIU.js.map} +0 -0
  1308. /package/dist/{forecast-Q2VWQYXH.js.map → forecast-AODSMD7S.js.map} +0 -0
  1309. /package/dist/{forecast-GJOJBT66.js.map → forecast-VO7XY46L.js.map} +0 -0
  1310. /package/dist/{funding-7KPXTSSF.js.map → funding-55XBHYY6.js.map} +0 -0
  1311. /package/dist/{funnel-DTJNGHJ7.js.map → funnel-CV4DZXUS.js.map} +0 -0
  1312. /package/dist/{ga4-IHDHHB4A.js.map → ga4-WIOBF5HW.js.map} +0 -0
  1313. /package/dist/{generate-LR4TZ635.js.map → generate-HSDSCKDW.js.map} +0 -0
  1314. /package/dist/{get-5LL6Z5NR.js.map → get-4S4XRZ2J.js.map} +0 -0
  1315. /package/dist/{get-B3B6FRQ2.js.map → get-FDZZEB5R.js.map} +0 -0
  1316. /package/dist/{get-L643OWL6.js.map → get-IGXC3JQ5.js.map} +0 -0
  1317. /package/dist/{get-X7CWNYQT.js.map → get-P5Z274DM.js.map} +0 -0
  1318. /package/dist/{get-BLLJDQK7.js.map → get-QA333Q5J.js.map} +0 -0
  1319. /package/dist/{get-UOSUCNQL.js.map → get-TXVHONYI.js.map} +0 -0
  1320. /package/dist/{get-B4DL3RSO.js.map → get-WEWFUNWZ.js.map} +0 -0
  1321. /package/dist/{get-EBGMLBMQ.js.map → get-Z46N7LBR.js.map} +0 -0
  1322. /package/dist/{google-63IGLMTD.js.map → google-DPBZJ3TV.js.map} +0 -0
  1323. /package/dist/{google-ads-FZP75XOY.js.map → google-ads-EPFX2NA4.js.map} +0 -0
  1324. /package/dist/{group-B7MU5SKI.js.map → group-6ENUPDYO.js.map} +0 -0
  1325. /package/dist/{group-WU4LKKX7.js.map → group-EYF34B3P.js.map} +0 -0
  1326. /package/dist/{gsc-TP5PZHZG.js.map → gsc-KDE2DTH2.js.map} +0 -0
  1327. /package/dist/{history-P7EZPAMT.js.map → history-7UJW5TRO.js.map} +0 -0
  1328. /package/dist/{history-K7DLRT7S.js.map → history-JCLXT3AO.js.map} +0 -0
  1329. /package/dist/{history-RZ5ZPPYD.js.map → history-SHQVK5I7.js.map} +0 -0
  1330. /package/dist/{hubspot-GXPNTPXH.js.map → hubspot-J6372OWH.js.map} +0 -0
  1331. /package/dist/{icon-6BMRXD4X.js.map → icon-N77IGSXP.js.map} +0 -0
  1332. /package/dist/{ideas-TQGXXWNX.js.map → ideas-TKMMQ557.js.map} +0 -0
  1333. /package/dist/{images-KWYSLR3Q.js.map → images-J7LJETPR.js.map} +0 -0
  1334. /package/dist/{improve-IX6E7OYO.js.map → improve-BKFZOBXI.js.map} +0 -0
  1335. /package/dist/{ingest-LPIQYOC2.js.map → ingest-LVAH5OF5.js.map} +0 -0
  1336. /package/dist/{ingest-MAWKAVR2.js.map → ingest-UBP7TEXU.js.map} +0 -0
  1337. /package/dist/{insights-NYWJYDS6.js.map → insights-UMPXHRKD.js.map} +0 -0
  1338. /package/dist/{inspect-BDRWXLXE.js.map → inspect-22G3OPFK.js.map} +0 -0
  1339. /package/dist/{inspiration-3EXSU5HR.js.map → inspiration-SQUEBO2K.js.map} +0 -0
  1340. /package/dist/{intent-42QMV4N5.js.map → intent-NBP5IDND.js.map} +0 -0
  1341. /package/dist/{job-LE5AG6HJ.js.map → job-B6UEZLTA.js.map} +0 -0
  1342. /package/dist/{job-create-QKYEPYNE.js.map → job-create-WM27NOGZ.js.map} +0 -0
  1343. /package/dist/{job-status-OG7S2LFM.js.map → job-status-6V7DVVYL.js.map} +0 -0
  1344. /package/dist/{keep-WG3T4MKZ.js.map → keep-ACLZB7KL.js.map} +0 -0
  1345. /package/dist/{keyword-gap-57UOL233.js.map → keyword-gap-67UJ2LDD.js.map} +0 -0
  1346. /package/dist/{keyword-metrics-ZE27BDSD.js.map → keyword-metrics-QP5ZNOC6.js.map} +0 -0
  1347. /package/dist/{keywords-for-site-E4L5FEOZ.js.map → keywords-for-site-QTE332T7.js.map} +0 -0
  1348. /package/dist/{knowledge-IIWKDS45.js.map → knowledge-5VEMAHG7.js.map} +0 -0
  1349. /package/dist/{landing-S7L2JT7T.js.map → landing-TOYYCWFX.js.map} +0 -0
  1350. /package/dist/{landings-2CNV325Q.js.map → landings-Q7T2HSYK.js.map} +0 -0
  1351. /package/dist/{languages-5LHOEANO.js.map → languages-HWMPAPQN.js.map} +0 -0
  1352. /package/dist/{languages-7AYGAQ5R.js.map → languages-TM7SHGRO.js.map} +0 -0
  1353. /package/dist/{launches-EWT3LHCQ.js.map → launches-4HI65M3C.js.map} +0 -0
  1354. /package/dist/{layerize-QXALSA7Q.js.map → layerize-HXML3KQX.js.map} +0 -0
  1355. /package/dist/{lead-routes-FAG5FOZK.js.map → lead-routes-Q2T3RQXN.js.map} +0 -0
  1356. /package/dist/{leads-37USR6KI.js.map → leads-FTWBDLBQ.js.map} +0 -0
  1357. /package/dist/{learn-23DQ72LC.js.map → learn-3N7M3UHA.js.map} +0 -0
  1358. /package/dist/{library-5XZP2W22.js.map → library-OVX3OUYV.js.map} +0 -0
  1359. /package/dist/{lighthouse-KAMY3KYG.js.map → lighthouse-2TDPDU7J.js.map} +0 -0
  1360. /package/dist/{line-item-writes-2WYNROS7.js.map → line-item-writes-VFPXT4W6.js.map} +0 -0
  1361. /package/dist/{line-items-RL7T3Q5Q.js.map → line-items-HB2N7RKO.js.map} +0 -0
  1362. /package/dist/{link-OQSTKOOH.js.map → link-KAY6VYFH.js.map} +0 -0
  1363. /package/dist/{linkedin-KP6ZMWEG.js.map → linkedin-CDSEMSCF.js.map} +0 -0
  1364. /package/dist/{linkedin-person-7EMQIMT7.js.map → linkedin-person-HR6HKFUU.js.map} +0 -0
  1365. /package/dist/{list-SRY3XZOE.js.map → list-AAQISQHE.js.map} +0 -0
  1366. /package/dist/{list-6J7RPP4F.js.map → list-INU27RQJ.js.map} +0 -0
  1367. /package/dist/{list-F5P3KZNF.js.map → list-QWCU77C3.js.map} +0 -0
  1368. /package/dist/{list-AZEHYDU7.js.map → list-QYUU66YV.js.map} +0 -0
  1369. /package/dist/{list-PBGDATAC.js.map → list-SDHECXK5.js.map} +0 -0
  1370. /package/dist/{list-AL2HOLWI.js.map → list-U3ZABSGW.js.map} +0 -0
  1371. /package/dist/{list-GHV6665E.js.map → list-UF7Y4FDE.js.map} +0 -0
  1372. /package/dist/{list-XXNAKZGF.js.map → list-VJ3CVEDW.js.map} +0 -0
  1373. /package/dist/{list-4VJY4BCV.js.map → list-VO473W6E.js.map} +0 -0
  1374. /package/dist/{locations-DXTRXR4N.js.map → locations-HAXZUHJP.js.map} +0 -0
  1375. /package/dist/{locations-LRDYJ43Z.js.map → locations-JFBM4XBL.js.map} +0 -0
  1376. /package/dist/{log-KNVINDDV.js.map → log-AUN4NOPP.js.map} +0 -0
  1377. /package/dist/{logo-DBIXKWDV.js.map → logo-2NDZ2EVN.js.map} +0 -0
  1378. /package/dist/{lookup-CNAZI7WN.js.map → lookup-UFVB2ZZF.js.map} +0 -0
  1379. /package/dist/{make-WHI2U6TV.js.map → make-B5HDRFCX.js.map} +0 -0
  1380. /package/dist/{map-YODJNTXD.js.map → map-CCBSITK7.js.map} +0 -0
  1381. /package/dist/{mcp-UCM35H3L.js.map → mcp-45YWYNYM.js.map} +0 -0
  1382. /package/dist/{media-JESBPCT4.js.map → media-3M3PVSEZ.js.map} +0 -0
  1383. /package/dist/{media-7UAKHZZT.js.map → media-5XRMDMKD.js.map} +0 -0
  1384. /package/dist/{media-sources-BOPQHX2H.js.map → media-sources-N7MBY3GE.js.map} +0 -0
  1385. /package/dist/{members-SQ5CYHJX.js.map → members-2P2QCBJO.js.map} +0 -0
  1386. /package/dist/{meme-QC4B2UOE.js.map → meme-EOAFE4FS.js.map} +0 -0
  1387. /package/dist/{meta-RKKGFD2Q.js.map → meta-CTKXBVXT.js.map} +0 -0
  1388. /package/dist/{metrics-A52UDO7T.js.map → metrics-XWHE4LYQ.js.map} +0 -0
  1389. /package/dist/{models-6N3BB77L.js.map → models-3C6BWHEC.js.map} +0 -0
  1390. /package/dist/{normalize-ALERW32M.js.map → normalize-MLRJ6IYU.js.map} +0 -0
  1391. /package/dist/{normalize-TGEEW5J4.js.map → normalize-NDBXU6UO.js.map} +0 -0
  1392. /package/dist/{options-YHKD2OAJ.js.map → options-6QAJ67XB.js.map} +0 -0
  1393. /package/dist/{organization-WERAMD2V.js.map → organization-P5LAMNMT.js.map} +0 -0
  1394. /package/dist/{output-LTK2VAI2.js.map → output-KIQWBKKA.js.map} +0 -0
  1395. /package/dist/{page-O7HY2KDR.js.map → page-GGT3KZ5E.js.map} +0 -0
  1396. /package/dist/{page-photos-IIBLD2M4.js.map → page-photos-FKWHLNWM.js.map} +0 -0
  1397. /package/dist/{performance-NG24WWKY.js.map → performance-3PH7UYQN.js.map} +0 -0
  1398. /package/dist/{performance-C35V2HKD.js.map → performance-6BMFU6IJ.js.map} +0 -0
  1399. /package/dist/{pixels-XXBXR2V6.js.map → pixels-PMPL63ON.js.map} +0 -0
  1400. /package/dist/{plan-XJX4BAFS.js.map → plan-223DL4HG.js.map} +0 -0
  1401. /package/dist/{posts-QEJH7VY4.js.map → posts-YPW4NHWM.js.map} +0 -0
  1402. /package/dist/{preview-KMBPUIKX.js.map → preview-CD2QADBJ.js.map} +0 -0
  1403. /package/dist/{profile-HH657NFJ.js.map → profile-7KUWZTJR.js.map} +0 -0
  1404. /package/dist/{promoted-tweet-writes-Y4F3CAFN.js.map → promoted-tweet-writes-EPXZFIUP.js.map} +0 -0
  1405. /package/dist/{promoted-tweets-NDH4WRMU.js.map → promoted-tweets-Q46HUYN6.js.map} +0 -0
  1406. /package/dist/{properties-2BEJQW4Y.js.map → properties-LCZX4UJH.js.map} +0 -0
  1407. /package/dist/{publish-ZSBU22A6.js.map → publish-DHDRUTXM.js.map} +0 -0
  1408. /package/dist/{query-ACPWBVYY.js.map → query-IR3LCFON.js.map} +0 -0
  1409. /package/dist/{query-SMIKGUVW.js.map → query-RKJS3QOS.js.map} +0 -0
  1410. /package/dist/{query-CBSXU3D6.js.map → query-WX3K7ZDY.js.map} +0 -0
  1411. /package/dist/{questionnaire-3WSXQF24.js.map → questionnaire-CCDUSEI3.js.map} +0 -0
  1412. /package/dist/{read-HZC3NDNN.js.map → read-JTJQSEVB.js.map} +0 -0
  1413. /package/dist/{reddit-VGQJ5DWZ.js.map → reddit-2FQOS3B3.js.map} +0 -0
  1414. /package/dist/{refresh-I5A3NECZ.js.map → refresh-H4DETVS5.js.map} +0 -0
  1415. /package/dist/{refresh-UQ4R2OAO.js.map → refresh-VJPKAPJM.js.map} +0 -0
  1416. /package/dist/{release-QA2ORVMR.js.map → release-O233BAQA.js.map} +0 -0
  1417. /package/dist/{relevant-pages-X5BKPX2Z.js.map → relevant-pages-NPUSAV3K.js.map} +0 -0
  1418. /package/dist/{remove-2ZGE2W4H.js.map → remove-5FMNASGC.js.map} +0 -0
  1419. /package/dist/{remove-W44KVKX2.js.map → remove-HNSOYQVB.js.map} +0 -0
  1420. /package/dist/{reopen-66OCNU76.js.map → reopen-B7KHVN5X.js.map} +0 -0
  1421. /package/dist/{rerun-OUXGA2IC.js.map → rerun-KAB7AXTY.js.map} +0 -0
  1422. /package/dist/{research-4CO77ZDY.js.map → research-I4ZQ4YQ3.js.map} +0 -0
  1423. /package/dist/{research-KMDJE2UR.js.map → research-Z2SE775C.js.map} +0 -0
  1424. /package/dist/{reset-VIRLB7WH.js.map → reset-4T6XUNOO.js.map} +0 -0
  1425. /package/dist/{reset-VSPTKCIP.js.map → reset-YHEMD5N5.js.map} +0 -0
  1426. /package/dist/{resolve-3X75F7YR.js.map → resolve-5RJD2ELK.js.map} +0 -0
  1427. /package/dist/{retry-USOR5FLJ.js.map → retry-S3EC6FCA.js.map} +0 -0
  1428. /package/dist/{retry-SFLHBLLT.js.map → retry-WKYMY2KB.js.map} +0 -0
  1429. /package/dist/{retry-failed-2P7FOFXN.js.map → retry-failed-DSVEAY3T.js.map} +0 -0
  1430. /package/dist/{revenue-YJO5LJQX.js.map → revenue-C4E4PRLL.js.map} +0 -0
  1431. /package/dist/{rule-writes-EWHP53UU.js.map → rule-writes-XSNS3XYK.js.map} +0 -0
  1432. /package/dist/{rules-GVOTFQFK.js.map → rules-GHGEVCBQ.js.map} +0 -0
  1433. /package/dist/{rules-VOPVGGYY.js.map → rules-JGTKFXM3.js.map} +0 -0
  1434. /package/dist/{rules-add-CC4ACCSS.js.map → rules-add-3DTRLVGR.js.map} +0 -0
  1435. /package/dist/{run-WQH6WOKA.js.map → run-2TKYHCN2.js.map} +0 -0
  1436. /package/dist/{run-MDMDSMNK.js.map → run-TYJLOJW7.js.map} +0 -0
  1437. /package/dist/{scaffold-ad-ZIEQDGKR.js.map → scaffold-ad-RFRUPUKW.js.map} +0 -0
  1438. /package/dist/{scaffold-static-ad-PCZYRIKR.js.map → scaffold-static-ad-N5QCJFGP.js.map} +0 -0
  1439. /package/dist/{scaffold-video-53QXTSK2.js.map → scaffold-video-VAG3WN5W.js.map} +0 -0
  1440. /package/dist/{schedule-HJW5MV6M.js.map → schedule-6UYJLE5K.js.map} +0 -0
  1441. /package/dist/{schedule-UQZFDY2R.js.map → schedule-Z2AQXR7W.js.map} +0 -0
  1442. /package/dist/{scheduled-agents-HGCQPOSI.js.map → scheduled-agents-YEHJ4XIB.js.map} +0 -0
  1443. /package/dist/{schema-VNADOIC7.js.map → schema-BCCCNVNO.js.map} +0 -0
  1444. /package/dist/{schema-GHGIFDA5.js.map → schema-BDZA64GZ.js.map} +0 -0
  1445. /package/dist/{scrape-KJHI7ZGT.js.map → scrape-CTE5SNQN.js.map} +0 -0
  1446. /package/dist/{screenshot-R5WU2CP3.js.map → screenshot-ELJYTIM7.js.map} +0 -0
  1447. /package/dist/{search-4ZC63BDO.js.map → search-5B5AXN5V.js.map} +0 -0
  1448. /package/dist/{search-HU3BLSA5.js.map → search-7ELGWNMH.js.map} +0 -0
  1449. /package/dist/{search-KKAJLNGJ.js.map → search-J43ZG7W3.js.map} +0 -0
  1450. /package/dist/{search-Z4PXKQXY.js.map → search-KBIF5NZX.js.map} +0 -0
  1451. /package/dist/{search-ASEODLC6.js.map → search-OF6LTOK6.js.map} +0 -0
  1452. /package/dist/{search-YIS3DVFC.js.map → search-XO5UPSBF.js.map} +0 -0
  1453. /package/dist/{search-copy-TFHTB6R3.js.map → search-copy-DDRY6HPI.js.map} +0 -0
  1454. /package/dist/{seeds-SMIOGN5B.js.map → seeds-HH5E7GCS.js.map} +0 -0
  1455. /package/dist/{select-PDZUPAUK.js.map → select-I2UPGGZ5.js.map} +0 -0
  1456. /package/dist/{sequences-T5M7T6HY.js.map → sequences-V4STPHGV.js.map} +0 -0
  1457. /package/dist/{set-prompt-6KEYR56T.js.map → set-prompt-SU7YM7FW.js.map} +0 -0
  1458. /package/dist/{setup-links-ALKFPGLK.js.map → setup-links-VWK4MBI3.js.map} +0 -0
  1459. /package/dist/{shared-INNJML54.js.map → shared-P2PFNNJF.js.map} +0 -0
  1460. /package/dist/{shopify-XQ2XMPG4.js.map → shopify-6KNHPC4R.js.map} +0 -0
  1461. /package/dist/{site-GDBA47KZ.js.map → site-PHTJ5VI3.js.map} +0 -0
  1462. /package/dist/{sitemaps-JXHJMTLU.js.map → sitemaps-KMRWAKNK.js.map} +0 -0
  1463. /package/dist/{sites-UXBWI7WO.js.map → sites-3QZDCQRG.js.map} +0 -0
  1464. /package/dist/{skills-X5XTXI7E.js.map → skills-KV4X22KQ.js.map} +0 -0
  1465. /package/dist/{sources-FXELSMSA.js.map → sources-255OGK6K.js.map} +0 -0
  1466. /package/dist/{stale-GU4IAYSH.js.map → stale-KN2ZOJ5T.js.map} +0 -0
  1467. /package/dist/{stats-KWP52SMV.js.map → stats-3TAUG3Q3.js.map} +0 -0
  1468. /package/dist/{status-TMO67UTC.js.map → status-BJH7ODU4.js.map} +0 -0
  1469. /package/dist/{studies-C6XQBKI6.js.map → studies-A52C544C.js.map} +0 -0
  1470. /package/dist/{studio-HGMO77PU.js.map → studio-C2UVCTDD.js.map} +0 -0
  1471. /package/dist/{study-writes-XD4CWHMA.js.map → study-writes-3R4D6C3F.js.map} +0 -0
  1472. /package/dist/{suggest-EY4X3CGR.js.map → suggest-3CFMURUH.js.map} +0 -0
  1473. /package/dist/{sync-Y3OXWX3C.js.map → sync-H4XVXITS.js.map} +0 -0
  1474. /package/dist/{sync-PKJ5A4BI.js.map → sync-MIKA6IM6.js.map} +0 -0
  1475. /package/dist/{sync-KEWFMT6D.js.map → sync-TJ7MGFIE.js.map} +0 -0
  1476. /package/dist/{sync-definition-RDZPTA2Q.js.map → sync-definition-LO425HBD.js.map} +0 -0
  1477. /package/dist/{tag-OHLDMOIE.js.map → tag-6WIQLRDW.js.map} +0 -0
  1478. /package/dist/{tag-manager-45NZFX7I.js.map → tag-manager-KWITWX6Y.js.map} +0 -0
  1479. /package/dist/{tags-CP37ODLW.js.map → tags-DKSJ4E7E.js.map} +0 -0
  1480. /package/dist/{tags-CPQHAS25.js.map → tags-JEGCEFMZ.js.map} +0 -0
  1481. /package/dist/{tags-SOGILVIL.js.map → tags-MNHBZ7FH.js.map} +0 -0
  1482. /package/dist/{tags-FHRIXW7Q.js.map → tags-S5XY63D3.js.map} +0 -0
  1483. /package/dist/{tags-GYQKFHMA.js.map → tags-VVO3BT66.js.map} +0 -0
  1484. /package/dist/{targeting-WMQ5D3FI.js.map → targeting-II4CQUPW.js.map} +0 -0
  1485. /package/dist/{targeting-constants-25MFBDE2.js.map → targeting-constants-2EHTMIMX.js.map} +0 -0
  1486. /package/dist/{targeting-criteria-HV7NBKI3.js.map → targeting-criteria-BIIGZTLQ.js.map} +0 -0
  1487. /package/dist/{targets-3VSPGEY7.js.map → targets-SX3NMYQ3.js.map} +0 -0
  1488. /package/dist/{terms-IDRQZRWC.js.map → terms-URBA2IXT.js.map} +0 -0
  1489. /package/dist/{testimonials-ILMBPPLT.js.map → testimonials-U3KBI3VU.js.map} +0 -0
  1490. /package/dist/{themes-5YBSJEKZ.js.map → themes-32CUPT4M.js.map} +0 -0
  1491. /package/dist/{top-companies-P43VHHMU.js.map → top-companies-DFM4F2SE.js.map} +0 -0
  1492. /package/dist/{transcript-DIAZ2OU4.js.map → transcript-4BSUSOQ4.js.map} +0 -0
  1493. /package/dist/{translate-IFQFBJYY.js.map → translate-JE7CZJ26.js.map} +0 -0
  1494. /package/dist/{triggers-WULRME4T.js.map → triggers-SRI27OAP.js.map} +0 -0
  1495. /package/dist/{tweets-7LDBHP3Y.js.map → tweets-LECORASF.js.map} +0 -0
  1496. /package/dist/{unfollow-76PLUWRU.js.map → unfollow-DBV2F7YP.js.map} +0 -0
  1497. /package/dist/{unlink-DZH2GXFZ.js.map → unlink-U7HZ4CYW.js.map} +0 -0
  1498. /package/dist/{unstage-GKI2IQOY.js.map → unstage-JJGZJVHT.js.map} +0 -0
  1499. /package/dist/{unstage-PHH5WTTH.js.map → unstage-XCH4VBM2.js.map} +0 -0
  1500. /package/dist/{update-HBQCEZ47.js.map → update-JDFJPQ3O.js.map} +0 -0
  1501. /package/dist/{update-6I36ZCNL.js.map → update-JN75LN32.js.map} +0 -0
  1502. /package/dist/{update-VBFHKFFH.js.map → update-PU5LSQ7W.js.map} +0 -0
  1503. /package/dist/{update-RD374IU2.js.map → update-PUWD5HX4.js.map} +0 -0
  1504. /package/dist/{update-NN6ELVGG.js.map → update-R4EEEWT4.js.map} +0 -0
  1505. /package/dist/{upload-2OD3BTNT.js.map → upload-4CUPZI3X.js.map} +0 -0
  1506. /package/dist/{upload-HQVNSAQX.js.map → upload-B27ZJMMZ.js.map} +0 -0
  1507. /package/dist/{upscale-DRLDP2PM.js.map → upscale-QMBV3AGN.js.map} +0 -0
  1508. /package/dist/{url-options-KOL2WHJ3.js.map → url-options-P3UTLYUY.js.map} +0 -0
  1509. /package/dist/{url-params-YTY4TEMU.js.map → url-params-V7KQMWK3.js.map} +0 -0
  1510. /package/dist/{use-WKSR3Y2T.js.map → use-TBDI3OAN.js.map} +0 -0
  1511. /package/dist/{validate-KEYC2TPH.js.map → validate-6GRMJKZI.js.map} +0 -0
  1512. /package/dist/{variant-DMGNLXWH.js.map → variant-2A5GOOJF.js.map} +0 -0
  1513. /package/dist/{videos-76QPF2ZI.js.map → videos-6ZZ6LLTL.js.map} +0 -0
  1514. /package/dist/{view-O6PUTSFE.js.map → view-GNNIJGGN.js.map} +0 -0
  1515. /package/dist/{viewer-check-SUMQQQVA.js.map → viewer-check-B36TNSZI.js.map} +0 -0
  1516. /package/dist/{web-EKRCCW4A.js.map → web-H5CWLHRA.js.map} +0 -0
  1517. /package/dist/{winners-T4AWAVNU.js.map → winners-6CW4CWZI.js.map} +0 -0
  1518. /package/dist/{winning-ads-N4VTILRO.js.map → winning-ads-SHNXPIYB.js.map} +0 -0
  1519. /package/dist/{write-commands-6GIGWSF4.js.map → write-commands-3G5WDFH3.js.map} +0 -0
  1520. /package/dist/{write-commands-AD7DBJKY.js.map → write-commands-RI6UP4YG.js.map} +0 -0
  1521. /package/dist/{write-commands-HMMBM5OC.js.map → write-commands-TPPJHGMT.js.map} +0 -0
  1522. /package/dist/{write-commands-KYMBIZ7U.js.map → write-commands-UW5LKCAP.js.map} +0 -0
  1523. /package/dist/{x-3W5KUAMR.js.map → x-CI2XPNBR.js.map} +0 -0
@@ -1,1646 +0,0 @@
1
- import {
2
- googlePresetSyncedHint
3
- } from "./chunk-Y2FAUFWK.js";
4
- import {
5
- getFieldDescriptions
6
- } from "./chunk-JPK34QPS.js";
7
- import {
8
- LIST_FIELDS,
9
- duringLiteralExplanation,
10
- equivalentBetween,
11
- isDuringLiteral,
12
- listFieldGuidance,
13
- parseApiError
14
- } from "./chunk-SRQ7MXQQ.js";
15
- import {
16
- buildQueryCacheKey,
17
- cacheGet,
18
- cacheSet,
19
- getManagerIdForCustomer,
20
- getQueryTtl,
21
- resolveCustomerId,
22
- toCsvRow,
23
- writeAdsJson
24
- } from "./chunk-SBFNGJ4C.js";
25
- import {
26
- GOOGLE_ADS_QUERY_MAX_PAGE_SIZE
27
- } from "./chunk-TI4UL56R.js";
28
- import {
29
- ApiError,
30
- apiPost
31
- } from "./chunk-X6AHLUC7.js";
32
- import {
33
- registerSchema
34
- } from "./chunk-S6WPMD3V.js";
35
-
36
- // src/commands/ads/google/query.ts
37
- import { appendFileSync, existsSync, readFileSync, writeFileSync } from "fs";
38
- import { resolve } from "path";
39
- import { defineCommand } from "citty";
40
-
41
- // src/commands/ads/google/presets.ts
42
- var BETWEEN_RE = /^BETWEEN\s+'[0-9]{4}-[0-9]{2}-[0-9]{2}'\s+AND\s+'[0-9]{4}-[0-9]{2}-[0-9]{2}'$/i;
43
- function isValidDateRange(value) {
44
- const trimmed = value.trim();
45
- return isDuringLiteral(trimmed) || BETWEEN_RE.test(trimmed);
46
- }
47
- function dateRangeError(dateRange, now) {
48
- if (/^[A-Za-z0-9_]+$/.test(dateRange.trim())) {
49
- return `Invalid date range: "${dateRange}". ${duringLiteralExplanation(dateRange, equivalentBetween(dateRange, now))} Pass it as --date-range "BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'".`;
50
- }
51
- return `Invalid date range: "${dateRange}". Use a GAQL date literal (e.g. LAST_30_DAYS, TODAY) or BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'.`;
52
- }
53
- var SERVING_CHAINS = {
54
- keyword_view: ["campaign.status", "ad_group.status", "ad_group_criterion.status"],
55
- ad_group_criterion: ["campaign.status", "ad_group.status", "ad_group_criterion.status"],
56
- ad_group_ad: ["campaign.status", "ad_group.status", "ad_group_ad.status"],
57
- search_term_view: ["campaign.status", "ad_group.status"],
58
- ad_group: ["campaign.status", "ad_group.status"],
59
- asset_group: ["campaign.status", "asset_group.status"],
60
- // An asset link carries its own status, and it is not the campaign's, the ad group's or the asset
61
- // group's. Google returns a REMOVED link like any other row, so a read scoped only to its owners
62
- // lists extensions that are no longer attached to anything — which is what 74 detaches were planned
63
- // from on a live account, every one of them refused at publish as `RESOURCE_NOT_FOUND`.
64
- // `customer_asset` is deliberately absent: one rung, no ancestor to forget.
65
- asset_group_asset: ["campaign.status", "asset_group.status", "asset_group_asset.status"],
66
- campaign_asset: ["campaign.status", "campaign_asset.status"],
67
- ad_group_asset: ["campaign.status", "ad_group.status", "ad_group_asset.status"]
68
- };
69
- var CORE_PRESETS = [
70
- {
71
- name: "campaign-performance",
72
- description: "Campaign-level metrics overview",
73
- gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, campaign.advertising_channel_type, campaign.bidding_strategy_type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.all_conversions, metrics.conversions_value, metrics.ctr, metrics.average_cpc FROM campaign WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC`,
74
- defaultDateRange: "LAST_30_DAYS",
75
- defaultLimit: 200,
76
- statusFields: ["campaign.status"]
77
- },
78
- {
79
- name: "budget-limited",
80
- 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",
81
- 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`,
82
- defaultDateRange: "LAST_30_DAYS",
83
- defaultLimit: 200,
84
- statusFields: ["campaign.status"]
85
- },
86
- {
87
- name: "conversions-by-action",
88
- 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",
89
- 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`,
90
- defaultDateRange: "LAST_30_DAYS",
91
- defaultLimit: 200,
92
- statusFields: ["campaign.status"]
93
- },
94
- {
95
- name: "keyword-analysis",
96
- description: "Keyword performance with match type, quality and the first-page, top-of-page and first-position CPC estimates",
97
- 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, ad_group_criterion.position_estimates.first_page_cpc_micros, ad_group_criterion.position_estimates.top_of_page_cpc_micros, ad_group_criterion.position_estimates.first_position_cpc_micros, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.all_conversions, metrics.ctr FROM keyword_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC`,
98
- defaultDateRange: "LAST_30_DAYS",
99
- defaultLimit: 200,
100
- statusFields: ["campaign.status", "ad_group.status", "ad_group_criterion.status"]
101
- },
102
- {
103
- name: "keyword-serving",
104
- 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",
105
- 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`,
106
- defaultDateRange: "ALL_TIME",
107
- defaultLimit: 500,
108
- statusFields: ["campaign.status", "ad_group.status", "ad_group_criterion.status"]
109
- },
110
- {
111
- name: "positive-keywords",
112
- description: "Positive (targeting) keywords only \u2014 excludes negatives",
113
- 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`,
114
- defaultDateRange: "ALL_TIME",
115
- defaultLimit: 500,
116
- statusFields: ["campaign.status", "ad_group.status", "ad_group_criterion.status"]
117
- },
118
- {
119
- name: "negative-keywords",
120
- description: "Negative keywords only \u2014 campaign and ad group level",
121
- 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`,
122
- defaultDateRange: "ALL_TIME",
123
- defaultLimit: 500
124
- },
125
- {
126
- name: "negative-keyword-lists",
127
- 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",
128
- 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`,
129
- defaultDateRange: "ALL_TIME",
130
- defaultLimit: 500
131
- },
132
- {
133
- name: "negative-list-attachments",
134
- description: "Which campaigns each shared negative keyword list is attached to",
135
- 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`,
136
- defaultDateRange: "ALL_TIME",
137
- defaultLimit: 500
138
- },
139
- {
140
- name: "search-terms",
141
- description: "Actual user search queries triggering ads, with the match type that matched them",
142
- gaqlTemplate: `SELECT campaign.id, campaign.name, campaign.status, ad_group.name, ad_group.status, search_term_view.search_term, segments.search_term_match_type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM search_term_view WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC`,
143
- defaultDateRange: "LAST_7_DAYS",
144
- defaultLimit: 200,
145
- statusFields: ["campaign.status", "ad_group.status"]
146
- },
147
- {
148
- name: "ad-copy-performance",
149
- description: "Every ad's metrics, with its headlines and descriptions when it is a responsive search ad",
150
- 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.ad.type, 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.cost_micros, metrics.conversions, metrics.all_conversions, metrics.ctr FROM ad_group_ad WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.impressions DESC`,
151
- defaultDateRange: "LAST_30_DAYS",
152
- defaultLimit: 200,
153
- statusFields: ["campaign.status", "ad_group.status", "ad_group_ad.status"]
154
- },
155
- {
156
- name: "asset-performance",
157
- // `asset_group_asset.performance_label` is gone (v25 answers UNRECOGNIZED_FIELD): Google retired
158
- // the BEST/GOOD/LOW label, so the read is each asset's serving status and its own metrics.
159
- description: "Performance Max assets: serving status and metrics per asset",
160
- 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}`,
161
- defaultDateRange: "LAST_30_DAYS",
162
- defaultLimit: 200,
163
- statusFields: ["campaign.status", "asset_group.status", "asset_group_asset.status"]
164
- },
165
- {
166
- name: "shopping-products",
167
- description: "Product-level shopping performance metrics",
168
- 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`,
169
- defaultDateRange: "LAST_30_DAYS",
170
- defaultLimit: 200,
171
- statusFields: ["campaign.status"]
172
- },
173
- {
174
- name: "account-summary",
175
- description: "Account-level totals for a date range",
176
- gaqlTemplate: `SELECT customer.id, customer.descriptive_name, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.all_conversions, metrics.conversions_value FROM customer WHERE segments.date DURING {dateRange} LIMIT 1`,
177
- defaultDateRange: "LAST_30_DAYS",
178
- defaultLimit: 1
179
- }
180
- ];
181
- var REPORT_PRESETS = [
182
- {
183
- name: "pmax-channels",
184
- description: "Performance Max spend and results split by channel (Search, YouTube, Display, Discover, Gmail, Maps\u2026) \u2014 segments.ad_network_type per campaign",
185
- 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`,
186
- defaultDateRange: "LAST_30_DAYS",
187
- defaultLimit: 200,
188
- statusFields: ["campaign.status"]
189
- },
190
- {
191
- name: "pmax-placements",
192
- description: "Where Performance Max ads showed on Display / YouTube / apps (Google reports impressions only for these)",
193
- 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`,
194
- defaultDateRange: "LAST_30_DAYS",
195
- defaultLimit: 200,
196
- statusFields: ["campaign.status"]
197
- },
198
- {
199
- name: "placements",
200
- description: "Where Display, Video and Demand Gen ads showed \u2014 each website, app or YouTube video, with cost and conversions (exclusion candidates)",
201
- 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`,
202
- defaultDateRange: "LAST_30_DAYS",
203
- defaultLimit: 200,
204
- statusFields: ["campaign.status", "ad_group.status"]
205
- },
206
- {
207
- name: "rsa-assets",
208
- description: "Each responsive search ad headline and description: its text, pin, whether it is enabled, its approval and its own impressions/clicks/conversions",
209
- 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`,
210
- defaultDateRange: "LAST_30_DAYS",
211
- defaultLimit: 500,
212
- statusFields: ["campaign.status", "ad_group.status", "ad_group_ad.status"]
213
- },
214
- {
215
- name: "landing-pages",
216
- description: "Final URLs as written on the ads, with clicks, cost, conversions, mobile-friendly click share and speed score",
217
- 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`,
218
- defaultDateRange: "LAST_30_DAYS",
219
- defaultLimit: 200,
220
- statusFields: ["campaign.status"]
221
- },
222
- {
223
- name: "geo-performance",
224
- 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",
225
- 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`,
226
- defaultDateRange: "LAST_30_DAYS",
227
- defaultLimit: 200,
228
- statusFields: ["campaign.status"]
229
- },
230
- {
231
- name: "age-performance",
232
- description: "Results by age range per ad group",
233
- 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`,
234
- defaultDateRange: "LAST_30_DAYS",
235
- defaultLimit: 200,
236
- statusFields: ["campaign.status", "ad_group.status"]
237
- },
238
- {
239
- name: "gender-performance",
240
- description: "Results by gender per ad group",
241
- 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`,
242
- defaultDateRange: "LAST_30_DAYS",
243
- defaultLimit: 200,
244
- statusFields: ["campaign.status", "ad_group.status"]
245
- },
246
- {
247
- name: "ai-max-search-terms",
248
- description: "AI Max for Search: each search term with the headline and landing page Google generated or chose for it, with results",
249
- 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`,
250
- defaultDateRange: "LAST_30_DAYS",
251
- defaultLimit: 200,
252
- statusFields: ["campaign.status", "ad_group.status"]
253
- },
254
- {
255
- name: "bidding-strategy-performance",
256
- description: "Each portfolio bidding strategy's type, status, targets and metrics",
257
- gaqlTemplate: `SELECT bidding_strategy.id, bidding_strategy.name, bidding_strategy.type, bidding_strategy.status, bidding_strategy.campaign_count, bidding_strategy.target_cpa.target_cpa_micros, bidding_strategy.target_roas.target_roas, bidding_strategy.maximize_conversions.target_cpa_micros, bidding_strategy.maximize_conversion_value.target_roas, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.all_conversions, metrics.conversions_value FROM bidding_strategy WHERE segments.date DURING {dateRange}{statusScope} ORDER BY metrics.cost_micros DESC`,
258
- defaultDateRange: "LAST_30_DAYS",
259
- defaultLimit: 200,
260
- statusFields: ["bidding_strategy.status"]
261
- },
262
- {
263
- name: "conversion-tags",
264
- description: "The tracking code of each website and call conversion action: the Google tag and the event snippet to put on the site",
265
- gaqlTemplate: `SELECT conversion_action.id, conversion_action.name, conversion_action.type, conversion_action.status, conversion_action.tag_snippets FROM conversion_action WHERE conversion_action.type IN ('WEBPAGE', 'WEBPAGE_CODELESS', 'WEBSITE_CALL') AND conversion_action.status != 'REMOVED' ORDER BY conversion_action.name`,
266
- defaultDateRange: "ALL_TIME",
267
- defaultLimit: 50
268
- },
269
- {
270
- name: "account-budget",
271
- description: "The account budget (invoiced billing): approved spending limit, served amount, dates and any pending change \u2014 read-only",
272
- 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`,
273
- defaultDateRange: "ALL_TIME",
274
- defaultLimit: 50
275
- },
276
- {
277
- name: "recommendations",
278
- description: "Google's open recommendations (not dismissed): type, the campaign/ad group it targets, and its estimated impact",
279
- gaqlTemplate: `SELECT recommendation.resource_name, recommendation.type, recommendation.campaign, recommendation.ad_group, recommendation.impact FROM recommendation WHERE recommendation.dismissed = FALSE`,
280
- defaultDateRange: "ALL_TIME",
281
- defaultLimit: 200
282
- },
283
- {
284
- name: "campaign-simulations",
285
- 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",
286
- 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`,
287
- defaultDateRange: "ALL_TIME",
288
- defaultLimit: 200
289
- },
290
- {
291
- name: "keyword-bid-simulations",
292
- description: "Google's what-if curve per keyword: CPC bid against predicted clicks, cost and impressions",
293
- 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`,
294
- defaultDateRange: "ALL_TIME",
295
- defaultLimit: 200
296
- }
297
- ];
298
- var INVENTORY_PRESETS = [
299
- {
300
- name: "campaigns",
301
- description: "Every campaign: id, name, status, channel, bidding, budget and dates",
302
- 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`,
303
- defaultDateRange: "ALL_TIME",
304
- defaultLimit: 200,
305
- statusFields: ["campaign.status"]
306
- },
307
- {
308
- name: "budgets",
309
- description: "Every campaign budget: id, name, daily amount, delivery, whether it is shared and how many campaigns use it",
310
- 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`,
311
- defaultDateRange: "ALL_TIME",
312
- defaultLimit: 200
313
- },
314
- {
315
- name: "ad-groups",
316
- description: "Every ad group: id, name, status, type and default CPC bid, under its campaign",
317
- 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`,
318
- defaultDateRange: "ALL_TIME",
319
- defaultLimit: 500,
320
- statusFields: ["campaign.status", "ad_group.status"]
321
- },
322
- {
323
- name: "keywords",
324
- description: "Every positive keyword: resource name, text, match type, status, bid and final URL \u2014 `keywords update|remove` take the resource name",
325
- 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`,
326
- defaultDateRange: "ALL_TIME",
327
- defaultLimit: 500,
328
- statusFields: ["campaign.status", "ad_group.status", "ad_group_criterion.status"]
329
- },
330
- {
331
- name: "campaign-negative-keywords",
332
- description: "Campaign-level negative keywords with the resource name `negative-keywords remove` takes",
333
- 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`,
334
- defaultDateRange: "ALL_TIME",
335
- defaultLimit: 500
336
- },
337
- {
338
- name: "ad-group-negative-keywords",
339
- description: "Ad-group-level negative keywords with the resource name `negative-keywords remove` takes",
340
- 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`,
341
- defaultDateRange: "ALL_TIME",
342
- defaultLimit: 500
343
- },
344
- {
345
- name: "shared-sets",
346
- description: "Every shared list (negative keyword / placement lists): id, name, type, member count and how many campaigns use it",
347
- 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`,
348
- defaultDateRange: "ALL_TIME",
349
- defaultLimit: 200
350
- },
351
- {
352
- name: "ads",
353
- description: "Every ad: id, type, name, status, approval and final URLs, under its ad group",
354
- 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`,
355
- defaultDateRange: "ALL_TIME",
356
- defaultLimit: 500,
357
- statusFields: ["campaign.status", "ad_group.status", "ad_group_ad.status"]
358
- },
359
- {
360
- name: "assets",
361
- description: "Every asset in the account library: id, name, type, text and final URLs",
362
- 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`,
363
- defaultDateRange: "ALL_TIME",
364
- defaultLimit: 500
365
- },
366
- {
367
- name: "asset-groups",
368
- description: "Every Performance Max asset group: id, name, status, final URLs and strength, under its campaign",
369
- 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`,
370
- defaultDateRange: "ALL_TIME",
371
- defaultLimit: 200,
372
- statusFields: ["campaign.status", "asset_group.status"]
373
- },
374
- {
375
- name: "audiences",
376
- description: "Every audience (user list): id, name, type, membership status, size on search and display, membership duration",
377
- 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`,
378
- defaultDateRange: "ALL_TIME",
379
- defaultLimit: 200
380
- },
381
- {
382
- name: "conversion-actions",
383
- description: "Every conversion action: id, name, type, category, origin, status, primary or secondary, counting",
384
- 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`,
385
- defaultDateRange: "ALL_TIME",
386
- defaultLimit: 200
387
- },
388
- {
389
- name: "bidding-strategies",
390
- description: "Every portfolio bidding strategy: id, name, type, status and how many campaigns use it",
391
- 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`,
392
- defaultDateRange: "ALL_TIME",
393
- defaultLimit: 200
394
- },
395
- {
396
- name: "labels",
397
- description: "Every label: id, name, colour and description",
398
- 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`,
399
- defaultDateRange: "ALL_TIME",
400
- defaultLimit: 200
401
- },
402
- {
403
- name: "merchant-center",
404
- description: "Merchant Center accounts linked to this Google Ads account \u2014 the merchantId a Shopping or retail Performance Max campaign names",
405
- 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'`,
406
- defaultDateRange: "ALL_TIME",
407
- defaultLimit: 200
408
- },
409
- {
410
- name: "campaign-criteria",
411
- 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",
412
- 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`,
413
- defaultDateRange: "ALL_TIME",
414
- defaultLimit: 500
415
- },
416
- {
417
- name: "ad-group-criteria",
418
- 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",
419
- 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`,
420
- defaultDateRange: "ALL_TIME",
421
- defaultLimit: 500,
422
- statusFields: ["campaign.status", "ad_group.status", "ad_group_criterion.status"]
423
- },
424
- {
425
- name: "account-exclusions",
426
- 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",
427
- 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`,
428
- defaultDateRange: "ALL_TIME",
429
- defaultLimit: 500
430
- },
431
- {
432
- name: "asset-group-signals",
433
- description: "Every Performance Max asset group's signals \u2014 search themes and the combined audience \u2014 under its campaign and group, with the resource name `asset-group-signals remove` takes",
434
- gaqlTemplate: `SELECT campaign.id, campaign.name, asset_group.id, asset_group.name, asset_group_signal.resource_name, asset_group_signal.search_theme.text, asset_group_signal.audience.audience, asset_group_signal.approval_status FROM asset_group_signal WHERE campaign.status != 'REMOVED' AND asset_group.status != 'REMOVED' ORDER BY campaign.name`,
435
- defaultDateRange: "ALL_TIME",
436
- defaultLimit: 500
437
- },
438
- {
439
- name: "ad-group-bid-modifiers",
440
- description: "Every ad group's own device bid adjustment, with the resource name `ad-group-bid-modifiers update|remove` takes",
441
- 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`,
442
- defaultDateRange: "ALL_TIME",
443
- defaultLimit: 500
444
- }
445
- ];
446
- var PRESETS = [...CORE_PRESETS, ...REPORT_PRESETS, ...INVENTORY_PRESETS];
447
- function isInventoryPreset(name) {
448
- return INVENTORY_PRESETS.some((preset) => preset.name === name);
449
- }
450
- function getPreset(name) {
451
- return PRESETS.find((p) => p.name === name);
452
- }
453
- function buildStatusScope(statusFields, includePaused) {
454
- if (!statusFields || statusFields.length === 0) return "";
455
- const predicate = includePaused ? "!= 'REMOVED'" : "= 'ENABLED'";
456
- return statusFields.map((field) => ` AND ${field} ${predicate}`).join("");
457
- }
458
- function expandPreset(preset, params, now = /* @__PURE__ */ new Date()) {
459
- const dateRange = params.dateRange ?? preset.defaultDateRange;
460
- if (preset.gaqlTemplate.includes("{dateRange}") && !isValidDateRange(dateRange)) {
461
- return { query: "", dateRangeError: dateRangeError(dateRange, now) };
462
- }
463
- const statusScope = buildStatusScope(preset.statusFields, params.includePaused ?? false);
464
- const range = dateRange.trim();
465
- 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/, "")}` : "");
466
- return { query };
467
- }
468
-
469
- // src/commands/ads/google/preflight.ts
470
- function buildCommand(query, customerId) {
471
- return `baker ads google query "${query}" --customer-id ${customerId}`;
472
- }
473
- var RUNG_PIN_FIELDS = {
474
- "campaign.status": ["campaign.id", "campaign.resource_name"],
475
- "ad_group.status": ["ad_group.id", "ad_group.resource_name"],
476
- "ad_group_criterion.status": ["ad_group_criterion.criterion_id", "ad_group_criterion.resource_name"],
477
- "ad_group_ad.status": ["ad_group_ad.ad.id", "ad_group_ad.resource_name"],
478
- "asset_group.status": ["asset_group.id", "asset_group.resource_name"],
479
- "asset_group_asset.status": ["asset_group_asset.resource_name"],
480
- "campaign_asset.status": ["campaign_asset.resource_name"],
481
- "ad_group_asset.status": ["ad_group_asset.resource_name"]
482
- };
483
- function whereClause(query) {
484
- const match = query.match(/\bWHERE\b([\s\S]*)$/i);
485
- if (!match?.[1]) return "";
486
- let rest = match[1];
487
- for (const trailing of [/\bORDER\s+BY\b/i, /\bLIMIT\b/i, /\bPARAMETERS\b/i]) {
488
- const idx = rest.search(trailing);
489
- if (idx !== -1) rest = rest.slice(0, idx);
490
- }
491
- return rest;
492
- }
493
- function selectClause(query) {
494
- return query.split(/\bFROM\b/i)[0] ?? "";
495
- }
496
- function mentions(clause, field) {
497
- return new RegExp(`(?<![\\w.])${field.replace(/\./g, "\\.")}\\b`, "i").test(clause);
498
- }
499
- function analyzeServingChain(query) {
500
- const resource = fromResource(query);
501
- const chain = resource ? SERVING_CHAINS[resource] : void 0;
502
- if (!chain) return null;
503
- const where = whereClause(query);
504
- if (/ad_group_criterion\.negative\s*=\s*TRUE/i.test(where)) return null;
505
- const unscoped = chain.filter((rung) => {
506
- if (mentions(where, rung)) return false;
507
- return !(RUNG_PIN_FIELDS[rung] ?? []).some((pin) => mentions(where, pin));
508
- });
509
- const assertsServing = chain.some(
510
- (rung) => new RegExp(`${rung.replace(/\./g, "\\.")}\\s*=\\s*'ENABLED'`, "i").test(where)
511
- );
512
- return { chain, unscoped, assertsServing };
513
- }
514
- function rejectPartialChain(query, customerId, analysis) {
515
- if (!analysis.assertsServing || analysis.unscoped.length === 0) return null;
516
- const added = analysis.unscoped.map((rung) => `${rung} = 'ENABLED'`).join(" AND ");
517
- const fixed = addRequiredAncestorFields(query.replace(/\bWHERE\b/i, `WHERE ${added} AND`)).query;
518
- return {
519
- ok: false,
520
- error: {
521
- code: "INCOMPLETE_STATUS_CHAIN",
522
- message: `This query filters on serving status but leaves ${analysis.unscoped.join(", ")} unscoped. Google Ads has no single serving flag \u2014 a row is live only when its whole chain (${analysis.chain.join(" \u2192 ")}) is ENABLED, so rows under a paused parent will come back looking live.`,
523
- fix: {
524
- action: "retry_with_modified_query",
525
- correctedCommand: buildCommand(fixed, customerId),
526
- explanation: `Add the missing rungs: ${added}. To look at paused entities on purpose, scope every rung explicitly instead (e.g. ${analysis.unscoped.map((rung) => `${rung} != 'REMOVED'`).join(" AND ")}), or use --preset ... --include-paused.`
527
- },
528
- retryable: false
529
- }
530
- };
531
- }
532
- function annotateUnscopedChain(query, analysis) {
533
- if (analysis.assertsServing || analysis.unscoped.length === 0) return { query, warnings: [] };
534
- const select = selectClause(query);
535
- const missing = analysis.unscoped.filter((rung) => !mentions(select, rung));
536
- if (missing.length === 0) return { query, warnings: [] };
537
- return {
538
- query: query.replace(/SELECT\s+/i, `SELECT ${missing.join(", ")}, `),
539
- warnings: [
540
- {
541
- code: "SERVING_STATUS_ADDED",
542
- message: `Added ${missing.join(", ")} to SELECT \u2014 this query does not scope ${analysis.unscoped.join(", ")}, so it returns paused-parent rows that are not serving. Read those columns before calling any row live; filter every rung = 'ENABLED' to get serving rows only.`
543
- }
544
- ]
545
- };
546
- }
547
- var SINGLE_ROW_RESOURCES = ["customer"];
548
- function fromResource(query) {
549
- const match = query.match(/\bFROM\s+([A-Za-z_][A-Za-z0-9_]*)/i);
550
- return match?.[1]?.toLowerCase() ?? null;
551
- }
552
- function isSingleRowRead(query) {
553
- const resource = fromResource(query);
554
- if (!resource || !SINGLE_ROW_RESOURCES.includes(resource)) return false;
555
- return !/\bsegments\./i.test(selectClause(query));
556
- }
557
- var SEGMENTING_ANCESTORS = {
558
- campaign_budget: ["campaign"],
559
- campaign_asset: ["campaign"],
560
- ad_group_asset: ["campaign", "ad_group"]
561
- };
562
- function missingRequiredSelectFields(query) {
563
- const ancestors = SEGMENTING_ANCESTORS[fromResource(query) ?? ""];
564
- if (!ancestors) return [];
565
- const select = selectClause(query);
566
- const where = query.split(/\bWHERE\b/i)[1] ?? "";
567
- const filtered = ancestors.flatMap(
568
- (ancestor) => where.match(new RegExp(`(?<![\\w.])${ancestor}\\.[\\w.]+`, "g")) ?? []
569
- );
570
- return [...new Set(filtered)].filter((field) => !mentions(select, field));
571
- }
572
- function addRequiredAncestorFields(query) {
573
- const missing = missingRequiredSelectFields(query);
574
- if (missing.length === 0) return { query, warnings: [] };
575
- return {
576
- query: query.replace(/SELECT\s+/i, `SELECT ${missing.join(", ")}, `),
577
- warnings: [
578
- {
579
- code: "REQUIRED_FIELD_ADDED",
580
- message: `Added ${missing.join(", ")} to SELECT \u2014 ${fromResource(query)} queries must select the ancestor fields used in WHERE`
581
- }
582
- ]
583
- };
584
- }
585
- function applyAutoFixes(query) {
586
- let corrected = query;
587
- const warnings = [];
588
- if (/(?<![\w.])keyword\.text\b/.test(corrected)) {
589
- corrected = corrected.replace(/(?<![\w.])keyword\.text\b/g, "ad_group_criterion.keyword.text");
590
- warnings.push({ code: "FIELD_RENAMED", message: "keyword.text \u2192 ad_group_criterion.keyword.text" });
591
- }
592
- if (/(?<![\w.])keyword\.match_type\b/.test(corrected)) {
593
- corrected = corrected.replace(/(?<![\w.])keyword\.match_type\b/g, "ad_group_criterion.keyword.match_type");
594
- warnings.push({ code: "FIELD_RENAMED", message: "keyword.match_type \u2192 ad_group_criterion.keyword.match_type" });
595
- }
596
- if (/shopping_performance_view\.product_\w+/.test(corrected)) {
597
- corrected = corrected.replace(/shopping_performance_view\.product_(\w+)/g, "segments.product_$1");
598
- warnings.push({ code: "FIELD_RENAMED", message: "shopping_performance_view.product_* \u2192 segments.product_*" });
599
- }
600
- if (/asset\.\w+_asset\.final_(mobile_)?urls\b/.test(corrected)) {
601
- corrected = corrected.replace(/asset\.\w+_asset\.final_(mobile_)?urls\b/g, "asset.final_$1urls");
602
- warnings.push({ code: "FIELD_RENAMED", message: "asset.<type>_asset.final_urls \u2192 asset.final_urls" });
603
- }
604
- const ancestorFix = addRequiredAncestorFields(corrected);
605
- corrected = ancestorFix.query;
606
- warnings.push(...ancestorFix.warnings);
607
- if (/campaign\.status\s*=\s*'ACTIVE'/i.test(corrected)) {
608
- corrected = corrected.replace(/campaign\.status\s*=\s*'ACTIVE'/gi, "campaign.status = 'ENABLED'");
609
- warnings.push({ code: "ENUM_CORRECTED", message: "campaign.status ACTIVE \u2192 ENABLED" });
610
- }
611
- if (/ad_group\.status\s*=\s*'ACTIVE'/i.test(corrected)) {
612
- corrected = corrected.replace(/ad_group\.status\s*=\s*'ACTIVE'/gi, "ad_group.status = 'ENABLED'");
613
- warnings.push({ code: "ENUM_CORRECTED", message: "ad_group.status ACTIVE \u2192 ENABLED" });
614
- }
615
- return { query: corrected, warnings };
616
- }
617
- var DURING_CLAUSE = /(?<=[a-z_]\.[a-z_.]+\s+)DURING\s+([A-Za-z0-9_]+)/gi;
618
- function rejectUnsupportedDuring(query, customerId) {
619
- const unsupported = [...query.matchAll(DURING_CLAUSE)].map((match) => match[1] ?? "").filter((literal2) => !isDuringLiteral(literal2));
620
- const literal = unsupported[0];
621
- if (literal === void 0) return null;
622
- const now = /* @__PURE__ */ new Date();
623
- const between = equivalentBetween(literal, now);
624
- const fixed = unsupported.every((l) => equivalentBetween(l, now) !== null) ? query.replace(
625
- DURING_CLAUSE,
626
- (clause, l) => isDuringLiteral(l) ? clause : equivalentBetween(l, now) ?? clause
627
- ) : void 0;
628
- return {
629
- ok: false,
630
- error: {
631
- code: "INVALID_DATE_RANGE",
632
- message: `DURING ${literal} is not a Google Ads date range, so Google would refuse this query.`,
633
- fix: {
634
- action: "narrow_date_range",
635
- ...fixed ? { correctedCommand: buildCommand(fixed, customerId) } : {},
636
- explanation: duringLiteralExplanation(literal, between)
637
- },
638
- retryable: false
639
- }
640
- };
641
- }
642
- 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;
643
- function escapeRegExp(text) {
644
- return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
645
- }
646
- function withoutNullTest(query, field) {
647
- const test = `${escapeRegExp(field)}\\s+IS\\s+(?:NOT\\s+)?NULL\\b`;
648
- const dropped = query.replace(new RegExp(`\\bWHERE\\s+${test}\\s+AND\\s+`, "i"), "WHERE ").replace(new RegExp(`\\s+AND\\s+${test}`, "i"), "").replace(new RegExp(`\\s*\\bWHERE\\s+${test}`, "i"), "");
649
- return mentions(selectClause(dropped), field) ? dropped : dropped.replace(/SELECT\s+/i, `SELECT ${field}, `);
650
- }
651
- function asListCondition(query, field) {
652
- const condition = new RegExp(
653
- `(?<![\\w.])${escapeRegExp(field)}\\s*(NOT\\s+IN\\b|IN\\b|!=|=)\\s*('[^']*'|\\([^)]*\\))`,
654
- "i"
655
- );
656
- const match = query.match(condition);
657
- if (!match) return null;
658
- const [, operator = "", value = ""] = match;
659
- const contains = /^(=|IN)$/i.test(operator.trim()) ? "CONTAINS ANY" : "CONTAINS NONE";
660
- const values = value.startsWith("(") ? value : `(${value})`;
661
- return query.replace(condition, `${field} ${contains} ${values}`);
662
- }
663
- function rejectListFieldOperator(query, customerId) {
664
- const where = whereClause(query).replace(/'[^']*'/g, "''");
665
- const refusals = [...where.matchAll(WHERE_OPERATOR)].map(([, field = "", operator = ""]) => ({
666
- field: field.toLowerCase(),
667
- operator: operator.toUpperCase().replace(/\s+/g, " ")
668
- })).filter(({ field, operator }) => LIST_FIELDS.has(field) && !operator.startsWith("CONTAINS"));
669
- const first = refusals[0];
670
- if (!first) return null;
671
- const fixed = refusals.reduce(
672
- (corrected, { field, operator }) => corrected === null ? null : operator.startsWith("IS ") ? withoutNullTest(corrected, field) : asListCondition(corrected, field),
673
- query
674
- );
675
- return {
676
- ok: false,
677
- error: {
678
- code: "INVALID_OPERATOR",
679
- message: `${first.operator} cannot be used on ${first.field}: it is a list field, so Google would refuse this query.`,
680
- fix: {
681
- action: "change_operator",
682
- ...fixed ? { correctedCommand: buildCommand(fixed, customerId) } : {},
683
- explanation: listFieldGuidance(first.field)
684
- },
685
- retryable: false
686
- }
687
- };
688
- }
689
- function rejectContainsCall(query, customerId) {
690
- const containsMatch = query.match(/CONTAINS\s*\(\s*([^,]+),\s*'([^']+)'\s*\)/i);
691
- if (!containsMatch) return null;
692
- const field = containsMatch[1]?.trim();
693
- const value = containsMatch[2] ?? "";
694
- const fixed = query.replace(/CONTAINS\s*\(\s*[^,]+,\s*'[^']+'\s*\)/i, `${field} LIKE '%${value}%'`);
695
- return {
696
- ok: false,
697
- error: {
698
- code: "INVALID_OPERATOR",
699
- message: "GAQL does not support CONTAINS. Use LIKE with % wildcards.",
700
- fix: {
701
- action: "change_operator",
702
- correctedCommand: buildCommand(fixed, customerId),
703
- explanation: "GAQL uses LIKE '%value%' for substring matching, not CONTAINS()"
704
- },
705
- retryable: false
706
- }
707
- };
708
- }
709
- function validatePreflight(query, customerId) {
710
- const warnings = [];
711
- const corrected = query;
712
- const firstWord = corrected.trim().split(/\s+/)[0]?.toUpperCase();
713
- if (firstWord && firstWord !== "SELECT") {
714
- return {
715
- valid: false,
716
- warnings: [],
717
- error: {
718
- ok: false,
719
- error: {
720
- code: "READ_ONLY",
721
- message: `Only SELECT queries are allowed. Got: ${firstWord}`,
722
- fix: {
723
- action: "reject",
724
- explanation: "This CLI only supports GAQL SELECT queries for reading data"
725
- },
726
- retryable: false
727
- }
728
- }
729
- };
730
- }
731
- const openDateMatch = corrected.match(/segments\.date\s*>=\s*'(\d{4}-\d{2}-\d{2})'/i);
732
- if (openDateMatch && !/BETWEEN/i.test(corrected)) {
733
- const startDate = openDateMatch[1] ?? "";
734
- const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
735
- const fixed = corrected.replace(
736
- /segments\.date\s*>=\s*'(\d{4}-\d{2}-\d{2})'/i,
737
- `segments.date BETWEEN '${startDate}' AND '${today}'`
738
- );
739
- return {
740
- valid: false,
741
- warnings: [],
742
- error: {
743
- ok: false,
744
- error: {
745
- code: "OPEN_ENDED_DATE",
746
- message: "Open-ended date ranges are not supported. Use BETWEEN or DURING.",
747
- fix: {
748
- action: "narrow_date_range",
749
- correctedCommand: buildCommand(fixed, customerId),
750
- explanation: "Use BETWEEN with explicit start and end dates"
751
- },
752
- retryable: false
753
- }
754
- }
755
- };
756
- }
757
- for (const reject of [rejectContainsCall, rejectListFieldOperator, rejectUnsupportedDuring]) {
758
- const rejection2 = reject(corrected, customerId);
759
- if (rejection2) return { valid: false, warnings: [], error: rejection2 };
760
- }
761
- if (/\bsegments\.conversion_action_name\b/i.test(corrected) && /\bmetrics\.cost_micros\b/i.test(corrected)) {
762
- return {
763
- valid: false,
764
- warnings: [],
765
- error: {
766
- ok: false,
767
- error: {
768
- code: "INCOMPATIBLE_FIELDS",
769
- message: "segments.conversion_action_name cannot be selected with metrics.cost_micros in one GAQL query.",
770
- fix: {
771
- action: "split_query",
772
- explanation: "Run one campaign spend query with metrics.cost_micros and a separate conversion-action query without cost metrics, then join the results by campaign."
773
- },
774
- retryable: false
775
- }
776
- }
777
- };
778
- }
779
- if (/FROM\s+ad_group_criterion\b/i.test(corrected) && !/ad_group_criterion\.negative/i.test(corrected)) {
780
- warnings.push({
781
- code: "NEGATIVE_FIELD_MISSING",
782
- 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."
783
- });
784
- }
785
- const { query: autoFixed, warnings: autoFixWarnings } = applyAutoFixes(corrected);
786
- warnings.push(...autoFixWarnings);
787
- const analysis = analyzeServingChain(autoFixed);
788
- if (!analysis) return { valid: true, correctedQuery: autoFixed, warnings };
789
- const rejection = rejectPartialChain(autoFixed, customerId, analysis);
790
- if (rejection) return { valid: false, warnings: [], error: rejection };
791
- const annotated = annotateUnscopedChain(autoFixed, analysis);
792
- warnings.push(...annotated.warnings);
793
- return { valid: true, correctedQuery: annotated.query, warnings };
794
- }
795
-
796
- // src/commands/ads/google/conversion-mix.ts
797
- var CONVERSION_METRICS = [
798
- "METRICS.CONVERSIONS",
799
- "METRICS.ALL_CONVERSIONS",
800
- "METRICS.CONVERSIONS_VALUE",
801
- "METRICS.ALL_CONVERSIONS_VALUE",
802
- "METRICS.COST_PER_CONVERSION",
803
- "METRICS.COST_PER_ALL_CONVERSIONS",
804
- "METRICS.CONVERSIONS_FROM_INTERACTIONS_RATE",
805
- "METRICS.ALL_CONVERSIONS_FROM_INTERACTIONS_RATE",
806
- "METRICS.VALUE_PER_CONVERSION",
807
- "METRICS.VALUE_PER_ALL_CONVERSIONS"
808
- ];
809
- var CONVERSION_SEGMENTS = ["SEGMENTS.CONVERSION_ACTION_NAME", "SEGMENTS.CONVERSION_ACTION="];
810
- var CAMPAIGN_EQUALITY = /\bCAMPAIGN\.(ID|NAME|RESOURCE_NAME)\s*=/;
811
- function whereClause2(upperQuery) {
812
- const whereIdx = upperQuery.indexOf(" WHERE ");
813
- if (whereIdx === -1) return "";
814
- let rest = upperQuery.slice(whereIdx + 7);
815
- for (const trailing of [" ORDER BY ", " GROUP BY ", " LIMIT ", " PARAMETERS "]) {
816
- const idx = rest.indexOf(trailing);
817
- if (idx !== -1) rest = rest.slice(0, idx);
818
- }
819
- return rest;
820
- }
821
- function conversionMixWarnings(finalQuery) {
822
- const upper = ` ${finalQuery.toUpperCase().replace(/\s+/g, " ")} `;
823
- const readsConversions = CONVERSION_METRICS.some((metric) => upper.includes(metric));
824
- if (!readsConversions) return [];
825
- if (CONVERSION_SEGMENTS.some((segment) => upper.includes(segment))) return [];
826
- if (CAMPAIGN_EQUALITY.test(whereClause2(upper))) return [];
827
- if (isSingleRowRead(finalQuery)) return [];
828
- return [
829
- {
830
- code: "CONVERSION_MIX",
831
- message: "MIXED CONVERSION ACTIONS \u2014 this read covers more than one campaign, and a campaign's conversion figures count whatever conversion actions are primary for it. Those differ campaign by campaign (a webinar registration, an info request, a CRM-stage SQL), so a total across these rows adds different events and a conversion rate from one campaign is not comparable with another's. Before totalling or comparing, re-run segmented by segments.conversion_action_name and check the campaigns you are putting side by side count the same action. If they do not, compare only within one action \u2014 and carry that caveat into anything you write for the user, not just the analysis."
832
- }
833
- ];
834
- }
835
-
836
- // src/commands/ads/google/keyword-serving.ts
837
- var BELOW_FIRST_PAGE_BID = "AD_GROUP_CRITERION_BELOW_FIRST_PAGE_BID";
838
- var ACTIONABLE_REASONS = {
839
- [BELOW_FIRST_PAGE_BID]: {
840
- label: "Below first page bid",
841
- advice: "raise the max CPC (keywords update --cpc-bid) to at least the first-page estimate, or move the ad group onto a smart bidding strategy that sets the bid itself"
842
- },
843
- AD_GROUP_CRITERION_LOW_QUALITY: {
844
- label: "Low quality score",
845
- advice: "a bid raise does not lift quality \u2014 tighten ad relevance to the keyword and the landing page it points at (ad_group_criterion.quality_info.* breaks the score into its three parts)"
846
- },
847
- AD_GROUP_CRITERION_RARELY_SERVED: {
848
- label: "Rarely served",
849
- advice: "too few people search this term \u2014 broaden the match type or drop it, don't bid it up"
850
- },
851
- AD_GROUP_CRITERION_DISAPPROVED: {
852
- label: "Disapproved",
853
- advice: "select ad_group_criterion.disapproval_reasons to see which policy blocked it"
854
- },
855
- AD_GROUP_CRITERION_RESTRICTED: {
856
- label: "Restricted",
857
- advice: "policy limits where and to whom this keyword may show"
858
- },
859
- AD_GROUP_CRITERION_UNDER_REVIEW: {
860
- label: "Under review",
861
- advice: "waiting on Google's review \u2014 nothing to change yet"
862
- },
863
- AD_GROUP_CRITERION_PENDING_REVIEW: {
864
- label: "Pending review",
865
- advice: "waiting on Google's review \u2014 nothing to change yet"
866
- },
867
- AD_GROUP_CRITERION_PAUSED_DUE_TO_LOW_ACTIVITY: {
868
- label: "Auto-paused for low activity",
869
- advice: "Google paused it after prolonged low serving \u2014 resume it only alongside a change that gives it traffic"
870
- }
871
- };
872
- var REASON_ORDER = Object.keys(ACTIONABLE_REASONS);
873
- var MAX_NAMED_KEYWORDS = 5;
874
- function toMicros(value) {
875
- if (typeof value === "number" && Number.isFinite(value)) return value;
876
- if (typeof value === "string" && value.trim() !== "" && Number.isFinite(Number(value))) return Number(value);
877
- return null;
878
- }
879
- function formatMoney(micros) {
880
- return (micros / 1e6).toFixed(2);
881
- }
882
- function keywordLabel(row) {
883
- const text = row["ad_group_criterion.keyword.text"];
884
- const id = row["ad_group_criterion.criterion_id"];
885
- const name = typeof text === "string" && text !== "" ? text : id == null ? "(unnamed keyword)" : `criterion ${id}`;
886
- const adGroup = row["ad_group.name"];
887
- return typeof adGroup === "string" && adGroup !== "" ? `${name} (ad group ${adGroup})` : name;
888
- }
889
- function keywordKey(row) {
890
- const adGroup = row["ad_group.id"] ?? row["ad_group.name"] ?? "";
891
- const criterion = row["ad_group_criterion.criterion_id"] ?? row["ad_group_criterion.keyword.text"] ?? "";
892
- return `${String(adGroup)}~${String(criterion)}` === "~" ? keywordLabel(row) : `${adGroup}~${criterion}`;
893
- }
894
- function reasonsOn(row) {
895
- const raw = row["ad_group_criterion.primary_status_reasons"];
896
- if (!Array.isArray(raw)) return null;
897
- return raw.filter((r) => typeof r === "string");
898
- }
899
- function bidShortfall(row) {
900
- const bid = toMicros(row["ad_group_criterion.effective_cpc_bid_micros"] ?? row["ad_group_criterion.cpc_bid_micros"]);
901
- const firstPage = toMicros(row["ad_group_criterion.position_estimates.first_page_cpc_micros"]);
902
- if (bid == null || firstPage == null || bid >= firstPage) return null;
903
- return `bids ${formatMoney(bid)} against a ${formatMoney(firstPage)} first-page estimate`;
904
- }
905
- function limitsOn(row, options) {
906
- const reasons = reasonsOn(row);
907
- const shortfall = bidShortfall(row);
908
- const label = keywordLabel(row);
909
- const applicable = reasons ? reasons.filter((reason) => reason in ACTIONABLE_REASONS) : options.statusReasonsSelected || shortfall === null ? [] : [BELOW_FIRST_PAGE_BID];
910
- return applicable.map((reason) => ({
911
- reason,
912
- detail: reason === BELOW_FIRST_PAGE_BID && shortfall ? `"${label}" ${shortfall}` : `"${label}"`
913
- }));
914
- }
915
- function describeLimit(reason, details) {
916
- const named = details.slice(0, MAX_NAMED_KEYWORDS).join("; ");
917
- const rest = details.length > MAX_NAMED_KEYWORDS ? ` (+${details.length - MAX_NAMED_KEYWORDS} more)` : "";
918
- const { label, advice } = ACTIONABLE_REASONS[reason];
919
- return `${label} \u2014 ${details.length}: ${named}${rest}. Fix: ${advice}.`;
920
- }
921
- function collectKeywordLimits(rows, options, acc = { detailsByReason: /* @__PURE__ */ new Map(), keywords: /* @__PURE__ */ new Set() }) {
922
- for (const row of rows) {
923
- const limits = limitsOn(row, options);
924
- if (limits.length === 0) continue;
925
- acc.keywords.add(keywordKey(row));
926
- for (const { reason, detail } of limits) {
927
- const bucket = acc.detailsByReason.get(reason);
928
- if (bucket) bucket.push(detail);
929
- else acc.detailsByReason.set(reason, [detail]);
930
- }
931
- }
932
- return acc;
933
- }
934
- function renderKeywordLimits(limits) {
935
- if (limits.detailsByReason.size === 0) return [];
936
- const sentences = REASON_ORDER.filter((reason) => limits.detailsByReason.has(reason)).map(
937
- (reason) => describeLimit(reason, limits.detailsByReason.get(reason) ?? [])
938
- );
939
- const count = limits.keywords.size;
940
- return [
941
- {
942
- code: "KEYWORD_SERVING_LIMITED",
943
- message: `${count} ${count === 1 ? "keyword is" : "keywords are"} limited and not getting the traffic they could. ${sentences.join(" ")} Amounts are in the account currency (baker ads google currency).`
944
- }
945
- ];
946
- }
947
- function keywordServingWarnings(rows, options) {
948
- return renderKeywordLimits(collectKeywordLimits(rows, options));
949
- }
950
-
951
- // src/commands/ads/google/money-units.ts
952
- function isSettingMicros(field) {
953
- return field.endsWith("_micros") && !field.startsWith("metrics.") && !field.endsWith("_fraction_micros");
954
- }
955
- function moneyUnitWarnings(fields) {
956
- const example = fields.find(isSettingMicros);
957
- if (!example) return [];
958
- return [
959
- {
960
- code: "MONEY_IN_MICROS",
961
- message: `Budgets and bids in these rows are in micros, millionths of the account currency: ${example} 20000000 is 20. Write flags (--amount, --cpc-bid, --max-cpc, --target-cpa, --target-cpc) take whole currency: --amount 20, never the micros.`
962
- }
963
- ];
964
- }
965
-
966
- // src/commands/ads/google/query.ts
967
- registerSchema({
968
- command: "ads.google.query",
969
- 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.",
970
- args: {
971
- query: { type: "positional", description: "GAQL SELECT statement (or pass it with --gaql)", required: false },
972
- gaql: {
973
- type: "string",
974
- 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"',
975
- required: false
976
- },
977
- "customer-id": {
978
- type: "string",
979
- description: "Google Ads customer ID (10 digits, no dashes). Falls back to BAKER_GOOGLE_ADS_CUSTOMER_ID env var.",
980
- required: false
981
- },
982
- preset: {
983
- type: "string",
984
- 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.`,
985
- required: false
986
- },
987
- "date-range": {
988
- type: "string",
989
- description: "Date range for presets: a Google date literal (TODAY, YESTERDAY, LAST_7_DAYS, LAST_14_DAYS, LAST_30_DAYS, THIS_MONTH, LAST_MONTH \u2026) or BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'. Google has no LAST_90_DAYS \u2014 use BETWEEN for any other window.",
990
- required: false
991
- },
992
- "include-paused": {
993
- type: "boolean",
994
- description: "Include paused entities in preset results. Off by default: presets return only actually-serving entities. Google Ads has no single serving flag \u2014 an entity serves only when its whole chain (campaign, ad group, ad) is ENABLED, so recommendations should target serving entities unless the user asks about paused ones.",
995
- required: false
996
- },
997
- limit: {
998
- type: "number",
999
- 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.`,
1000
- required: false
1001
- },
1002
- "list-presets": { type: "boolean", description: "List all available query presets", required: false },
1003
- cursor: {
1004
- type: "string",
1005
- description: "Resume after a previous page: pass its pagination.cursor with the same query and --limit",
1006
- required: false
1007
- },
1008
- all: {
1009
- type: "boolean",
1010
- 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.",
1011
- required: false
1012
- },
1013
- out: {
1014
- type: "string",
1015
- description: "Write data to file (format from extension: .csv, .jsonl, .json)",
1016
- required: false
1017
- },
1018
- append: { type: "boolean", description: "Append to existing file (skip CSV headers)", required: false },
1019
- output: {
1020
- type: "string",
1021
- description: "Output format: json|csv|jsonl|md",
1022
- required: false,
1023
- default: "json",
1024
- enum: ["json", "csv", "jsonl", "md"]
1025
- },
1026
- "no-cache": { type: "boolean", description: "Skip cache, hit API directly", required: false },
1027
- full: {
1028
- type: "boolean",
1029
- description: "Include the field description glossary in the JSON envelope. Off by default \u2014 rows already carry the data; only ask for this when you need a field's meaning explained.",
1030
- required: false
1031
- }
1032
- }
1033
- });
1034
- function extractFields(rows) {
1035
- const keys = /* @__PURE__ */ new Set();
1036
- foldObservedFields(rows, keys);
1037
- return [...keys];
1038
- }
1039
- function resultColumns(gaql, rows) {
1040
- const observed = extractFields(rows);
1041
- const columns = [];
1042
- for (const field of parseSelectedFields(gaql)) {
1043
- const leaves = observed.filter((key) => key.startsWith(`${field}.`));
1044
- columns.push(...leaves.length > 0 ? leaves : [field]);
1045
- }
1046
- for (const key of observed) columns.push(key);
1047
- return [...new Set(columns)];
1048
- }
1049
- function isCsvPath(filePath) {
1050
- return filePath.split(".").pop()?.toLowerCase() === "csv";
1051
- }
1052
- function writeRowsToFile(filePath, rows, fields, append) {
1053
- if (isCsvPath(filePath)) {
1054
- if (!append || !existsSync(filePath)) {
1055
- writeFileSync(filePath, `${toCsvRow(fields)}
1056
- `, "utf-8");
1057
- }
1058
- const csvRows = rows.map((row) => toCsvRow(fields.map((f) => String(row[f] ?? ""))));
1059
- appendFileSync(filePath, `${csvRows.join("\n")}
1060
- `, "utf-8");
1061
- } else if (filePath.split(".").pop()?.toLowerCase() === "jsonl") {
1062
- const lines = rows.map((row) => JSON.stringify(row));
1063
- if (append && existsSync(filePath)) {
1064
- appendFileSync(filePath, `${lines.join("\n")}
1065
- `, "utf-8");
1066
- } else {
1067
- writeFileSync(filePath, `${lines.join("\n")}
1068
- `, "utf-8");
1069
- }
1070
- } else if (append && existsSync(filePath)) {
1071
- const existing = JSON.parse(readFileSync(filePath, "utf-8"));
1072
- writeFileSync(filePath, JSON.stringify([...existing, ...rows], null, 2), "utf-8");
1073
- } else {
1074
- writeFileSync(filePath, JSON.stringify(rows, null, 2), "utf-8");
1075
- }
1076
- }
1077
- function effectiveRowLimit(finalQuery) {
1078
- if (isSingleRowRead(finalQuery)) return void 0;
1079
- const match = finalQuery.match(/\bLIMIT\s+(\d+)/i);
1080
- return match?.[1] ? Number(match[1]) : void 0;
1081
- }
1082
- function warningLines(warnings, format) {
1083
- return warnings.map((w) => {
1084
- const message = w.message.replace(/\s*\n\s*/g, " ");
1085
- if (format === "jsonl") return JSON.stringify({ _baker_warning: { code: w.code, message } });
1086
- if (format === "md") return `> **${w.code}** \u2014 ${message}`;
1087
- return `# baker ${w.code}: ${message}`;
1088
- });
1089
- }
1090
- function completenessWarnings(read) {
1091
- const cap = read.effectiveLimit;
1092
- const filledTheCap = cap !== void 0 && cap > 0 && read.rowCount >= cap;
1093
- if (!read.hasMore && !filledTheCap) return [];
1094
- const [cause, fix] = read.hasMore ? [
1095
- "More rows are waiting: the account returned a next-page cursor this run did not follow.",
1096
- "Re-run with --all --out <file> to read every page, or pass --cursor <pagination.cursor> (same query, same --limit) for the next page."
1097
- ] : [
1098
- `The ${read.rowCount} rows returned exactly fill the LIMIT in the statement (${cap}).`,
1099
- `Raise the LIMIT in the statement above ${cap}, or drop it \u2014 without a LIMIT, --all pages through every row.`
1100
- ];
1101
- return [
1102
- {
1103
- code: "TRUNCATED_RESULTS",
1104
- message: `INCOMPLETE READ \u2014 ${cause} These rows are a page, not the data set. Don't count, total or describe them as the whole picture. ${fix}`
1105
- }
1106
- ];
1107
- }
1108
- function buildQueryEnvelope(rows, fieldDescs, warnings, options) {
1109
- const notice = summariseWarnings(warnings);
1110
- return {
1111
- ok: true,
1112
- ...options.cached ? { cached: true } : {},
1113
- ...warnings.length > 0 ? { warnings } : {},
1114
- ...options.nextCursor ? { pagination: { hasMore: true, cursor: options.nextCursor } } : {},
1115
- data: rows,
1116
- ...options.full && Object.keys(fieldDescs).length > 0 ? { fields: fieldDescs } : {},
1117
- ...notice ? { notice } : {}
1118
- };
1119
- }
1120
- function summariseWarnings(warnings) {
1121
- if (warnings.length === 0) return void 0;
1122
- const codes = [...new Set(warnings.map((w) => w.code))].join(", ");
1123
- return `Read the "warnings" above before using these rows: ${codes}.`;
1124
- }
1125
- function buildFileSummary(input) {
1126
- const notice = summariseWarnings(input.warnings);
1127
- return {
1128
- ok: true,
1129
- fields: {},
1130
- file: input.file,
1131
- rows: input.rows,
1132
- complete: input.complete,
1133
- ...input.warnings.length > 0 ? { warnings: input.warnings } : {},
1134
- ...notice ? { notice } : {}
1135
- };
1136
- }
1137
- var REPEAT_NOTICE_ABOVE_ROWS = 20;
1138
- function emitToStderr(notices) {
1139
- for (const line of notices) process.stderr.write(`${line}
1140
- `);
1141
- }
1142
- function writeLine(line) {
1143
- process.stdout.write(`${line}
1144
- `);
1145
- }
1146
- var writeCsvRows = (rows, fields, notices) => {
1147
- writeLine(toCsvRow(fields));
1148
- for (const line of notices) writeLine(line);
1149
- for (const row of rows) writeLine(toCsvRow(fields.map((f) => String(row[f] ?? ""))));
1150
- };
1151
- var writeJsonlRows = (rows, _fields, notices) => {
1152
- for (const line of notices) writeLine(line);
1153
- for (const row of rows) writeLine(JSON.stringify(row));
1154
- };
1155
- var OMITTED = "(omitted)";
1156
- var OMITTED_FALSE = `false ${OMITTED}`;
1157
- var OMITTED_LEGEND = `> ${OMITTED} = Google left this field off the row, which is how it sends false, 0 and "not set": the field WAS read. A field with no column here was not read.`;
1158
- function mdCell(row, field, booleanColumns) {
1159
- if (!(field in row)) return booleanColumns.has(field) ? OMITTED_FALSE : OMITTED;
1160
- return String(row[field] ?? "").replace(/\|/g, "\\|");
1161
- }
1162
- var writeMdRows = (rows, fields, notices) => {
1163
- const booleanColumns = new Set(fields.filter((f) => rows.some((row) => typeof row[f] === "boolean")));
1164
- for (const line of notices) writeLine(line);
1165
- writeLine(`| ${fields.join(" | ")} |`);
1166
- writeLine(`| ${fields.map(() => "---").join(" | ")} |`);
1167
- for (const row of rows) writeLine(`| ${fields.map((f) => mdCell(row, f, booleanColumns)).join(" | ")} |`);
1168
- if (rows.some((row) => fields.some((f) => !(f in row)))) writeLine(OMITTED_LEGEND);
1169
- };
1170
- var ROW_WRITERS = { csv: writeCsvRows, jsonl: writeJsonlRows, md: writeMdRows };
1171
- function writeRows(format, rows, columns, notices) {
1172
- const write = ROW_WRITERS[format] ?? writeMdRows;
1173
- write(rows, columns, notices);
1174
- if (rows.length > REPEAT_NOTICE_ABOVE_ROWS) {
1175
- for (const line of notices) writeLine(line);
1176
- }
1177
- }
1178
- function outputResults(rows, fieldDescs, warnings, args, cached, read) {
1179
- const format = args.output || "json";
1180
- const allWarnings = [
1181
- ...warnings,
1182
- ...completenessWarnings({
1183
- rowCount: rows.length,
1184
- effectiveLimit: read.effectiveLimit,
1185
- hasMore: Boolean(read.nextCursor)
1186
- })
1187
- ];
1188
- emitToStderr(warningLines(allWarnings, "csv"));
1189
- if (format === "json") {
1190
- writeAdsJson(
1191
- buildQueryEnvelope(rows, fieldDescs, allWarnings, {
1192
- full: Boolean(args.full),
1193
- cached,
1194
- nextCursor: read.nextCursor
1195
- })
1196
- );
1197
- return;
1198
- }
1199
- writeRows(format, rows, resultColumns(read.gaql, rows), warningLines(allWarnings, format));
1200
- }
1201
- function resolveGaqlInput(args) {
1202
- const positional = typeof args.query === "string" ? args.query.trim() : "";
1203
- const flag = typeof args.gaql === "string" ? args.gaql.trim() : "";
1204
- if (positional && flag && positional !== flag) {
1205
- return { ok: false, message: "Pass the GAQL statement once \u2014 as the positional or as --gaql, not both." };
1206
- }
1207
- return { ok: true, gaql: positional || flag };
1208
- }
1209
- function resolveGaql(args) {
1210
- if (args.preset) {
1211
- const preset = getPreset(args.preset);
1212
- if (!preset) {
1213
- const available = PRESETS.map((p) => p.name).join(", ");
1214
- writeAdsJson({
1215
- ok: false,
1216
- error: { code: "VALIDATION_ERROR", message: `Unknown preset: "${args.preset}". Available: ${available}` }
1217
- });
1218
- return null;
1219
- }
1220
- const expanded = expandPreset(preset, {
1221
- dateRange: args["date-range"],
1222
- includePaused: Boolean(args["include-paused"])
1223
- });
1224
- if (expanded.dateRangeError) {
1225
- writeAdsJson({
1226
- ok: false,
1227
- error: { code: "VALIDATION_ERROR", message: expanded.dateRangeError }
1228
- });
1229
- return null;
1230
- }
1231
- return expanded.query;
1232
- }
1233
- const input = resolveGaqlInput(args);
1234
- if (!input.ok || !input.gaql) {
1235
- writeAdsJson({
1236
- ok: false,
1237
- error: {
1238
- code: "VALIDATION_ERROR",
1239
- message: input.ok ? "Provide a GAQL query (positional or --gaql) or use --preset. Run --list-presets to see options." : input.message
1240
- }
1241
- });
1242
- return null;
1243
- }
1244
- return input.gaql;
1245
- }
1246
- var SERVING_HIERARCHY_RESOURCES = [
1247
- "campaign",
1248
- "ad_group",
1249
- "ad_group_ad",
1250
- "ad_group_criterion",
1251
- "keyword_view",
1252
- "search_term_view",
1253
- "shopping_performance_view",
1254
- "asset_group_asset"
1255
- ].filter((resource) => !(resource in SERVING_CHAINS));
1256
- function whereClause3(upperQuery) {
1257
- const whereIdx = upperQuery.indexOf(" WHERE ");
1258
- if (whereIdx === -1) return "";
1259
- let rest = upperQuery.slice(whereIdx + 7);
1260
- for (const trailing of [" ORDER BY ", " GROUP BY ", " LIMIT ", " PARAMETERS "]) {
1261
- const idx = rest.indexOf(trailing);
1262
- if (idx !== -1) rest = rest.slice(0, idx);
1263
- }
1264
- return rest;
1265
- }
1266
- function servingScopeWarnings(args, finalQuery) {
1267
- if (args.preset) {
1268
- const name = String(args.preset);
1269
- if (!args["include-paused"] || isInventoryPreset(name) || !getPreset(name)?.statusFields?.length) return [];
1270
- return [
1271
- {
1272
- code: "SERVING_SCOPE",
1273
- message: "Paused entities are included (--include-paused). Only recommend changes for actually-serving entities (enabled campaign, ad group, and ad) unless the user asked about paused ones."
1274
- }
1275
- ];
1276
- }
1277
- const upper = finalQuery.toUpperCase();
1278
- const fromMatch = upper.match(/\bFROM\s+([A-Z_]+)/);
1279
- const resource = fromMatch?.[1]?.toLowerCase();
1280
- const hierarchical = resource ? SERVING_HIERARCHY_RESOURCES.includes(resource) : false;
1281
- const filtersStatus = whereClause3(upper).includes(".STATUS");
1282
- if (hierarchical && !filtersStatus) {
1283
- return [
1284
- {
1285
- code: "SERVING_SCOPE",
1286
- message: "This query has no status filter, so it may return paused entities that aren't actually serving. Google Ads has no single serving flag \u2014 an entity serves only when its whole chain is ENABLED. Add campaign.status = 'ENABLED' AND ad_group.status = 'ENABLED' AND ad_group_ad.status = 'ENABLED' (as applicable), or use a --preset, unless you intend to include paused entities."
1287
- }
1288
- ];
1289
- }
1290
- return [];
1291
- }
1292
- function syncedCopyWarnings(args) {
1293
- const hint = googlePresetSyncedHint(typeof args.preset === "string" ? args.preset : void 0);
1294
- return hint ? [{ code: "SYNCED_COPY", message: hint }] : [];
1295
- }
1296
- function parseSelectedFields(gaql) {
1297
- const match = gaql.match(/\bSELECT\b([\s\S]*?)\bFROM\b/i);
1298
- const list = match?.[1];
1299
- if (!list) return [];
1300
- return list.split(",").map((field) => field.trim()).filter((field) => /^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z0-9_]+)*$/.test(field));
1301
- }
1302
- function foldObservedFields(rows, observed) {
1303
- for (const row of rows) {
1304
- for (const key of Object.keys(row)) observed.add(key);
1305
- }
1306
- }
1307
- function unobservedSelectedFields(gaql, rows) {
1308
- const observed = /* @__PURE__ */ new Set();
1309
- foldObservedFields(rows, observed);
1310
- return unobservedFields(gaql, observed);
1311
- }
1312
- function unobservedFields(gaql, observed) {
1313
- return parseSelectedFields(gaql).filter((field) => {
1314
- if (field.endsWith(".resource_name")) return false;
1315
- if (observed.has(field)) return false;
1316
- return ![...observed].some((key) => key.startsWith(`${field}.`));
1317
- });
1318
- }
1319
- function missingFieldWarnings(gaql, rows) {
1320
- const observed = /* @__PURE__ */ new Set();
1321
- foldObservedFields(rows, observed);
1322
- return missingFieldWarningsFor(gaql, observed, rows.length);
1323
- }
1324
- function missingFieldWarningsFor(gaql, observed, rowCount) {
1325
- if (rowCount === 0) return [];
1326
- const missing = unobservedFields(gaql, observed);
1327
- if (missing.length === 0) return [];
1328
- return [
1329
- {
1330
- code: "MISSING_FIELDS",
1331
- message: `These SELECTed fields came back on no row: ${missing.join(", ")}. Google Ads omits a field entirely when it has no value, so this does NOT mean the setting is empty \u2014 it means this read didn't observe it. Check the level that owns the setting before concluding it is unset.`
1332
- }
1333
- ];
1334
- }
1335
- function unwrittenColumnWarnings(header, observed) {
1336
- const written = new Set(header);
1337
- const unwritten = [...observed].filter((key) => !written.has(key));
1338
- if (unwritten.length === 0) return [];
1339
- return [
1340
- {
1341
- code: "UNWRITTEN_COLUMNS",
1342
- message: `The file has no column for ${unwritten.join(", ")}: the header was fixed on the first page, which carried none of them, so their values from later pages are NOT in the file. Do not read those columns as empty. SELECT these fields by name instead of their parent, or write to a .jsonl file, then re-run.`
1343
- }
1344
- ];
1345
- }
1346
- function keywordServingOptions(gaql) {
1347
- return { statusReasonsSelected: parseSelectedFields(gaql).includes("ad_group_criterion.primary_status_reasons") };
1348
- }
1349
- async function fetchAllPages(gaql, body, args, servingOptions) {
1350
- let allRows = [];
1351
- let pageToken = args.cursor;
1352
- let totalRowsWritten = 0;
1353
- let keywordLimits;
1354
- const observedFields = /* @__PURE__ */ new Set();
1355
- let fileColumns;
1356
- do {
1357
- const requestBody = { ...body };
1358
- if (pageToken) requestBody.pageToken = pageToken;
1359
- const response = await apiPost("/api/ads/google/query", requestBody);
1360
- const rows = response.rows ?? [];
1361
- pageToken = response.pageToken;
1362
- if (args.out) {
1363
- const shouldAppend = args.append || totalRowsWritten > 0;
1364
- fileColumns ??= resultColumns(gaql, rows);
1365
- writeRowsToFile(resolve(args.out), rows, fileColumns, shouldAppend);
1366
- totalRowsWritten += rows.length;
1367
- keywordLimits = collectKeywordLimits(rows, servingOptions, keywordLimits);
1368
- foldObservedFields(rows, observedFields);
1369
- } else {
1370
- allRows = allRows.concat(rows);
1371
- }
1372
- if (!args.all) break;
1373
- } while (pageToken);
1374
- return {
1375
- allRows,
1376
- lastPageToken: pageToken,
1377
- totalRowsWritten,
1378
- keywordLimits: keywordLimits ?? collectKeywordLimits([], servingOptions),
1379
- observedFields,
1380
- fileColumns: fileColumns ?? []
1381
- };
1382
- }
1383
- function pageCacheKey(customerId, query, pageSize, cursor) {
1384
- return buildQueryCacheKey(customerId, `${query}\0page=${pageSize}\0cursor=${cursor ?? ""}`);
1385
- }
1386
- async function executeQuery(finalQuery, args, customerId, limit, warnings, useCache, cacheKey) {
1387
- const body = { customerId, query: finalQuery, pageSize: limit };
1388
- const managerId = getManagerIdForCustomer(customerId);
1389
- if (managerId) body.managerId = managerId;
1390
- if (!useCache) body.skipCache = true;
1391
- const servingOptions = keywordServingOptions(finalQuery);
1392
- const { allRows, lastPageToken, totalRowsWritten, keywordLimits, observedFields, fileColumns } = await fetchAllPages(
1393
- finalQuery,
1394
- body,
1395
- args,
1396
- servingOptions
1397
- );
1398
- if (args.out) {
1399
- const truncation = completenessWarnings({
1400
- rowCount: totalRowsWritten,
1401
- effectiveLimit: effectiveRowLimit(finalQuery),
1402
- hasMore: Boolean(lastPageToken)
1403
- });
1404
- const fileWarnings = [
1405
- ...warnings,
1406
- ...renderKeywordLimits(keywordLimits),
1407
- ...missingFieldWarningsFor(finalQuery, observedFields, totalRowsWritten),
1408
- // Only a CSV has a header to fall out of; json and jsonl files carry every row whole.
1409
- ...isCsvPath(args.out) ? unwrittenColumnWarnings(fileColumns, observedFields) : [],
1410
- ...conversionMixWarnings(finalQuery),
1411
- ...moneyUnitWarnings(parseSelectedFields(finalQuery)),
1412
- ...truncation
1413
- ];
1414
- emitToStderr(warningLines(fileWarnings, "csv"));
1415
- writeAdsJson(
1416
- buildFileSummary({
1417
- file: resolve(args.out),
1418
- rows: totalRowsWritten,
1419
- warnings: fileWarnings,
1420
- complete: truncation.length === 0
1421
- })
1422
- );
1423
- return;
1424
- }
1425
- if (useCache && !args.all && allRows.length > 0) {
1426
- const page = { rows: allRows, ...lastPageToken ? { cursor: lastPageToken } : {} };
1427
- cacheSet("queries", cacheKey, page, getQueryTtl(finalQuery), getFieldDescriptions(extractFields(allRows)));
1428
- }
1429
- const fields = extractFields(allRows);
1430
- outputResults(
1431
- allRows,
1432
- getFieldDescriptions(fields),
1433
- [
1434
- ...warnings,
1435
- ...missingFieldWarnings(finalQuery, allRows),
1436
- ...keywordServingWarnings(allRows, servingOptions),
1437
- ...conversionMixWarnings(finalQuery),
1438
- ...moneyUnitWarnings(resultColumns(finalQuery, allRows))
1439
- ],
1440
- args,
1441
- false,
1442
- {
1443
- gaql: finalQuery,
1444
- effectiveLimit: effectiveRowLimit(finalQuery),
1445
- nextCursor: lastPageToken
1446
- }
1447
- );
1448
- }
1449
- function shouldReadCache(args) {
1450
- return !args["no-cache"] && !args.out && !args.all;
1451
- }
1452
- var DEFAULT_QUERY_LIMIT = 200;
1453
- function parseQueryLimit(raw, fallback = DEFAULT_QUERY_LIMIT) {
1454
- if (raw === void 0 || raw === null || raw === "") return { ok: true, limit: fallback };
1455
- const limit = Number(raw);
1456
- if (Number.isInteger(limit) && limit >= 1 && limit <= GOOGLE_ADS_QUERY_MAX_PAGE_SIZE) return { ok: true, limit };
1457
- return {
1458
- ok: false,
1459
- error: {
1460
- ok: false,
1461
- error: {
1462
- code: "VALIDATION_ERROR",
1463
- message: `--limit must be a whole number from 1 to ${GOOGLE_ADS_QUERY_MAX_PAGE_SIZE}, got '${String(raw)}'.`,
1464
- fix: {
1465
- action: "retry_with_flag",
1466
- 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.`
1467
- },
1468
- retryable: false
1469
- }
1470
- }
1471
- };
1472
- }
1473
- function queryPageSize(args) {
1474
- const preset = typeof args.preset === "string" ? getPreset(args.preset) : void 0;
1475
- return parseQueryLimit(args.limit, preset?.defaultLimit ?? DEFAULT_QUERY_LIMIT);
1476
- }
1477
- async function validateArgs(args) {
1478
- const parsedLimit = queryPageSize(args);
1479
- if (!parsedLimit.ok) {
1480
- writeAdsJson(parsedLimit.error);
1481
- process.exit(1);
1482
- }
1483
- const { limit } = parsedLimit;
1484
- const customerId = await resolveCustomerId(args);
1485
- const gaql = resolveGaql(args);
1486
- if (!gaql) {
1487
- process.exit(1);
1488
- }
1489
- const preflight = validatePreflight(gaql, customerId);
1490
- if (!preflight.valid && preflight.error) {
1491
- writeAdsJson(preflight.error);
1492
- process.exit(1);
1493
- }
1494
- const finalQuery = preflight.correctedQuery ?? gaql;
1495
- return {
1496
- customerId,
1497
- limit,
1498
- finalQuery,
1499
- warnings: [...preflight.warnings, ...servingScopeWarnings(args, finalQuery), ...syncedCopyWarnings(args)],
1500
- useCache: !args["no-cache"],
1501
- cacheKey: pageCacheKey(customerId, finalQuery, limit, args.cursor)
1502
- };
1503
- }
1504
- function handleQueryError(err, finalQuery, customerId) {
1505
- if (err instanceof ApiError) {
1506
- const envelope = parseApiError(err.message, finalQuery, customerId, err.code);
1507
- envelope.error.gaqlExecuted = finalQuery;
1508
- writeAdsJson(envelope);
1509
- process.exit(1);
1510
- }
1511
- writeAdsJson({
1512
- ok: false,
1513
- error: {
1514
- code: "NETWORK_ERROR",
1515
- message: err instanceof Error ? err.message : "Unexpected error",
1516
- fix: { action: "wait_and_retry", explanation: "Network error \u2014 check connectivity and retry" },
1517
- retryable: true,
1518
- gaqlExecuted: finalQuery
1519
- }
1520
- });
1521
- process.exit(1);
1522
- }
1523
- async function runQuery(args) {
1524
- const validated = await validateArgs(args);
1525
- if (!validated) return;
1526
- const { customerId, limit, finalQuery, warnings, useCache, cacheKey } = validated;
1527
- if (shouldReadCache(args)) {
1528
- const cached = cacheGet("queries", cacheKey);
1529
- if (cached && Array.isArray(cached.data.rows)) {
1530
- const rows = cached.data.rows;
1531
- outputResults(
1532
- rows,
1533
- cached.fields ?? getFieldDescriptions(extractFields(rows)),
1534
- [
1535
- ...warnings,
1536
- ...missingFieldWarnings(finalQuery, rows),
1537
- ...keywordServingWarnings(rows, keywordServingOptions(finalQuery)),
1538
- ...conversionMixWarnings(finalQuery),
1539
- ...moneyUnitWarnings(resultColumns(finalQuery, rows))
1540
- ],
1541
- args,
1542
- true,
1543
- { gaql: finalQuery, effectiveLimit: effectiveRowLimit(finalQuery), nextCursor: cached.data.cursor }
1544
- );
1545
- return;
1546
- }
1547
- }
1548
- try {
1549
- await executeQuery(finalQuery, args, customerId, limit, warnings, useCache, cacheKey);
1550
- } catch (err) {
1551
- handleQueryError(err, finalQuery, customerId);
1552
- }
1553
- }
1554
- var queryCommand = defineCommand({
1555
- meta: {
1556
- name: "query",
1557
- description: `Run GAQL against Google Ads, one page at a time. Supports raw GAQL, presets, paging, file export, and caching.
1558
-
1559
- Start here:
1560
- baker ads google query --list-presets
1561
- baker ads google query --preset campaign-performance --customer-id 1234567890
1562
-
1563
- Each read returns one page (--limit rows; the preset's page size by default, else 200). When the
1564
- account holds more, the envelope carries pagination.cursor: pass it with --cursor for the next page,
1565
- or read everything with --all --out <file>. A LIMIT written in the GAQL caps the whole read.
1566
-
1567
- Examples:
1568
- baker ads google query "SELECT campaign.name, metrics.clicks FROM campaign WHERE segments.date DURING LAST_7_DAYS" --customer-id 1234567890
1569
- baker ads google query --gaql "SELECT ad_group.name FROM ad_group WHERE ad_group.status = 'ENABLED'" --customer-id 1234567890
1570
- baker ads google query --preset search-terms --customer-id 1234567890 --date-range LAST_7_DAYS --all --out terms.csv
1571
- baker ads google query --preset keyword-serving --customer-id 1234567890 --cursor <pagination.cursor>`
1572
- },
1573
- args: {
1574
- query: { type: "positional", description: "GAQL SELECT statement", required: false },
1575
- gaql: {
1576
- type: "string",
1577
- description: "GAQL SELECT statement as a flag (instead of the positional)",
1578
- required: false
1579
- },
1580
- "customer-id": { type: "string", description: "Google Ads customer ID (10 digits, no dashes)", required: false },
1581
- preset: { type: "string", description: "Named query preset", required: false },
1582
- "date-range": { type: "string", description: "Date range override for presets", required: false },
1583
- "include-paused": {
1584
- type: "boolean",
1585
- description: "Include paused entities in preset results (default: serving entities only)",
1586
- required: false
1587
- },
1588
- limit: {
1589
- type: "string",
1590
- description: "Rows per page (default: the preset's page size, else 200)",
1591
- required: false
1592
- },
1593
- "list-presets": { type: "boolean", description: "List available presets", required: false },
1594
- cursor: { type: "string", description: "pagination.cursor from the previous page", required: false },
1595
- all: { type: "boolean", description: "Follow every page (use with --out for large reads)", required: false },
1596
- out: { type: "string", description: "File path for output", required: false },
1597
- append: { type: "boolean", description: "Append to file", required: false },
1598
- output: { type: "string", description: "Format: json|csv|jsonl|md", required: false, default: "json" },
1599
- "no-cache": { type: "boolean", description: "Skip cache", required: false },
1600
- full: { type: "boolean", description: "Include the field description glossary", required: false }
1601
- },
1602
- run: async ({ args }) => {
1603
- if (args["list-presets"]) {
1604
- writeAdsJson({
1605
- ok: true,
1606
- data: PRESETS.map((p) => ({
1607
- name: p.name,
1608
- description: p.description,
1609
- defaultDateRange: p.defaultDateRange,
1610
- pageSize: p.defaultLimit,
1611
- servingOnly: (p.statusFields?.length ?? 0) > 0,
1612
- gaql: expandPreset(p, {}).query
1613
- }))
1614
- });
1615
- return;
1616
- }
1617
- await runQuery(args);
1618
- }
1619
- });
1620
-
1621
- export {
1622
- resultColumns,
1623
- effectiveRowLimit,
1624
- warningLines,
1625
- completenessWarnings,
1626
- buildQueryEnvelope,
1627
- summariseWarnings,
1628
- buildFileSummary,
1629
- outputResults,
1630
- resolveGaqlInput,
1631
- servingScopeWarnings,
1632
- parseSelectedFields,
1633
- unobservedSelectedFields,
1634
- unobservedFields,
1635
- missingFieldWarnings,
1636
- missingFieldWarningsFor,
1637
- unwrittenColumnWarnings,
1638
- keywordServingOptions,
1639
- pageCacheKey,
1640
- shouldReadCache,
1641
- parseQueryLimit,
1642
- queryPageSize,
1643
- runQuery,
1644
- queryCommand
1645
- };
1646
- //# sourceMappingURL=chunk-XMLYBQ3R.js.map