@koda-sl/baker-cli 0.489.0 → 0.491.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (859) hide show
  1. package/README.md +169 -7
  2. package/dist/account-3H6BZO5H.js +80 -0
  3. package/dist/account-IKFDY52P.js +138 -0
  4. package/dist/account-IKFDY52P.js.map +1 -0
  5. package/dist/account-VGSYM7LY.js +79 -0
  6. package/dist/account-assets-LKZVWZAR.js +289 -0
  7. package/dist/account-assets-LKZVWZAR.js.map +1 -0
  8. package/dist/account-level-UJOZDVXY.js +608 -0
  9. package/dist/account-level-UJOZDVXY.js.map +1 -0
  10. package/dist/account-writes-AE5IJGGW.js +66 -0
  11. package/dist/accounts-2ARS6XP2.js +77 -0
  12. package/dist/accounts-AQFW4ZUM.js +611 -0
  13. package/dist/accounts-K4INATCW.js +75 -0
  14. package/dist/actions-QMUHOAXG.js +55 -0
  15. package/dist/activecampaign-J3QN5FMG.js +935 -0
  16. package/dist/activities-T253KK4Q.js +74 -0
  17. package/dist/ad-group-writes-VRSBI2Z2.js +170 -0
  18. package/dist/ad-groups-IEBVEAMS.js +68 -0
  19. package/dist/ad-writes-ALV4KFPZ.js +174 -0
  20. package/dist/add-VDUA6OWM.js +104 -0
  21. package/dist/add-XHOKCSW5.js +302 -0
  22. package/dist/ads-CQZHD7FC.js +77 -0
  23. package/dist/ads-HGDPNIT6.js +40 -0
  24. package/dist/ads-ZEY72UBN.js +114 -0
  25. package/dist/ads-ZEY72UBN.js.map +1 -0
  26. package/dist/adsets-5H3MOT3D.js +177 -0
  27. package/dist/adsets-5H3MOT3D.js.map +1 -0
  28. package/dist/advertisers-UDSEFMP7.js +120 -0
  29. package/dist/analytics-TBETZOPJ.js +433 -0
  30. package/dist/analytics-VH74LMMC.js +1976 -0
  31. package/dist/asset-writes-L5TMKIZC.js +47 -0
  32. package/dist/assign-6IE2ASFC.js +77 -0
  33. package/dist/audience-size-CSBWDFEP.js +73 -0
  34. package/dist/audience-writes-X52VG35Y.js +324 -0
  35. package/dist/audience-writes-X52VG35Y.js.map +1 -0
  36. package/dist/audiences-AAZH56WD.js +268 -0
  37. package/dist/audiences-X3RLGOVM.js +84 -0
  38. package/dist/audiences-X3RLGOVM.js.map +1 -0
  39. package/dist/audit-AEENRVGD.js +151 -0
  40. package/dist/autocomplete-AAGTJHVL.js +111 -0
  41. package/dist/avatars-VEATUUKU.js +38 -0
  42. package/dist/bid-pricing-SZTGCZTV.js +100 -0
  43. package/dist/brand-MXGETE4R.js +22 -0
  44. package/dist/brief-3GHSHOGM.js +538 -0
  45. package/dist/businesses-H3HIDQX6.js +53 -0
  46. package/dist/campaign-groups-WRI56M5X.js +95 -0
  47. package/dist/campaign-writes-PYGKSCPS.js +165 -0
  48. package/dist/campaign-writes-PYGKSCPS.js.map +1 -0
  49. package/dist/campaign-writes-U5PUVSMT.js +170 -0
  50. package/dist/campaigns-4QWC2JE7.js +109 -0
  51. package/dist/campaigns-AV6G3AUU.js +127 -0
  52. package/dist/campaigns-AV6G3AUU.js.map +1 -0
  53. package/dist/campaigns-JEIKY2M4.js +76 -0
  54. package/dist/campaigns-Q4HN7HBY.js +107 -0
  55. package/dist/canvas-VJ3XKCAC.js +46 -0
  56. package/dist/capabilities-SNGGAOV3.js +144 -0
  57. package/dist/catalog-S32MX453.js +65 -0
  58. package/dist/catalogs-OCVXZLIF.js +128 -0
  59. package/dist/catalogs-RXJTZTVX.js +778 -0
  60. package/dist/catalogs-RXJTZTVX.js.map +1 -0
  61. package/dist/chatgpt-QVF2FD3E.js +47 -0
  62. package/dist/chats-2DRTB7GK.js +276 -0
  63. package/dist/chats-2DRTB7GK.js.map +1 -0
  64. package/dist/check-Z6UMIQKD.js +104 -0
  65. package/dist/chunk-2C7AHPM4.js +191 -0
  66. package/dist/chunk-2C7AHPM4.js.map +1 -0
  67. package/dist/chunk-2WZI36D3.js +317 -0
  68. package/dist/chunk-3AMLOCXY.js +392 -0
  69. package/dist/chunk-3CVAEQMZ.js +156 -0
  70. package/dist/chunk-3WAYZQNV.js +61 -0
  71. package/dist/chunk-46GWHUKN.js +225 -0
  72. package/dist/chunk-4O6T76A3.js +191 -0
  73. package/dist/chunk-5C35OW7L.js +205 -0
  74. package/dist/chunk-5C35OW7L.js.map +1 -0
  75. package/dist/chunk-5GQCN2QZ.js +391 -0
  76. package/dist/chunk-5GQCN2QZ.js.map +1 -0
  77. package/dist/chunk-5MCVK4A3.js +903 -0
  78. package/dist/chunk-5ZLN23V5.js +97 -0
  79. package/dist/chunk-65Y3RCWP.js +68 -0
  80. package/dist/chunk-65Y3RCWP.js.map +1 -0
  81. package/dist/chunk-77ULVP62.js +547 -0
  82. package/dist/chunk-A4MVVPJ2.js +4204 -0
  83. package/dist/chunk-A4MVVPJ2.js.map +1 -0
  84. package/dist/chunk-AQM4JH62.js +274 -0
  85. package/dist/chunk-AQM4JH62.js.map +1 -0
  86. package/dist/chunk-AW2GKIGS.js +433 -0
  87. package/dist/chunk-BRLY6XD6.js +249 -0
  88. package/dist/chunk-C7NWUCLQ.js +64 -0
  89. package/dist/chunk-CP4P6YKM.js +287 -0
  90. package/dist/chunk-CP4P6YKM.js.map +1 -0
  91. package/dist/chunk-D4HKJBEW.js +23 -0
  92. package/dist/chunk-DAO63OOP.js +6352 -0
  93. package/dist/chunk-DAO63OOP.js.map +1 -0
  94. package/dist/chunk-DCBZ5CHZ.js +139 -0
  95. package/dist/chunk-G6XKD7QE.js +77 -0
  96. package/dist/chunk-GBFL4TD2.js +172 -0
  97. package/dist/chunk-H5SCKWFT.js +224 -0
  98. package/dist/chunk-HLVRHBKL.js +1078 -0
  99. package/dist/chunk-HLVRHBKL.js.map +1 -0
  100. package/dist/chunk-HXPK6KAL.js +363 -0
  101. package/dist/chunk-I7GOSMWT.js +197 -0
  102. package/dist/chunk-IBY44U2M.js +1079 -0
  103. package/dist/chunk-ITNHIZKK.js +275 -0
  104. package/dist/chunk-J33P2JNS.js +455 -0
  105. package/dist/chunk-JH2L5CQD.js +206 -0
  106. package/dist/chunk-JQH5VG6F.js +5368 -0
  107. package/dist/chunk-JVH5A3XC.js +8914 -0
  108. package/dist/chunk-KTOYQP6D.js +169 -0
  109. package/dist/chunk-LO3IF5PS.js +399 -0
  110. package/dist/chunk-LRRFGOW3.js +604 -0
  111. package/dist/chunk-LTPTJWZC.js +942 -0
  112. package/dist/chunk-MRQHJW5U.js +159 -0
  113. package/dist/chunk-NHYI7ORL.js +346 -0
  114. package/dist/chunk-NLI7C3K2.js +51 -0
  115. package/dist/chunk-NSEMXBUB.js +91 -0
  116. package/dist/chunk-OM2BRYXJ.js +3868 -0
  117. package/dist/chunk-OY4SKCIU.js +103 -0
  118. package/dist/chunk-OYAJNTRO.js +494 -0
  119. package/dist/chunk-PL7J3DPQ.js +831 -0
  120. package/dist/chunk-PUSBUMYM.js +89 -0
  121. package/dist/chunk-QTOZ32SU.js +163 -0
  122. package/dist/chunk-QTOZ32SU.js.map +1 -0
  123. package/dist/chunk-RRADFRPI.js +297 -0
  124. package/dist/chunk-SGEPZB3D.js +344 -0
  125. package/dist/chunk-SVAB6KV5.js +219 -0
  126. package/dist/chunk-SVAB6KV5.js.map +1 -0
  127. package/dist/chunk-TFTZDWCX.js +66 -0
  128. package/dist/chunk-TG4NCHFS.js +142 -0
  129. package/dist/chunk-TTHM66TA.js +207 -0
  130. package/dist/chunk-VL2GNXZY.js +19 -0
  131. package/dist/chunk-VQPZDM6N.js +160 -0
  132. package/dist/chunk-XCKINS7K.js +57 -0
  133. package/dist/chunk-YLYXSJ6O.js +8939 -0
  134. package/dist/chunk-ZAPO6UWS.js +592 -0
  135. package/dist/chunk-ZEPUDYPL.js +122 -0
  136. package/dist/chunk-ZJSGGJ5R.js +167 -0
  137. package/dist/claim-J2LYNHZK.js +197 -0
  138. package/dist/cli.js +34 -34
  139. package/dist/companies-VYY22B6T.js +195 -0
  140. package/dist/complete-5I32XM7P.js +81 -0
  141. package/dist/connect-EUFFQQ7O.js +42 -0
  142. package/dist/conversation-D6KZHGPP.js +93 -0
  143. package/dist/conversion-writes-ECZBVY7D.js +120 -0
  144. package/dist/conversions-5QCSCRLI.js +76 -0
  145. package/dist/conversions-Y3X6ZTTF.js +135 -0
  146. package/dist/copy-writes-D2RTHAL6.js +167 -0
  147. package/dist/copy-writes-D2RTHAL6.js.map +1 -0
  148. package/dist/create-2JCRTQJL.js +59 -0
  149. package/dist/create-LMSQPHPB.js +235 -0
  150. package/dist/create-MBLNB5RY.js +132 -0
  151. package/dist/create-VR7RXKL7.js +207 -0
  152. package/dist/creatives-5C42BDMW.js +182 -0
  153. package/dist/creatives-HYPSTANO.js +58 -0
  154. package/dist/creatives-MZ6ICNSY.js +88 -0
  155. package/dist/creatives-MZ6ICNSY.js.map +1 -0
  156. package/dist/credentials-4H4AUYJN.js +287 -0
  157. package/dist/critique-UOJZWDG2.js +1458 -0
  158. package/dist/critique-WCWMQQVV.js +227 -0
  159. package/dist/crm-B7OTHMBP.js +318 -0
  160. package/dist/crm-DZRWKJ6V.js +224 -0
  161. package/dist/custom-conversions-FIP6ZS34.js +127 -0
  162. package/dist/custom-conversions-FIP6ZS34.js.map +1 -0
  163. package/dist/customers-AOFJJCGD.js +56 -0
  164. package/dist/delete-DEG5KOBY.js +64 -0
  165. package/dist/delete-EFIODCXG.js +54 -0
  166. package/dist/delete-PQIMW2LK.js +66 -0
  167. package/dist/demographics-F26DIOCM.js +138 -0
  168. package/dist/discard-2EJY6UGP.js +66 -0
  169. package/dist/domain-XLJABLWB.js +98 -0
  170. package/dist/draft-2YND6T4U.js +217 -0
  171. package/dist/draft-34CGWUVA.js +281 -0
  172. package/dist/draft-L45PGCYZ.js +237 -0
  173. package/dist/draft-L45PGCYZ.js.map +1 -0
  174. package/dist/draft-TCPK6XYW.js +332 -0
  175. package/dist/draft-TCPK6XYW.js.map +1 -0
  176. package/dist/draft-WRVEANL5.js +306 -0
  177. package/dist/engine/index.js +4 -4
  178. package/dist/experiment-7N4QFRWV.js +1397 -0
  179. package/dist/facets-OPTNDPW2.js +114 -0
  180. package/dist/feedback-43BPXNBI.js +106 -0
  181. package/dist/feedback-record-35ZSDL6Z.js +260 -0
  182. package/dist/fetch-O46XBA7S.js +176 -0
  183. package/dist/find-FSQAEGGF.js +134 -0
  184. package/dist/fit-CWJ5QQ4R.js +62 -0
  185. package/dist/flows-CVORIQ4B.js +247 -0
  186. package/dist/fonts-6TPYR6IW.js +36 -0
  187. package/dist/forecast-2VLA6NJA.js +118 -0
  188. package/dist/funnel-XLKDLXMG.js +394 -0
  189. package/dist/ga4-LPDIBNYP.js +55 -0
  190. package/dist/get-O56GGN3V.js +56 -0
  191. package/dist/get-WFQ4XEAW.js +79 -0
  192. package/dist/google-5ESVO76E.js +136 -0
  193. package/dist/google-ads-DZMOTUY5.js +195 -0
  194. package/dist/gsc-FIZTQX3N.js +30 -0
  195. package/dist/history-43BBQZOB.js +133 -0
  196. package/dist/history-QKDYBSYM.js +67 -0
  197. package/dist/hubspot-S44MPK3G.js +779 -0
  198. package/dist/icon-CSVAZ7NE.js +137 -0
  199. package/dist/ideas-SLP5WXFF.js +40 -0
  200. package/dist/images-TWZOROCT.js +92 -0
  201. package/dist/ingest-5GCZ5ZBV.js +23 -0
  202. package/dist/ingest-P54J4W3V.js +107 -0
  203. package/dist/insights-YWVJMATY.js +424 -0
  204. package/dist/insights-YWVJMATY.js.map +1 -0
  205. package/dist/inspect-S4COGUBC.js +189 -0
  206. package/dist/inspiration-IX5N724J.js +53 -0
  207. package/dist/instant-experiences-NQ2GWIWL.js +257 -0
  208. package/dist/instant-experiences-NQ2GWIWL.js.map +1 -0
  209. package/dist/keyword-metrics-26CCKFZK.js +197 -0
  210. package/dist/keywords-for-site-JWWECF63.js +128 -0
  211. package/dist/landing-VFDRADZY.js +28 -0
  212. package/dist/leads-DTKKYSKH.js +90 -0
  213. package/dist/leads-THI37ZMD.js +537 -0
  214. package/dist/leads-THI37ZMD.js.map +1 -0
  215. package/dist/learn-GQ75IPRK.js +204 -0
  216. package/dist/line-item-writes-DVVHVR3Y.js +208 -0
  217. package/dist/line-items-EOZMK7A5.js +103 -0
  218. package/dist/link-R5NGCQ5H.js +64 -0
  219. package/dist/linkedin-DHZO3IJX.js +1057 -0
  220. package/dist/list-57QBEGLM.js +303 -0
  221. package/dist/list-Q44BBHDI.js +64 -0
  222. package/dist/list-W6G2NTG5.js +151 -0
  223. package/dist/locations-HM56X2MK.js +67 -0
  224. package/dist/locations-HM56X2MK.js.map +1 -0
  225. package/dist/log-B6X5EPKA.js +92 -0
  226. package/dist/logo-VHXH4J6A.js +18 -0
  227. package/dist/make-OIFLF3QS.js +1353 -0
  228. package/dist/map-PIOZT2MQ.js +433 -0
  229. package/dist/mcp-GFKHLWDB.js +714 -0
  230. package/dist/media-H6B7VDON.js +18 -0
  231. package/dist/media-H6B7VDON.js.map +1 -0
  232. package/dist/media-sources-VMMMW5UM.js +32 -0
  233. package/dist/members-W2QBMNIW.js +44 -0
  234. package/dist/meta-YHDTGJQ6.js +122 -0
  235. package/dist/meta-YHDTGJQ6.js.map +1 -0
  236. package/dist/normalize-N6XC3SLC.js +141 -0
  237. package/dist/options-XYJY2OEQ.js +122 -0
  238. package/dist/organization-BVTXCZIV.js +942 -0
  239. package/dist/organization-BVTXCZIV.js.map +1 -0
  240. package/dist/page-photos-CXRG4AXV.js +115 -0
  241. package/dist/page-photos-CXRG4AXV.js.map +1 -0
  242. package/dist/pages-PTWRXAZT.js +66 -0
  243. package/dist/performance-7NEZTOJ5.js +24 -0
  244. package/dist/pixels-MYT3TCHZ.js +60 -0
  245. package/dist/pixels-ZZCQUS3J.js +108 -0
  246. package/dist/preview-XOXAAPMQ.js +215 -0
  247. package/dist/preview-XOXAAPMQ.js.map +1 -0
  248. package/dist/promoted-tweet-writes-X2F7R2AE.js +180 -0
  249. package/dist/promoted-tweets-XCSD6VKP.js +119 -0
  250. package/dist/publish-OBY6E43R.js +341 -0
  251. package/dist/reddit-WJ6KHYBC.js +26 -0
  252. package/dist/refresh-G5BQ2LWU.js +94 -0
  253. package/dist/release-PBZO35KY.js +60 -0
  254. package/dist/remove-VJ2MEUPM.js +50 -0
  255. package/dist/reopen-W3LYOHSR.js +63 -0
  256. package/dist/rerun-4GDNBFNM.js +90 -0
  257. package/dist/research-4YTFPGH7.js +262 -0
  258. package/dist/research-LOQRIBO6.js +62 -0
  259. package/dist/reset-55CCQGXB.js +54 -0
  260. package/dist/reset-AVTQEJPZ.js +54 -0
  261. package/dist/resolve-E6FNMFE3.js +121 -0
  262. package/dist/retry-HBJ7MKVI.js +60 -0
  263. package/dist/retry-QBRYM6MG.js +62 -0
  264. package/dist/rule-writes-6ZCAJDYZ.js +522 -0
  265. package/dist/rule-writes-6ZCAJDYZ.js.map +1 -0
  266. package/dist/rules-BMYOY2BM.js +216 -0
  267. package/dist/rules-BMYOY2BM.js.map +1 -0
  268. package/dist/rules-XNDBGOIS.js +96 -0
  269. package/dist/rules-add-UM3ZKSVD.js +462 -0
  270. package/dist/run-D4YHZ4Z4.js +66 -0
  271. package/dist/run-ZCJ7NP63.js +65 -0
  272. package/dist/scaffold-ad-VQZAP32M.js +1511 -0
  273. package/dist/scaffold-static-ad-LEU4M44N.js +1005 -0
  274. package/dist/scaffold-video-PSWSYRSC.js +883 -0
  275. package/dist/schedule-AAH7HYFK.js +61 -0
  276. package/dist/scheduled-agents-HDABMHZI.js +50 -0
  277. package/dist/schema-OH5OWMVQ.js +132 -0
  278. package/dist/search-BSDPVSGA.js +174 -0
  279. package/dist/select-EI4QF4YZ.js +101 -0
  280. package/dist/set-prompt-RKDAGUWG.js +193 -0
  281. package/dist/setup-links-CNNJA7AB.js +141 -0
  282. package/dist/shared-3IBNDEFL.js +31 -0
  283. package/dist/site-NV4U7PIF.js +177 -0
  284. package/dist/sources-ATONL7W5.js +454 -0
  285. package/dist/sources-C3TGHKLQ.js +30 -0
  286. package/dist/stale-6QPXL6BZ.js +71 -0
  287. package/dist/stats-ZAGJH4AD.js +34 -0
  288. package/dist/status-BML3F4MZ.js +62 -0
  289. package/dist/stock-6SHHLSKG.js +179 -0
  290. package/dist/studies-4NIV4D5Y.js +249 -0
  291. package/dist/studies-4NIV4D5Y.js.map +1 -0
  292. package/dist/studio-ZLCGXFAN.js +49 -0
  293. package/dist/study-writes-L2AA2PGL.js +467 -0
  294. package/dist/study-writes-L2AA2PGL.js.map +1 -0
  295. package/dist/sync-DZAOUQPE.js +54 -0
  296. package/dist/sync-definition-RFEL65JE.js +64 -0
  297. package/dist/tag-manager-3CJ66GKJ.js +43 -0
  298. package/dist/tags-2KSXCJRZ.js +20 -0
  299. package/dist/tags-662KZJLV.js +26 -0
  300. package/dist/tags-6QBVW25V.js +20 -0
  301. package/dist/tags-LQCEJGIL.js +20 -0
  302. package/dist/tags-RIVD54ZG.js +224 -0
  303. package/dist/targeting-LNDQV4EK.js +759 -0
  304. package/dist/targeting-LNDQV4EK.js.map +1 -0
  305. package/dist/targeting-criteria-XNLYPIL2.js +113 -0
  306. package/dist/targets-OYIVS5KJ.js +103 -0
  307. package/dist/testimonials-WT43CF7V.js +32 -0
  308. package/dist/top-companies-6QQMOS2Y.js +108 -0
  309. package/dist/translate-7QN7JFGU.js +604 -0
  310. package/dist/triggers-LVQY3QJ2.js +142 -0
  311. package/dist/unlink-5ASZTCS2.js +67 -0
  312. package/dist/unstage-LNZTEATR.js +85 -0
  313. package/dist/update-7BIR4GYO.js +152 -0
  314. package/dist/update-BRLM5DB3.js +98 -0
  315. package/dist/update-DRZAAJQ2.js +63 -0
  316. package/dist/update-NOWC3ICD.js +188 -0
  317. package/dist/upload-457Q4ANZ.js +126 -0
  318. package/dist/url-params-KM4NJGYC.js +98 -0
  319. package/dist/validate-COLEPJBA.js +117 -0
  320. package/dist/videos-5IDZTEWC.js +39 -0
  321. package/dist/viewer-check-433AZPBC.js +80 -0
  322. package/dist/viewer-check-433AZPBC.js.map +1 -0
  323. package/dist/web-FZYOCCYN.js +140 -0
  324. package/dist/winning-ads-I4DMP7RU.js +84 -0
  325. package/dist/write-commands-FYB6QG7K.js +1024 -0
  326. package/dist/write-commands-PEJBTME6.js +1165 -0
  327. package/dist/write-commands-PEJBTME6.js.map +1 -0
  328. package/dist/x-OMN5DDLM.js +47 -0
  329. package/package.json +1 -1
  330. package/dist/account-7LUQWY6Q.js +0 -49
  331. package/dist/account-7LUQWY6Q.js.map +0 -1
  332. package/dist/account-KNRDOUJP.js +0 -79
  333. package/dist/account-Z65CPOWE.js +0 -80
  334. package/dist/account-writes-4N2MA2ZR.js +0 -66
  335. package/dist/accounts-RTN5ZGTU.js +0 -611
  336. package/dist/accounts-RW6KXBOQ.js +0 -77
  337. package/dist/accounts-UA2ZWRN4.js +0 -75
  338. package/dist/actions-HNLISA7T.js +0 -55
  339. package/dist/activecampaign-I5CILZPU.js +0 -935
  340. package/dist/activities-IQPJPP4B.js +0 -74
  341. package/dist/ad-group-writes-EUTMPBMK.js +0 -170
  342. package/dist/ad-groups-OVPAI5RM.js +0 -68
  343. package/dist/ad-writes-DACTYFEO.js +0 -174
  344. package/dist/add-6WKPFMLG.js +0 -302
  345. package/dist/add-XF5COUAS.js +0 -104
  346. package/dist/ads-G6AS5L7G.js +0 -40
  347. package/dist/ads-HXX2IAFF.js +0 -113
  348. package/dist/ads-HXX2IAFF.js.map +0 -1
  349. package/dist/ads-L65JIKCD.js +0 -77
  350. package/dist/adsets-LPN6WFGF.js +0 -176
  351. package/dist/adsets-LPN6WFGF.js.map +0 -1
  352. package/dist/advertisers-6NUM2Q3A.js +0 -120
  353. package/dist/analytics-QKP3A5F3.js +0 -1976
  354. package/dist/analytics-VLHE5A2M.js +0 -433
  355. package/dist/assign-6HI6TNLP.js +0 -77
  356. package/dist/audience-size-25LP2OBF.js +0 -73
  357. package/dist/audiences-RPLVMO4H.js +0 -268
  358. package/dist/audiences-XEZHACKH.js +0 -78
  359. package/dist/audiences-XEZHACKH.js.map +0 -1
  360. package/dist/audit-YY6X2MPA.js +0 -151
  361. package/dist/autocomplete-SAWJK4NF.js +0 -111
  362. package/dist/avatars-MXTI74VC.js +0 -38
  363. package/dist/bid-pricing-HZ74SLEB.js +0 -100
  364. package/dist/brand-T3OACVQX.js +0 -22
  365. package/dist/brief-BN4UGUXF.js +0 -538
  366. package/dist/businesses-PRRYPR7H.js +0 -53
  367. package/dist/campaign-groups-YJK767AP.js +0 -95
  368. package/dist/campaign-writes-BAFB5E7A.js +0 -165
  369. package/dist/campaign-writes-BAFB5E7A.js.map +0 -1
  370. package/dist/campaign-writes-U5LTDTYK.js +0 -170
  371. package/dist/campaigns-4SOLY7OR.js +0 -110
  372. package/dist/campaigns-4SOLY7OR.js.map +0 -1
  373. package/dist/campaigns-GALDR5KK.js +0 -109
  374. package/dist/campaigns-NR6TNQFN.js +0 -107
  375. package/dist/campaigns-TFEQTSO3.js +0 -76
  376. package/dist/canvas-GJAQAVS6.js +0 -46
  377. package/dist/capabilities-2KT6TCGZ.js +0 -144
  378. package/dist/catalog-USZL4SGX.js +0 -65
  379. package/dist/catalogs-A7XMEEEP.js +0 -128
  380. package/dist/chatgpt-4PEWDJKP.js +0 -47
  381. package/dist/chats-INN2OHSH.js +0 -262
  382. package/dist/chats-INN2OHSH.js.map +0 -1
  383. package/dist/check-MMJGFFZS.js +0 -104
  384. package/dist/chunk-2LI6746F.js +0 -103
  385. package/dist/chunk-2PWNIEW4.js +0 -197
  386. package/dist/chunk-2XRMPSEV.js +0 -142
  387. package/dist/chunk-3TZVZXM6.js +0 -224
  388. package/dist/chunk-3UXMQ3K2.js +0 -274
  389. package/dist/chunk-3UXMQ3K2.js.map +0 -1
  390. package/dist/chunk-5HJRZFMW.js +0 -207
  391. package/dist/chunk-62JQQUAU.js +0 -5368
  392. package/dist/chunk-66QHX566.js +0 -6306
  393. package/dist/chunk-66QHX566.js.map +0 -1
  394. package/dist/chunk-6JWEGFM5.js +0 -174
  395. package/dist/chunk-6JWEGFM5.js.map +0 -1
  396. package/dist/chunk-6WCAV27H.js +0 -494
  397. package/dist/chunk-6WXV5GTA.js +0 -8914
  398. package/dist/chunk-7RBJ2Z7Z.js +0 -172
  399. package/dist/chunk-7RBJ2Z7Z.js.map +0 -1
  400. package/dist/chunk-AVNSH2JE.js +0 -8939
  401. package/dist/chunk-BITS62MF.js +0 -77
  402. package/dist/chunk-BL2MX6CR.js +0 -249
  403. package/dist/chunk-BOPC3D6I.js +0 -604
  404. package/dist/chunk-C6EYCD5J.js +0 -942
  405. package/dist/chunk-CSZFZKVX.js +0 -97
  406. package/dist/chunk-D5CUAOQX.js +0 -297
  407. package/dist/chunk-D5UXWKLQ.js +0 -903
  408. package/dist/chunk-FA4YZFRV.js +0 -392
  409. package/dist/chunk-FUKDI2UK.js +0 -122
  410. package/dist/chunk-G4STCTY3.js +0 -399
  411. package/dist/chunk-GOJXKIFQ.js +0 -1605
  412. package/dist/chunk-GOJXKIFQ.js.map +0 -1
  413. package/dist/chunk-H5HDZ7IC.js +0 -139
  414. package/dist/chunk-HSPMBLKE.js +0 -363
  415. package/dist/chunk-IJ22WP3G.js +0 -275
  416. package/dist/chunk-ILSKYRDR.js +0 -169
  417. package/dist/chunk-JQU2LUZG.js +0 -57
  418. package/dist/chunk-JWSEPW7F.js +0 -225
  419. package/dist/chunk-KIGGMKAE.js +0 -66
  420. package/dist/chunk-KIGGMKAE.js.map +0 -1
  421. package/dist/chunk-KPYDTIAI.js +0 -317
  422. package/dist/chunk-LBO2YAZY.js +0 -3868
  423. package/dist/chunk-LOMH4TTC.js +0 -1079
  424. package/dist/chunk-LPXSM2DI.js +0 -66
  425. package/dist/chunk-MVB32GPI.js +0 -592
  426. package/dist/chunk-MXH35PJ5.js +0 -51
  427. package/dist/chunk-NEIUVSDK.js +0 -206
  428. package/dist/chunk-NPMAATZG.js +0 -64
  429. package/dist/chunk-NXZCCGES.js +0 -159
  430. package/dist/chunk-OP7DNHD2.js +0 -137
  431. package/dist/chunk-OP7DNHD2.js.map +0 -1
  432. package/dist/chunk-OWA7ZLC4.js +0 -547
  433. package/dist/chunk-P3W6SRSQ.js +0 -455
  434. package/dist/chunk-PA4W7BCQ.js +0 -23
  435. package/dist/chunk-PTGYM4J6.js +0 -89
  436. package/dist/chunk-QE3JEJXF.js +0 -831
  437. package/dist/chunk-QNLJ3GNZ.js +0 -433
  438. package/dist/chunk-R3EKM2P2.js +0 -191
  439. package/dist/chunk-SISA4HQR.js +0 -61
  440. package/dist/chunk-TP7HKSBX.js +0 -172
  441. package/dist/chunk-TPANP5A2.js +0 -91
  442. package/dist/chunk-TRPJJMCS.js +0 -346
  443. package/dist/chunk-TZEVD4Q6.js +0 -160
  444. package/dist/chunk-UWXDNVS5.js +0 -167
  445. package/dist/chunk-VD73V44J.js +0 -344
  446. package/dist/chunk-X7F4Z6UM.js +0 -156
  447. package/dist/chunk-ZL23HA4N.js +0 -19
  448. package/dist/claim-SLGYOOWD.js +0 -197
  449. package/dist/companies-IVMH6YII.js +0 -195
  450. package/dist/complete-45L2FI2X.js +0 -81
  451. package/dist/connect-WBGCBBFJ.js +0 -42
  452. package/dist/conversation-RIOL3OJ7.js +0 -93
  453. package/dist/conversion-writes-JU7Q2MUO.js +0 -120
  454. package/dist/conversions-3ISBR3TS.js +0 -76
  455. package/dist/conversions-TKIXNSYR.js +0 -135
  456. package/dist/create-7JY2PTIZ.js +0 -132
  457. package/dist/create-ACLCRXQP.js +0 -59
  458. package/dist/create-KYBMFD32.js +0 -207
  459. package/dist/create-VAPJ52GJ.js +0 -235
  460. package/dist/creatives-S5QUWUL6.js +0 -58
  461. package/dist/creatives-VQO2TKE3.js +0 -182
  462. package/dist/creatives-YJ3CXZQC.js +0 -87
  463. package/dist/creatives-YJ3CXZQC.js.map +0 -1
  464. package/dist/credentials-YTQ6BHWV.js +0 -287
  465. package/dist/critique-5LCG5TYF.js +0 -227
  466. package/dist/critique-BHYJYZDV.js +0 -1458
  467. package/dist/crm-IKTWHWEB.js +0 -318
  468. package/dist/crm-N7K57LZJ.js +0 -224
  469. package/dist/custom-conversions-YRYE65PU.js +0 -125
  470. package/dist/custom-conversions-YRYE65PU.js.map +0 -1
  471. package/dist/customers-NLU7NYDC.js +0 -56
  472. package/dist/delete-26J3X3ZH.js +0 -64
  473. package/dist/delete-A4F5Z54J.js +0 -66
  474. package/dist/delete-EVXOFT2H.js +0 -54
  475. package/dist/demographics-VZKFMM4X.js +0 -138
  476. package/dist/discard-ULRVUJDV.js +0 -66
  477. package/dist/domain-L4WCCX7R.js +0 -98
  478. package/dist/draft-57OQKHZI.js +0 -306
  479. package/dist/draft-EWDOIXSH.js +0 -233
  480. package/dist/draft-EWDOIXSH.js.map +0 -1
  481. package/dist/draft-GPN3HOAG.js +0 -328
  482. package/dist/draft-GPN3HOAG.js.map +0 -1
  483. package/dist/draft-O4S5RKWK.js +0 -217
  484. package/dist/draft-Y2QJE2NM.js +0 -281
  485. package/dist/experiment-G3FQVAJU.js +0 -1397
  486. package/dist/facets-EHQKGGJ2.js +0 -114
  487. package/dist/feedback-CAOZPGTT.js +0 -106
  488. package/dist/feedback-record-EXV5H6OS.js +0 -260
  489. package/dist/fetch-ETKT2RBC.js +0 -176
  490. package/dist/find-EVY4XEIQ.js +0 -134
  491. package/dist/fit-UJQ47C4A.js +0 -62
  492. package/dist/flows-Z7355RMD.js +0 -247
  493. package/dist/fonts-7VWBQPJF.js +0 -36
  494. package/dist/forecast-OI7YWZ6F.js +0 -118
  495. package/dist/funnel-2B3JXJPX.js +0 -394
  496. package/dist/ga4-2BL5YAYN.js +0 -55
  497. package/dist/get-2RSN4N3J.js +0 -56
  498. package/dist/get-6N7QJMIP.js +0 -79
  499. package/dist/google-7STODZQR.js +0 -136
  500. package/dist/google-ads-G7REKD4A.js +0 -195
  501. package/dist/gsc-UU3T2C6B.js +0 -30
  502. package/dist/history-IQ33J5PB.js +0 -67
  503. package/dist/history-YMK2JNZU.js +0 -133
  504. package/dist/hubspot-BUFS7S33.js +0 -779
  505. package/dist/icon-GB7UH5RF.js +0 -137
  506. package/dist/ideas-F6CIGTVU.js +0 -40
  507. package/dist/images-WCKTD6Z2.js +0 -92
  508. package/dist/ingest-RQUJGS7K.js +0 -107
  509. package/dist/ingest-XLTRLCDV.js +0 -23
  510. package/dist/insights-4HT2NAYP.js +0 -423
  511. package/dist/insights-4HT2NAYP.js.map +0 -1
  512. package/dist/inspect-KFVAMD4N.js +0 -189
  513. package/dist/inspiration-XQYHBJY2.js +0 -53
  514. package/dist/keyword-metrics-WYF3QMCW.js +0 -197
  515. package/dist/keywords-for-site-G5L5EP3T.js +0 -128
  516. package/dist/landing-WUILAWDS.js +0 -28
  517. package/dist/leads-2XOSAYP4.js +0 -293
  518. package/dist/leads-2XOSAYP4.js.map +0 -1
  519. package/dist/leads-4SJ4NJOI.js +0 -90
  520. package/dist/learn-CC6Q5IK2.js +0 -204
  521. package/dist/line-item-writes-YXKYR25W.js +0 -208
  522. package/dist/line-items-CKUD2UU4.js +0 -103
  523. package/dist/link-VBYFI7AM.js +0 -64
  524. package/dist/linkedin-XKVPSCLV.js +0 -1057
  525. package/dist/list-6ZNZGRRK.js +0 -151
  526. package/dist/list-ENYDGT3F.js +0 -64
  527. package/dist/list-VSUF2IWT.js +0 -303
  528. package/dist/locations-YA7NZY44.js +0 -67
  529. package/dist/locations-YA7NZY44.js.map +0 -1
  530. package/dist/log-AACKGBDW.js +0 -92
  531. package/dist/logo-YSNUUT33.js +0 -18
  532. package/dist/make-ED7HBLH3.js +0 -1353
  533. package/dist/map-63CQHWPI.js +0 -433
  534. package/dist/mcp-RKAXC6IP.js +0 -714
  535. package/dist/media-ES2UBGYW.js +0 -15
  536. package/dist/media-ES2UBGYW.js.map +0 -1
  537. package/dist/media-sources-PEHUMH7C.js +0 -32
  538. package/dist/members-SELIA674.js +0 -44
  539. package/dist/meta-AOIPEDV5.js +0 -69
  540. package/dist/meta-AOIPEDV5.js.map +0 -1
  541. package/dist/normalize-VAZPTBDX.js +0 -141
  542. package/dist/options-6FCNFWUF.js +0 -122
  543. package/dist/organization-SHREKDST.js +0 -881
  544. package/dist/organization-SHREKDST.js.map +0 -1
  545. package/dist/pages-FTI44OSH.js +0 -66
  546. package/dist/performance-K7E5KAZW.js +0 -24
  547. package/dist/pixels-6IUB3Y3H.js +0 -60
  548. package/dist/pixels-MBKR4XPX.js +0 -108
  549. package/dist/preview-V4YBD45S.js +0 -169
  550. package/dist/preview-V4YBD45S.js.map +0 -1
  551. package/dist/promoted-tweet-writes-PKEO6WUK.js +0 -180
  552. package/dist/promoted-tweets-7MXVZRBI.js +0 -119
  553. package/dist/publish-MPMGRV72.js +0 -341
  554. package/dist/reddit-XIHRI3CN.js +0 -26
  555. package/dist/refresh-A27N75NH.js +0 -94
  556. package/dist/release-UKRB5IUN.js +0 -60
  557. package/dist/remove-AFNFVPZY.js +0 -50
  558. package/dist/reopen-M5HE6J3G.js +0 -63
  559. package/dist/rerun-A2XHGFZS.js +0 -90
  560. package/dist/research-BLDY5UWH.js +0 -62
  561. package/dist/research-U7RQXMYH.js +0 -262
  562. package/dist/reset-4CCWB2RT.js +0 -54
  563. package/dist/reset-J3KCWFMZ.js +0 -54
  564. package/dist/resolve-HEK27ANI.js +0 -121
  565. package/dist/retry-HPZIUG2S.js +0 -62
  566. package/dist/retry-VVI6N6UR.js +0 -60
  567. package/dist/rules-SK5DFFPY.js +0 -96
  568. package/dist/rules-add-YQNYSME7.js +0 -462
  569. package/dist/run-KBN5K7LE.js +0 -65
  570. package/dist/run-M7ZDE6IA.js +0 -66
  571. package/dist/scaffold-ad-6BN5LWQH.js +0 -1511
  572. package/dist/scaffold-static-ad-VVZRAWBR.js +0 -1005
  573. package/dist/scaffold-video-LFIYI4GP.js +0 -883
  574. package/dist/schedule-QMOKWTJ3.js +0 -61
  575. package/dist/scheduled-agents-FCQHQ6KR.js +0 -50
  576. package/dist/schema-THFLCMBN.js +0 -132
  577. package/dist/search-XIUYSWO6.js +0 -174
  578. package/dist/select-QBU6ED4K.js +0 -101
  579. package/dist/set-prompt-TL64CRBQ.js +0 -193
  580. package/dist/setup-links-QVI6NAOK.js +0 -141
  581. package/dist/shared-NDRFKAH7.js +0 -31
  582. package/dist/site-PZPJY33N.js +0 -177
  583. package/dist/sources-ER7ANNG3.js +0 -454
  584. package/dist/sources-RMNFV4CA.js +0 -30
  585. package/dist/stale-ITFCPOER.js +0 -71
  586. package/dist/stats-RCLQE4HJ.js +0 -34
  587. package/dist/status-ABMJBCPJ.js +0 -62
  588. package/dist/stock-ECRBD7RP.js +0 -179
  589. package/dist/studio-MARZ22J2.js +0 -49
  590. package/dist/sync-QDD3MRJ6.js +0 -54
  591. package/dist/sync-definition-C6ROLKJ4.js +0 -64
  592. package/dist/tag-manager-G3LBQZUL.js +0 -43
  593. package/dist/tags-5JYOEYIT.js +0 -20
  594. package/dist/tags-B473RWAA.js +0 -224
  595. package/dist/tags-EWHPUM2V.js +0 -20
  596. package/dist/tags-KBCX6BDU.js +0 -26
  597. package/dist/tags-PEWN6GNZ.js +0 -20
  598. package/dist/targeting-criteria-EU65WUUF.js +0 -113
  599. package/dist/targets-KVXS5QKM.js +0 -103
  600. package/dist/testimonials-YMMA5YWL.js +0 -32
  601. package/dist/top-companies-OOX3DITI.js +0 -108
  602. package/dist/translate-OXVIMYHE.js +0 -604
  603. package/dist/triggers-OX2GKG4Y.js +0 -142
  604. package/dist/unlink-3USEPJSA.js +0 -67
  605. package/dist/unstage-VSCNPTAC.js +0 -85
  606. package/dist/update-6JKTH65B.js +0 -152
  607. package/dist/update-FG4ELXYJ.js +0 -98
  608. package/dist/update-GZFKHA3A.js +0 -188
  609. package/dist/update-HZHG67N6.js +0 -63
  610. package/dist/upload-BKCQ6FRW.js +0 -126
  611. package/dist/url-params-UN4DRN2H.js +0 -98
  612. package/dist/validate-ZS2M5Q3V.js +0 -117
  613. package/dist/videos-I6YXFBFT.js +0 -39
  614. package/dist/viewer-check-7ZG7KHEN.js +0 -80
  615. package/dist/web-UGU7YMII.js +0 -140
  616. package/dist/winning-ads-ABN5OULS.js +0 -84
  617. package/dist/write-commands-6VR2UD3T.js +0 -1024
  618. package/dist/write-commands-HCQI4Y27.js +0 -737
  619. package/dist/write-commands-HCQI4Y27.js.map +0 -1
  620. package/dist/x-WK2VQDPF.js +0 -47
  621. /package/dist/{account-Z65CPOWE.js.map → account-3H6BZO5H.js.map} +0 -0
  622. /package/dist/{account-KNRDOUJP.js.map → account-VGSYM7LY.js.map} +0 -0
  623. /package/dist/{account-writes-4N2MA2ZR.js.map → account-writes-AE5IJGGW.js.map} +0 -0
  624. /package/dist/{accounts-RW6KXBOQ.js.map → accounts-2ARS6XP2.js.map} +0 -0
  625. /package/dist/{accounts-RTN5ZGTU.js.map → accounts-AQFW4ZUM.js.map} +0 -0
  626. /package/dist/{accounts-UA2ZWRN4.js.map → accounts-K4INATCW.js.map} +0 -0
  627. /package/dist/{actions-HNLISA7T.js.map → actions-QMUHOAXG.js.map} +0 -0
  628. /package/dist/{activecampaign-I5CILZPU.js.map → activecampaign-J3QN5FMG.js.map} +0 -0
  629. /package/dist/{activities-IQPJPP4B.js.map → activities-T253KK4Q.js.map} +0 -0
  630. /package/dist/{ad-group-writes-EUTMPBMK.js.map → ad-group-writes-VRSBI2Z2.js.map} +0 -0
  631. /package/dist/{ad-groups-OVPAI5RM.js.map → ad-groups-IEBVEAMS.js.map} +0 -0
  632. /package/dist/{ad-writes-DACTYFEO.js.map → ad-writes-ALV4KFPZ.js.map} +0 -0
  633. /package/dist/{add-XF5COUAS.js.map → add-VDUA6OWM.js.map} +0 -0
  634. /package/dist/{add-6WKPFMLG.js.map → add-XHOKCSW5.js.map} +0 -0
  635. /package/dist/{ads-L65JIKCD.js.map → ads-CQZHD7FC.js.map} +0 -0
  636. /package/dist/{ads-G6AS5L7G.js.map → ads-HGDPNIT6.js.map} +0 -0
  637. /package/dist/{advertisers-6NUM2Q3A.js.map → advertisers-UDSEFMP7.js.map} +0 -0
  638. /package/dist/{analytics-VLHE5A2M.js.map → analytics-TBETZOPJ.js.map} +0 -0
  639. /package/dist/{analytics-QKP3A5F3.js.map → analytics-VH74LMMC.js.map} +0 -0
  640. /package/dist/{connect-WBGCBBFJ.js.map → asset-writes-L5TMKIZC.js.map} +0 -0
  641. /package/dist/{assign-6HI6TNLP.js.map → assign-6IE2ASFC.js.map} +0 -0
  642. /package/dist/{audience-size-25LP2OBF.js.map → audience-size-CSBWDFEP.js.map} +0 -0
  643. /package/dist/{audiences-RPLVMO4H.js.map → audiences-AAZH56WD.js.map} +0 -0
  644. /package/dist/{audit-YY6X2MPA.js.map → audit-AEENRVGD.js.map} +0 -0
  645. /package/dist/{autocomplete-SAWJK4NF.js.map → autocomplete-AAGTJHVL.js.map} +0 -0
  646. /package/dist/{avatars-MXTI74VC.js.map → avatars-VEATUUKU.js.map} +0 -0
  647. /package/dist/{bid-pricing-HZ74SLEB.js.map → bid-pricing-SZTGCZTV.js.map} +0 -0
  648. /package/dist/{brand-T3OACVQX.js.map → brand-MXGETE4R.js.map} +0 -0
  649. /package/dist/{brief-BN4UGUXF.js.map → brief-3GHSHOGM.js.map} +0 -0
  650. /package/dist/{businesses-PRRYPR7H.js.map → businesses-H3HIDQX6.js.map} +0 -0
  651. /package/dist/{campaign-groups-YJK767AP.js.map → campaign-groups-WRI56M5X.js.map} +0 -0
  652. /package/dist/{campaign-writes-U5LTDTYK.js.map → campaign-writes-U5PUVSMT.js.map} +0 -0
  653. /package/dist/{campaigns-GALDR5KK.js.map → campaigns-4QWC2JE7.js.map} +0 -0
  654. /package/dist/{campaigns-TFEQTSO3.js.map → campaigns-JEIKY2M4.js.map} +0 -0
  655. /package/dist/{campaigns-NR6TNQFN.js.map → campaigns-Q4HN7HBY.js.map} +0 -0
  656. /package/dist/{canvas-GJAQAVS6.js.map → canvas-VJ3XKCAC.js.map} +0 -0
  657. /package/dist/{capabilities-2KT6TCGZ.js.map → capabilities-SNGGAOV3.js.map} +0 -0
  658. /package/dist/{catalog-USZL4SGX.js.map → catalog-S32MX453.js.map} +0 -0
  659. /package/dist/{catalogs-A7XMEEEP.js.map → catalogs-OCVXZLIF.js.map} +0 -0
  660. /package/dist/{chatgpt-4PEWDJKP.js.map → chatgpt-QVF2FD3E.js.map} +0 -0
  661. /package/dist/{check-MMJGFFZS.js.map → check-Z6UMIQKD.js.map} +0 -0
  662. /package/dist/{chunk-KPYDTIAI.js.map → chunk-2WZI36D3.js.map} +0 -0
  663. /package/dist/{chunk-FA4YZFRV.js.map → chunk-3AMLOCXY.js.map} +0 -0
  664. /package/dist/{chunk-X7F4Z6UM.js.map → chunk-3CVAEQMZ.js.map} +0 -0
  665. /package/dist/{chunk-SISA4HQR.js.map → chunk-3WAYZQNV.js.map} +0 -0
  666. /package/dist/{chunk-JWSEPW7F.js.map → chunk-46GWHUKN.js.map} +0 -0
  667. /package/dist/{chunk-R3EKM2P2.js.map → chunk-4O6T76A3.js.map} +0 -0
  668. /package/dist/{chunk-D5UXWKLQ.js.map → chunk-5MCVK4A3.js.map} +0 -0
  669. /package/dist/{chunk-CSZFZKVX.js.map → chunk-5ZLN23V5.js.map} +0 -0
  670. /package/dist/{chunk-OWA7ZLC4.js.map → chunk-77ULVP62.js.map} +0 -0
  671. /package/dist/{chunk-QNLJ3GNZ.js.map → chunk-AW2GKIGS.js.map} +0 -0
  672. /package/dist/{chunk-BL2MX6CR.js.map → chunk-BRLY6XD6.js.map} +0 -0
  673. /package/dist/{chunk-NPMAATZG.js.map → chunk-C7NWUCLQ.js.map} +0 -0
  674. /package/dist/{chunk-PA4W7BCQ.js.map → chunk-D4HKJBEW.js.map} +0 -0
  675. /package/dist/{chunk-H5HDZ7IC.js.map → chunk-DCBZ5CHZ.js.map} +0 -0
  676. /package/dist/{chunk-BITS62MF.js.map → chunk-G6XKD7QE.js.map} +0 -0
  677. /package/dist/{chunk-TP7HKSBX.js.map → chunk-GBFL4TD2.js.map} +0 -0
  678. /package/dist/{chunk-3TZVZXM6.js.map → chunk-H5SCKWFT.js.map} +0 -0
  679. /package/dist/{chunk-HSPMBLKE.js.map → chunk-HXPK6KAL.js.map} +0 -0
  680. /package/dist/{chunk-2PWNIEW4.js.map → chunk-I7GOSMWT.js.map} +0 -0
  681. /package/dist/{chunk-LOMH4TTC.js.map → chunk-IBY44U2M.js.map} +0 -0
  682. /package/dist/{chunk-IJ22WP3G.js.map → chunk-ITNHIZKK.js.map} +0 -0
  683. /package/dist/{chunk-P3W6SRSQ.js.map → chunk-J33P2JNS.js.map} +0 -0
  684. /package/dist/{chunk-NEIUVSDK.js.map → chunk-JH2L5CQD.js.map} +0 -0
  685. /package/dist/{chunk-62JQQUAU.js.map → chunk-JQH5VG6F.js.map} +0 -0
  686. /package/dist/{chunk-6WXV5GTA.js.map → chunk-JVH5A3XC.js.map} +0 -0
  687. /package/dist/{chunk-ILSKYRDR.js.map → chunk-KTOYQP6D.js.map} +0 -0
  688. /package/dist/{chunk-G4STCTY3.js.map → chunk-LO3IF5PS.js.map} +0 -0
  689. /package/dist/{chunk-BOPC3D6I.js.map → chunk-LRRFGOW3.js.map} +0 -0
  690. /package/dist/{chunk-C6EYCD5J.js.map → chunk-LTPTJWZC.js.map} +0 -0
  691. /package/dist/{chunk-NXZCCGES.js.map → chunk-MRQHJW5U.js.map} +0 -0
  692. /package/dist/{chunk-TRPJJMCS.js.map → chunk-NHYI7ORL.js.map} +0 -0
  693. /package/dist/{chunk-MXH35PJ5.js.map → chunk-NLI7C3K2.js.map} +0 -0
  694. /package/dist/{chunk-TPANP5A2.js.map → chunk-NSEMXBUB.js.map} +0 -0
  695. /package/dist/{chunk-LBO2YAZY.js.map → chunk-OM2BRYXJ.js.map} +0 -0
  696. /package/dist/{chunk-2LI6746F.js.map → chunk-OY4SKCIU.js.map} +0 -0
  697. /package/dist/{chunk-6WCAV27H.js.map → chunk-OYAJNTRO.js.map} +0 -0
  698. /package/dist/{chunk-QE3JEJXF.js.map → chunk-PL7J3DPQ.js.map} +0 -0
  699. /package/dist/{chunk-PTGYM4J6.js.map → chunk-PUSBUMYM.js.map} +0 -0
  700. /package/dist/{chunk-D5CUAOQX.js.map → chunk-RRADFRPI.js.map} +0 -0
  701. /package/dist/{chunk-VD73V44J.js.map → chunk-SGEPZB3D.js.map} +0 -0
  702. /package/dist/{chunk-LPXSM2DI.js.map → chunk-TFTZDWCX.js.map} +0 -0
  703. /package/dist/{chunk-2XRMPSEV.js.map → chunk-TG4NCHFS.js.map} +0 -0
  704. /package/dist/{chunk-5HJRZFMW.js.map → chunk-TTHM66TA.js.map} +0 -0
  705. /package/dist/{chunk-ZL23HA4N.js.map → chunk-VL2GNXZY.js.map} +0 -0
  706. /package/dist/{chunk-TZEVD4Q6.js.map → chunk-VQPZDM6N.js.map} +0 -0
  707. /package/dist/{chunk-JQU2LUZG.js.map → chunk-XCKINS7K.js.map} +0 -0
  708. /package/dist/{chunk-AVNSH2JE.js.map → chunk-YLYXSJ6O.js.map} +0 -0
  709. /package/dist/{chunk-MVB32GPI.js.map → chunk-ZAPO6UWS.js.map} +0 -0
  710. /package/dist/{chunk-FUKDI2UK.js.map → chunk-ZEPUDYPL.js.map} +0 -0
  711. /package/dist/{chunk-UWXDNVS5.js.map → chunk-ZJSGGJ5R.js.map} +0 -0
  712. /package/dist/{claim-SLGYOOWD.js.map → claim-J2LYNHZK.js.map} +0 -0
  713. /package/dist/{companies-IVMH6YII.js.map → companies-VYY22B6T.js.map} +0 -0
  714. /package/dist/{complete-45L2FI2X.js.map → complete-5I32XM7P.js.map} +0 -0
  715. /package/dist/{customers-NLU7NYDC.js.map → connect-EUFFQQ7O.js.map} +0 -0
  716. /package/dist/{conversation-RIOL3OJ7.js.map → conversation-D6KZHGPP.js.map} +0 -0
  717. /package/dist/{conversion-writes-JU7Q2MUO.js.map → conversion-writes-ECZBVY7D.js.map} +0 -0
  718. /package/dist/{conversions-3ISBR3TS.js.map → conversions-5QCSCRLI.js.map} +0 -0
  719. /package/dist/{conversions-TKIXNSYR.js.map → conversions-Y3X6ZTTF.js.map} +0 -0
  720. /package/dist/{create-ACLCRXQP.js.map → create-2JCRTQJL.js.map} +0 -0
  721. /package/dist/{create-VAPJ52GJ.js.map → create-LMSQPHPB.js.map} +0 -0
  722. /package/dist/{create-7JY2PTIZ.js.map → create-MBLNB5RY.js.map} +0 -0
  723. /package/dist/{create-KYBMFD32.js.map → create-VR7RXKL7.js.map} +0 -0
  724. /package/dist/{creatives-VQO2TKE3.js.map → creatives-5C42BDMW.js.map} +0 -0
  725. /package/dist/{creatives-S5QUWUL6.js.map → creatives-HYPSTANO.js.map} +0 -0
  726. /package/dist/{credentials-YTQ6BHWV.js.map → credentials-4H4AUYJN.js.map} +0 -0
  727. /package/dist/{critique-BHYJYZDV.js.map → critique-UOJZWDG2.js.map} +0 -0
  728. /package/dist/{critique-5LCG5TYF.js.map → critique-WCWMQQVV.js.map} +0 -0
  729. /package/dist/{crm-IKTWHWEB.js.map → crm-B7OTHMBP.js.map} +0 -0
  730. /package/dist/{crm-N7K57LZJ.js.map → crm-DZRWKJ6V.js.map} +0 -0
  731. /package/dist/{fit-UJQ47C4A.js.map → customers-AOFJJCGD.js.map} +0 -0
  732. /package/dist/{delete-26J3X3ZH.js.map → delete-DEG5KOBY.js.map} +0 -0
  733. /package/dist/{delete-EVXOFT2H.js.map → delete-EFIODCXG.js.map} +0 -0
  734. /package/dist/{delete-A4F5Z54J.js.map → delete-PQIMW2LK.js.map} +0 -0
  735. /package/dist/{demographics-VZKFMM4X.js.map → demographics-F26DIOCM.js.map} +0 -0
  736. /package/dist/{discard-ULRVUJDV.js.map → discard-2EJY6UGP.js.map} +0 -0
  737. /package/dist/{domain-L4WCCX7R.js.map → domain-XLJABLWB.js.map} +0 -0
  738. /package/dist/{draft-O4S5RKWK.js.map → draft-2YND6T4U.js.map} +0 -0
  739. /package/dist/{draft-Y2QJE2NM.js.map → draft-34CGWUVA.js.map} +0 -0
  740. /package/dist/{draft-57OQKHZI.js.map → draft-WRVEANL5.js.map} +0 -0
  741. /package/dist/{experiment-G3FQVAJU.js.map → experiment-7N4QFRWV.js.map} +0 -0
  742. /package/dist/{facets-EHQKGGJ2.js.map → facets-OPTNDPW2.js.map} +0 -0
  743. /package/dist/{feedback-CAOZPGTT.js.map → feedback-43BPXNBI.js.map} +0 -0
  744. /package/dist/{feedback-record-EXV5H6OS.js.map → feedback-record-35ZSDL6Z.js.map} +0 -0
  745. /package/dist/{fetch-ETKT2RBC.js.map → fetch-O46XBA7S.js.map} +0 -0
  746. /package/dist/{find-EVY4XEIQ.js.map → find-FSQAEGGF.js.map} +0 -0
  747. /package/dist/{fonts-7VWBQPJF.js.map → fit-CWJ5QQ4R.js.map} +0 -0
  748. /package/dist/{flows-Z7355RMD.js.map → flows-CVORIQ4B.js.map} +0 -0
  749. /package/dist/{ideas-F6CIGTVU.js.map → fonts-6TPYR6IW.js.map} +0 -0
  750. /package/dist/{forecast-OI7YWZ6F.js.map → forecast-2VLA6NJA.js.map} +0 -0
  751. /package/dist/{funnel-2B3JXJPX.js.map → funnel-XLKDLXMG.js.map} +0 -0
  752. /package/dist/{ga4-2BL5YAYN.js.map → ga4-LPDIBNYP.js.map} +0 -0
  753. /package/dist/{get-2RSN4N3J.js.map → get-O56GGN3V.js.map} +0 -0
  754. /package/dist/{get-6N7QJMIP.js.map → get-WFQ4XEAW.js.map} +0 -0
  755. /package/dist/{google-7STODZQR.js.map → google-5ESVO76E.js.map} +0 -0
  756. /package/dist/{google-ads-G7REKD4A.js.map → google-ads-DZMOTUY5.js.map} +0 -0
  757. /package/dist/{gsc-UU3T2C6B.js.map → gsc-FIZTQX3N.js.map} +0 -0
  758. /package/dist/{history-YMK2JNZU.js.map → history-43BBQZOB.js.map} +0 -0
  759. /package/dist/{history-IQ33J5PB.js.map → history-QKDYBSYM.js.map} +0 -0
  760. /package/dist/{hubspot-BUFS7S33.js.map → hubspot-S44MPK3G.js.map} +0 -0
  761. /package/dist/{icon-GB7UH5RF.js.map → icon-CSVAZ7NE.js.map} +0 -0
  762. /package/dist/{ingest-XLTRLCDV.js.map → ideas-SLP5WXFF.js.map} +0 -0
  763. /package/dist/{images-WCKTD6Z2.js.map → images-TWZOROCT.js.map} +0 -0
  764. /package/dist/{logo-YSNUUT33.js.map → ingest-5GCZ5ZBV.js.map} +0 -0
  765. /package/dist/{ingest-RQUJGS7K.js.map → ingest-P54J4W3V.js.map} +0 -0
  766. /package/dist/{inspect-KFVAMD4N.js.map → inspect-S4COGUBC.js.map} +0 -0
  767. /package/dist/{inspiration-XQYHBJY2.js.map → inspiration-IX5N724J.js.map} +0 -0
  768. /package/dist/{keyword-metrics-WYF3QMCW.js.map → keyword-metrics-26CCKFZK.js.map} +0 -0
  769. /package/dist/{keywords-for-site-G5L5EP3T.js.map → keywords-for-site-JWWECF63.js.map} +0 -0
  770. /package/dist/{landing-WUILAWDS.js.map → landing-VFDRADZY.js.map} +0 -0
  771. /package/dist/{leads-4SJ4NJOI.js.map → leads-DTKKYSKH.js.map} +0 -0
  772. /package/dist/{learn-CC6Q5IK2.js.map → learn-GQ75IPRK.js.map} +0 -0
  773. /package/dist/{line-item-writes-YXKYR25W.js.map → line-item-writes-DVVHVR3Y.js.map} +0 -0
  774. /package/dist/{line-items-CKUD2UU4.js.map → line-items-EOZMK7A5.js.map} +0 -0
  775. /package/dist/{link-VBYFI7AM.js.map → link-R5NGCQ5H.js.map} +0 -0
  776. /package/dist/{linkedin-XKVPSCLV.js.map → linkedin-DHZO3IJX.js.map} +0 -0
  777. /package/dist/{list-VSUF2IWT.js.map → list-57QBEGLM.js.map} +0 -0
  778. /package/dist/{list-ENYDGT3F.js.map → list-Q44BBHDI.js.map} +0 -0
  779. /package/dist/{list-6ZNZGRRK.js.map → list-W6G2NTG5.js.map} +0 -0
  780. /package/dist/{log-AACKGBDW.js.map → log-B6X5EPKA.js.map} +0 -0
  781. /package/dist/{performance-K7E5KAZW.js.map → logo-VHXH4J6A.js.map} +0 -0
  782. /package/dist/{make-ED7HBLH3.js.map → make-OIFLF3QS.js.map} +0 -0
  783. /package/dist/{map-63CQHWPI.js.map → map-PIOZT2MQ.js.map} +0 -0
  784. /package/dist/{mcp-RKAXC6IP.js.map → mcp-GFKHLWDB.js.map} +0 -0
  785. /package/dist/{media-sources-PEHUMH7C.js.map → media-sources-VMMMW5UM.js.map} +0 -0
  786. /package/dist/{members-SELIA674.js.map → members-W2QBMNIW.js.map} +0 -0
  787. /package/dist/{normalize-VAZPTBDX.js.map → normalize-N6XC3SLC.js.map} +0 -0
  788. /package/dist/{options-6FCNFWUF.js.map → options-XYJY2OEQ.js.map} +0 -0
  789. /package/dist/{pages-FTI44OSH.js.map → pages-PTWRXAZT.js.map} +0 -0
  790. /package/dist/{reddit-XIHRI3CN.js.map → performance-7NEZTOJ5.js.map} +0 -0
  791. /package/dist/{pixels-6IUB3Y3H.js.map → pixels-MYT3TCHZ.js.map} +0 -0
  792. /package/dist/{pixels-MBKR4XPX.js.map → pixels-ZZCQUS3J.js.map} +0 -0
  793. /package/dist/{promoted-tweet-writes-PKEO6WUK.js.map → promoted-tweet-writes-X2F7R2AE.js.map} +0 -0
  794. /package/dist/{promoted-tweets-7MXVZRBI.js.map → promoted-tweets-XCSD6VKP.js.map} +0 -0
  795. /package/dist/{publish-MPMGRV72.js.map → publish-OBY6E43R.js.map} +0 -0
  796. /package/dist/{run-KBN5K7LE.js.map → reddit-WJ6KHYBC.js.map} +0 -0
  797. /package/dist/{refresh-A27N75NH.js.map → refresh-G5BQ2LWU.js.map} +0 -0
  798. /package/dist/{release-UKRB5IUN.js.map → release-PBZO35KY.js.map} +0 -0
  799. /package/dist/{remove-AFNFVPZY.js.map → remove-VJ2MEUPM.js.map} +0 -0
  800. /package/dist/{reopen-M5HE6J3G.js.map → reopen-W3LYOHSR.js.map} +0 -0
  801. /package/dist/{rerun-A2XHGFZS.js.map → rerun-4GDNBFNM.js.map} +0 -0
  802. /package/dist/{research-U7RQXMYH.js.map → research-4YTFPGH7.js.map} +0 -0
  803. /package/dist/{research-BLDY5UWH.js.map → research-LOQRIBO6.js.map} +0 -0
  804. /package/dist/{reset-4CCWB2RT.js.map → reset-55CCQGXB.js.map} +0 -0
  805. /package/dist/{reset-J3KCWFMZ.js.map → reset-AVTQEJPZ.js.map} +0 -0
  806. /package/dist/{resolve-HEK27ANI.js.map → resolve-E6FNMFE3.js.map} +0 -0
  807. /package/dist/{retry-VVI6N6UR.js.map → retry-HBJ7MKVI.js.map} +0 -0
  808. /package/dist/{retry-HPZIUG2S.js.map → retry-QBRYM6MG.js.map} +0 -0
  809. /package/dist/{rules-SK5DFFPY.js.map → rules-XNDBGOIS.js.map} +0 -0
  810. /package/dist/{rules-add-YQNYSME7.js.map → rules-add-UM3ZKSVD.js.map} +0 -0
  811. /package/dist/{run-M7ZDE6IA.js.map → run-D4YHZ4Z4.js.map} +0 -0
  812. /package/dist/{shared-NDRFKAH7.js.map → run-ZCJ7NP63.js.map} +0 -0
  813. /package/dist/{scaffold-ad-6BN5LWQH.js.map → scaffold-ad-VQZAP32M.js.map} +0 -0
  814. /package/dist/{scaffold-static-ad-VVZRAWBR.js.map → scaffold-static-ad-LEU4M44N.js.map} +0 -0
  815. /package/dist/{scaffold-video-LFIYI4GP.js.map → scaffold-video-PSWSYRSC.js.map} +0 -0
  816. /package/dist/{schedule-QMOKWTJ3.js.map → schedule-AAH7HYFK.js.map} +0 -0
  817. /package/dist/{scheduled-agents-FCQHQ6KR.js.map → scheduled-agents-HDABMHZI.js.map} +0 -0
  818. /package/dist/{schema-THFLCMBN.js.map → schema-OH5OWMVQ.js.map} +0 -0
  819. /package/dist/{search-XIUYSWO6.js.map → search-BSDPVSGA.js.map} +0 -0
  820. /package/dist/{select-QBU6ED4K.js.map → select-EI4QF4YZ.js.map} +0 -0
  821. /package/dist/{set-prompt-TL64CRBQ.js.map → set-prompt-RKDAGUWG.js.map} +0 -0
  822. /package/dist/{setup-links-QVI6NAOK.js.map → setup-links-CNNJA7AB.js.map} +0 -0
  823. /package/dist/{sync-definition-C6ROLKJ4.js.map → shared-3IBNDEFL.js.map} +0 -0
  824. /package/dist/{site-PZPJY33N.js.map → site-NV4U7PIF.js.map} +0 -0
  825. /package/dist/{sources-ER7ANNG3.js.map → sources-ATONL7W5.js.map} +0 -0
  826. /package/dist/{sources-RMNFV4CA.js.map → sources-C3TGHKLQ.js.map} +0 -0
  827. /package/dist/{stale-ITFCPOER.js.map → stale-6QPXL6BZ.js.map} +0 -0
  828. /package/dist/{stats-RCLQE4HJ.js.map → stats-ZAGJH4AD.js.map} +0 -0
  829. /package/dist/{status-ABMJBCPJ.js.map → status-BML3F4MZ.js.map} +0 -0
  830. /package/dist/{stock-ECRBD7RP.js.map → stock-6SHHLSKG.js.map} +0 -0
  831. /package/dist/{studio-MARZ22J2.js.map → studio-ZLCGXFAN.js.map} +0 -0
  832. /package/dist/{sync-QDD3MRJ6.js.map → sync-DZAOUQPE.js.map} +0 -0
  833. /package/dist/{viewer-check-7ZG7KHEN.js.map → sync-definition-RFEL65JE.js.map} +0 -0
  834. /package/dist/{tag-manager-G3LBQZUL.js.map → tag-manager-3CJ66GKJ.js.map} +0 -0
  835. /package/dist/{tags-EWHPUM2V.js.map → tags-2KSXCJRZ.js.map} +0 -0
  836. /package/dist/{tags-KBCX6BDU.js.map → tags-662KZJLV.js.map} +0 -0
  837. /package/dist/{tags-5JYOEYIT.js.map → tags-6QBVW25V.js.map} +0 -0
  838. /package/dist/{tags-PEWN6GNZ.js.map → tags-LQCEJGIL.js.map} +0 -0
  839. /package/dist/{tags-B473RWAA.js.map → tags-RIVD54ZG.js.map} +0 -0
  840. /package/dist/{targeting-criteria-EU65WUUF.js.map → targeting-criteria-XNLYPIL2.js.map} +0 -0
  841. /package/dist/{targets-KVXS5QKM.js.map → targets-OYIVS5KJ.js.map} +0 -0
  842. /package/dist/{testimonials-YMMA5YWL.js.map → testimonials-WT43CF7V.js.map} +0 -0
  843. /package/dist/{top-companies-OOX3DITI.js.map → top-companies-6QQMOS2Y.js.map} +0 -0
  844. /package/dist/{translate-OXVIMYHE.js.map → translate-7QN7JFGU.js.map} +0 -0
  845. /package/dist/{triggers-OX2GKG4Y.js.map → triggers-LVQY3QJ2.js.map} +0 -0
  846. /package/dist/{unlink-3USEPJSA.js.map → unlink-5ASZTCS2.js.map} +0 -0
  847. /package/dist/{unstage-VSCNPTAC.js.map → unstage-LNZTEATR.js.map} +0 -0
  848. /package/dist/{update-6JKTH65B.js.map → update-7BIR4GYO.js.map} +0 -0
  849. /package/dist/{update-FG4ELXYJ.js.map → update-BRLM5DB3.js.map} +0 -0
  850. /package/dist/{update-HZHG67N6.js.map → update-DRZAAJQ2.js.map} +0 -0
  851. /package/dist/{update-GZFKHA3A.js.map → update-NOWC3ICD.js.map} +0 -0
  852. /package/dist/{upload-BKCQ6FRW.js.map → upload-457Q4ANZ.js.map} +0 -0
  853. /package/dist/{url-params-UN4DRN2H.js.map → url-params-KM4NJGYC.js.map} +0 -0
  854. /package/dist/{validate-ZS2M5Q3V.js.map → validate-COLEPJBA.js.map} +0 -0
  855. /package/dist/{videos-I6YXFBFT.js.map → videos-5IDZTEWC.js.map} +0 -0
  856. /package/dist/{web-UGU7YMII.js.map → web-FZYOCCYN.js.map} +0 -0
  857. /package/dist/{winning-ads-ABN5OULS.js.map → winning-ads-I4DMP7RU.js.map} +0 -0
  858. /package/dist/{write-commands-6VR2UD3T.js.map → write-commands-FYB6QG7K.js.map} +0 -0
  859. /package/dist/{x-WK2VQDPF.js.map → x-OMN5DDLM.js.map} +0 -0
package/README.md CHANGED
@@ -1059,6 +1059,8 @@ baker ads meta lead-forms --page-id 100635183117758 --full # also each
1059
1059
  baker ads meta leads --form-id 987654321 --since 2026-08-01 --until 2026-08-31
1060
1060
  baker ads meta leads --form-id 987654321 --after <nextCursor> # results are PAGED — follow the cursor
1061
1061
  baker ads meta leads --form-id 987654321 --full # raw contact details (CRM hand-off only)
1062
+ baker ads meta leads --adset-id 6123456780 # every ad in an ad set (also --ad-id, --campaign-id)
1063
+ baker ads meta lead-forms spec 987654321 > form.json # a live form as a create --file payload
1062
1064
 
1063
1065
  # "What are we running right now?"
1064
1066
  baker ads meta campaigns --account-id act_123 # ACTIVE only by default
@@ -1092,7 +1094,30 @@ baker ads meta pixels --pixel-id 9988 --stats --days 7
1092
1094
  # "Why isn't it using MY conversions?"
1093
1095
  baker ads meta custom-conversions --account-id act_123 # id, event category, pixel, and the rule as a phrase
1094
1096
  baker ads meta custom-conversions --account-id act_123 --full # raw rule JSON, retention, timestamps
1095
- ```
1097
+
1098
+ # "Target people interested in solar, in Madrid, who speak Spanish" — targeting takes ids, never names
1099
+ baker ads meta targeting search --account-id act_123 --q "solar energy" # interests, behaviors, employers, job titles… with their spec key
1100
+ baker ads meta targeting geo --account-id act_123 --q Madrid --country ES # location keys
1101
+ baker ads meta targeting locales --account-id act_123 --q Spanish # locale numbers
1102
+ baker ads meta targeting categories --account-id act_123 --class life_events # a whole class
1103
+ baker ads meta targeting suggest --account-id act_123 --id interests:6003437140731
1104
+ baker ads meta targeting validate --account-id act_123 --targeting-file t.json # every id valid under its key? retiring?
1105
+ baker ads meta targeting estimate --account-id act_123 --targeting-file t.json --optimization-goal LEAD_GENERATION
1106
+
1107
+ # "Can this account run ads at all?" / identities and libraries
1108
+ baker ads meta account --account-id act_123 # hint: disabled, no payment method, or Meta reconnect owed (bakerPermissions)
1109
+ baker ads meta instagram-accounts --account-id act_123 # the --instagram-user a creative can use
1110
+ baker ads meta apps --account-id act_123 # apps it can promote
1111
+ baker ads meta dsa-recommendations --account-id act_123 # EU DSA beneficiary/payor names
1112
+ baker ads meta images --account-id act_123 # image hashes already on Meta
1113
+ baker ads meta labels --account-id act_123
1114
+ baker ads meta catalogs --business-id 601050769212882 # --catalog-id <id> for its product sets
1115
+ baker ads meta instant-experiences --page-id 904238019441800 # a Page's Instant Experiences, published or not
1116
+ baker ads meta studies --account-id act_123 # Meta A/B tests and their state; --study-id <id> for versions and results
1117
+ baker ads meta high-demand-periods --campaign-id 6123 # budget boosts
1118
+ ```
1119
+
1120
+ Search results come back with a paste-ready fragment in `hints`; each row's `type` is the key its id goes under. Staging an ad set refuses an id Meta does not list under its key, and warns when the audience is at Meta's 1,000-person floor or when anything is set ACTIVE on an account that cannot deliver.
1096
1121
 
1097
1122
  Use a Page only with an ad account listed in its `promotingAccountIds`. Instant-form reads need `hasPageAccessToken: true` on that Page and the company's lead-ads permissions.
1098
1123
 
@@ -1100,6 +1125,37 @@ Use a Page only with an ad account listed in its `promotingAccountIds`. Instant-
1100
1125
 
1101
1126
  `custom-conversions create` stages a new one (`--name`, `--pixel-id`, `--custom-event-type`, plus `--url-contains "/gracias"` or `--rule-file`). A rule is a tree of `and`/`or` over `{"<field>":{"<operator>":<value>}}` leaves, where the field is `URL`, `event`, `referrer` or any event parameter the pixel sends (`value`, `content_category`, or your own), so `--url-contains` is only the single-URL shortcut and `--rule-file` reaches the rest. Meta accepts an unmatchable rule and reports success, so staging refuses unknown operators, bare values, empty branches and two conditions written side by side where `and` was meant, before the op is staged. A case-sensitive `contains` is a real operator and gets through — on a URL always write `i_contains`. It is create-only, because Meta's edge offers neither update nor a delete that removes — which is also why staging refuses a create whose pixel, event category and rule already exist, live on the account or staged earlier in the same chat, or one that would pass Meta's cap of 100 per account. An ad set in the same chat can chain to it with `--custom-conversion-id meta_temp_*`.
1102
1127
 
1128
+ **Automated rules** — Meta's own automation (Ads Manager → Automated rules), which runs on Meta with no Baker involvement once published.
1129
+
1130
+ ```bash
1131
+ baker ads meta rules --account-id act_123 # every rule, what it does in words
1132
+ baker ads meta rules --rule-id 1132635173044914 > rule.json # one rule with its specs; edit and pass back:
1133
+ baker ads meta rules update 1132635173044914 --file rule.json # id, timestamps and on/off switch are left out
1134
+ baker ads meta rules history --rule-id 1132635173044914 --hide-no-changes # what it did and when
1135
+ baker ads meta rules preview 1132635173044914 # what it would act on now
1136
+ baker ads meta rules create --name "Stop expensive ads" --apply-to ad --when "cost_per_result>20" --action pause
1137
+ baker ads meta rules create --name "Scale winners" --apply-to adset --when "roas>3" --window LAST_3D --action raise-budget --by 20% --cap 500 --max-times 3
1138
+ baker ads meta rules create --name "CPM alarm" --apply-to campaign --when "cpm>15" --window TODAY --action notify --realtime
1139
+ baker ads meta rules create --name "Rotate" --ids <adset-id> --action rotate # --ids are the ad sets whose ads take turns (adset.id)
1140
+ baker ads meta rules update|enable|disable|delete <rule-id>
1141
+ ```
1142
+
1143
+ Writes stage like every Meta change and apply at publish; a rule naming an ad, ad set or campaign the same chat creates (`--ids meta_temp_*`) is created after it. Money is in the account currency's major units. `update` replaces each part it touches (what it checks, what it does, when it runs) whole, and cannot turn a scheduled rule real-time or back (Meta keeps a rule's evaluation type — create a new rule). A rule staged in the same chat is dropped with `draft remove`, not `rules delete`. `--at`, `--between` and `--days` make a custom timetable: beside `--schedule daily|hourly|half-hourly` they are refused rather than dropped. Meta's dry run creates rules for real, so staging checks them against Meta's documented field, operator and pairing rules instead, reads every object a rule names, and refuses a cost condition on a pause/unpause/notify rule over ad sets in an Advantage campaign budget campaign (Meta error 2703).
1144
+
1145
+ **A/B tests** — Meta's split tests (Ads Manager → Experiments): Meta splits one audience between versions — ad sets or campaigns — so each person sees one, and calls the winner. Not `baker experiment`, which tests landing pages.
1146
+
1147
+ ```bash
1148
+ baker ads meta studies --account-id act_123 # tests whose versions run here: state, what each compares
1149
+ baker ads meta studies --study-id 6123 # versions with cell ids, each measure with Meta's results
1150
+ baker ads meta studies create --name "Broad vs lookalike" --adsets 6123,meta_temp_ab12 --start 2026-10-20T08:00Z --days 14 \
1151
+ --confidence 90 --measure-pixel 1275507706837548 --measure-event Lead
1152
+ baker ads meta studies update 6123 --end 2026-11-10T08:00Z # --name, --description, --start/--split before it starts
1153
+ baker ads meta studies end 6123 # stop now, keep the results
1154
+ baker ads meta studies delete 6123 # remove it, results and all
1155
+ ```
1156
+
1157
+ Writes stage and apply at publish, after any ad set or campaign the same chat creates (`--adsets meta_temp_*`). One version per ad set or campaign, split evenly unless `--split`; name them with `--version-names`, once per version (`--version-names Broad --version-names "Lookalike, 1%"` — a name may hold a comma); `--file` takes Meta's own shape for several ad sets per version. Meta's dry run creates tests for real, so staging checks Ads Manager's rules instead — at least 2 versions, shares adding up to 100%, each object in one version, one kind of object, 1–30 days, a start in the future, nothing in another test running at the same time (Meta error 1840001) — and a running test keeps its start and split (1840011). A new end may make an A/B test up to 30 days long, a lift study up to 90.
1158
+
1103
1159
 
1104
1160
  **Instant-form leads** — `leads` returns **one page** plus a `nextCursor`; a response carrying one is not the whole set, so follow it before quoting any total. Email and phone answers come back masked unless `--full`. Both commands need Meta lead ads switched on for the company (`pages_manage_ads` + `leads_retrieval`, granted at connect time — a company switched on after connecting must reconnect Meta first); each says which of the two is missing.
1105
1161
 
@@ -1110,6 +1166,8 @@ Meta writes mirror the Google/LinkedIn model: they **never hit the Graph API whe
1110
1166
 
1111
1167
  Staging also refuses what LinkedIn would reject at publish: a campaign group created `PAUSED` (only `DRAFT`/`ACTIVE`), a group `--total-budget` without `--end`, a `PAUSED` campaign in a `DRAFT` group, archiving a `DRAFT` ad, and a library image that is not JPG, PNG or GIF. Every campaign carries `--political-intent` (`NOT_DECLARED` by default; `NOT_POLITICAL` or `POLITICAL` are the advertiser's declaration). A write to an ad account LinkedIn has not enabled for Baker fails with a message saying so.
1112
1168
 
1169
+ Staging then asks Meta itself: campaign, ad set and ad creates and updates, and new creatives, are sent as a Meta dry run (`validate_only`, nothing applied), so a change Meta would refuse at publish is refused while staging, in Meta's words. A change building on something the same chat creates is checked at publish. `ads retag` asks Meta whether the ad takes edits at all before staging anything, and `--set` may be repeated.
1170
+
1113
1171
  **That publish reaches the real ad account for every company** — Meta writes are generally available, with no per-company flag. Discarding the chat before it completes is what undoes a staged change.
1114
1172
 
1115
1173
  Chain a full ad from scratch with `meta_temp_*` refs (each create returns one):
@@ -1122,6 +1180,13 @@ baker ads meta media upload --account-id act_123 --kind image --image-id <bakerI
1122
1180
  baker ads meta lead-forms create --account-id act_123 --page-id 555 --name "Free audit" \
1123
1181
  --questions FULL_NAME,EMAIL,PHONE --privacy-policy-url https://example.com/privacy \
1124
1182
  --follow-up-url https://example.com # → meta_temp_form
1183
+ # --question "Budget? => Under 1k | 1k+" (repeatable), --locale ES_LA, --headline, --higher-intent,
1184
+ # --intro-title/--intro-text, --thank-you-title/-body/-button/-button-text/-url/-phone/-country,
1185
+ # --sharing open, --sms-verification, --tracking name=value; or the whole spec with --file form.json.
1186
+ # A form never changes once published and is never deleted: copy it with changes, then retire the old one.
1187
+ # A duplicate changes only the intro and thank-you fields you name (--thank-you-title alone keeps the live text and button).
1188
+ baker ads meta lead-forms duplicate 987654321 --account-id act_123 --name "Free audit (ES)" --locale ES_LA
1189
+ baker ads meta lead-forms archive 987654321 --account-id act_123 # unarchive brings it back
1125
1190
 
1126
1191
  # 2. campaign → ad set → creative → ad
1127
1192
  baker ads meta campaigns create --account-id act_123 --name "Q3 Prospecting" --objective OUTCOME_LEADS --daily-budget 50 # → meta_temp_camp
@@ -1142,7 +1207,104 @@ baker ads meta draft remove meta_temp_cr # removing a create cascades to depen
1142
1207
  baker ads meta draft clear
1143
1208
  ```
1144
1209
 
1145
- Status changes are `pause|resume|archive|delete` subcommands on `campaigns`/`adsets`/`ads`. `archive` keeps the entity readable in Ads Manager; `delete` removes it permanently (an archived entity can only be deleted). `duplicate` reconstructs a paused copy from the live snapshot (`--replace` also pauses the original once the copy publishes — write it attached, `--replace=false` or `--no-replace`, since the spaced form `--replace false` is rejected: a boolean flag written with a space is set to true and the word dropped). Carousel/dynamic creatives and complex targeting go via `--file` (creativeType `carousel`/`dynamic`; full Meta targeting spec). Advantage+ Creative enhancements: `--standard-enhancements on|off`, or per-feature toggles via a `--file` `enhancements.features` map.
1210
+ Delivery controls on `adsets create|update`: `--min-roas 2.5` (ROAS goal bidding, goal `VALUE`), `--frequency-cap 2/7` (REACH/THRUPLAY), `--schedule "Mon-Fri 09-18"` (repeatable dayparting; lifetime budget only) with `--schedule-timezone viewer|account`, `--pacing standard|no_pacing`, `--daily-min-spend`/`--daily-spend-cap`/`--lifetime-min-spend`/`--lifetime-spend-cap` (an ad set's share of a campaign budget), `--budget-boost` (repeatable high-demand periods on the ad set's own daily budget; on update Meta adds them beside the ad set's existing boosts, and `--remove-boost`/`--move-boost` take one away or re-time it), and on create only `--attribution 7d_click,1d_view` (conversion goals; `LINK_CLICKS`, `LANDING_PAGE_VIEWS` and `REACH` take `1d_click` alone — Meta refuses a change on a live ad set) and `--dynamic-creative`. A frequency cap counts impressions or 2- or 15-second video views (6-second ones on `REACH` only); a cap at least the account's smallest daily budget (× the ad set's days for lifetime limits) above the minimum spend is required. Campaigns take `--budget-boost START..END=+AMOUNT|+PERCENT%` (repeatable high-demand periods on a daily budget; on update restate `--daily-budget`; Meta adds them to the campaign's existing boosts). `adsets update --clear daily-min-spend,daily-spend-cap,lifetime-min-spend,lifetime-spend-cap,schedule,boosts` and `campaigns update --clear boosts` take controls away; a ROAS floor goes by switching `--bid-strategy`. `campaigns` listings hint which campaigns Meta counts as Advantage+ (`--fields id,name,advantage_state_info` for each lever).
1211
+
1212
+ Catalog, collection, messaging and app ads:
1213
+
1214
+ ```bash
1215
+ # Click-to-message: the ad set opens a conversation with the Page, the creative's button names the app and greets
1216
+ baker ads meta adsets create --campaign <id> --name "Chat" --optimization-goal CONVERSATIONS --billing-event IMPRESSIONS \
1217
+ --destination-type MESSENGER --page-id 555 --daily-budget 10 --targeting-file t.json
1218
+ baker ads meta creatives create --page 555 --message "Chat with us" --link https://example.com --image-hash <hash> \
1219
+ --cta MESSAGE_PAGE --greeting "Hi! How can we help?" --ice-breaker "Prices? => From 99 EUR." # WHATSAPP_MESSAGE, INSTAGRAM_MESSAGE
1220
+ # App ads: store link + optional deep link and how it opens
1221
+ baker ads meta adsets create … --optimization-goal APP_INSTALLS --app-id <id> --app-store-url https://apps.apple.com/…
1222
+ baker ads meta creatives create --page 555 --message "Get the app" --link https://apps.apple.com/… --image-hash <hash> \
1223
+ --cta INSTALL_MOBILE_APP --deep-link myapp://home --app-id <id> --applink-treatment deeplink_with_appstore_fallback
1224
+ # Advantage+ catalog ads
1225
+ baker ads meta campaigns create --name "Catalog" --objective OUTCOME_SALES --catalog-id <catalog>
1226
+ baker ads meta adsets create … --optimization-goal OFFSITE_CONVERSIONS --product-set-id <set> --custom-event-type PURCHASE
1227
+ baker ads meta creatives create --type catalog --page 555 --product-set-id <set> --message "{{product.name}}" \
1228
+ --headline "{{product.price}}" --link https://shop.example --format carousel|single|slideshow
1229
+ # Instant Experience (elements in flag order; published at publish) and an ad — or a collection ad — opening it
1230
+ baker ads meta instant-experiences create --account-id act_123 --page-id 555 --name "Spring" --video-id <id> \
1231
+ --text "Our range" --button "Shop => https://shop.example" [--footer "Visit => https://…"] [--unpublished]
1232
+ baker ads meta instant-experiences update <id> --publish # an unpublished one only
1233
+ baker ads meta creatives create --type instant_experience --canvas-id meta_temp_… --page 555 --message "Tap" --image-hash <hash> [--format collection]
1234
+ # Catalogs, products, product sets, feeds (Catalog permission for Meta; catalogs the account's own Business owns)
1235
+ baker ads meta catalogs create --account-id act_123 --name "Shop" --pixel <pixel> # catalog ads need a pixel on the catalog
1236
+ baker ads meta catalogs update <id> [--name …] [--pixel <id>] [--unlink-pixel <id>] | catalogs delete <id>
1237
+ baker ads meta catalogs products --catalog-id <id> [--full] [--retailer-id SKU-1]
1238
+ baker ads meta catalogs products create --catalog-id <id|meta_temp_…> --retailer-id SKU-1 --name … --description … \
1239
+ --price 19.99 --currency EUR --url https://… --image-url https://… [--sale-price …] [--availability …] [--brand …]
1240
+ baker ads meta catalogs products update|delete <id>
1241
+ baker ads meta catalogs sets create --catalog-id <id> --name … [--retailer-id SKU-1 …] [--filter '<Meta rule JSON>']
1242
+ baker ads meta catalogs sets update|delete <id>
1243
+ baker ads meta catalogs feeds create --catalog-id <id> --name … [--url https://… --interval DAILY|HOURLY|WEEKLY --hour 3 --day MONDAY]
1244
+ baker ads meta catalogs feeds update|delete <id> | catalogs feeds --catalog-id <id> | catalogs diagnostics --catalog-id <id>
1245
+ # A photo on a Page that is never posted — for Instant Experience photo elements (Page posts permission for Meta)
1246
+ baker ads meta page-photos upload --page-id 555 --image-id <library image> [--caption …] | page-photos delete <id>
1247
+ # A photo collection: the four pictures under the hero, by the live experience's element ids
1248
+ baker ads meta creatives create --type instant_experience --format collection --canvas-id <id> … --collection-thumbnail <element> (×4)
1249
+ # Account settings, brand safety, reach and frequency
1250
+ baker ads meta account-settings --account-id act_123 [--name …] [--spending-limit 5000 | --remove-spending-limit | --reset-spending-limit] [--default-eu-advertiser "…" --default-eu-payer "…" | --clear-default-eu]
1251
+ baker ads meta account-details --account-id act_123 --show users|recommendations|account-controls|playables|place-page-sets # reads only
1252
+ baker ads meta block-lists --account-id act_123 [--full] | block-lists create --name … --url a.com --url b.com | add <id> --url … | delete <id>
1253
+ baker ads meta adsets create|update … [--block-list <id>] [--content-filter FEED_STRICT] [--exclude-publisher-category gambling]
1254
+ baker ads meta reach-frequency --account-id act_123 | reach-frequency predict --page-id 555 --budget 1000 --start … --end … --targeting-file t.json
1255
+ baker ads meta reach-frequency predict … [--objective OUTCOME_AWARENESS --optimization-goal REACH --target-frequency 2] [--instream-package PREMIUM] [--schedule "Mon-Fri 09-18"]
1256
+ baker ads meta reach-frequency reserve <quote id> | reach-frequency cancel <reservation id>
1257
+ baker ads meta adsets create --campaign <RESERVED campaign> … --reservation <reservation id or meta_temp_…>
1258
+ # Boosts, partnership ads, multi-advertiser ads, conversion domain
1259
+ baker ads meta page-posts --page-id 555
1260
+ baker ads meta instagram-media --instagram-user <id>
1261
+ baker ads meta comments --ad-id <id>
1262
+ baker ads meta creatives create --type existing_post --post-id <page>_<post> | --instagram-media-id <id> --page 555 | --ad-code <code> --page 555
1263
+ baker ads meta creatives create … [--partner-page <id>] [--partner-instagram <id>] [--partner-format both|first_only|auto] [--multi-advertiser opt_out]
1264
+ baker ads meta ads create … [--conversion-domain example.com]
1265
+ # Budget boosts one at a time, a rule run now, a lookalike of conversions, the audience in words
1266
+ baker ads meta campaigns|adsets update <id> [--remove-boost <boost id>] [--move-boost <boost id>=START..END]
1267
+ baker ads meta adsets update <id> --budget-boost START..END=+50% # a live ad set with its own daily budget
1268
+ baker ads meta rules run <rule id> # once, at publish
1269
+ baker ads meta audiences create --subtype LOOKALIKE --lookalike-of-conversions <campaign id> --ratio 0.01 --country ES
1270
+ baker ads meta targeting describe --account-id act_123 --adset-id <id> | --targeting-file t.json
1271
+ # Lift studies and creative tests
1272
+ baker ads meta studies create --type lift --campaigns <id> --holdout 10 --start … --days 28 --measure-pixel <id> --measure-event Lead
1273
+ baker ads meta studies create --type creative --ads <ad>,<ad> --test-daily-budget 2 --start … --days 7 [--confidence 90 --measure-pixel <id> --measure-event Purchase --observe-until …]
1274
+ ```
1275
+
1276
+ A flag only another type of test takes (`--holdout` on an A/B test, `--adsets` on a creative test, `--ads` or `--split` on a lift study) is refused rather than dropped. Rule amounts (`--when`, `--by`, `--cap`) take a dot or a comma for decimals; a lone comma before three digits (`1,234`) is refused as ambiguous.
1277
+
1278
+ A conversation destination needs `--page-id`, and `CONVERSATIONS` a conversation destination. A deep link needs the button to lead to the App Store / Google Play page (Meta refuses it beside a website, subcode 1885949). Catalog tokens name their catalog type (`{{product.price}}`, never `{{price}}`); product audiences go in the targeting file as `product_audience_specs`. Catalog changes and Page photos are refused with a plain message when the company is not switched on for them. A product picture must be a public image Meta can fetch (checked at staging). Meta deletes no Instant Experience and changes none once published, so one is made only at publish; a photo element takes a Page photo (`page-photos upload`, by its `meta_temp_*` ref), and an ad opens only a published experience. A collection ad needs an experience of header → product set → footer and a set with at least four showable products. `creatives create --shop-destination website_only` opts a shop advertiser's ad out of Meta's v26 website-and-shop default.
1279
+
1280
+ Staging refuses a budget under the ad account's own minimum for what the ad set is billed on (`account` shows `minimum_daily_budgets`). The account spending limit counts from when it is set and stops every campaign on the account. A block list takes sites off Audience Network and in-stream only, and Meta neither renames one nor takes a site off it; on `adsets update` the brand-safety flags alone keep the rest of the live targeting. A reach-and-frequency quote is a forecast that holds nothing; a reservation holds the price and an ad set bought on it takes its budget, dates and goal from it. Partnership ads need the ad's own Instagram identity and a partner Page with a linked Instagram account, and run once the partner approves. Listing Instagram posts and reading comments on ads need Meta permissions the connection does not ask for: both answer a plain refusal.
1281
+
1282
+ Customer lists, lookalikes and account assets:
1283
+
1284
+ ```bash
1285
+ baker ads meta audiences create --account-id act_123 --name "Customers" --subtype CUSTOM --customer-file-source USER_PROVIDED_ONLY [--value-based]
1286
+ baker ads meta audiences members add <audienceId|meta_temp_…> --file customers.csv [--country ES] [--value-column revenue] [--columns email,phone] [--date-format DMY|MDY]
1287
+ baker ads meta audiences members remove <audienceId> --file unsubscribed.csv
1288
+ baker ads meta audiences members replace <audienceId> --file customers.csv # everyone not in the file leaves; runs alone
1289
+ baker ads meta audiences create --name "LAL 1-3%" --subtype LOOKALIKE --lookalike-of <id> --starting-ratio 0.01 --ratio 0.03 --countries ES,PT [--allow-international-seeds]
1290
+ baker ads meta audiences update <id> --description … --opt-out-link https://… --customer-file-source …
1291
+ baker ads meta audiences delete <id> # permanent; refused while a lookalike or live ad set uses it
1292
+ baker ads meta audiences saved --account-id act_123 # saved audiences (read-only); adsets create --saved-audience <id> copies one's targeting
1293
+ baker ads meta custom-conversions update <id> --name … --description … --value 25
1294
+ baker ads meta custom-conversions delete <id> # Meta archives it
1295
+ baker ads meta creatives delete <id> # refused while a live ad runs it (delete/repoint the ad in the same chat)
1296
+ baker ads meta media delete --image-hash <hash> # out of the image library
1297
+ baker ads meta labels create --name "Q4 launch" # → meta_temp_label
1298
+ baker ads meta labels attach <label|meta_temp_…> --campaigns 6123,6124 --adsets … --ads … --creatives …
1299
+ baker ads meta labels detach <label> --campaigns 6123
1300
+ baker ads meta labels rename <label> --name … / labels delete <label>
1301
+ ```
1302
+
1303
+ A customer list's file is read in the workspace: every value is normalized and SHA-256 hashed on the machine running the CLI (Meta's normalization: emails lowercased, phones with their country code, names without punctuation, a US zip's first five digits, a birthday as year/month/day); only the hashes are uploaded, in batches of 10,000 (at most 20 per change — 200,000 people), and held by Baker until publish; only counts are printed. A US state is sent as its two-letter code; slashed birthdays are read in the order the file shows, else refused until `--date-format DMY|MDY`; a value-based list reads `1,250.00` and `1.250,00` alike and leaves out a person without a value. The whole change is checked before the first batch uploads, and batches no draft needs are deleted after a day. A replace runs alone — Meta refuses it while the list still processes an earlier upload — and one that fails part-way is closed at once and reported as a half-replaced list; publishing it again waits while Meta still processes it. A lookalike needs `--ratio` and a country, and its seed must already hold people (not a list this chat creates). Label changes stage the object's whole label set (Meta replaces it), read against the labels it has now and applied at publish to the labels it has then. Deletes run last at publish, child before parent, and staging refuses a delete that would strand something live the draft does not also handle.
1304
+
1305
+ `copy <id>` on `campaigns`/`adsets`/`ads` stages Meta's own copy (`POST /{id}/copies`), which keeps everything Meta holds: `--deep` (a campaign's ad sets and ads, an ad set's ads; at most 51 ads), `--to-campaign` / `--to-adset <id|meta_temp_*>`, `--status PAUSED|ACTIVE|INHERITED` (default PAUSED), `--rename top|deep|none`, `--rename-prefix`, `--rename-suffix`, and `--start`/`--end` for the copied ad sets. The copy's `meta_temp_*` ref resolves to its new id at publish, so `adsets update <copy ref> …` in the same chat changes the copy once Meta has made it. A deep copy runs as an asynchronous Meta job the publish waits on.
1306
+
1307
+ Status changes are `pause|resume|archive|delete` subcommands on `campaigns`/`adsets`/`ads`. `archive` keeps the entity readable in Ads Manager; `delete` removes it permanently (an archived entity can only be deleted). `duplicate` reconstructs a paused copy from the live snapshot (`--replace` also pauses the original once the copy publishes — write it attached, `--replace=false` or `--no-replace`, since the spaced form `--replace false` is rejected: a boolean flag written with a space is set to true and the word dropped). Carousel/dynamic creatives and complex targeting go via `--file` (creativeType `carousel`/`dynamic`; full Meta targeting spec). Advantage+ Creative enhancements: `--standard-enhancements on|off` switches Meta's text suggestions only; every feature that changes the picture or video is sent off unless named with `--visual-enhancement <feature>` (repeatable). A video's cover: `--thumbnail-ref <meta_temp_*>` (a staged picture upload) or `--thumbnail-hash`. Carousels: `--card-order fixed|optimized` (default fixed) and `--end-card on|off` (default off). `creativeType: placement` (via `--file`) shows a different asset per placement (`assets[].placements`: `feed`, `stories`, `reels`, `right_column`, one `default`).
1146
1308
 
1147
1309
  #### Smart defaults (so agents don't enumerate the API)
1148
1310
 
@@ -1184,9 +1346,9 @@ preview # iframe HTML for a creative or ad in a given ad_format, or
1184
1346
  # placement an insights breakdown reported (--placement, --list-formats)
1185
1347
  ```
1186
1348
 
1187
- Placement diagnostics deliberately stop at evidence. `insights` names a suspect placement with its share of delivery, `preview` shows what Meta renders there, and neither asserts *why* — Meta documents an eligibility error for a video creative in a video-incompatible placement, not a silent fallback to the cover frame. Ad-set writes that pin placements warn about the learning-phase reset, and a placement set missing the `feed` Meta requires alongside `marketplace`/`search`/`profile_feed`/`notification` is rejected at stage time.
1349
+ Placement diagnostics deliberately stop at evidence. `insights` names a suspect placement with its share of delivery, `preview` shows what Meta renders there, and neither asserts *why* — Meta documents an eligibility error for a video creative in a video-incompatible placement, not a silent fallback to the cover frame. Ad-set writes that pin placements warn about the learning-phase reset, and a placement set missing the `feed` Meta requires alongside `marketplace`/`search`/`profile_feed`/`notification` is rejected at stage time. Placements Meta retired on Graph v26 — Instagram `explore`, Messenger `story`, Facebook `video_feeds` — are refused at stage time with the replacement named; Instagram `explore_home` now runs on its own. Market-level insights use `--breakdowns comscore_market` (`dma` is refused by Meta). A Housing, Employment or Financial products ad set that narrows its audience must set `targeting_automation.advantage_audience` to 1 or 0. Click-to-message ad sets and Instant Experiences are refused at stage time when the Meta connection recorded no `pages_manage_ads` (it comes with the per-company lead ads switch).
1188
1350
 
1189
- The HTTP backend exposes more endpoints (catalogs, ad-studies, ad-images, labels, high-demand-periods, raw currency lookup). They're intentionally not surfaced as CLI commands because AI agents rarely need them. Hit them via curl against `/api/ads/meta/*` if needed.
1351
+ Ad images, labels and high-demand periods are CLI commands (`images`, `labels`, `high-demand-periods`). The one backend endpoint not surfaced as a command is the raw currency lookup, which agents rarely need; hit it via curl against `/api/ads/meta/*` if needed.
1190
1352
 
1191
1353
  #### Auth + caching
1192
1354
 
@@ -1206,7 +1368,7 @@ A `FORBIDDEN` from any Meta command is a permission refusal on a live connection
1206
1368
  - `spend` is a decimal string in account currency, not an integer.
1207
1369
  - `effective_status` ≠ `status`. The dashboard shows effective_status (e.g. `WITH_ISSUES`, `PENDING_REVIEW`, `DISAPPROVED`, `ADSET_PAUSED`).
1208
1370
  - Meta creatives are effectively immutable once attached. Editing copy/image/CTA = stage a new creative + `ads update <id> --creative <ref>` (or `creatives duplicate`), not an edit of the live creative — see [Staged writes](#staged-writes-baker-ads-meta-campaignsadsetsadscreativesaudiencesmediadraft) above.
1209
- - Currency offsets are non-uniform (JPY/KRW = 1, KWD/BHD = 1000, most = 100). Read `account.currency` before doing budget math.
1371
+ - Currency offsets are non-uniform (JPY/KRW/IDR/CRC = 1, most — BHD and JOD included — = 100). Read `account.currency` before doing budget math.
1210
1372
 
1211
1373
  ---
1212
1374
 
@@ -1591,7 +1753,7 @@ Shared flags: `--days <n>` (default 30) or `--start-date` / `--end-date` (`YYYY-
1591
1753
 
1592
1754
  **`tracking` answers "can this account be reported on at all", and it reads the ad account to do it.** `analytics ads` can only describe parameters that have already arrived, which leaves two blind spots that mislead in the expensive direction: a platform with no traffic in the window looks exactly like a platform whose ads carry nothing, and a dimension arriving under a name nobody has mapped looks exactly like one nothing carries. `baker analytics tracking` reads the mapping, the traffic **and** the client's own Google tracking templates / Meta URL parameters, so it can answer for a platform that has not had a click yet. Every dimension comes back in one of four states, and they are four different jobs: `covered` is done; `unmapped` means the URLs already carry it under a name Baker does not read, so run the `mapCommand` in the response — free, and it repairs the traffic already collected; `missing` means nothing carries it; `unknown` means no visit arrived *and* the account could not be read, which is not a finding and must never be reported as untagged.
1593
1755
 
1594
- **`fix` says which level to put the missing pairs at, and who can write it.** Not a field name — the levels that platform accepts tagging at, widest first (the widest is the one to prefer: it covers campaigns nobody has created yet), which of them Baker can stage and which the user has to do by hand, and how each field treats a value already in it. That last part is the one people skip and it differs per platform: a Google **campaign** final URL suffix *replaces* the account one rather than merging, LinkedIn's `url-params` call *sets the ad set's whole parameter set* and Baker cannot read back what is in it, and a Meta creative is immutable so a live ad cannot be retagged through Baker at all. `suffix` is only ever the **missing** pairs, so the rule everywhere is the same: read what is there, work out what is missing, write the union. Where `fix` says Baker has no write surface — Microsoft, TikTok, Reddit, Pinterest, Snapchat — that is a request to hand the user with the exact string and the exact screen, never a reason to stop on the platforms it can write. ChatGPT Ads is one Baker can write: its campaign and ad group `--tracking-template` (`baker ads chatgpt campaigns|ad-groups update`), which should carry `campaign_id={campaign_id}&ad_group_id={ad_group_id}&ad_id={ad_id}` — an id that only rides in `utm_campaign` or `utm_content` is reported as that UTM and never as the campaign or the ad, so `--platform chatgpt --role adgroup_id` has nothing to split by.
1756
+ **`fix` says which level to put the missing pairs at, and who can write it.** Not a field name — the levels that platform accepts tagging at, widest first (the widest is the one to prefer: it covers campaigns nobody has created yet), which of them Baker can stage and which the user has to do by hand, and how each field treats a value already in it. That last part is the one people skip and it differs per platform: a Google **campaign** final URL suffix *replaces* the account one rather than merging, LinkedIn's `url-params` call *sets the ad set's whole parameter set* and Baker cannot read back what is in it, and a Meta creative is immutable, so a live Meta ad is retagged by `baker ads meta ads retag` (a cloned creative plus a repoint). `suffix` is only ever the **missing** pairs, so the rule everywhere is the same: read what is there, work out what is missing, write the union. Where `fix` says Baker has no write surface — Microsoft, TikTok, Reddit, Pinterest, Snapchat — that is a request to hand the user with the exact string and the exact screen, never a reason to stop on the platforms it can write. ChatGPT Ads is one Baker can write: its campaign and ad group `--tracking-template` (`baker ads chatgpt campaigns|ad-groups update`), which should carry `campaign_id={campaign_id}&ad_group_id={ad_group_id}&ad_id={ad_id}` — an id that only rides in `utm_campaign` or `utm_content` is reported as that UTM and never as the campaign or the ad, so `--platform chatgpt --role adgroup_id` has nothing to split by.
1595
1757
 
1596
1758
  **The one recommendation about the ad account itself.** `baker analytics ads --platform <p>` warns when that platform's traffic carries no campaign id, ad group id or ad id — the three tiers every "which ad worked" question is grouped by — and returns the exact URL suffix, in the platform's own macro language, that would start sending the missing ones. It is the only mapping gap that cannot be fixed afterwards: naming a parameter Baker already captures corrects the history, because roles are resolved when a report is read, but a parameter the ads never sent has no stored values for a meaning to apply to. The hint stays quiet for a platform with little traffic, and defers to the untagged-account finding rather than repeating it.
1597
1759
 
@@ -4308,7 +4470,7 @@ baker chats diff <id> --live # in-progress Session: read from its l
4308
4470
  ```
4309
4471
 
4310
4472
  **`list` flags:** `--status active|archived|all` (default `all`), `--limit` (1-100, default 20), `--full` (include each Session's full change list).
4311
- **`view`:** returns the unified `effects` — git content (`content`, `creatives`) AND DB-only effects that never touch the repo (`actions`, `scheduledAgents`, `tags`, `ads.{google,meta,linkedin,x}`, `tagManager`, `ga4`, `funnel` (with the ways in it added or removed, `triggersAdded`/`triggersRemoved`), `conversions`, `conversionSends`, `eventSources`), plus `otherChanges` for every other change the Session made (A/B tests, recipes, library images), each resolved to real detail and flagged `staged` (in-progress draft) vs applied. Plus `kickoff`, `outputs` counts, `threads`, `commits`, `diffAvailable`.
4473
+ **`view`:** returns the unified `effects` — git content (`content`, `creatives`) AND DB-only effects that never touch the repo (`actions`, `scheduledAgents`, `tags`, `ads.{google,meta,linkedin,x}`, `tagManager`, `ga4`, `funnel` (with the ways in it added or removed, `triggersAdded`/`triggersRemoved`), `conversions`, `conversionSends`, `eventSources`), plus `otherChanges` for every other change the Session made (A/B tests, recipes, library images), each resolved to real detail and flagged `staged` (in-progress draft) vs applied. Plus `kickoff`, `outputs` counts, `threads`, `commits`, `diffAvailable`, and `publish` — what the Publish left behind (`failedTotal`) and the changes that went through but read back differently on the platform afterwards (`unconfirmedTotal`, `surfaces[].unconfirmedChanges`); a hint names either.
4312
4474
  **`transcript` flags:** `--limit` (1-1000, default 100, most recent), `--full` (untruncated text). Returns `entries` (`role` + `text`) and `truncated`.
4313
4475
  **`diff` flags:** `--surface knowledge|company|brand|landings|flows|creatives`, `--full` (patch text per file), `--live` (read an in-progress Session's changes from its live workspace). Returns `available`, `source` (`published`|`live`), `files` (`path`, `surface`, `status`, `additions`, `deletions`, `patch`), and `truncated` when a large live diff was capped.
4314
4476
 
@@ -0,0 +1,80 @@
1
+ import {
2
+ CHATGPT_ADS_REFERENCE,
3
+ runChatgptRead
4
+ } from "./chunk-IG627WWY.js";
5
+ import "./chunk-SWL4AAPP.js";
6
+ import {
7
+ apiGet
8
+ } from "./chunk-XDZVBX6L.js";
9
+ import "./chunk-N5O67GK5.js";
10
+ import "./chunk-EE72SSB2.js";
11
+ import {
12
+ registerSchema
13
+ } from "./chunk-WNSE7N75.js";
14
+ import "./chunk-YQSBHWOI.js";
15
+
16
+ // src/commands/ads/chatgpt/account.ts
17
+ import { defineCommand } from "citty";
18
+ registerSchema({
19
+ command: "ads.chatgpt.account",
20
+ description: "The connected ChatGPT Ads account: name, currency, timezone, status, and the brand and account reviews that decide whether anything in it can serve.",
21
+ args: {
22
+ full: { type: "boolean", description: "Return ChatGPT Ads' own account object", required: false }
23
+ }
24
+ });
25
+ function accountHints(account) {
26
+ const hints = [];
27
+ if (account.brandReview.status !== "approved") {
28
+ const reason = account.brandReview.reason ? ` (${account.brandReview.reason})` : "";
29
+ hints.push(
30
+ `Brand review is ${account.brandReview.status}${reason}: nothing in this account serves until it is approved. Fix it in ChatGPT Ads Manager before changing campaigns.`
31
+ );
32
+ }
33
+ if (account.accountReview && account.accountReview.status !== "approved") {
34
+ hints.push(`A separate account review is ${account.accountReview.status}; delivery can wait on it too.`);
35
+ }
36
+ if (account.status === "paused") {
37
+ hints.push("The whole account is paused, so no campaign in it serves whatever its own status says.");
38
+ }
39
+ return hints;
40
+ }
41
+ var SHOW_ARGS = {
42
+ full: { type: "boolean", description: "Return ChatGPT Ads' own account object", required: false }
43
+ };
44
+ var accountShowCommand = defineCommand({
45
+ meta: {
46
+ name: "show",
47
+ description: "The connected ChatGPT Ads account. Example: baker ads chatgpt account"
48
+ },
49
+ args: SHOW_ARGS,
50
+ run: async ({ args }) => {
51
+ await runChatgptRead(
52
+ CHATGPT_ADS_REFERENCE.account,
53
+ () => apiGet("/api/ads/chatgpt/account", args.full ? { full: "true" } : void 0),
54
+ (account) => args.full ? [] : accountHints(account)
55
+ );
56
+ }
57
+ });
58
+ var accountCommand = defineCommand({
59
+ meta: {
60
+ name: "account",
61
+ description: `The connected ChatGPT Ads account. Start here: currency and timezone for every figure, and whether reviews let anything serve.
62
+
63
+ Examples:
64
+ baker ads chatgpt account
65
+ baker ads chatgpt account --full
66
+ baker ads chatgpt account update --favicon-url https://example.com/icon.png \u2014 staged; applies on publish`
67
+ },
68
+ subCommands: {
69
+ show: accountShowCommand,
70
+ update: () => import("./account-writes-AE5IJGGW.js").then((m) => m.accountUpdateCommand)
71
+ },
72
+ // A parent must never declare `run`: citty falls through to it after the matched subcommand.
73
+ args: SHOW_ARGS,
74
+ default: "show"
75
+ });
76
+ export {
77
+ accountCommand,
78
+ accountHints
79
+ };
80
+ //# sourceMappingURL=account-3H6BZO5H.js.map
@@ -0,0 +1,138 @@
1
+ import {
2
+ handleMetaError,
3
+ resolveAccountIdArg
4
+ } from "./chunk-QTOZ32SU.js";
5
+ import {
6
+ writeJsonEnvelope
7
+ } from "./chunk-SWL4AAPP.js";
8
+ import {
9
+ NO_CACHE_ARG
10
+ } from "./chunk-K3TNTBZJ.js";
11
+ import {
12
+ apiGet
13
+ } from "./chunk-XDZVBX6L.js";
14
+ import "./chunk-N5O67GK5.js";
15
+ import "./chunk-EE72SSB2.js";
16
+ import "./chunk-WNSE7N75.js";
17
+ import "./chunk-YQSBHWOI.js";
18
+
19
+ // ../api/src/ads-meta/accountHealth.ts
20
+ var ACCOUNT_STATUS = {
21
+ 1: "ACTIVE",
22
+ 2: "DISABLED",
23
+ 3: "UNSETTLED",
24
+ 7: "PENDING_RISK_REVIEW",
25
+ 8: "PENDING_SETTLEMENT",
26
+ 9: "IN_GRACE_PERIOD",
27
+ 100: "PENDING_CLOSURE",
28
+ 101: "CLOSED",
29
+ 201: "ANY_ACTIVE",
30
+ 202: "ANY_CLOSED"
31
+ };
32
+ var DISABLE_REASON = {
33
+ 1: "ads integrity policy",
34
+ 2: "ads IP review",
35
+ 3: "payment risk",
36
+ 4: "gray account shut down",
37
+ 5: "ads AFC review",
38
+ 6: "business integrity review",
39
+ 7: "permanently closed",
40
+ 8: "unused reseller account",
41
+ 9: "unused account",
42
+ 10: "umbrella ad account",
43
+ 11: "Business Manager integrity policy",
44
+ 12: "misrepresented ad account",
45
+ 13: "legal entity de-share",
46
+ 14: "thread review",
47
+ 15: "compromised ad account"
48
+ };
49
+ var DELIVERS_ANYWAY = /* @__PURE__ */ new Set([1, 9]);
50
+ function statusBlocker(account) {
51
+ const status = account.account_status;
52
+ if (status === void 0 || status === 1) return void 0;
53
+ const name = ACCOUNT_STATUS[status] ?? `status ${status}`;
54
+ const reason = account.disable_reason ? DISABLE_REASON[account.disable_reason] : void 0;
55
+ const why = reason ? ` (${reason})` : "";
56
+ if (DELIVERS_ANYWAY.has(status)) {
57
+ return `the ad account is ${name}${why}: a payment failed and Meta stops delivery when the grace period ends \u2014 the account owner settles it in Meta Billing`;
58
+ }
59
+ return `the ad account is ${name}${why}, so nothing on it delivers \u2014 only the account owner can resolve that with Meta (Account Quality / Billing)`;
60
+ }
61
+ function metaAccountDeliveryBlockers(account) {
62
+ const blockers = [];
63
+ const status = statusBlocker(account);
64
+ if (status) blockers.push(status);
65
+ const hasFunding = Boolean(account.funding_source || account.funding_source_details?.id);
66
+ if (!hasFunding && !account.is_prepay_account) {
67
+ blockers.push(
68
+ "the ad account has no payment method, so Meta accepts its ads but delivers none (they wait in PENDING_BILLING_INFO) \u2014 the account owner adds one in Meta Billing"
69
+ );
70
+ }
71
+ if (spendCapReached(account)) {
72
+ blockers.push(
73
+ "the ad account has reached its spending limit, so Meta stops delivering every ad on it \u2014 an admin raises or removes the limit in Meta Billing \u2192 Payment settings, or Baker can change it as part of a chat"
74
+ );
75
+ }
76
+ return blockers;
77
+ }
78
+ function spendCapReached(account) {
79
+ const cap = Number(account.spend_cap ?? "0");
80
+ const spent = Number(account.amount_spent ?? "0");
81
+ return Number.isFinite(cap) && Number.isFinite(spent) && cap > 0 && spent >= cap;
82
+ }
83
+
84
+ // src/commands/ads/meta/account.ts
85
+ import { defineCommand } from "citty";
86
+ var accountCommand = defineCommand({
87
+ meta: {
88
+ name: "account",
89
+ description: `Show single Meta ad account detail (currency, timezone, balance, business) and whether it can deliver:
90
+ a hint names a disabled account or a missing payment method, which Meta never refuses at publish \u2014 its ads just never run.
91
+ \`bakerPermissions\` says which per-company Meta permissions (leadAds, catalog, pagePosts) are switched on for this
92
+ company and held by the connection; a hint names any that still needs the user to reconnect Meta.
93
+
94
+ Examples:
95
+ baker ads meta account --account-id act_123
96
+ BAKER_META_AD_ACCOUNT_ID=act_123 baker ads meta account`
97
+ },
98
+ args: {
99
+ "account-id": { type: "string", description: "Meta ad account ID (act_...)" },
100
+ "no-cache": NO_CACHE_ARG
101
+ },
102
+ run: async ({ args }) => {
103
+ const accountId = resolveAccountIdArg(args);
104
+ try {
105
+ const params = { "account-id": accountId };
106
+ if (args["no-cache"]) params["skip-cache"] = "true";
107
+ const data = await apiGet("/api/ads/meta/account", params);
108
+ const permissionHints = data.bakerPermissions ? accountPermissionHints(data.bakerPermissions) : [];
109
+ writeJsonEnvelope({ ok: true, data, hints: [...accountDeliveryHints(data), ...permissionHints] });
110
+ } catch (err) {
111
+ handleMetaError(err);
112
+ }
113
+ }
114
+ });
115
+ function accountDeliveryHints(account) {
116
+ const blockers = metaAccountDeliveryBlockers(account);
117
+ if (blockers.length === 0) return ["The account can deliver: it is active and has a payment method."];
118
+ return [
119
+ ...blockers.map((blocker) => `Cannot deliver: ${blocker}.`),
120
+ "Staging still works and publishing still applies the changes, but nothing serves until this is fixed \u2014 tell the user before they publish anything they expect to run."
121
+ ];
122
+ }
123
+ var PERMISSION_LABEL = {
124
+ leadAds: "Lead ads (instant forms and their leads)",
125
+ catalog: "Catalog changes",
126
+ pagePosts: "Facebook Page posts"
127
+ };
128
+ function accountPermissionHints(permissions) {
129
+ return Object.keys(PERMISSION_LABEL).filter((key) => permissions[key].reconnectNeeded).map(
130
+ (key) => `${PERMISSION_LABEL[key]}: switched on for this company, but this Meta connection predates it \u2014 ask the user to reconnect Meta in the dashboard before relying on it.`
131
+ );
132
+ }
133
+ export {
134
+ accountCommand,
135
+ accountDeliveryHints,
136
+ accountPermissionHints
137
+ };
138
+ //# sourceMappingURL=account-IKFDY52P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../api/src/ads-meta/accountHealth.ts","../src/commands/ads/meta/account.ts"],"sourcesContent":["/**\n * Whether a Meta ad account can deliver at all — read off the account node.\n *\n * Meta stages and publishes ads on an account that cannot pay or is disabled\n * without a word: the docs say an account with no funding source can \"still\n * create ads but these ads will get no delivery\", and they sit in\n * PENDING_BILLING_INFO. Nothing in the publish answer says so, so the only\n * place to catch it is a read of the account before something goes live.\n */\n\n/** The account fields this reads (all in `ACCOUNT_FIELDS`). */\nexport interface MetaAccountHealthFields {\n account_status?: number;\n disable_reason?: number;\n funding_source?: string;\n funding_source_details?: { id?: string; display_string?: string; type?: number } | null;\n is_prepay_account?: boolean;\n /** Minor units as a string; \"0\" is no limit. */\n spend_cap?: string;\n amount_spent?: string;\n /** What the person whose connection Baker uses may do on the account (MANAGE, ADVERTISE, ANALYZE, DRAFT). */\n user_tasks?: string[];\n}\n\n/** `account_status` values, from the Ad Account reference (v25.0). 1 is the only one that delivers. */\nconst ACCOUNT_STATUS: Readonly<Record<number, string>> = {\n 1: \"ACTIVE\",\n 2: \"DISABLED\",\n 3: \"UNSETTLED\",\n 7: \"PENDING_RISK_REVIEW\",\n 8: \"PENDING_SETTLEMENT\",\n 9: \"IN_GRACE_PERIOD\",\n 100: \"PENDING_CLOSURE\",\n 101: \"CLOSED\",\n 201: \"ANY_ACTIVE\",\n 202: \"ANY_CLOSED\",\n};\n\n/** Why an account is disabled, when it is (`disable_reason`). */\nconst DISABLE_REASON: Readonly<Record<number, string>> = {\n 1: \"ads integrity policy\",\n 2: \"ads IP review\",\n 3: \"payment risk\",\n 4: \"gray account shut down\",\n 5: \"ads AFC review\",\n 6: \"business integrity review\",\n 7: \"permanently closed\",\n 8: \"unused reseller account\",\n 9: \"unused account\",\n 10: \"umbrella ad account\",\n 11: \"Business Manager integrity policy\",\n 12: \"misrepresented ad account\",\n 13: \"legal entity de-share\",\n 14: \"thread review\",\n 15: \"compromised ad account\",\n};\n\n/**\n * In grace period, Meta still delivers while a failed payment is retried, so\n * it is a warning that delivery is about to stop rather than a stop.\n */\nconst DELIVERS_ANYWAY = new Set([1, 9]);\n\nfunction statusBlocker(account: MetaAccountHealthFields): string | undefined {\n const status = account.account_status;\n if (status === undefined || status === 1) return undefined;\n const name = ACCOUNT_STATUS[status] ?? `status ${status}`;\n const reason = account.disable_reason ? DISABLE_REASON[account.disable_reason] : undefined;\n const why = reason ? ` (${reason})` : \"\";\n if (DELIVERS_ANYWAY.has(status)) {\n return `the ad account is ${name}${why}: a payment failed and Meta stops delivery when the grace period ends — the account owner settles it in Meta Billing`;\n }\n return `the ad account is ${name}${why}, so nothing on it delivers — only the account owner can resolve that with Meta (Account Quality / Billing)`;\n}\n\n/**\n * Plain reasons this account will not deliver, empty when it can. Each names\n * who can fix it, since nothing Baker stages can.\n */\nexport function metaAccountDeliveryBlockers(account: MetaAccountHealthFields): string[] {\n const blockers: string[] = [];\n const status = statusBlocker(account);\n if (status) blockers.push(status);\n const hasFunding = Boolean(account.funding_source || account.funding_source_details?.id);\n if (!hasFunding && !account.is_prepay_account) {\n blockers.push(\n \"the ad account has no payment method, so Meta accepts its ads but delivers none (they wait in PENDING_BILLING_INFO) — the account owner adds one in Meta Billing\",\n );\n }\n if (spendCapReached(account)) {\n blockers.push(\n \"the ad account has reached its spending limit, so Meta stops delivering every ad on it — an admin raises or removes the limit in Meta Billing → Payment settings, or Baker can change it as part of a chat\",\n );\n }\n return blockers;\n}\n\n/** `spend_cap` \"0\" (or absent) is no limit; a limit reached stops all delivery until it is raised. */\nfunction spendCapReached(account: MetaAccountHealthFields): boolean {\n const cap = Number(account.spend_cap ?? \"0\");\n const spent = Number(account.amount_spent ?? \"0\");\n return Number.isFinite(cap) && Number.isFinite(spent) && cap > 0 && spent >= cap;\n}\n\n/** Statuses on which Meta takes no new ads or edits: only the account owner and Meta can change them. */\nconst REFUSES_WRITES = new Set([2, 101]);\n\n/** Where an account owner reads why Meta restricted an account and asks for a review. */\nexport const META_ACCOUNT_QUALITY_URL = \"https://www.facebook.com/accountquality\";\n\n/**\n * Why Meta will refuse this change on this account at publish, or `undefined`.\n *\n * Only explicit evidence refuses: an account whose status is missing from the\n * read says nothing. A `removal` (a delete, a pause) is let through, because it\n * takes nothing live and is what someone cleaning up a disabled account does.\n */\nexport function metaAccountWriteRefusal(\n account: MetaAccountHealthFields,\n change: \"change\" | \"removal\",\n): string | undefined {\n return accessRefusal(account.user_tasks) ?? statusRefusal(account, change);\n}\n\n/** Tasks that let a person publish changes on an ad account; ANALYZE and DRAFT do not. */\nconst PUBLISHING_TASKS = new Set([\"MANAGE\", \"ADVERTISE\"]);\n\nfunction accessRefusal(tasks: readonly string[] | undefined): string | undefined {\n if (!tasks || tasks.length === 0 || tasks.some((task) => PUBLISHING_TASKS.has(task))) return undefined;\n return 'the person who connected Meta to Baker can only view this ad account, so Meta refuses every change Baker would publish on it — an admin of the ad account gives them the \"Manage campaigns\" permission in Meta Business settings → Ad accounts (https://business.facebook.com/settings/ad-accounts), then this can be staged again';\n}\n\nfunction statusRefusal(account: MetaAccountHealthFields, change: \"change\" | \"removal\"): string | undefined {\n const status = account.account_status;\n if (status === undefined || !REFUSES_WRITES.has(status) || change === \"removal\") return undefined;\n const reason = account.disable_reason ? DISABLE_REASON[account.disable_reason] : undefined;\n const why = reason ? ` (${reason})` : \"\";\n return `the ad account is ${ACCOUNT_STATUS[status]}${why}, so Meta refuses new ads and edits on it — only the account owner can resolve that with Meta, in Account Quality (${META_ACCOUNT_QUALITY_URL}); nothing can be staged here until then`;\n}\n","import { type MetaAccountHealthFields, metaAccountDeliveryBlockers } from \"@baker/api/ads-meta/accountHealth\";\nimport type { MetaPermissionStates } from \"@baker/api/ads-meta/permissionGates\";\nimport { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiGet } from \"../../../client.ts\";\nimport { writeJsonEnvelope } from \"../output.ts\";\nimport { handleMetaError, resolveAccountIdArg } from \"./shared.ts\";\n\nexport const accountCommand = defineCommand({\n meta: {\n name: \"account\",\n description: `Show single Meta ad account detail (currency, timezone, balance, business) and whether it can deliver:\na hint names a disabled account or a missing payment method, which Meta never refuses at publish — its ads just never run.\n\\`bakerPermissions\\` says which per-company Meta permissions (leadAds, catalog, pagePosts) are switched on for this\ncompany and held by the connection; a hint names any that still needs the user to reconnect Meta.\n\nExamples:\n baker ads meta account --account-id act_123\n BAKER_META_AD_ACCOUNT_ID=act_123 baker ads meta account`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"Meta ad account ID (act_...)\" },\n \"no-cache\": NO_CACHE_ARG,\n },\n run: async ({ args }) => {\n const accountId = resolveAccountIdArg(args);\n try {\n const params: Record<string, string> = { \"account-id\": accountId };\n if (args[\"no-cache\"]) params[\"skip-cache\"] = \"true\";\n const data = await apiGet<\n Record<string, unknown> & MetaAccountHealthFields & { bakerPermissions?: MetaPermissionStates }\n >(\"/api/ads/meta/account\", params);\n const permissionHints = data.bakerPermissions ? accountPermissionHints(data.bakerPermissions) : [];\n writeJsonEnvelope({ ok: true, data, hints: [...accountDeliveryHints(data), ...permissionHints] });\n } catch (err) {\n handleMetaError(err);\n }\n },\n});\n\n/** Whether ads on this account can run at all, said once, in the words staging warns with. */\nexport function accountDeliveryHints(account: MetaAccountHealthFields): string[] {\n const blockers = metaAccountDeliveryBlockers(account);\n if (blockers.length === 0) return [\"The account can deliver: it is active and has a payment method.\"];\n return [\n ...blockers.map((blocker) => `Cannot deliver: ${blocker}.`),\n \"Staging still works and publishing still applies the changes, but nothing serves until this is fixed — tell the user before they publish anything they expect to run.\",\n ];\n}\n\nconst PERMISSION_LABEL: Record<keyof MetaPermissionStates, string> = {\n leadAds: \"Lead ads (instant forms and their leads)\",\n catalog: \"Catalog changes\",\n pagePosts: \"Facebook Page posts\",\n};\n\n/** One hint per permission switched on for this company that the current Meta connection does not hold yet. */\nexport function accountPermissionHints(permissions: MetaPermissionStates): string[] {\n return (Object.keys(PERMISSION_LABEL) as (keyof MetaPermissionStates)[])\n .filter((key) => permissions[key].reconnectNeeded)\n .map(\n (key) =>\n `${PERMISSION_LABEL[key]}: switched on for this company, but this Meta connection predates it — ask the user to reconnect Meta in the dashboard before relying on it.`,\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAyBA,IAAM,iBAAmD;AAAA,EACvD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAGA,IAAM,iBAAmD;AAAA,EACvD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAMA,IAAM,kBAAkB,oBAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAEtC,SAAS,cAAc,SAAsD;AAC3E,QAAM,SAAS,QAAQ;AACvB,MAAI,WAAW,UAAa,WAAW,EAAG,QAAO;AACjD,QAAM,OAAO,eAAe,MAAM,KAAK,UAAU,MAAM;AACvD,QAAM,SAAS,QAAQ,iBAAiB,eAAe,QAAQ,cAAc,IAAI;AACjF,QAAM,MAAM,SAAS,KAAK,MAAM,MAAM;AACtC,MAAI,gBAAgB,IAAI,MAAM,GAAG;AAC/B,WAAO,qBAAqB,IAAI,GAAG,GAAG;AAAA,EACxC;AACA,SAAO,qBAAqB,IAAI,GAAG,GAAG;AACxC;AAMO,SAAS,4BAA4B,SAA4C;AACtF,QAAM,WAAqB,CAAC;AAC5B,QAAM,SAAS,cAAc,OAAO;AACpC,MAAI,OAAQ,UAAS,KAAK,MAAM;AAChC,QAAM,aAAa,QAAQ,QAAQ,kBAAkB,QAAQ,wBAAwB,EAAE;AACvF,MAAI,CAAC,cAAc,CAAC,QAAQ,mBAAmB;AAC7C,aAAS;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACA,MAAI,gBAAgB,OAAO,GAAG;AAC5B,aAAS;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,gBAAgB,SAA2C;AAClE,QAAM,MAAM,OAAO,QAAQ,aAAa,GAAG;AAC3C,QAAM,QAAQ,OAAO,QAAQ,gBAAgB,GAAG;AAChD,SAAO,OAAO,SAAS,GAAG,KAAK,OAAO,SAAS,KAAK,KAAK,MAAM,KAAK,SAAS;AAC/E;;;ACpGA,SAAS,qBAAqB;AAMvB,IAAM,iBAAiB,cAAc;AAAA,EAC1C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQf;AAAA,EACA,MAAM;AAAA,IACJ,cAAc,EAAE,MAAM,UAAU,aAAa,+BAA+B;AAAA,IAC5E,YAAY;AAAA,EACd;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,YAAY,oBAAoB,IAAI;AAC1C,QAAI;AACF,YAAM,SAAiC,EAAE,cAAc,UAAU;AACjE,UAAI,KAAK,UAAU,EAAG,QAAO,YAAY,IAAI;AAC7C,YAAM,OAAO,MAAM,OAEjB,yBAAyB,MAAM;AACjC,YAAM,kBAAkB,KAAK,mBAAmB,uBAAuB,KAAK,gBAAgB,IAAI,CAAC;AACjG,wBAAkB,EAAE,IAAI,MAAM,MAAM,OAAO,CAAC,GAAG,qBAAqB,IAAI,GAAG,GAAG,eAAe,EAAE,CAAC;AAAA,IAClG,SAAS,KAAK;AACZ,sBAAgB,GAAG;AAAA,IACrB;AAAA,EACF;AACF,CAAC;AAGM,SAAS,qBAAqB,SAA4C;AAC/E,QAAM,WAAW,4BAA4B,OAAO;AACpD,MAAI,SAAS,WAAW,EAAG,QAAO,CAAC,iEAAiE;AACpG,SAAO;AAAA,IACL,GAAG,SAAS,IAAI,CAAC,YAAY,mBAAmB,OAAO,GAAG;AAAA,IAC1D;AAAA,EACF;AACF;AAEA,IAAM,mBAA+D;AAAA,EACnE,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AACb;AAGO,SAAS,uBAAuB,aAA6C;AAClF,SAAQ,OAAO,KAAK,gBAAgB,EACjC,OAAO,CAAC,QAAQ,YAAY,GAAG,EAAE,eAAe,EAChD;AAAA,IACC,CAAC,QACC,GAAG,iBAAiB,GAAG,CAAC;AAAA,EAC5B;AACJ;","names":[]}
@@ -0,0 +1,79 @@
1
+ import {
2
+ csvOrJson,
3
+ handleLinkedinError,
4
+ resolveAccountIdArg
5
+ } from "./chunk-TTHM66TA.js";
6
+ import {
7
+ writeAdsJson,
8
+ writeAdsOutput
9
+ } from "./chunk-SWL4AAPP.js";
10
+ import {
11
+ NO_CACHE_ARG
12
+ } from "./chunk-K3TNTBZJ.js";
13
+ import "./chunk-DAO63OOP.js";
14
+ import "./chunk-GXDLWBOY.js";
15
+ import "./chunk-GIWHHCD6.js";
16
+ import "./chunk-XQIOCIDO.js";
17
+ import "./chunk-WTJSMYY2.js";
18
+ import {
19
+ apiGet
20
+ } from "./chunk-XDZVBX6L.js";
21
+ import "./chunk-N5O67GK5.js";
22
+ import "./chunk-EE72SSB2.js";
23
+ import "./chunk-WNSE7N75.js";
24
+ import "./chunk-YQSBHWOI.js";
25
+
26
+ // src/commands/ads/linkedin/account.ts
27
+ import { defineCommand } from "citty";
28
+ var accountDetailCommand = defineCommand({
29
+ meta: {
30
+ name: "detail",
31
+ description: `Single LinkedIn ad account detail (currency, status, type).
32
+
33
+ Examples:
34
+ baker ads linkedin account --account-id 503001492
35
+ baker ads linkedin account --account-urn urn:li:sponsoredAccount:503001492 --output md`
36
+ },
37
+ args: {
38
+ "account-id": { type: "string", description: "Numeric account ID or urn:li:sponsoredAccount:N" },
39
+ "account-urn": { type: "string", description: "Alias for --account-id" },
40
+ "no-cache": NO_CACHE_ARG,
41
+ output: { type: "string", description: "json|csv|jsonl|md", default: "json" }
42
+ },
43
+ run: async ({ args }) => {
44
+ const accountId = resolveAccountIdArg(args);
45
+ try {
46
+ const params = { "account-id": accountId };
47
+ if (args["no-cache"]) params["skip-cache"] = "true";
48
+ const data = await apiGet("/api/ads/linkedin/account", params);
49
+ const fmt = csvOrJson(args);
50
+ if (fmt !== "json") {
51
+ writeAdsOutput([data], fmt);
52
+ return;
53
+ }
54
+ writeAdsJson({ ok: true, data });
55
+ } catch (err) {
56
+ handleLinkedinError(err);
57
+ }
58
+ }
59
+ });
60
+ var accountCommand = defineCommand({
61
+ meta: {
62
+ name: "account",
63
+ description: `LinkedIn ad account: its detail, and the settings that apply across every ad set in it.
64
+
65
+ Examples:
66
+ baker ads linkedin account --account-id 503001492 \u2014 currency, status, type
67
+ baker ads linkedin account url-params --param utm_source=linkedin \u2014 UTMs for every ad in the account`
68
+ },
69
+ subCommands: {
70
+ detail: accountDetailCommand,
71
+ "url-params": () => import("./write-commands-FYB6QG7K.js").then((m) => m.accountUrlParamsCommand)
72
+ },
73
+ args: accountDetailCommand.args,
74
+ default: "detail"
75
+ });
76
+ export {
77
+ accountCommand
78
+ };
79
+ //# sourceMappingURL=account-VGSYM7LY.js.map