@koda-sl/baker-cli 0.512.0 → 0.514.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 (1077) hide show
  1. package/README.md +3 -3
  2. package/dist/account-D6LEVVWT.js +82 -0
  3. package/dist/account-D6LEVVWT.js.map +1 -0
  4. package/dist/account-SGK3IJ6N.js +82 -0
  5. package/dist/account-SGK3IJ6N.js.map +1 -0
  6. package/dist/account-assets-J5Z4URLQ.js +290 -0
  7. package/dist/account-level-4SBYYHRS.js +611 -0
  8. package/dist/account-level-4SBYYHRS.js.map +1 -0
  9. package/dist/account-reads-2MSUVG46.js +219 -0
  10. package/dist/account-users-MHC7AD6K.js +64 -0
  11. package/dist/account-users-MHC7AD6K.js.map +1 -0
  12. package/dist/account-writes-QQQC54WC.js +68 -0
  13. package/dist/account-writes-QQQC54WC.js.map +1 -0
  14. package/dist/accounts-2O6I7YBN.js +80 -0
  15. package/dist/accounts-2O6I7YBN.js.map +1 -0
  16. package/dist/accounts-QNE5QWBG.js +701 -0
  17. package/dist/accounts-QNE5QWBG.js.map +1 -0
  18. package/dist/actions-D7OWCP36.js +55 -0
  19. package/dist/activecampaign-LBS4M4C4.js +938 -0
  20. package/dist/activecampaign-LBS4M4C4.js.map +1 -0
  21. package/dist/ad-group-writes-CJTTUUIT.js +172 -0
  22. package/dist/ad-group-writes-CJTTUUIT.js.map +1 -0
  23. package/dist/ad-groups-HLGSVH74.js +70 -0
  24. package/dist/ad-groups-HLGSVH74.js.map +1 -0
  25. package/dist/ad-writes-3UE3U7VE.js +176 -0
  26. package/dist/ad-writes-3UE3U7VE.js.map +1 -0
  27. package/dist/add-HFQB2NTU.js +107 -0
  28. package/dist/add-HFQB2NTU.js.map +1 -0
  29. package/dist/add-IUYE5H6A.js +305 -0
  30. package/dist/add-IUYE5H6A.js.map +1 -0
  31. package/dist/ads-HLUJB5SQ.js +48 -0
  32. package/dist/ads-MAOI7S6V.js +115 -0
  33. package/dist/ads-PYNDMHUD.js +79 -0
  34. package/dist/ads-PYNDMHUD.js.map +1 -0
  35. package/dist/adsets-QRKICEFD.js +182 -0
  36. package/dist/advertisers-XXM6POO5.js +123 -0
  37. package/dist/advertisers-XXM6POO5.js.map +1 -0
  38. package/dist/analytics-AULKYNNT.js +447 -0
  39. package/dist/analytics-AULKYNNT.js.map +1 -0
  40. package/dist/analytics-DNDTC643.js +2437 -0
  41. package/dist/analytics-DNDTC643.js.map +1 -0
  42. package/dist/asset-writes-JLVUAVUZ.js +50 -0
  43. package/dist/assign-2GQVQKKO.js +80 -0
  44. package/dist/assign-2GQVQKKO.js.map +1 -0
  45. package/dist/audience-size-C3YHQPZB.js +76 -0
  46. package/dist/audience-size-C3YHQPZB.js.map +1 -0
  47. package/dist/audience-writes-CDKQB3SM.js +327 -0
  48. package/dist/audience-writes-CDKQB3SM.js.map +1 -0
  49. package/dist/audiences-CDDI5HR5.js +86 -0
  50. package/dist/audiences-M3A3QK52.js +280 -0
  51. package/dist/audiences-M3A3QK52.js.map +1 -0
  52. package/dist/audit-FLPJ7GTE.js +154 -0
  53. package/dist/audit-FLPJ7GTE.js.map +1 -0
  54. package/dist/autocomplete-ZYMHHV7E.js +114 -0
  55. package/dist/autocomplete-ZYMHHV7E.js.map +1 -0
  56. package/dist/avatars-WZ2JDMHH.js +38 -0
  57. package/dist/bid-pricing-H3M63PTW.js +103 -0
  58. package/dist/bid-pricing-H3M63PTW.js.map +1 -0
  59. package/dist/brand-IZTTBZII.js +22 -0
  60. package/dist/brief-OPQ7ICOY.js +543 -0
  61. package/dist/brief-OPQ7ICOY.js.map +1 -0
  62. package/dist/campaign-groups-IQSDKOVI.js +99 -0
  63. package/dist/campaign-groups-IQSDKOVI.js.map +1 -0
  64. package/dist/campaign-writes-APAAV4ZU.js +168 -0
  65. package/dist/campaign-writes-APAAV4ZU.js.map +1 -0
  66. package/dist/campaign-writes-BN4PZP4Z.js +176 -0
  67. package/dist/campaign-writes-BN4PZP4Z.js.map +1 -0
  68. package/dist/campaigns-4Y3JQC2U.js +111 -0
  69. package/dist/campaigns-GA34MEN2.js +78 -0
  70. package/dist/campaigns-GA34MEN2.js.map +1 -0
  71. package/dist/campaigns-HES5MDUG.js +130 -0
  72. package/dist/campaigns-K2FVD3XW.js +113 -0
  73. package/dist/campaigns-K2FVD3XW.js.map +1 -0
  74. package/dist/canvas-IQ753Q2O.js +46 -0
  75. package/dist/capabilities-ZITW4RF7.js +147 -0
  76. package/dist/capabilities-ZITW4RF7.js.map +1 -0
  77. package/dist/catalogs-TGLSJEK5.js +781 -0
  78. package/dist/catalogs-TGLSJEK5.js.map +1 -0
  79. package/dist/catalogs-ZR7DECMG.js +130 -0
  80. package/dist/catalogs-ZR7DECMG.js.map +1 -0
  81. package/dist/changes-VWKTM27U.js +135 -0
  82. package/dist/chatgpt-OPOD2WHB.js +47 -0
  83. package/dist/chats-AL2SYBJO.js +279 -0
  84. package/dist/chats-AL2SYBJO.js.map +1 -0
  85. package/dist/check-U2YLRD6H.js +107 -0
  86. package/dist/check-U2YLRD6H.js.map +1 -0
  87. package/dist/chunk-2GYCWRF3.js +170 -0
  88. package/dist/chunk-2L7F7KR4.js +61 -0
  89. package/dist/chunk-44ZRCSR7.js +228 -0
  90. package/dist/chunk-46YLDIQG.js +4254 -0
  91. package/dist/chunk-4EDWXZ3I.js +363 -0
  92. package/dist/chunk-4FFBGR5L.js +66 -0
  93. package/dist/chunk-4UQRXKYJ.js +219 -0
  94. package/dist/chunk-4UZUUSVL.js +592 -0
  95. package/dist/chunk-4XHCEYHI.js +831 -0
  96. package/dist/chunk-4Z6PVR3M.js +479 -0
  97. package/dist/chunk-5Y5FZV2W.js +122 -0
  98. package/dist/chunk-6HJXLGDV.js +392 -0
  99. package/dist/chunk-6S5CWGDA.js +429 -0
  100. package/dist/chunk-6VYROVWO.js +494 -0
  101. package/dist/chunk-7BUIOP36.js +287 -0
  102. package/dist/chunk-AQRXXC6E.js +319 -0
  103. package/dist/chunk-ARBXT73X.js +387 -0
  104. package/dist/chunk-BEZHQIEI.js +97 -0
  105. package/dist/chunk-BFURWHVR.js +547 -0
  106. package/dist/chunk-BX6B25KK.js +358 -0
  107. package/dist/chunk-BX6B25KK.js.map +1 -0
  108. package/dist/chunk-DSCEXBDR.js +676 -0
  109. package/dist/chunk-FLWDFPXE.js +23 -0
  110. package/dist/chunk-FRNBRN2C.js +1646 -0
  111. package/dist/chunk-G4FG5EQO.js +110 -0
  112. package/dist/chunk-G4FG5EQO.js.map +1 -0
  113. package/dist/chunk-GE3VT3CA.js +51 -0
  114. package/dist/chunk-GW2WRZZA.js +24026 -0
  115. package/dist/chunk-GW2WRZZA.js.map +1 -0
  116. package/dist/chunk-HGBJQGO5.js +142 -0
  117. package/dist/chunk-I7AYMJZA.js +783 -0
  118. package/dist/chunk-IRM273C7.js +207 -0
  119. package/dist/chunk-IWKD56AY.js +156 -0
  120. package/dist/chunk-JLAQWMVF.js +3868 -0
  121. package/dist/chunk-JOE42ZW6.js +2984 -0
  122. package/dist/chunk-JOE42ZW6.js.map +1 -0
  123. package/dist/chunk-K6NULQN7.js +57 -0
  124. package/dist/chunk-L2BRAC2J.js +19 -0
  125. package/dist/chunk-LGMI4LSY.js +455 -0
  126. package/dist/chunk-NB2FU6EZ.js +179 -0
  127. package/dist/chunk-NKQWDEB7.js +115 -0
  128. package/dist/chunk-NKQWDEB7.js.map +1 -0
  129. package/dist/chunk-NWF2LRKO.js +188 -0
  130. package/dist/chunk-OG47L5GG.js +275 -0
  131. package/dist/chunk-OR6KVLI5.js +169 -0
  132. package/dist/chunk-PC3FJEZH.js +7211 -0
  133. package/dist/chunk-PC3FJEZH.js.map +1 -0
  134. package/dist/chunk-Q3GSVLE5.js +4274 -0
  135. package/dist/chunk-Q3GSVLE5.js.map +1 -0
  136. package/dist/chunk-QDQZ62FL.js +207 -0
  137. package/dist/chunk-QIOFOD4K.js +344 -0
  138. package/dist/chunk-R2SYF5FC.js +249 -0
  139. package/dist/chunk-RTH2I55B.js +942 -0
  140. package/dist/chunk-S6VFDNSQ.js +63 -0
  141. package/dist/chunk-SG2TDQEE.js +150 -0
  142. package/dist/chunk-SOPVIIUW.js +68 -0
  143. package/dist/chunk-SOPVIIUW.js.map +1 -0
  144. package/dist/chunk-T3P6O2VU.js +89 -0
  145. package/dist/chunk-TXDE2QJ3.js +604 -0
  146. package/dist/chunk-UDIEKCIR.js +203 -0
  147. package/dist/chunk-USCADMM3.js +163 -0
  148. package/dist/chunk-UUGISMNE.js +910 -0
  149. package/dist/chunk-VDPOCAQ2.js +197 -0
  150. package/dist/chunk-VEJ3QX6M.js +103 -0
  151. package/dist/chunk-VFJB7OG6.js +91 -0
  152. package/dist/chunk-VRIPVLE7.js +8954 -0
  153. package/dist/chunk-WFY7KSHB.js +274 -0
  154. package/dist/chunk-WLESMH4J.js +45 -0
  155. package/dist/chunk-XHQYFNNK.js +846 -0
  156. package/dist/chunk-XOQNM7I4.js +396 -0
  157. package/dist/chunk-XOQNM7I4.js.map +1 -0
  158. package/dist/chunk-YILZR3XI.js +224 -0
  159. package/dist/chunk-YJFLXOH4.js +191 -0
  160. package/dist/chunk-YWHZYR6S.js +297 -0
  161. package/dist/claim-GOLUTAJ3.js +200 -0
  162. package/dist/claim-GOLUTAJ3.js.map +1 -0
  163. package/dist/cli.js +30 -30
  164. package/dist/companies-4AJJGTMC.js +198 -0
  165. package/dist/companies-4AJJGTMC.js.map +1 -0
  166. package/dist/company-MOSPLRZJ.js +308 -0
  167. package/dist/company-MOSPLRZJ.js.map +1 -0
  168. package/dist/complete-777BDV45.js +84 -0
  169. package/dist/complete-777BDV45.js.map +1 -0
  170. package/dist/connect-3YY7MF3I.js +45 -0
  171. package/dist/conversation-KROMHDHK.js +96 -0
  172. package/dist/conversation-KROMHDHK.js.map +1 -0
  173. package/dist/conversion-report-JZHI2IHY.js +127 -0
  174. package/dist/conversion-report-JZHI2IHY.js.map +1 -0
  175. package/dist/conversion-upload-command-7RSZ5ZQU.js +439 -0
  176. package/dist/conversion-writes-SNCLQDXQ.js +122 -0
  177. package/dist/conversion-writes-SNCLQDXQ.js.map +1 -0
  178. package/dist/conversions-43EYP2W2.js +140 -0
  179. package/dist/conversions-43EYP2W2.js.map +1 -0
  180. package/dist/conversions-EUOWILCQ.js +78 -0
  181. package/dist/conversions-EUOWILCQ.js.map +1 -0
  182. package/dist/copy-writes-CIHIFLY6.js +170 -0
  183. package/dist/copy-writes-CIHIFLY6.js.map +1 -0
  184. package/dist/create-3WOZO2XT.js +239 -0
  185. package/dist/create-3WOZO2XT.js.map +1 -0
  186. package/dist/create-7IFYLX7P.js +210 -0
  187. package/dist/create-7IFYLX7P.js.map +1 -0
  188. package/dist/create-FOHIQC3E.js +62 -0
  189. package/dist/create-FOHIQC3E.js.map +1 -0
  190. package/dist/create-UWQSQTK6.js +135 -0
  191. package/dist/create-UWQSQTK6.js.map +1 -0
  192. package/dist/creatives-2DR3QHJW.js +58 -0
  193. package/dist/creatives-BB6S2OF6.js +89 -0
  194. package/dist/creatives-KUO67WYA.js +223 -0
  195. package/dist/creatives-KUO67WYA.js.map +1 -0
  196. package/dist/credentials-IP4L37XP.js +290 -0
  197. package/dist/credentials-IP4L37XP.js.map +1 -0
  198. package/dist/critique-LGDNMLBL.js +232 -0
  199. package/dist/critique-LGDNMLBL.js.map +1 -0
  200. package/dist/critique-LJMFAURK.js +1451 -0
  201. package/dist/critique-LJMFAURK.js.map +1 -0
  202. package/dist/crm-BNYW7PF7.js +323 -0
  203. package/dist/crm-BNYW7PF7.js.map +1 -0
  204. package/dist/crm-J53V2QTN.js +227 -0
  205. package/dist/crm-J53V2QTN.js.map +1 -0
  206. package/dist/currency-X7Y6TSLF.js +88 -0
  207. package/dist/custom-conversions-HAGG72LF.js +128 -0
  208. package/dist/customers-663K2OCP.js +59 -0
  209. package/dist/delete-5W3YVA4L.js +67 -0
  210. package/dist/delete-5W3YVA4L.js.map +1 -0
  211. package/dist/delete-6U7E6YUW.js +57 -0
  212. package/dist/delete-6U7E6YUW.js.map +1 -0
  213. package/dist/delete-G4NY6ZG6.js +69 -0
  214. package/dist/delete-G4NY6ZG6.js.map +1 -0
  215. package/dist/demographics-4Y5LTCU4.js +141 -0
  216. package/dist/demographics-4Y5LTCU4.js.map +1 -0
  217. package/dist/discard-RKCZNKMN.js +69 -0
  218. package/dist/discard-RKCZNKMN.js.map +1 -0
  219. package/dist/discover-6DORQWXY.js +172 -0
  220. package/dist/domain-PLA2O4FW.js +101 -0
  221. package/dist/domain-PLA2O4FW.js.map +1 -0
  222. package/dist/download-4EFLVSA4.js +172 -0
  223. package/dist/download-4EFLVSA4.js.map +1 -0
  224. package/dist/draft-4V7W5DV2.js +310 -0
  225. package/dist/draft-4V7W5DV2.js.map +1 -0
  226. package/dist/draft-HY3U2GHU.js +283 -0
  227. package/dist/draft-HY3U2GHU.js.map +1 -0
  228. package/dist/draft-JMNAGW7C.js +220 -0
  229. package/dist/draft-JMNAGW7C.js.map +1 -0
  230. package/dist/draft-R6EKORNS.js +308 -0
  231. package/dist/draft-TRPQCJ4B.js +335 -0
  232. package/dist/draft-TRPQCJ4B.js.map +1 -0
  233. package/dist/experiments-4V242DG2.js +236 -0
  234. package/dist/experiments-4V242DG2.js.map +1 -0
  235. package/dist/facets-WXJ2MCU6.js +117 -0
  236. package/dist/facets-WXJ2MCU6.js.map +1 -0
  237. package/dist/feedback-IRSRPXV6.js +111 -0
  238. package/dist/feedback-IRSRPXV6.js.map +1 -0
  239. package/dist/feedback-record-DT3R4NA3.js +265 -0
  240. package/dist/feedback-record-DT3R4NA3.js.map +1 -0
  241. package/dist/fetch-YLQP5VQL.js +179 -0
  242. package/dist/fetch-YLQP5VQL.js.map +1 -0
  243. package/dist/fit-BEFCY2B4.js +65 -0
  244. package/dist/flows-FDMF3F3P.js +250 -0
  245. package/dist/flows-FDMF3F3P.js.map +1 -0
  246. package/dist/fonts-C6XN5667.js +39 -0
  247. package/dist/forecast-BTPIXEQ5.js +169 -0
  248. package/dist/forecast-ZTXZD3HD.js +121 -0
  249. package/dist/forecast-ZTXZD3HD.js.map +1 -0
  250. package/dist/funnel-7KOEX7YM.js +397 -0
  251. package/dist/funnel-7KOEX7YM.js.map +1 -0
  252. package/dist/get-KBSKPTAV.js +59 -0
  253. package/dist/get-KBSKPTAV.js.map +1 -0
  254. package/dist/get-OSVQVMP6.js +82 -0
  255. package/dist/get-OSVQVMP6.js.map +1 -0
  256. package/dist/google-M6BJ22UL.js +3267 -0
  257. package/dist/google-ads-XCJVAXWF.js +198 -0
  258. package/dist/google-ads-XCJVAXWF.js.map +1 -0
  259. package/dist/history-3NTM5SFN.js +69 -0
  260. package/dist/history-3NTM5SFN.js.map +1 -0
  261. package/dist/history-4TN2A6BL.js +136 -0
  262. package/dist/history-4TN2A6BL.js.map +1 -0
  263. package/dist/history-5IWW2X33.js +102 -0
  264. package/dist/history-5IWW2X33.js.map +1 -0
  265. package/dist/hubspot-HMVSRJQZ.js +782 -0
  266. package/dist/hubspot-HMVSRJQZ.js.map +1 -0
  267. package/dist/ideas-M66FU45H.js +45 -0
  268. package/dist/images-MM5OPUKV.js +92 -0
  269. package/dist/ingest-GU3WEBN3.js +110 -0
  270. package/dist/ingest-GU3WEBN3.js.map +1 -0
  271. package/dist/ingest-KMLYCFF4.js +26 -0
  272. package/dist/insights-CQCWOCIT.js +132 -0
  273. package/dist/insights-CQCWOCIT.js.map +1 -0
  274. package/dist/insights-XZL2EM53.js +439 -0
  275. package/dist/insights-XZL2EM53.js.map +1 -0
  276. package/dist/inspect-4JO2J3D6.js +192 -0
  277. package/dist/inspect-4JO2J3D6.js.map +1 -0
  278. package/dist/instant-experiences-RM4MLJTL.js +260 -0
  279. package/dist/instant-experiences-RM4MLJTL.js.map +1 -0
  280. package/dist/intent-YCQCUCV3.js +95 -0
  281. package/dist/keyword-gap-PUSF7EKY.js +130 -0
  282. package/dist/keyword-metrics-JXBM22ZD.js +200 -0
  283. package/dist/keyword-metrics-JXBM22ZD.js.map +1 -0
  284. package/dist/keywords-for-site-OAYA7KP7.js +131 -0
  285. package/dist/keywords-for-site-OAYA7KP7.js.map +1 -0
  286. package/dist/landing-OZU5RRFV.js +28 -0
  287. package/dist/languages-SLFV73GE.js +40 -0
  288. package/dist/leads-Q7APIJRQ.js +115 -0
  289. package/dist/leads-Q7APIJRQ.js.map +1 -0
  290. package/dist/leads-ULYHTG22.js +540 -0
  291. package/dist/leads-ULYHTG22.js.map +1 -0
  292. package/dist/learn-NBBJRMVZ.js +207 -0
  293. package/dist/learn-NBBJRMVZ.js.map +1 -0
  294. package/dist/line-item-writes-X3L5NQEH.js +211 -0
  295. package/dist/line-item-writes-X3L5NQEH.js.map +1 -0
  296. package/dist/line-items-NJMEPEF5.js +107 -0
  297. package/dist/link-WZSNUQQ2.js +67 -0
  298. package/dist/link-WZSNUQQ2.js.map +1 -0
  299. package/dist/linkedin-55PAID62.js +1316 -0
  300. package/dist/linkedin-55PAID62.js.map +1 -0
  301. package/dist/linkedin-person-MVRI7LLC.js +139 -0
  302. package/dist/linkedin-person-MVRI7LLC.js.map +1 -0
  303. package/dist/list-6S54IAUX.js +67 -0
  304. package/dist/list-6S54IAUX.js.map +1 -0
  305. package/dist/list-QRJ4E3SC.js +154 -0
  306. package/dist/list-QRJ4E3SC.js.map +1 -0
  307. package/dist/list-RZUDFLJN.js +306 -0
  308. package/dist/list-RZUDFLJN.js.map +1 -0
  309. package/dist/locations-T2OMP6QN.js +40 -0
  310. package/dist/locations-W3VOYBWL.js +69 -0
  311. package/dist/locations-W3VOYBWL.js.map +1 -0
  312. package/dist/log-53SAPZZ3.js +95 -0
  313. package/dist/log-53SAPZZ3.js.map +1 -0
  314. package/dist/lookup-S5VG7AWH.js +23 -0
  315. package/dist/make-ZF3YIMKW.js +1370 -0
  316. package/dist/make-ZF3YIMKW.js.map +1 -0
  317. package/dist/map-J37QFJSV.js +436 -0
  318. package/dist/map-J37QFJSV.js.map +1 -0
  319. package/dist/mcp-YRIFPYNU.js +717 -0
  320. package/dist/mcp-YRIFPYNU.js.map +1 -0
  321. package/dist/media-P4T4ZBNS.js +18 -0
  322. package/dist/media-sources-EQI3U4TC.js +35 -0
  323. package/dist/members-GYVMSCKL.js +47 -0
  324. package/dist/members-GYVMSCKL.js.map +1 -0
  325. package/dist/meta-IPLWNYC7.js +122 -0
  326. package/dist/metrics-4YVJHYRI.js +152 -0
  327. package/dist/normalize-MFN3WCH5.js +144 -0
  328. package/dist/normalize-MFN3WCH5.js.map +1 -0
  329. package/dist/options-DLHDHO7H.js +125 -0
  330. package/dist/options-DLHDHO7H.js.map +1 -0
  331. package/dist/organization-C2VOA2SD.js +949 -0
  332. package/dist/organization-C2VOA2SD.js.map +1 -0
  333. package/dist/page-photos-OQ5QATQH.js +118 -0
  334. package/dist/page-photos-OQ5QATQH.js.map +1 -0
  335. package/dist/performance-NIF3CESZ.js +27 -0
  336. package/dist/performance-T6TBVHVU.js +5541 -0
  337. package/dist/performance-T6TBVHVU.js.map +1 -0
  338. package/dist/pixels-LQAJOZIM.js +62 -0
  339. package/dist/pixels-LQAJOZIM.js.map +1 -0
  340. package/dist/plan-7UF76Q6U.js +208 -0
  341. package/dist/plan-7UF76Q6U.js.map +1 -0
  342. package/dist/preview-LRJOQ7LM.js +218 -0
  343. package/dist/preview-LRJOQ7LM.js.map +1 -0
  344. package/dist/promoted-tweet-writes-Y6BBOWDL.js +183 -0
  345. package/dist/promoted-tweet-writes-Y6BBOWDL.js.map +1 -0
  346. package/dist/promoted-tweets-RJT53DRM.js +119 -0
  347. package/dist/publish-IOTMJCCY.js +344 -0
  348. package/dist/publish-IOTMJCCY.js.map +1 -0
  349. package/dist/query-XZMDGRO5.js +62 -0
  350. package/dist/questionnaire-DWEH5II4.js +94 -0
  351. package/dist/questionnaire-DWEH5II4.js.map +1 -0
  352. package/dist/reddit-JIHMAKAQ.js +29 -0
  353. package/dist/refresh-OQZ263CS.js +97 -0
  354. package/dist/refresh-OQZ263CS.js.map +1 -0
  355. package/dist/release-4CHFURO3.js +63 -0
  356. package/dist/release-4CHFURO3.js.map +1 -0
  357. package/dist/relevant-pages-FS7GBVXK.js +99 -0
  358. package/dist/remove-IJQPHPDI.js +53 -0
  359. package/dist/remove-IJQPHPDI.js.map +1 -0
  360. package/dist/reopen-YTLPVKUR.js +66 -0
  361. package/dist/reopen-YTLPVKUR.js.map +1 -0
  362. package/dist/rerun-C7NB7B35.js +95 -0
  363. package/dist/rerun-C7NB7B35.js.map +1 -0
  364. package/dist/research-PNBACCCP.js +72 -0
  365. package/dist/research-TLHNPK3O.js +265 -0
  366. package/dist/research-TLHNPK3O.js.map +1 -0
  367. package/dist/reset-JVLW7HA2.js +57 -0
  368. package/dist/reset-JVLW7HA2.js.map +1 -0
  369. package/dist/reset-Y6FXLAQE.js +57 -0
  370. package/dist/reset-Y6FXLAQE.js.map +1 -0
  371. package/dist/resolve-YLRESES5.js +124 -0
  372. package/dist/resolve-YLRESES5.js.map +1 -0
  373. package/dist/retry-3V3IGDRR.js +65 -0
  374. package/dist/retry-3V3IGDRR.js.map +1 -0
  375. package/dist/retry-AEKQLQMP.js +63 -0
  376. package/dist/retry-AEKQLQMP.js.map +1 -0
  377. package/dist/revenue-E4GQIOUY.js +91 -0
  378. package/dist/revenue-E4GQIOUY.js.map +1 -0
  379. package/dist/rule-writes-UAVWT4XS.js +525 -0
  380. package/dist/rule-writes-UAVWT4XS.js.map +1 -0
  381. package/dist/rules-34BQAWU3.js +99 -0
  382. package/dist/rules-34BQAWU3.js.map +1 -0
  383. package/dist/rules-ZVS2MWED.js +217 -0
  384. package/dist/rules-add-CM5XUYNS.js +465 -0
  385. package/dist/rules-add-CM5XUYNS.js.map +1 -0
  386. package/dist/run-MD64RDHZ.js +69 -0
  387. package/dist/run-MD64RDHZ.js.map +1 -0
  388. package/dist/run-QCNRR3CA.js +70 -0
  389. package/dist/scaffold-ad-NADPY3CB.js +1516 -0
  390. package/dist/scaffold-ad-NADPY3CB.js.map +1 -0
  391. package/dist/scaffold-static-ad-5YEYYVYH.js +1015 -0
  392. package/dist/scaffold-static-ad-5YEYYVYH.js.map +1 -0
  393. package/dist/scaffold-video-W7DF2CBJ.js +888 -0
  394. package/dist/scaffold-video-W7DF2CBJ.js.map +1 -0
  395. package/dist/schedule-CTRRF6TS.js +64 -0
  396. package/dist/schedule-CTRRF6TS.js.map +1 -0
  397. package/dist/scheduled-agents-OXYAVSIE.js +55 -0
  398. package/dist/schema-BEUYOGSW.js +135 -0
  399. package/dist/schema-BEUYOGSW.js.map +1 -0
  400. package/dist/search-GFJKWPKN.js +177 -0
  401. package/dist/search-GFJKWPKN.js.map +1 -0
  402. package/dist/select-S72CCL57.js +106 -0
  403. package/dist/select-S72CCL57.js.map +1 -0
  404. package/dist/sends-LAY5C74B.js +349 -0
  405. package/dist/sends-LAY5C74B.js.map +1 -0
  406. package/dist/set-prompt-YYFDRXRI.js +198 -0
  407. package/dist/set-prompt-YYFDRXRI.js.map +1 -0
  408. package/dist/setup-links-D4JJLESN.js +144 -0
  409. package/dist/setup-links-D4JJLESN.js.map +1 -0
  410. package/dist/shopify-T4UWFIQC.js +3958 -0
  411. package/dist/shopify-T4UWFIQC.js.map +1 -0
  412. package/dist/site-BBZAUZA3.js +180 -0
  413. package/dist/site-BBZAUZA3.js.map +1 -0
  414. package/dist/sources-BUPV7H7F.js +457 -0
  415. package/dist/sources-BUPV7H7F.js.map +1 -0
  416. package/dist/sources-FLUGHSVP.js +30 -0
  417. package/dist/stale-HP54JS5X.js +76 -0
  418. package/dist/stale-HP54JS5X.js.map +1 -0
  419. package/dist/status-CLSWQFCQ.js +65 -0
  420. package/dist/status-CLSWQFCQ.js.map +1 -0
  421. package/dist/studies-EPO2AM4M.js +250 -0
  422. package/dist/study-writes-7FP443QQ.js +470 -0
  423. package/dist/study-writes-7FP443QQ.js.map +1 -0
  424. package/dist/sync-4YTVVEVC.js +57 -0
  425. package/dist/sync-4YTVVEVC.js.map +1 -0
  426. package/dist/sync-definition-OGQ5XTQE.js +69 -0
  427. package/dist/tags-CZTRQNXV.js +26 -0
  428. package/dist/tags-FDQXWTCQ.js +23 -0
  429. package/dist/tags-FDQXWTCQ.js.map +1 -0
  430. package/dist/tags-R67DKRZ6.js +23 -0
  431. package/dist/tags-R67DKRZ6.js.map +1 -0
  432. package/dist/tags-SA2LU6AW.js +227 -0
  433. package/dist/tags-SA2LU6AW.js.map +1 -0
  434. package/dist/tags-ZOXX6VRE.js +23 -0
  435. package/dist/tags-ZOXX6VRE.js.map +1 -0
  436. package/dist/targeting-NKZFEZD7.js +762 -0
  437. package/dist/targeting-NKZFEZD7.js.map +1 -0
  438. package/dist/targeting-criteria-AQYXVSGN.js +113 -0
  439. package/dist/targets-UUVCEG3F.js +106 -0
  440. package/dist/targets-UUVCEG3F.js.map +1 -0
  441. package/dist/testimonials-G3OCNPBY.js +32 -0
  442. package/dist/themes-FEVYZZCW.js +95 -0
  443. package/dist/top-companies-BQGWKYUK.js +111 -0
  444. package/dist/top-companies-BQGWKYUK.js.map +1 -0
  445. package/dist/transcript-U46AEOEI.js +165 -0
  446. package/dist/transcript-U46AEOEI.js.map +1 -0
  447. package/dist/translate-AS7JVKYM.js +609 -0
  448. package/dist/translate-AS7JVKYM.js.map +1 -0
  449. package/dist/triggers-ECRBPYYF.js +144 -0
  450. package/dist/triggers-ECRBPYYF.js.map +1 -0
  451. package/dist/unlink-VDNCSRJV.js +70 -0
  452. package/dist/unlink-VDNCSRJV.js.map +1 -0
  453. package/dist/unstage-ATDXUYP2.js +88 -0
  454. package/dist/unstage-ATDXUYP2.js.map +1 -0
  455. package/dist/unstage-ZA3WQBEA.js +96 -0
  456. package/dist/unstage-ZA3WQBEA.js.map +1 -0
  457. package/dist/update-FJ6TBV3E.js +101 -0
  458. package/dist/update-FJ6TBV3E.js.map +1 -0
  459. package/dist/update-HDBJCSTI.js +66 -0
  460. package/dist/update-HDBJCSTI.js.map +1 -0
  461. package/dist/update-U43DJRGV.js +155 -0
  462. package/dist/update-U43DJRGV.js.map +1 -0
  463. package/dist/update-Z7TIUBMJ.js +192 -0
  464. package/dist/update-Z7TIUBMJ.js.map +1 -0
  465. package/dist/upload-LXCFSRIU.js +129 -0
  466. package/dist/upload-LXCFSRIU.js.map +1 -0
  467. package/dist/url-options-Z4BQBEMI.js +131 -0
  468. package/dist/url-options-Z4BQBEMI.js.map +1 -0
  469. package/dist/url-params-J7RKP5RB.js +101 -0
  470. package/dist/url-params-J7RKP5RB.js.map +1 -0
  471. package/dist/validate-VR3HEOMJ.js +122 -0
  472. package/dist/validate-VR3HEOMJ.js.map +1 -0
  473. package/dist/videos-36AXDUGZ.js +41 -0
  474. package/dist/viewer-check-6HL4OUQY.js +83 -0
  475. package/dist/web-7BRJRQX7.js +143 -0
  476. package/dist/web-7BRJRQX7.js.map +1 -0
  477. package/dist/winning-ads-GMM5W2O4.js +86 -0
  478. package/dist/write-commands-IM5DPG3R.js +1502 -0
  479. package/dist/write-commands-IM5DPG3R.js.map +1 -0
  480. package/dist/write-commands-OGVDWWBV.js +1172 -0
  481. package/dist/write-commands-OGVDWWBV.js.map +1 -0
  482. package/dist/x-HGFAL3NY.js +47 -0
  483. package/package.json +1 -1
  484. package/dist/account-C635ATVM.js +0 -80
  485. package/dist/account-C635ATVM.js.map +0 -1
  486. package/dist/account-WLQBAQMD.js +0 -80
  487. package/dist/account-WLQBAQMD.js.map +0 -1
  488. package/dist/account-assets-O7IA37RE.js +0 -290
  489. package/dist/account-level-EU7BWCO7.js +0 -609
  490. package/dist/account-level-EU7BWCO7.js.map +0 -1
  491. package/dist/account-reads-SNOWDHHF.js +0 -219
  492. package/dist/account-users-XYYENK6X.js +0 -62
  493. package/dist/account-users-XYYENK6X.js.map +0 -1
  494. package/dist/account-writes-TU3WJRSI.js +0 -66
  495. package/dist/account-writes-TU3WJRSI.js.map +0 -1
  496. package/dist/accounts-A2FBLZ5H.js +0 -78
  497. package/dist/accounts-A2FBLZ5H.js.map +0 -1
  498. package/dist/accounts-V2IZZ5KU.js +0 -699
  499. package/dist/accounts-V2IZZ5KU.js.map +0 -1
  500. package/dist/actions-Y4SULW2E.js +0 -55
  501. package/dist/activecampaign-63XG6CLL.js +0 -936
  502. package/dist/activecampaign-63XG6CLL.js.map +0 -1
  503. package/dist/ad-group-writes-HLBWN4E4.js +0 -170
  504. package/dist/ad-group-writes-HLBWN4E4.js.map +0 -1
  505. package/dist/ad-groups-33NZD6J3.js +0 -68
  506. package/dist/ad-groups-33NZD6J3.js.map +0 -1
  507. package/dist/ad-writes-7ZDNDZ2E.js +0 -174
  508. package/dist/ad-writes-7ZDNDZ2E.js.map +0 -1
  509. package/dist/add-FOLFVGQO.js +0 -303
  510. package/dist/add-FOLFVGQO.js.map +0 -1
  511. package/dist/add-RYB4JSYC.js +0 -105
  512. package/dist/add-RYB4JSYC.js.map +0 -1
  513. package/dist/ads-2TVWICGM.js +0 -48
  514. package/dist/ads-KBE5JXCH.js +0 -115
  515. package/dist/ads-X3AM6M7L.js +0 -77
  516. package/dist/ads-X3AM6M7L.js.map +0 -1
  517. package/dist/adsets-YWBJFPAZ.js +0 -182
  518. package/dist/advertisers-IGUMSK5Q.js +0 -121
  519. package/dist/advertisers-IGUMSK5Q.js.map +0 -1
  520. package/dist/analytics-3DKM7J43.js +0 -445
  521. package/dist/analytics-3DKM7J43.js.map +0 -1
  522. package/dist/analytics-R3QDSX2K.js +0 -2435
  523. package/dist/analytics-R3QDSX2K.js.map +0 -1
  524. package/dist/asset-writes-72DEVXGO.js +0 -48
  525. package/dist/assign-EKCGLNZB.js +0 -78
  526. package/dist/assign-EKCGLNZB.js.map +0 -1
  527. package/dist/audience-size-IKXK32HU.js +0 -74
  528. package/dist/audience-size-IKXK32HU.js.map +0 -1
  529. package/dist/audience-writes-KCHLNFSI.js +0 -325
  530. package/dist/audience-writes-KCHLNFSI.js.map +0 -1
  531. package/dist/audiences-QAH42HIM.js +0 -86
  532. package/dist/audiences-WCDWN64L.js +0 -268
  533. package/dist/audiences-WCDWN64L.js.map +0 -1
  534. package/dist/audit-CY76S4V7.js +0 -152
  535. package/dist/audit-CY76S4V7.js.map +0 -1
  536. package/dist/autocomplete-G2S5HNUS.js +0 -112
  537. package/dist/autocomplete-G2S5HNUS.js.map +0 -1
  538. package/dist/avatars-P4UPNZM4.js +0 -38
  539. package/dist/bid-pricing-AJT4QU2C.js +0 -101
  540. package/dist/bid-pricing-AJT4QU2C.js.map +0 -1
  541. package/dist/brand-HALQWZWB.js +0 -22
  542. package/dist/brief-NW7TGG2Q.js +0 -541
  543. package/dist/brief-NW7TGG2Q.js.map +0 -1
  544. package/dist/campaign-groups-I43KMAJP.js +0 -97
  545. package/dist/campaign-groups-I43KMAJP.js.map +0 -1
  546. package/dist/campaign-writes-DLLPFAGG.js +0 -166
  547. package/dist/campaign-writes-DLLPFAGG.js.map +0 -1
  548. package/dist/campaign-writes-XO74BALZ.js +0 -174
  549. package/dist/campaign-writes-XO74BALZ.js.map +0 -1
  550. package/dist/campaigns-LS65QM6W.js +0 -76
  551. package/dist/campaigns-LS65QM6W.js.map +0 -1
  552. package/dist/campaigns-UIYSYCF3.js +0 -111
  553. package/dist/campaigns-UIYSYCF3.js.map +0 -1
  554. package/dist/campaigns-XZOQ2VTK.js +0 -130
  555. package/dist/campaigns-YMM5TQVO.js +0 -111
  556. package/dist/canvas-IJS7H3VE.js +0 -46
  557. package/dist/capabilities-XMQPM3UL.js +0 -145
  558. package/dist/capabilities-XMQPM3UL.js.map +0 -1
  559. package/dist/catalogs-JLCSFZYC.js +0 -779
  560. package/dist/catalogs-JLCSFZYC.js.map +0 -1
  561. package/dist/catalogs-T23RKYFC.js +0 -128
  562. package/dist/catalogs-T23RKYFC.js.map +0 -1
  563. package/dist/changes-36C754R4.js +0 -135
  564. package/dist/chatgpt-3WFOPURY.js +0 -47
  565. package/dist/chats-ZI6EYDAF.js +0 -277
  566. package/dist/chats-ZI6EYDAF.js.map +0 -1
  567. package/dist/check-CHJ2OLAU.js +0 -105
  568. package/dist/check-CHJ2OLAU.js.map +0 -1
  569. package/dist/chunk-2TOIY2WN.js +0 -4254
  570. package/dist/chunk-4GAEB6NK.js +0 -228
  571. package/dist/chunk-5RVQK3SP.js +0 -494
  572. package/dist/chunk-5SRUAGTG.js +0 -547
  573. package/dist/chunk-5XTGG4PV.js +0 -274
  574. package/dist/chunk-6Z7Y4KQB.js +0 -275
  575. package/dist/chunk-7J3NZBPV.js +0 -2982
  576. package/dist/chunk-7J3NZBPV.js.map +0 -1
  577. package/dist/chunk-AIRD6T4W.js +0 -169
  578. package/dist/chunk-AQOFQNKQ.js +0 -57
  579. package/dist/chunk-ARUXGKZO.js +0 -91
  580. package/dist/chunk-AYPBARKP.js +0 -156
  581. package/dist/chunk-BRLZX3VP.js +0 -207
  582. package/dist/chunk-BTJSGJNQ.js +0 -604
  583. package/dist/chunk-C7QQQVBS.js +0 -51
  584. package/dist/chunk-CCEDZTP7.js +0 -391
  585. package/dist/chunk-CCEDZTP7.js.map +0 -1
  586. package/dist/chunk-D3KLDIPQ.js +0 -45
  587. package/dist/chunk-DUR7PEJI.js +0 -170
  588. package/dist/chunk-EDLZGTGN.js +0 -216
  589. package/dist/chunk-EDLZGTGN.js.map +0 -1
  590. package/dist/chunk-FFFJBNHA.js +0 -63
  591. package/dist/chunk-FPWQA7TK.js +0 -344
  592. package/dist/chunk-G5Y7OIPL.js +0 -392
  593. package/dist/chunk-GACSA5A6.js +0 -1646
  594. package/dist/chunk-GMHCHHAA.js +0 -19
  595. package/dist/chunk-H4NNQGG6.js +0 -66
  596. package/dist/chunk-HSQRITKG.js +0 -203
  597. package/dist/chunk-I47BEKYK.js +0 -831
  598. package/dist/chunk-JND6XSGZ.js +0 -7192
  599. package/dist/chunk-JND6XSGZ.js.map +0 -1
  600. package/dist/chunk-KBRJSPIM.js +0 -676
  601. package/dist/chunk-KQTNUDKD.js +0 -97
  602. package/dist/chunk-M7HD42M6.js +0 -24017
  603. package/dist/chunk-M7HD42M6.js.map +0 -1
  604. package/dist/chunk-MBSFEVOG.js +0 -163
  605. package/dist/chunk-MGYC2IRC.js +0 -783
  606. package/dist/chunk-MUXKYSTI.js +0 -297
  607. package/dist/chunk-MZCTX37B.js +0 -3868
  608. package/dist/chunk-N7M2TWR5.js +0 -592
  609. package/dist/chunk-NDFS3APP.js +0 -319
  610. package/dist/chunk-OBJCNGZL.js +0 -207
  611. package/dist/chunk-OJGYYH6K.js +0 -179
  612. package/dist/chunk-P6BKKUSX.js +0 -142
  613. package/dist/chunk-PLAOK4AK.js +0 -103
  614. package/dist/chunk-PLBITHV6.js +0 -846
  615. package/dist/chunk-PNKIOTCK.js +0 -349
  616. package/dist/chunk-PNKIOTCK.js.map +0 -1
  617. package/dist/chunk-QBRPM3DQ.js +0 -61
  618. package/dist/chunk-QMDMTZAW.js +0 -224
  619. package/dist/chunk-QW6HL7D6.js +0 -429
  620. package/dist/chunk-R53XMPDO.js +0 -363
  621. package/dist/chunk-RFIUOQLN.js +0 -89
  622. package/dist/chunk-RVEY7BTT.js +0 -8954
  623. package/dist/chunk-SCL7PM6P.js +0 -479
  624. package/dist/chunk-SM7G7RUA.js +0 -910
  625. package/dist/chunk-SVBJ56T7.js +0 -455
  626. package/dist/chunk-TVAIOC77.js +0 -287
  627. package/dist/chunk-TVTSA4EN.js +0 -188
  628. package/dist/chunk-VIPKDXGU.js +0 -4229
  629. package/dist/chunk-VIPKDXGU.js.map +0 -1
  630. package/dist/chunk-W574NV67.js +0 -191
  631. package/dist/chunk-XGPU2VDU.js +0 -219
  632. package/dist/chunk-XQXZJ5IR.js +0 -249
  633. package/dist/chunk-YMF2RG4Z.js +0 -942
  634. package/dist/chunk-Z2DRGXBB.js +0 -197
  635. package/dist/chunk-Z7YMSHRZ.js +0 -23
  636. package/dist/chunk-ZEC46NWW.js +0 -122
  637. package/dist/chunk-ZFC562TP.js +0 -387
  638. package/dist/chunk-ZNRGH4NS.js +0 -150
  639. package/dist/claim-OUYHVGB4.js +0 -198
  640. package/dist/claim-OUYHVGB4.js.map +0 -1
  641. package/dist/companies-XDNSG7ME.js +0 -196
  642. package/dist/companies-XDNSG7ME.js.map +0 -1
  643. package/dist/company-4FAYYPEJ.js +0 -306
  644. package/dist/company-4FAYYPEJ.js.map +0 -1
  645. package/dist/complete-M2PAUMDP.js +0 -82
  646. package/dist/complete-M2PAUMDP.js.map +0 -1
  647. package/dist/connect-PP6Z3F7Y.js +0 -43
  648. package/dist/conversation-B5NPTLFQ.js +0 -94
  649. package/dist/conversation-B5NPTLFQ.js.map +0 -1
  650. package/dist/conversion-report-DKXFHLLX.js +0 -125
  651. package/dist/conversion-report-DKXFHLLX.js.map +0 -1
  652. package/dist/conversion-upload-command-KTYAY7IG.js +0 -439
  653. package/dist/conversion-writes-7ODJDAUP.js +0 -120
  654. package/dist/conversion-writes-7ODJDAUP.js.map +0 -1
  655. package/dist/conversions-BKVGNNC6.js +0 -76
  656. package/dist/conversions-BKVGNNC6.js.map +0 -1
  657. package/dist/conversions-QRJL6JIO.js +0 -138
  658. package/dist/conversions-QRJL6JIO.js.map +0 -1
  659. package/dist/copy-writes-P4WK6OPM.js +0 -168
  660. package/dist/copy-writes-P4WK6OPM.js.map +0 -1
  661. package/dist/create-4DWCJ2UA.js +0 -208
  662. package/dist/create-4DWCJ2UA.js.map +0 -1
  663. package/dist/create-OYV33CQ6.js +0 -60
  664. package/dist/create-OYV33CQ6.js.map +0 -1
  665. package/dist/create-U6JVIYFY.js +0 -237
  666. package/dist/create-U6JVIYFY.js.map +0 -1
  667. package/dist/create-V4FNRO63.js +0 -133
  668. package/dist/create-V4FNRO63.js.map +0 -1
  669. package/dist/creatives-64FKWEGL.js +0 -221
  670. package/dist/creatives-64FKWEGL.js.map +0 -1
  671. package/dist/creatives-JPKA2RHU.js +0 -89
  672. package/dist/creatives-UJDPD4CI.js +0 -58
  673. package/dist/credentials-EIPEZ2C2.js +0 -288
  674. package/dist/credentials-EIPEZ2C2.js.map +0 -1
  675. package/dist/critique-BADMZAZP.js +0 -230
  676. package/dist/critique-BADMZAZP.js.map +0 -1
  677. package/dist/critique-M3DEVEDA.js +0 -1449
  678. package/dist/critique-M3DEVEDA.js.map +0 -1
  679. package/dist/crm-GIYSLLY7.js +0 -321
  680. package/dist/crm-GIYSLLY7.js.map +0 -1
  681. package/dist/crm-HXKSJRY3.js +0 -225
  682. package/dist/crm-HXKSJRY3.js.map +0 -1
  683. package/dist/currency-R4ORE2U3.js +0 -88
  684. package/dist/custom-conversions-5HJBB5XL.js +0 -128
  685. package/dist/customers-7J3QGSOJ.js +0 -57
  686. package/dist/delete-EDWJQMMV.js +0 -65
  687. package/dist/delete-EDWJQMMV.js.map +0 -1
  688. package/dist/delete-O24CVQMJ.js +0 -67
  689. package/dist/delete-O24CVQMJ.js.map +0 -1
  690. package/dist/delete-QN2OYUCS.js +0 -55
  691. package/dist/delete-QN2OYUCS.js.map +0 -1
  692. package/dist/demographics-MPYYF2OI.js +0 -139
  693. package/dist/demographics-MPYYF2OI.js.map +0 -1
  694. package/dist/discard-FJCFB6SA.js +0 -67
  695. package/dist/discard-FJCFB6SA.js.map +0 -1
  696. package/dist/discover-GSJRZUOC.js +0 -172
  697. package/dist/domain-UILPSEA5.js +0 -99
  698. package/dist/domain-UILPSEA5.js.map +0 -1
  699. package/dist/download-ZMAI7QSG.js +0 -170
  700. package/dist/download-ZMAI7QSG.js.map +0 -1
  701. package/dist/draft-5OQT3APG.js +0 -308
  702. package/dist/draft-5OQT3APG.js.map +0 -1
  703. package/dist/draft-LPVK6YHI.js +0 -281
  704. package/dist/draft-LPVK6YHI.js.map +0 -1
  705. package/dist/draft-MSESA5UE.js +0 -333
  706. package/dist/draft-MSESA5UE.js.map +0 -1
  707. package/dist/draft-WYDMLNYA.js +0 -308
  708. package/dist/draft-XOOSEVY5.js +0 -218
  709. package/dist/draft-XOOSEVY5.js.map +0 -1
  710. package/dist/experiments-PVOQUL47.js +0 -234
  711. package/dist/experiments-PVOQUL47.js.map +0 -1
  712. package/dist/facets-5RW4Z3D3.js +0 -115
  713. package/dist/facets-5RW4Z3D3.js.map +0 -1
  714. package/dist/feedback-GC56R2EJ.js +0 -109
  715. package/dist/feedback-GC56R2EJ.js.map +0 -1
  716. package/dist/feedback-record-JX7ZU6J7.js +0 -263
  717. package/dist/feedback-record-JX7ZU6J7.js.map +0 -1
  718. package/dist/fetch-WUTXAPBL.js +0 -177
  719. package/dist/fetch-WUTXAPBL.js.map +0 -1
  720. package/dist/fit-N7WDGWYZ.js +0 -63
  721. package/dist/flows-ULZACISF.js +0 -248
  722. package/dist/flows-ULZACISF.js.map +0 -1
  723. package/dist/fonts-TTUAP7HS.js +0 -37
  724. package/dist/forecast-4AG5F7YC.js +0 -169
  725. package/dist/forecast-RQJJRN5D.js +0 -119
  726. package/dist/forecast-RQJJRN5D.js.map +0 -1
  727. package/dist/funnel-QPWJIXWK.js +0 -395
  728. package/dist/funnel-QPWJIXWK.js.map +0 -1
  729. package/dist/get-35D7YHWJ.js +0 -57
  730. package/dist/get-35D7YHWJ.js.map +0 -1
  731. package/dist/get-GIETDPF4.js +0 -80
  732. package/dist/get-GIETDPF4.js.map +0 -1
  733. package/dist/google-NAA4BASO.js +0 -3267
  734. package/dist/google-ads-2IZFZO4C.js +0 -196
  735. package/dist/google-ads-2IZFZO4C.js.map +0 -1
  736. package/dist/history-5MRLNTCI.js +0 -67
  737. package/dist/history-5MRLNTCI.js.map +0 -1
  738. package/dist/history-RPLWWPLQ.js +0 -134
  739. package/dist/history-RPLWWPLQ.js.map +0 -1
  740. package/dist/history-TQYLUYVU.js +0 -100
  741. package/dist/history-TQYLUYVU.js.map +0 -1
  742. package/dist/hubspot-EPK43X4C.js +0 -780
  743. package/dist/hubspot-EPK43X4C.js.map +0 -1
  744. package/dist/ideas-SUXKKZC7.js +0 -43
  745. package/dist/images-VKVZ3DWG.js +0 -92
  746. package/dist/ingest-BBBFT6FZ.js +0 -24
  747. package/dist/ingest-EM2UY42Z.js +0 -108
  748. package/dist/ingest-EM2UY42Z.js.map +0 -1
  749. package/dist/insights-M3CYB22P.js +0 -437
  750. package/dist/insights-M3CYB22P.js.map +0 -1
  751. package/dist/insights-XCT3ONC7.js +0 -130
  752. package/dist/insights-XCT3ONC7.js.map +0 -1
  753. package/dist/inspect-ZPOVOENK.js +0 -190
  754. package/dist/inspect-ZPOVOENK.js.map +0 -1
  755. package/dist/instant-experiences-HT3HB4QZ.js +0 -258
  756. package/dist/instant-experiences-HT3HB4QZ.js.map +0 -1
  757. package/dist/intent-NSHW7EJT.js +0 -95
  758. package/dist/keyword-gap-ITTWKBWZ.js +0 -130
  759. package/dist/keyword-metrics-7DPR264W.js +0 -198
  760. package/dist/keyword-metrics-7DPR264W.js.map +0 -1
  761. package/dist/keywords-for-site-IXL22UKQ.js +0 -129
  762. package/dist/keywords-for-site-IXL22UKQ.js.map +0 -1
  763. package/dist/landing-KZ4OSHHR.js +0 -28
  764. package/dist/languages-MEFQQBJ2.js +0 -40
  765. package/dist/leads-DNQTRYIR.js +0 -113
  766. package/dist/leads-DNQTRYIR.js.map +0 -1
  767. package/dist/leads-SZOGCQFK.js +0 -538
  768. package/dist/leads-SZOGCQFK.js.map +0 -1
  769. package/dist/learn-Q7WZG7FA.js +0 -205
  770. package/dist/learn-Q7WZG7FA.js.map +0 -1
  771. package/dist/line-item-writes-3K7FT5GO.js +0 -209
  772. package/dist/line-item-writes-3K7FT5GO.js.map +0 -1
  773. package/dist/line-items-G5YJG25N.js +0 -107
  774. package/dist/link-2QVSIZJT.js +0 -65
  775. package/dist/link-2QVSIZJT.js.map +0 -1
  776. package/dist/linkedin-VAFPZNWZ.js +0 -1314
  777. package/dist/linkedin-VAFPZNWZ.js.map +0 -1
  778. package/dist/linkedin-person-EHTYVNZY.js +0 -137
  779. package/dist/linkedin-person-EHTYVNZY.js.map +0 -1
  780. package/dist/list-5TS2VPQZ.js +0 -152
  781. package/dist/list-5TS2VPQZ.js.map +0 -1
  782. package/dist/list-PSSQXQRJ.js +0 -65
  783. package/dist/list-PSSQXQRJ.js.map +0 -1
  784. package/dist/list-UMVIFQ3X.js +0 -304
  785. package/dist/list-UMVIFQ3X.js.map +0 -1
  786. package/dist/locations-RLWAS6AC.js +0 -40
  787. package/dist/locations-UKBOT6SB.js +0 -67
  788. package/dist/locations-UKBOT6SB.js.map +0 -1
  789. package/dist/log-ZZK3QMZB.js +0 -93
  790. package/dist/log-ZZK3QMZB.js.map +0 -1
  791. package/dist/lookup-ZJIP2M4X.js +0 -22
  792. package/dist/make-DB2BDVB3.js +0 -1368
  793. package/dist/make-DB2BDVB3.js.map +0 -1
  794. package/dist/map-UJ23GKRH.js +0 -434
  795. package/dist/map-UJ23GKRH.js.map +0 -1
  796. package/dist/mcp-SS2ALFRJ.js +0 -715
  797. package/dist/mcp-SS2ALFRJ.js.map +0 -1
  798. package/dist/media-ZWN7E777.js +0 -18
  799. package/dist/media-sources-GKSEDSE3.js +0 -35
  800. package/dist/members-KD2XRYPZ.js +0 -45
  801. package/dist/members-KD2XRYPZ.js.map +0 -1
  802. package/dist/meta-EHKXH257.js +0 -122
  803. package/dist/metrics-K6FDCMK7.js +0 -152
  804. package/dist/normalize-ZNTXNX6D.js +0 -142
  805. package/dist/normalize-ZNTXNX6D.js.map +0 -1
  806. package/dist/options-TBIFJF3E.js +0 -123
  807. package/dist/options-TBIFJF3E.js.map +0 -1
  808. package/dist/organization-26J2ZIKM.js +0 -947
  809. package/dist/organization-26J2ZIKM.js.map +0 -1
  810. package/dist/page-photos-HWKQOSCU.js +0 -116
  811. package/dist/page-photos-HWKQOSCU.js.map +0 -1
  812. package/dist/performance-6TPJGM6A.js +0 -25
  813. package/dist/performance-O5BXZGS6.js +0 -5539
  814. package/dist/performance-O5BXZGS6.js.map +0 -1
  815. package/dist/pixels-Z7ZGXAGB.js +0 -60
  816. package/dist/pixels-Z7ZGXAGB.js.map +0 -1
  817. package/dist/plan-TVQSEKYL.js +0 -207
  818. package/dist/plan-TVQSEKYL.js.map +0 -1
  819. package/dist/preview-CWRGDFCP.js +0 -216
  820. package/dist/preview-CWRGDFCP.js.map +0 -1
  821. package/dist/promoted-tweet-writes-SZN74JHY.js +0 -181
  822. package/dist/promoted-tweet-writes-SZN74JHY.js.map +0 -1
  823. package/dist/promoted-tweets-7P4TSQU7.js +0 -119
  824. package/dist/publish-3DUERLGT.js +0 -342
  825. package/dist/publish-3DUERLGT.js.map +0 -1
  826. package/dist/query-QM7MBQD7.js +0 -62
  827. package/dist/questionnaire-LEZJLMAV.js +0 -93
  828. package/dist/questionnaire-LEZJLMAV.js.map +0 -1
  829. package/dist/reddit-SN5CESF4.js +0 -27
  830. package/dist/refresh-2ICQBTK4.js +0 -95
  831. package/dist/refresh-2ICQBTK4.js.map +0 -1
  832. package/dist/release-JSZ4JXYJ.js +0 -61
  833. package/dist/release-JSZ4JXYJ.js.map +0 -1
  834. package/dist/relevant-pages-VOICMQ7U.js +0 -99
  835. package/dist/remove-TFUAVRFM.js +0 -51
  836. package/dist/remove-TFUAVRFM.js.map +0 -1
  837. package/dist/reopen-5T2PE7MU.js +0 -64
  838. package/dist/reopen-5T2PE7MU.js.map +0 -1
  839. package/dist/rerun-EZJ4MLYG.js +0 -93
  840. package/dist/rerun-EZJ4MLYG.js.map +0 -1
  841. package/dist/research-BKYSU2C6.js +0 -263
  842. package/dist/research-BKYSU2C6.js.map +0 -1
  843. package/dist/research-QU63CJB5.js +0 -72
  844. package/dist/reset-DKTKZF7G.js +0 -55
  845. package/dist/reset-DKTKZF7G.js.map +0 -1
  846. package/dist/reset-SXABIVP6.js +0 -55
  847. package/dist/reset-SXABIVP6.js.map +0 -1
  848. package/dist/resolve-L47U2T77.js +0 -122
  849. package/dist/resolve-L47U2T77.js.map +0 -1
  850. package/dist/retry-JEWPK2B5.js +0 -63
  851. package/dist/retry-JEWPK2B5.js.map +0 -1
  852. package/dist/retry-SXFVLT3W.js +0 -61
  853. package/dist/retry-SXFVLT3W.js.map +0 -1
  854. package/dist/revenue-2MAYTXRM.js +0 -89
  855. package/dist/revenue-2MAYTXRM.js.map +0 -1
  856. package/dist/rule-writes-S3RN47OG.js +0 -523
  857. package/dist/rule-writes-S3RN47OG.js.map +0 -1
  858. package/dist/rules-CHWTFASP.js +0 -97
  859. package/dist/rules-CHWTFASP.js.map +0 -1
  860. package/dist/rules-KTJ2ZZ62.js +0 -217
  861. package/dist/rules-add-3M5TALWN.js +0 -463
  862. package/dist/rules-add-3M5TALWN.js.map +0 -1
  863. package/dist/run-2DLA6YO4.js +0 -68
  864. package/dist/run-JCGH2NHD.js +0 -67
  865. package/dist/run-JCGH2NHD.js.map +0 -1
  866. package/dist/scaffold-ad-VEW7JDY7.js +0 -1514
  867. package/dist/scaffold-ad-VEW7JDY7.js.map +0 -1
  868. package/dist/scaffold-static-ad-DYRL7DOS.js +0 -1013
  869. package/dist/scaffold-static-ad-DYRL7DOS.js.map +0 -1
  870. package/dist/scaffold-video-YRAVVKUH.js +0 -886
  871. package/dist/scaffold-video-YRAVVKUH.js.map +0 -1
  872. package/dist/schedule-WYIC6VNW.js +0 -62
  873. package/dist/schedule-WYIC6VNW.js.map +0 -1
  874. package/dist/scheduled-agents-FRBF4EOK.js +0 -55
  875. package/dist/schema-TC2O3FYY.js +0 -133
  876. package/dist/schema-TC2O3FYY.js.map +0 -1
  877. package/dist/search-VDW242BN.js +0 -175
  878. package/dist/search-VDW242BN.js.map +0 -1
  879. package/dist/select-O5HSSC36.js +0 -104
  880. package/dist/select-O5HSSC36.js.map +0 -1
  881. package/dist/sends-6FI7WELX.js +0 -348
  882. package/dist/sends-6FI7WELX.js.map +0 -1
  883. package/dist/set-prompt-TI7N64PJ.js +0 -196
  884. package/dist/set-prompt-TI7N64PJ.js.map +0 -1
  885. package/dist/setup-links-BM2FTXUZ.js +0 -142
  886. package/dist/setup-links-BM2FTXUZ.js.map +0 -1
  887. package/dist/shopify-FIHG5PYP.js +0 -3956
  888. package/dist/shopify-FIHG5PYP.js.map +0 -1
  889. package/dist/site-S3IGBMVC.js +0 -178
  890. package/dist/site-S3IGBMVC.js.map +0 -1
  891. package/dist/sources-77WLFY4Y.js +0 -30
  892. package/dist/sources-A4B3R5JC.js +0 -455
  893. package/dist/sources-A4B3R5JC.js.map +0 -1
  894. package/dist/stale-YIRCXDOK.js +0 -74
  895. package/dist/stale-YIRCXDOK.js.map +0 -1
  896. package/dist/status-6YNR647D.js +0 -63
  897. package/dist/status-6YNR647D.js.map +0 -1
  898. package/dist/studies-ZOEUY6YP.js +0 -250
  899. package/dist/study-writes-DTGMCNFP.js +0 -468
  900. package/dist/study-writes-DTGMCNFP.js.map +0 -1
  901. package/dist/sync-FFVWHGLE.js +0 -55
  902. package/dist/sync-FFVWHGLE.js.map +0 -1
  903. package/dist/sync-definition-K4XOAG2B.js +0 -67
  904. package/dist/tags-5KIOGEKN.js +0 -21
  905. package/dist/tags-5KIOGEKN.js.map +0 -1
  906. package/dist/tags-BKAN5EAJ.js +0 -21
  907. package/dist/tags-BKAN5EAJ.js.map +0 -1
  908. package/dist/tags-ETOOYQ57.js +0 -26
  909. package/dist/tags-RPNK7TMO.js +0 -225
  910. package/dist/tags-RPNK7TMO.js.map +0 -1
  911. package/dist/tags-UM4QO46J.js +0 -21
  912. package/dist/tags-UM4QO46J.js.map +0 -1
  913. package/dist/targeting-VBQY3HUN.js +0 -760
  914. package/dist/targeting-VBQY3HUN.js.map +0 -1
  915. package/dist/targeting-criteria-L4DYIJZI.js +0 -113
  916. package/dist/targets-S6N7327Q.js +0 -104
  917. package/dist/targets-S6N7327Q.js.map +0 -1
  918. package/dist/testimonials-65N7IYN7.js +0 -32
  919. package/dist/themes-B4LCQUXB.js +0 -95
  920. package/dist/top-companies-SJKND75M.js +0 -109
  921. package/dist/top-companies-SJKND75M.js.map +0 -1
  922. package/dist/transcript-5I7I6DWL.js +0 -163
  923. package/dist/transcript-5I7I6DWL.js.map +0 -1
  924. package/dist/translate-SH6IG5Y7.js +0 -607
  925. package/dist/translate-SH6IG5Y7.js.map +0 -1
  926. package/dist/triggers-YRY3HTYU.js +0 -142
  927. package/dist/triggers-YRY3HTYU.js.map +0 -1
  928. package/dist/unlink-4B4YTQE4.js +0 -68
  929. package/dist/unlink-4B4YTQE4.js.map +0 -1
  930. package/dist/unstage-H5NTDJ6A.js +0 -86
  931. package/dist/unstage-H5NTDJ6A.js.map +0 -1
  932. package/dist/unstage-MDSSPUKV.js +0 -95
  933. package/dist/unstage-MDSSPUKV.js.map +0 -1
  934. package/dist/update-DI52JJGB.js +0 -99
  935. package/dist/update-DI52JJGB.js.map +0 -1
  936. package/dist/update-DMPDLMMV.js +0 -64
  937. package/dist/update-DMPDLMMV.js.map +0 -1
  938. package/dist/update-TUS4PJIG.js +0 -190
  939. package/dist/update-TUS4PJIG.js.map +0 -1
  940. package/dist/update-Z66LMXNS.js +0 -153
  941. package/dist/update-Z66LMXNS.js.map +0 -1
  942. package/dist/upload-7KQYZ7T7.js +0 -127
  943. package/dist/upload-7KQYZ7T7.js.map +0 -1
  944. package/dist/url-options-IHL4OU4C.js +0 -130
  945. package/dist/url-options-IHL4OU4C.js.map +0 -1
  946. package/dist/url-params-SDA2MWB5.js +0 -99
  947. package/dist/url-params-SDA2MWB5.js.map +0 -1
  948. package/dist/validate-ZABZNCSB.js +0 -120
  949. package/dist/validate-ZABZNCSB.js.map +0 -1
  950. package/dist/videos-BKVCCKIH.js +0 -41
  951. package/dist/viewer-check-B5O7ZY3Q.js +0 -81
  952. package/dist/web-KN3BTVG4.js +0 -141
  953. package/dist/web-KN3BTVG4.js.map +0 -1
  954. package/dist/winning-ads-JIDPISKM.js +0 -86
  955. package/dist/write-commands-K6M3RTVK.js +0 -1170
  956. package/dist/write-commands-K6M3RTVK.js.map +0 -1
  957. package/dist/write-commands-RVHLLLDR.js +0 -1498
  958. package/dist/write-commands-RVHLLLDR.js.map +0 -1
  959. package/dist/x-NLGWZCGX.js +0 -47
  960. /package/dist/{account-assets-O7IA37RE.js.map → account-assets-J5Z4URLQ.js.map} +0 -0
  961. /package/dist/{account-reads-SNOWDHHF.js.map → account-reads-2MSUVG46.js.map} +0 -0
  962. /package/dist/{actions-Y4SULW2E.js.map → actions-D7OWCP36.js.map} +0 -0
  963. /package/dist/{ads-2TVWICGM.js.map → ads-HLUJB5SQ.js.map} +0 -0
  964. /package/dist/{ads-KBE5JXCH.js.map → ads-MAOI7S6V.js.map} +0 -0
  965. /package/dist/{adsets-YWBJFPAZ.js.map → adsets-QRKICEFD.js.map} +0 -0
  966. /package/dist/{asset-writes-72DEVXGO.js.map → asset-writes-JLVUAVUZ.js.map} +0 -0
  967. /package/dist/{audiences-QAH42HIM.js.map → audiences-CDDI5HR5.js.map} +0 -0
  968. /package/dist/{avatars-P4UPNZM4.js.map → avatars-WZ2JDMHH.js.map} +0 -0
  969. /package/dist/{brand-HALQWZWB.js.map → brand-IZTTBZII.js.map} +0 -0
  970. /package/dist/{campaigns-YMM5TQVO.js.map → campaigns-4Y3JQC2U.js.map} +0 -0
  971. /package/dist/{campaigns-XZOQ2VTK.js.map → campaigns-HES5MDUG.js.map} +0 -0
  972. /package/dist/{canvas-IJS7H3VE.js.map → canvas-IQ753Q2O.js.map} +0 -0
  973. /package/dist/{changes-36C754R4.js.map → changes-VWKTM27U.js.map} +0 -0
  974. /package/dist/{chatgpt-3WFOPURY.js.map → chatgpt-OPOD2WHB.js.map} +0 -0
  975. /package/dist/{chunk-DUR7PEJI.js.map → chunk-2GYCWRF3.js.map} +0 -0
  976. /package/dist/{chunk-QBRPM3DQ.js.map → chunk-2L7F7KR4.js.map} +0 -0
  977. /package/dist/{chunk-4GAEB6NK.js.map → chunk-44ZRCSR7.js.map} +0 -0
  978. /package/dist/{chunk-2TOIY2WN.js.map → chunk-46YLDIQG.js.map} +0 -0
  979. /package/dist/{chunk-R53XMPDO.js.map → chunk-4EDWXZ3I.js.map} +0 -0
  980. /package/dist/{chunk-H4NNQGG6.js.map → chunk-4FFBGR5L.js.map} +0 -0
  981. /package/dist/{chunk-XGPU2VDU.js.map → chunk-4UQRXKYJ.js.map} +0 -0
  982. /package/dist/{chunk-N7M2TWR5.js.map → chunk-4UZUUSVL.js.map} +0 -0
  983. /package/dist/{chunk-I47BEKYK.js.map → chunk-4XHCEYHI.js.map} +0 -0
  984. /package/dist/{chunk-SCL7PM6P.js.map → chunk-4Z6PVR3M.js.map} +0 -0
  985. /package/dist/{chunk-ZEC46NWW.js.map → chunk-5Y5FZV2W.js.map} +0 -0
  986. /package/dist/{chunk-G5Y7OIPL.js.map → chunk-6HJXLGDV.js.map} +0 -0
  987. /package/dist/{chunk-QW6HL7D6.js.map → chunk-6S5CWGDA.js.map} +0 -0
  988. /package/dist/{chunk-5RVQK3SP.js.map → chunk-6VYROVWO.js.map} +0 -0
  989. /package/dist/{chunk-TVAIOC77.js.map → chunk-7BUIOP36.js.map} +0 -0
  990. /package/dist/{chunk-NDFS3APP.js.map → chunk-AQRXXC6E.js.map} +0 -0
  991. /package/dist/{chunk-ZFC562TP.js.map → chunk-ARBXT73X.js.map} +0 -0
  992. /package/dist/{chunk-KQTNUDKD.js.map → chunk-BEZHQIEI.js.map} +0 -0
  993. /package/dist/{chunk-5SRUAGTG.js.map → chunk-BFURWHVR.js.map} +0 -0
  994. /package/dist/{chunk-KBRJSPIM.js.map → chunk-DSCEXBDR.js.map} +0 -0
  995. /package/dist/{chunk-Z7YMSHRZ.js.map → chunk-FLWDFPXE.js.map} +0 -0
  996. /package/dist/{chunk-GACSA5A6.js.map → chunk-FRNBRN2C.js.map} +0 -0
  997. /package/dist/{chunk-C7QQQVBS.js.map → chunk-GE3VT3CA.js.map} +0 -0
  998. /package/dist/{chunk-P6BKKUSX.js.map → chunk-HGBJQGO5.js.map} +0 -0
  999. /package/dist/{chunk-MGYC2IRC.js.map → chunk-I7AYMJZA.js.map} +0 -0
  1000. /package/dist/{chunk-BRLZX3VP.js.map → chunk-IRM273C7.js.map} +0 -0
  1001. /package/dist/{chunk-AYPBARKP.js.map → chunk-IWKD56AY.js.map} +0 -0
  1002. /package/dist/{chunk-MZCTX37B.js.map → chunk-JLAQWMVF.js.map} +0 -0
  1003. /package/dist/{chunk-AQOFQNKQ.js.map → chunk-K6NULQN7.js.map} +0 -0
  1004. /package/dist/{chunk-GMHCHHAA.js.map → chunk-L2BRAC2J.js.map} +0 -0
  1005. /package/dist/{chunk-SVBJ56T7.js.map → chunk-LGMI4LSY.js.map} +0 -0
  1006. /package/dist/{chunk-OJGYYH6K.js.map → chunk-NB2FU6EZ.js.map} +0 -0
  1007. /package/dist/{chunk-TVTSA4EN.js.map → chunk-NWF2LRKO.js.map} +0 -0
  1008. /package/dist/{chunk-6Z7Y4KQB.js.map → chunk-OG47L5GG.js.map} +0 -0
  1009. /package/dist/{chunk-AIRD6T4W.js.map → chunk-OR6KVLI5.js.map} +0 -0
  1010. /package/dist/{chunk-OBJCNGZL.js.map → chunk-QDQZ62FL.js.map} +0 -0
  1011. /package/dist/{chunk-FPWQA7TK.js.map → chunk-QIOFOD4K.js.map} +0 -0
  1012. /package/dist/{chunk-XQXZJ5IR.js.map → chunk-R2SYF5FC.js.map} +0 -0
  1013. /package/dist/{chunk-YMF2RG4Z.js.map → chunk-RTH2I55B.js.map} +0 -0
  1014. /package/dist/{chunk-FFFJBNHA.js.map → chunk-S6VFDNSQ.js.map} +0 -0
  1015. /package/dist/{chunk-ZNRGH4NS.js.map → chunk-SG2TDQEE.js.map} +0 -0
  1016. /package/dist/{chunk-RFIUOQLN.js.map → chunk-T3P6O2VU.js.map} +0 -0
  1017. /package/dist/{chunk-BTJSGJNQ.js.map → chunk-TXDE2QJ3.js.map} +0 -0
  1018. /package/dist/{chunk-HSQRITKG.js.map → chunk-UDIEKCIR.js.map} +0 -0
  1019. /package/dist/{chunk-MBSFEVOG.js.map → chunk-USCADMM3.js.map} +0 -0
  1020. /package/dist/{chunk-SM7G7RUA.js.map → chunk-UUGISMNE.js.map} +0 -0
  1021. /package/dist/{chunk-Z2DRGXBB.js.map → chunk-VDPOCAQ2.js.map} +0 -0
  1022. /package/dist/{chunk-PLAOK4AK.js.map → chunk-VEJ3QX6M.js.map} +0 -0
  1023. /package/dist/{chunk-ARUXGKZO.js.map → chunk-VFJB7OG6.js.map} +0 -0
  1024. /package/dist/{chunk-RVEY7BTT.js.map → chunk-VRIPVLE7.js.map} +0 -0
  1025. /package/dist/{chunk-5XTGG4PV.js.map → chunk-WFY7KSHB.js.map} +0 -0
  1026. /package/dist/{chunk-D3KLDIPQ.js.map → chunk-WLESMH4J.js.map} +0 -0
  1027. /package/dist/{chunk-PLBITHV6.js.map → chunk-XHQYFNNK.js.map} +0 -0
  1028. /package/dist/{chunk-QMDMTZAW.js.map → chunk-YILZR3XI.js.map} +0 -0
  1029. /package/dist/{chunk-W574NV67.js.map → chunk-YJFLXOH4.js.map} +0 -0
  1030. /package/dist/{chunk-MUXKYSTI.js.map → chunk-YWHZYR6S.js.map} +0 -0
  1031. /package/dist/{connect-PP6Z3F7Y.js.map → connect-3YY7MF3I.js.map} +0 -0
  1032. /package/dist/{conversion-upload-command-KTYAY7IG.js.map → conversion-upload-command-7RSZ5ZQU.js.map} +0 -0
  1033. /package/dist/{creatives-UJDPD4CI.js.map → creatives-2DR3QHJW.js.map} +0 -0
  1034. /package/dist/{creatives-JPKA2RHU.js.map → creatives-BB6S2OF6.js.map} +0 -0
  1035. /package/dist/{currency-R4ORE2U3.js.map → currency-X7Y6TSLF.js.map} +0 -0
  1036. /package/dist/{custom-conversions-5HJBB5XL.js.map → custom-conversions-HAGG72LF.js.map} +0 -0
  1037. /package/dist/{customers-7J3QGSOJ.js.map → customers-663K2OCP.js.map} +0 -0
  1038. /package/dist/{discover-GSJRZUOC.js.map → discover-6DORQWXY.js.map} +0 -0
  1039. /package/dist/{draft-WYDMLNYA.js.map → draft-R6EKORNS.js.map} +0 -0
  1040. /package/dist/{fit-N7WDGWYZ.js.map → fit-BEFCY2B4.js.map} +0 -0
  1041. /package/dist/{fonts-TTUAP7HS.js.map → fonts-C6XN5667.js.map} +0 -0
  1042. /package/dist/{forecast-4AG5F7YC.js.map → forecast-BTPIXEQ5.js.map} +0 -0
  1043. /package/dist/{google-NAA4BASO.js.map → google-M6BJ22UL.js.map} +0 -0
  1044. /package/dist/{ideas-SUXKKZC7.js.map → ideas-M66FU45H.js.map} +0 -0
  1045. /package/dist/{images-VKVZ3DWG.js.map → images-MM5OPUKV.js.map} +0 -0
  1046. /package/dist/{ingest-BBBFT6FZ.js.map → ingest-KMLYCFF4.js.map} +0 -0
  1047. /package/dist/{intent-NSHW7EJT.js.map → intent-YCQCUCV3.js.map} +0 -0
  1048. /package/dist/{keyword-gap-ITTWKBWZ.js.map → keyword-gap-PUSF7EKY.js.map} +0 -0
  1049. /package/dist/{landing-KZ4OSHHR.js.map → landing-OZU5RRFV.js.map} +0 -0
  1050. /package/dist/{languages-MEFQQBJ2.js.map → languages-SLFV73GE.js.map} +0 -0
  1051. /package/dist/{line-items-G5YJG25N.js.map → line-items-NJMEPEF5.js.map} +0 -0
  1052. /package/dist/{locations-RLWAS6AC.js.map → locations-T2OMP6QN.js.map} +0 -0
  1053. /package/dist/{lookup-ZJIP2M4X.js.map → lookup-S5VG7AWH.js.map} +0 -0
  1054. /package/dist/{media-ZWN7E777.js.map → media-P4T4ZBNS.js.map} +0 -0
  1055. /package/dist/{media-sources-GKSEDSE3.js.map → media-sources-EQI3U4TC.js.map} +0 -0
  1056. /package/dist/{meta-EHKXH257.js.map → meta-IPLWNYC7.js.map} +0 -0
  1057. /package/dist/{metrics-K6FDCMK7.js.map → metrics-4YVJHYRI.js.map} +0 -0
  1058. /package/dist/{performance-6TPJGM6A.js.map → performance-NIF3CESZ.js.map} +0 -0
  1059. /package/dist/{promoted-tweets-7P4TSQU7.js.map → promoted-tweets-RJT53DRM.js.map} +0 -0
  1060. /package/dist/{query-QM7MBQD7.js.map → query-XZMDGRO5.js.map} +0 -0
  1061. /package/dist/{reddit-SN5CESF4.js.map → reddit-JIHMAKAQ.js.map} +0 -0
  1062. /package/dist/{relevant-pages-VOICMQ7U.js.map → relevant-pages-FS7GBVXK.js.map} +0 -0
  1063. /package/dist/{research-QU63CJB5.js.map → research-PNBACCCP.js.map} +0 -0
  1064. /package/dist/{rules-KTJ2ZZ62.js.map → rules-ZVS2MWED.js.map} +0 -0
  1065. /package/dist/{run-2DLA6YO4.js.map → run-QCNRR3CA.js.map} +0 -0
  1066. /package/dist/{scheduled-agents-FRBF4EOK.js.map → scheduled-agents-OXYAVSIE.js.map} +0 -0
  1067. /package/dist/{sources-77WLFY4Y.js.map → sources-FLUGHSVP.js.map} +0 -0
  1068. /package/dist/{studies-ZOEUY6YP.js.map → studies-EPO2AM4M.js.map} +0 -0
  1069. /package/dist/{sync-definition-K4XOAG2B.js.map → sync-definition-OGQ5XTQE.js.map} +0 -0
  1070. /package/dist/{tags-ETOOYQ57.js.map → tags-CZTRQNXV.js.map} +0 -0
  1071. /package/dist/{targeting-criteria-L4DYIJZI.js.map → targeting-criteria-AQYXVSGN.js.map} +0 -0
  1072. /package/dist/{testimonials-65N7IYN7.js.map → testimonials-G3OCNPBY.js.map} +0 -0
  1073. /package/dist/{themes-B4LCQUXB.js.map → themes-FEVYZZCW.js.map} +0 -0
  1074. /package/dist/{videos-BKVCCKIH.js.map → videos-36AXDUGZ.js.map} +0 -0
  1075. /package/dist/{viewer-check-B5O7ZY3Q.js.map → viewer-check-6HL4OUQY.js.map} +0 -0
  1076. /package/dist/{winning-ads-JIDPISKM.js.map → winning-ads-GMM5W2O4.js.map} +0 -0
  1077. /package/dist/{x-NLGWZCGX.js.map → x-HGFAL3NY.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/meta/leads.ts","../src/commands/ads/meta/lead-form-writes.ts"],"sourcesContent":["import { isMetaLeadAdsRefusal } from \"@baker/api/ads-meta\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiGet } from \"../../../client.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { writeAdsJson, writeAdsOutput, writeJsonEnvelope } from \"../output.ts\";\nimport {\n leadFormsArchiveCommand,\n leadFormsCreateCommand,\n leadFormsDuplicateCommand,\n leadFormsSpecCommand,\n leadFormsUnarchiveCommand,\n} from \"./lead-form-writes.ts\";\nimport { csvOrJson, handleMetaError } from \"./shared.ts\";\n\n/** An instant form attached to a Facebook Page. */\nexport interface MetaLeadForm {\n id: string;\n name?: string;\n status?: string;\n locale?: string;\n leads_count?: number;\n created_time?: string;\n}\n\n/** One page of leads plus the cursor that continues it. */\nexport interface MetaLeadPage {\n leads: MetaLead[];\n /** Present only while Meta says another page exists. */\n nextCursor?: string;\n /** What the backend says about this page (every answer masked when it could not tell contact questions apart). */\n hints?: string[];\n}\n\n/** One lead, already shaped by the backend (contact values masked unless --full). */\nexport interface MetaLead {\n id: string;\n created_time?: string;\n ad_id?: string;\n ad_name?: string;\n adset_id?: string;\n adset_name?: string;\n campaign_id?: string;\n campaign_name?: string;\n form_id?: string;\n is_organic?: boolean;\n platform?: string;\n answers: Record<string, string>;\n /** Each disclaimer checkbox by its key: ticked or not. */\n consents?: Record<string, boolean>;\n partner_name?: string;\n}\n\nregisterSchema({\n command: \"ads.meta.lead-forms\",\n description:\n \"List the instant (lead) forms on a Facebook Page, with how many leads each has collected. Start here: a lead is fetched by form id. Use a Page from `baker ads meta pages` with hasPageAccessToken: true.\",\n args: {\n \"page-id\": {\n type: \"string\",\n description: \"Facebook Page ID — from `baker ads meta pages` with hasPageAccessToken: true\",\n required: true,\n },\n full: { type: \"boolean\", description: \"Include each form's questions\", required: false },\n output: { type: \"string\", description: \"json|csv\", required: false, default: \"json\" },\n },\n});\n\nregisterSchema({\n command: \"ads.meta.leads\",\n description:\n \"Read the leads an instant form collected. Contact details (email, phone) come back masked; pass --full only when the raw values are genuinely needed, e.g. handing them to a CRM.\",\n args: {\n \"form-id\": { type: \"string\", description: \"Instant form ID — from `baker ads meta lead-forms`\", required: false },\n \"ad-id\": { type: \"string\", description: \"Read the leads of one ad instead of a whole form\", required: false },\n \"adset-id\": { type: \"string\", description: \"Read the leads of every ad in an ad set\", required: false },\n \"campaign-id\": { type: \"string\", description: \"Read the leads of every ad in a campaign\", required: false },\n since: { type: \"string\", description: \"Earliest submission date, YYYY-MM-DD\", required: false },\n until: { type: \"string\", description: \"Latest submission date, YYYY-MM-DD (inclusive)\", required: false },\n limit: { type: \"string\", description: \"Leads per page (default 100, max 500)\", required: false },\n after: {\n type: \"string\",\n description: \"Cursor from a previous call's nextCursor — fetches the following page\",\n required: false,\n },\n full: { type: \"boolean\", description: \"Return raw contact details instead of masked ones\", required: false },\n output: { type: \"string\", description: \"json|csv\", required: false, default: \"json\" },\n },\n});\n\n/**\n * A form that exists but has never collected anything is the single most common\n * thing to misread here — it looks identical to a permissions problem in the\n * output, and the remedies are opposite. Say which it is.\n */\n/** The backend drains instant forms up to this many; see `META_LEAD_FORMS_MAX`. */\nconst LEAD_FORMS_CAP = 500;\n\nexport function leadFormHints(forms: MetaLeadForm[]): string[] {\n if (forms.length === 0) {\n return [\"This Page has NO instant forms. Nothing to read leads from — the form has to be created first.\"];\n }\n if (forms.length >= LEAD_FORMS_CAP) {\n return [\n `PARTIAL LIST — this Page has at least ${LEAD_FORMS_CAP} instant forms and only the first ${LEAD_FORMS_CAP} came back. Do not describe this as every form on the Page.`,\n ];\n }\n const empty = forms.filter((form) => (form.leads_count ?? 0) === 0);\n if (empty.length === forms.length) {\n return [\n \"Every form on this Page has collected 0 leads. That is a real, readable answer — the connection works. Do not retry and do not report it as a permissions problem.\",\n ];\n }\n return [];\n}\n\n/**\n * A `FORBIDDEN` that Baker itself produced is already conclusive, so it must not\n * collect the generic ambiguous-403 remedy.\n *\n * `metaForbiddenFix` exists for Meta's own 403, which covers two causes with\n * opposite fixes and can only be told apart by testing the blast radius. Pasting\n * that after *\"this needs switching on by the Baker team\"* would hand the agent\n * a paragraph suggesting a reconnect right underneath a sentence saying a\n * reconnect cannot help — and the agent would pass it on, costing the client a\n * pointless round trip through their Meta login. Everything that is genuinely\n * Meta's still goes through the normal handler.\n */\nfunction handleLeadsError(err: unknown): never {\n if (err instanceof ApiError && err.code === \"FORBIDDEN\" && isMetaLeadAdsRefusal(err.message)) {\n writeAdsJson({\n ok: false,\n error: {\n code: err.code,\n message: err.message,\n fix: { action: \"reject\", explanation: err.message },\n retryable: false,\n },\n });\n process.exit(1);\n }\n handleMetaError(err);\n}\n\n/**\n * What the agent has to know before it reports a number.\n *\n * Counting is what this command is mostly used for, so a page that is full is\n * the dangerous case: without a word, 100 rows read as \"100 leads\" and the\n * client is told something false. The cursor is the remedy, and it has to be\n * named in the same breath as the warning.\n */\nexport function leadPageHints(page: MetaLeadPage, full: boolean): string[] {\n const hints: string[] = [];\n if (page.nextCursor) {\n hints.push(\n `PARTIAL PAGE — more leads exist. This is ${page.leads.length} of an unknown larger number; do NOT report it as a total. Fetch the next page with \\`--after ${page.nextCursor}\\` (repeat until no nextCursor), or narrow the window with --since/--until.`,\n );\n }\n if (!full) {\n hints.push(\n \"Answers that give contact details (email, phone, any question asking for one) are masked. Report on them as they are; pass --full only when the raw values have to leave Baker (a CRM hand-off), and never paste them into the chat otherwise.\",\n );\n }\n hints.push(...(page.hints ?? []));\n return hints;\n}\n\nconst leadFormsListArgs = {\n \"page-id\": { type: \"string\", description: \"Facebook Page ID\" },\n full: { type: \"boolean\", description: \"Include each form's questions\" },\n output: { type: \"string\", description: \"Output format\", default: \"json\" },\n} as const;\n\nconst leadFormsListCommand = defineCommand({\n meta: {\n name: \"list\",\n description:\n \"List the Instant Forms on a Facebook Page, with lead counts. Choose a Page with hasPageAccessToken: true from `baker ads meta pages`. Pass --full to include questions.\",\n },\n args: leadFormsListArgs,\n run: async ({ args }) => {\n try {\n const pageId = args[\"page-id\"] as string | undefined;\n if (!pageId) {\n handleLeadsError(\n new Error(\n \"--page-id is required. Run `baker ads meta pages` and choose a Page with hasPageAccessToken: true.\",\n ),\n );\n }\n const params: Record<string, string> = { \"page-id\": pageId };\n if (args.full) params.full = \"true\";\n const data = await apiGet<MetaLeadForm[]>(\"/api/ads/meta/lead-forms\", params);\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n writeAdsOutput(data as unknown as Array<Record<string, unknown>>, fmt);\n return;\n }\n const hints = leadFormHints(data);\n writeJsonEnvelope(hints.length > 0 ? { ok: true, data, hints } : { ok: true, data });\n } catch (err) {\n handleLeadsError(err);\n }\n },\n});\n\nexport const leadFormsCommand = defineCommand({\n meta: {\n name: \"lead-forms\",\n description: `List Instant Forms on a Facebook Page, or stage a new one, a changed copy, an archive.\nA form is permanent on Meta and nothing on it changes once made: to change one, duplicate it with changes and archive the old one.\nExamples:\n baker ads meta lead-forms --page-id 100635183117758\n baker ads meta lead-forms --page-id 100635183117758 --full\n baker ads meta lead-forms create --account-id act_123 --page-id 555 --file form.json\n baker ads meta lead-forms spec 987654321 — a live form as a create --file payload\n baker ads meta lead-forms duplicate 987654321 --account-id act_123 --name \"Free audit (ES)\" --locale ES_LA\n baker ads meta lead-forms archive 987654321 --account-id act_123`,\n },\n args: leadFormsListArgs,\n subCommands: {\n list: leadFormsListCommand,\n create: leadFormsCreateCommand,\n spec: leadFormsSpecCommand,\n duplicate: leadFormsDuplicateCommand,\n archive: leadFormsArchiveCommand,\n unarchive: leadFormsUnarchiveCommand,\n },\n default: \"list\",\n});\n\nexport const leadsCommand = defineCommand({\n meta: {\n name: \"leads\",\n description: `Read the leads an instant form collected. Every question comes back; email and phone answers are MASKED unless you pass --full, so you can report on what a form is collecting without moving contact details around.\n\nExamples:\n baker ads meta leads --form-id 987654321\n baker ads meta leads --form-id 987654321 --since 2026-08-01 --until 2026-08-31\n baker ads meta leads --ad-id 6123456789 --limit 50\n baker ads meta leads --adset-id 6123456780 --since 2026-08-01 # every ad in the ad set (Meta has no ad set edge)\n baker ads meta leads --form-id 987654321 --after <nextCursor> # the next page\n baker ads meta leads --form-id 987654321 --full # raw contact details — only when handing leads over\n\nResults are PAGED. A response carrying \\`nextCursor\\` is not the whole set — follow it before reporting any total.`,\n },\n args: {\n \"form-id\": { type: \"string\", description: \"Instant form ID (from `baker ads meta lead-forms`)\" },\n \"ad-id\": { type: \"string\", description: \"Read one ad's leads instead of a whole form\" },\n \"adset-id\": { type: \"string\", description: \"Read the leads of every ad in an ad set\" },\n \"campaign-id\": { type: \"string\", description: \"Read the leads of every ad in a campaign\" },\n since: { type: \"string\", description: \"Earliest submission date, YYYY-MM-DD\" },\n until: { type: \"string\", description: \"Latest submission date, YYYY-MM-DD (inclusive)\" },\n limit: { type: \"string\", description: \"Leads per page (default 100, max 500)\" },\n after: { type: \"string\", description: \"Cursor from a previous call's nextCursor\" },\n full: { type: \"boolean\", description: \"Return raw contact details instead of masked ones\" },\n output: { type: \"string\", description: \"Output format\", default: \"json\" },\n },\n run: async ({ args }) => {\n try {\n const params: Record<string, string> = {};\n for (const flag of [\"form-id\", \"ad-id\", \"adset-id\", \"campaign-id\"] as const) {\n const value = args[flag];\n if (typeof value === \"string\" && value.length > 0) params[flag] = value;\n }\n if (Object.keys(params).length !== 1) {\n handleLeadsError(\n new Error(\"Pass one of --form-id (from `baker ads meta lead-forms`), --ad-id, --adset-id or --campaign-id.\"),\n );\n }\n if (args.since) params.since = args.since as string;\n if (args.until) params.until = args.until as string;\n if (args.limit) params.limit = String(args.limit);\n if (args.after) params.after = String(args.after);\n if (args.full) params.full = \"true\";\n const page = await apiGet<MetaLeadPage>(\"/api/ads/meta/leads\", params);\n const fmt = csvOrJson(args);\n if (fmt !== \"json\") {\n writeAdsOutput(page.leads as unknown as Array<Record<string, unknown>>, fmt);\n return;\n }\n writeJsonEnvelope({\n ok: true,\n data: page.leads,\n ...(page.nextCursor ? { nextCursor: page.nextCursor } : {}),\n hints: leadPageHints(page, args.full === true),\n });\n } catch (err) {\n handleLeadsError(err);\n }\n },\n});\n","import { defineCommand } from \"citty\";\nimport { apiGet } from \"../../../client.ts\";\nimport { repeatedValues } from \"../../../lib/repeatedFlags.ts\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { writeJsonEnvelope } from \"../output.ts\";\nimport { handleMetaError } from \"./shared.ts\";\nimport {\n bareAccountId,\n failWriteValidation,\n loadJsonFileArg,\n mergePayload,\n requireTarget,\n stageOp,\n upper,\n} from \"./write-shared.ts\";\n\n/**\n * Staging Instant Forms. A form is permanent on Meta — it is never deleted,\n * only archived — and nothing on it changes once it exists, so every write\n * here is a new form (create, duplicate) or an archive / unarchive, all staged\n * on this chat's draft and applied at publish.\n */\n\ntype Args = Record<string, unknown>;\n\nconst STAGED_NOTE = \"Staged until publish — review with `baker ads meta draft`.\";\n\nconst str = (value: unknown): string | undefined => (typeof value === \"string\" && value.length > 0 ? value : undefined);\n\n/** `\"Question? => answer | answer\"` → a CUSTOM question, multiple choice when it lists answers. */\nfunction customQuestion(value: string): Record<string, unknown> {\n const [label = \"\", answers] = value.split(\"=>\").map((part) => part.trim());\n const options = answers\n ?.split(\"|\")\n .map((answer) => answer.trim())\n .filter(Boolean)\n .map((answer) => ({ value: answer }));\n return { type: \"CUSTOM\", label, ...(options && options.length > 0 ? { options } : {}) };\n}\n\nfunction questionsFromFlags(args: Args, rawArgs: readonly string[] | undefined): unknown[] | undefined {\n const predefined = (str(args.questions) ?? \"\")\n .split(\",\")\n .map((type) => type.trim().toUpperCase())\n .filter(Boolean)\n .map((type) => ({ type }));\n const custom = repeatedValues(rawArgs, \"question\", args.question).map(customQuestion);\n const all = [...predefined, ...custom];\n return all.length > 0 ? all : undefined;\n}\n\n/**\n * The intro fields the flags name, and only those: a duplicate keeps every\n * other intro field of the live form (`mergeDuplicateSpec`), so `--intro-title`\n * alone does not wipe the text and `--intro-button` alone is not dropped.\n */\nfunction introFromFlags(args: Args, rawArgs: readonly string[] | undefined): Record<string, unknown> | undefined {\n const content = repeatedValues(rawArgs, \"intro-text\", args[\"intro-text\"]);\n const set = {\n ...(str(args[\"intro-title\"]) ? { title: str(args[\"intro-title\"]) } : {}),\n ...(content.length > 0 ? { style: content.length > 1 ? \"LIST_STYLE\" : \"PARAGRAPH_STYLE\", content } : {}),\n ...(str(args[\"intro-button\"]) ? { buttonText: str(args[\"intro-button\"]) } : {}),\n };\n return Object.keys(set).length > 0 ? set : undefined;\n}\n\nfunction thankYouFromFlags(args: Args): Record<string, unknown> | undefined {\n const fields = {\n title: str(args[\"thank-you-title\"]),\n body: str(args[\"thank-you-body\"]),\n buttonType: upper(args[\"thank-you-button\"]),\n buttonText: str(args[\"thank-you-button-text\"]),\n websiteUrl: str(args[\"thank-you-url\"]),\n businessPhoneNumber: str(args[\"thank-you-phone\"]),\n countryCode: upper(args[\"thank-you-country\"]),\n };\n const set = Object.fromEntries(Object.entries(fields).filter(([, value]) => value !== undefined));\n return Object.keys(set).length > 0 ? set : undefined;\n}\n\nfunction trackingFromFlags(args: Args, rawArgs: readonly string[] | undefined): Record<string, string> | undefined {\n const pairs = repeatedValues(rawArgs, \"tracking\", args.tracking).map((pair) => {\n const at = pair.indexOf(\"=\");\n if (at <= 0) failWriteValidation(`--tracking takes name=value, got \"${pair}\"`);\n return [pair.slice(0, at).trim(), pair.slice(at + 1).trim()] as const;\n });\n return pairs.length > 0 ? Object.fromEntries(pairs) : undefined;\n}\n\n/** The `leadForm.create` fields the flags name; anything a flag leaves out comes from `--file`. */\nexport function leadFormPayloadFromFlags(args: Args, rawArgs?: readonly string[]): Record<string, unknown> {\n const quality = args[\"higher-intent\"] ?? args[\"optimized-for-quality\"];\n return {\n page_id: str(args[\"page-id\"]),\n name: str(args.name),\n locale: upper(args.locale),\n questionPageHeadline: str(args.headline),\n questions: questionsFromFlags(args, rawArgs),\n privacyPolicyUrl: str(args[\"privacy-policy-url\"]),\n privacyPolicyLinkText: str(args[\"privacy-link-text\"]),\n followUpActionUrl: str(args[\"follow-up-url\"]),\n optimizedForQuality: typeof quality === \"boolean\" ? quality : undefined,\n intro: introFromFlags(args, rawArgs),\n thankYou: thankYouFromFlags(args),\n sharing: str(args.sharing)?.toLowerCase(),\n smsVerification: args[\"sms-verification\"] === true ? true : undefined,\n trackingParameters: trackingFromFlags(args, rawArgs),\n };\n}\n\n/**\n * A `--file` form as staged. `lead-forms spec > form.json` writes the CLI's\n * `{ok, data, hints}` envelope, so the form is its `data`; a hand-written file\n * is the form itself.\n */\nexport function formFileForStaging(raw: Record<string, unknown>): Record<string, unknown> {\n const data = raw.ok === true && \"data\" in raw ? raw.data : raw;\n return data && typeof data === \"object\" && !Array.isArray(data) ? (data as Record<string, unknown>) : raw;\n}\n\n/** The screens a duplicate changes field by field, so a flag naming one field keeps the others. */\nconst SCREENS = [\"intro\", \"thankYou\"] as const;\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : undefined;\n}\n\n/** `over` on `base`, the intro and thank-you screens merged a field at a time. */\nfunction mergeOver(base: Record<string, unknown>, over: Record<string, unknown>): Record<string, unknown> {\n const merged = mergePayload(base, over);\n for (const screen of SCREENS) {\n const from = record(base[screen]);\n const to = record(over[screen]);\n if (from && to) merged[screen] = mergePayload(from, to);\n }\n return merged;\n}\n\n/**\n * A duplicate: the live form, then the `--file` changes over it, then the\n * flags over both. Forms are permanent, so the intro and thank-you screens\n * change only in the fields named — never wholesale.\n */\nexport function mergeDuplicateSpec(\n live: Record<string, unknown>,\n changes: Record<string, unknown>,\n flags: Record<string, unknown>,\n): Record<string, unknown> {\n return mergeOver(mergeOver(live, changes), flags);\n}\n\nconst FORM_FLAG_ARGS = {\n name: { type: \"string\", description: \"Form name — unique among the Page's forms (archived ones count)\" },\n locale: {\n type: \"string\",\n description:\n \"Form language, e.g. EN_US, ES_LA, PT_BR, FR_FR, DE_DE (Meta's 32) — Meta words its own questions in it\",\n },\n headline: { type: \"string\", description: \"Headline above the questions\" },\n questions: {\n type: \"string\",\n description:\n \"Questions Meta words itself, comma-separated: FULL_NAME,EMAIL,PHONE,WORK_EMAIL,COMPANY_NAME,JOB_TITLE,CITY,ZIP,DOB…\",\n },\n question: {\n type: \"string\",\n description: 'A custom question, repeatable: \"Question?\" or multiple choice \"Question? => Answer | Answer\"',\n },\n \"privacy-policy-url\": { type: \"string\", description: \"Public https privacy policy (required)\" },\n \"privacy-link-text\": { type: \"string\", description: \"Words of the privacy link (≤70, default Privacy Policy)\" },\n \"follow-up-url\": { type: \"string\", description: \"https link of the default View website button\" },\n \"higher-intent\": {\n type: \"boolean\",\n description: \"Higher intent: people review their answers before submitting (default: more volume)\",\n },\n \"optimized-for-quality\": { type: \"boolean\", description: \"Same as --higher-intent\" },\n \"intro-title\": { type: \"string\", description: \"Intro screen title\" },\n \"intro-text\": { type: \"string\", description: \"Intro paragraph; repeat for bullet points\" },\n \"intro-button\": { type: \"string\", description: \"Intro screen button text\" },\n \"thank-you-title\": { type: \"string\", description: \"Thank-you screen title\" },\n \"thank-you-body\": { type: \"string\", description: \"Thank-you screen text\" },\n \"thank-you-button\": {\n type: \"string\",\n description: \"VIEW_WEBSITE|DOWNLOAD|BOOK_ON_WEBSITE|CALL_BUSINESS|WHATSAPP|P2B_MESSENGER|PROMO_CODE|NONE\",\n },\n \"thank-you-button-text\": { type: \"string\", description: \"Thank-you button text\" },\n \"thank-you-url\": { type: \"string\", description: \"Website the thank-you button opens\" },\n \"thank-you-phone\": { type: \"string\", description: \"CALL_BUSINESS: phone number, e.g. +14155550100\" },\n \"thank-you-country\": { type: \"string\", description: \"CALL_BUSINESS: the number's country, e.g. US\" },\n sharing: { type: \"string\", description: \"restricted (only people shown the ad, Meta's default) | open\" },\n \"sms-verification\": { type: \"boolean\", description: \"Confirm the PHONE answer with a text-message code\" },\n tracking: { type: \"string\", description: \"name=value Meta adds to every lead, repeatable\" },\n} as const;\n\nconst SCHEMA_FORM_ARGS = Object.fromEntries(\n Object.entries(FORM_FLAG_ARGS).map(([key, arg]) => [key, { ...arg, required: false }]),\n);\n\n// --- Create ---\n\nregisterSchema({\n command: \"ads.meta.lead-forms.create\",\n description:\n \"Start here to stage a Page-owned Meta Instant Form. The form is created only when this Session publishes, and it is permanent (Meta archives, never deletes). Use the returned meta_temp_* ref as --lead-form on a creative in the same Session. --file takes the whole spec (questions with keys, options, inlineContext; intro; disclaimer with checkboxes; thankYou; sharing; trackingParameters).\",\n args: {\n \"account-id\": { type: \"string\", description: \"Selected Meta ad account, act_<id>\", required: true },\n \"page-id\": {\n type: \"string\",\n description:\n \"Facebook Page that owns the form — choose one with this account in promotingAccountIds and hasPageAccessToken: true from `baker ads meta pages`\",\n required: true,\n },\n ...SCHEMA_FORM_ARGS,\n file: {\n type: \"string\",\n description: \"JSON file with the full form payload; flags override its keys\",\n required: false,\n },\n },\n});\n\nexport const leadFormsCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage a Meta Instant Form on a Facebook Page. ${STAGED_NOTE} The form is permanent once published (archive it to retire it).\nChoose a Page with this account in promotingAccountIds and hasPageAccessToken: true from \\`baker ads meta pages\\`.\nExample: baker ads meta lead-forms create --account-id act_123 --page-id 456 --name \"Free audit\" --questions FULL_NAME,EMAIL,PHONE --question \"Budget? => Under 1k | 1k+\" --privacy-policy-url https://example.com/privacy --follow-up-url https://example.com\nFull spec: --file form.json (see \\`baker schema ads.meta.lead-forms.create\\` and the ads-meta tool doc).`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"Selected Meta ad account\" },\n \"page-id\": { type: \"string\", description: \"Facebook Page ID\" },\n ...FORM_FLAG_ARGS,\n file: { type: \"string\", description: \"JSON form payload; flags override file keys\" },\n },\n run: async ({ args, rawArgs }) => {\n const accountId = bareAccountId(args as Args);\n const payload = mergePayload(\n formFileForStaging(loadJsonFileArg(args.file)),\n leadFormPayloadFromFlags(args as Args, rawArgs),\n );\n await stageOp({ kind: \"leadForm.create\", accountId, payload }, [\n \"An ad opens it with `creatives create --cta SIGN_UP --lead-form <ref>` into an ad set with destination ON_AD.\",\n ]);\n },\n});\n\n// --- Spec + duplicate ---\n\ninterface FormSpec {\n spec: Record<string, unknown>;\n notCopied: string[];\n status?: string;\n}\n\nregisterSchema({\n command: \"ads.meta.lead-forms.spec\",\n description:\n \"Read a live Instant Form as the exact payload `lead-forms create --file` takes — the starting point for a changed copy. Lists what could not be carried over.\",\n args: { id: { type: \"positional\", description: \"Instant Form id\", required: true } },\n});\n\nexport const leadFormsSpecCommand = defineCommand({\n meta: {\n name: \"spec\",\n description: `A live form as the payload \\`lead-forms create --file\\` / \\`lead-forms duplicate --file\\` take.\nExample: baker ads meta lead-forms spec 1460955752594831 > form.json`,\n },\n args: { id: { type: \"positional\", description: \"Instant Form id\", required: true } },\n run: async ({ args }) => {\n try {\n const data = await apiGet<FormSpec>(\"/api/ads/meta/lead-forms/spec\", { \"form-id\": String(args.id) });\n writeJsonEnvelope({\n ok: true,\n data: data.spec,\n ...(data.notCopied.length > 0 ? { hints: [`Not carried over: ${data.notCopied.join(\"; \")}`] } : {}),\n });\n } catch (err) {\n handleMetaError(err);\n }\n },\n});\n\nregisterSchema({\n command: \"ads.meta.lead-forms.duplicate\",\n description:\n \"Stage a NEW Instant Form copied from a live one, with changes — the only way Meta lets a form change (it keeps a form's questions, texts and settings as made). --file holds the changed keys; flags override both. Point ads at the copy, then archive the original.\",\n args: {\n id: { type: \"positional\", description: \"Instant Form id to copy\", required: true },\n \"account-id\": { type: \"string\", description: \"Selected Meta ad account, act_<id>\", required: true },\n ...SCHEMA_FORM_ARGS,\n name: { type: \"string\", description: \"Name of the copy — unique on the Page\", required: true },\n file: { type: \"string\", description: \"JSON with the keys to change (same shape as create)\", required: false },\n },\n});\n\nexport const leadFormsDuplicateCommand = defineCommand({\n meta: {\n name: \"duplicate\",\n description: `Stage a changed copy of a live Instant Form (Meta changes nothing on an existing form). ${STAGED_NOTE}\nExample: baker ads meta lead-forms duplicate 1460955752594831 --account-id act_123 --name \"Free audit (ES)\" --locale ES_LA\nThen point the ads at the copy (\\`creatives create --lead-form <ref>\\`) and \\`lead-forms archive <old id>\\`.`,\n },\n args: {\n id: { type: \"positional\", description: \"Instant Form id to copy\", required: true },\n \"account-id\": { type: \"string\", description: \"Selected Meta ad account\" },\n ...FORM_FLAG_ARGS,\n file: { type: \"string\", description: \"JSON with the keys to change\" },\n },\n run: async ({ args, rawArgs }) => {\n const accountId = bareAccountId(args as Args);\n if (!str(args.name)) failWriteValidation(\"--name is required: Meta refuses a second form with the same name\");\n let source: FormSpec;\n try {\n source = await apiGet<FormSpec>(\"/api/ads/meta/lead-forms/spec\", { \"form-id\": String(args.id) });\n } catch (err) {\n handleMetaError(err);\n }\n const flags = leadFormPayloadFromFlags(args as Args, rawArgs);\n const payload = mergeDuplicateSpec(source.spec, formFileForStaging(loadJsonFileArg(args.file)), flags);\n const notCopied = source.notCopied.length > 0 ? [`Not carried over: ${source.notCopied.join(\"; \")}`] : [];\n await stageOp({ kind: \"leadForm.create\", accountId, payload }, [\n ...notCopied,\n `Point the ads at the copy, then \\`baker ads meta lead-forms archive ${String(args.id)}\\` to retire the original.`,\n ]);\n },\n});\n\n// --- Archive / unarchive ---\n\nfunction statusCommand(name: \"archive\" | \"unarchive\", status: \"ARCHIVED\" | \"ACTIVE\", description: string) {\n registerSchema({\n command: `ads.meta.lead-forms.${name}`,\n description,\n args: {\n id: { type: \"positional\", description: \"Instant Form id\", required: true },\n \"account-id\": { type: \"string\", description: \"Ad account the change is staged under\", required: true },\n },\n });\n return defineCommand({\n meta: {\n name,\n description: `${description} ${STAGED_NOTE}\nExample: baker ads meta lead-forms ${name} 1460955752594831 --account-id act_123`,\n },\n args: {\n id: { type: \"positional\", description: \"Instant Form id\", required: true },\n \"account-id\": { type: \"string\", description: \"Numeric account ID or act_N\" },\n },\n run: async ({ args }) => {\n await stageOp({\n kind: \"leadForm.update\",\n accountId: bareAccountId(args as Args),\n target: requireTarget(args as Args, \"Instant Form\"),\n payload: { status },\n });\n },\n });\n}\n\nexport const leadFormsArchiveCommand = statusCommand(\n \"archive\",\n \"ARCHIVED\",\n \"Archive an Instant Form: it leaves the Page's form library and no ad can use it. Meta never deletes a form; this is how one is retired.\",\n);\n\nexport const leadFormsUnarchiveCommand = statusCommand(\n \"unarchive\",\n \"ACTIVE\",\n \"Bring an archived Instant Form back so ads can use it again.\",\n);\n"],"mappings":"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","names":["defineCommand","defineCommand"]}
@@ -0,0 +1,207 @@
1
+ import {
2
+ parseDays,
3
+ withDefinitions
4
+ } from "./chunk-USCADMM3.js";
5
+ import {
6
+ setDefinitionFields
7
+ } from "./chunk-YNYAT2TZ.js";
8
+ import {
9
+ IDEAS_DIR,
10
+ readIdeas
11
+ } from "./chunk-SWN6OHXG.js";
12
+ import "./chunk-A3IQAONL.js";
13
+ import "./chunk-QPESDKZC.js";
14
+ import "./chunk-E44NXCTL.js";
15
+ import {
16
+ findWorkspaceRoot
17
+ } from "./chunk-EJGAJHLB.js";
18
+ import "./chunk-LRV6M2WB.js";
19
+ import "./chunk-MCJ5I5LR.js";
20
+ import "./chunk-LNNTHEL7.js";
21
+ import "./chunk-FOMFU2RX.js";
22
+ import "./chunk-PSGIHSNC.js";
23
+ import "./chunk-PONLPYD7.js";
24
+ import {
25
+ failApi
26
+ } from "./chunk-UDIEKCIR.js";
27
+ import "./chunk-PC3FJEZH.js";
28
+ import "./chunk-CAZGM2NX.js";
29
+ import "./chunk-NZS3KEQ2.js";
30
+ import "./chunk-GIWHHCD6.js";
31
+ import "./chunk-SOPVIIUW.js";
32
+ import "./chunk-G4FG5EQO.js";
33
+ import "./chunk-NSBNIPIW.js";
34
+ import "./chunk-46YLDIQG.js";
35
+ import {
36
+ apiPost
37
+ } from "./chunk-X7VQFLHI.js";
38
+ import "./chunk-LU4HI4KI.js";
39
+ import "./chunk-LGK7UWBN.js";
40
+ import {
41
+ registerSchema,
42
+ writeJson
43
+ } from "./chunk-Q7US4OOA.js";
44
+ import "./chunk-YQSBHWOI.js";
45
+
46
+ // src/commands/creatives/learn.ts
47
+ import { readFileSync } from "fs";
48
+ import { readFile, writeFile } from "fs/promises";
49
+ import path from "path";
50
+ import { defineCommand } from "citty";
51
+
52
+ // src/commands/creatives/learn-model.ts
53
+ var MIN_IMPRESSIONS = 1e3;
54
+ var SEEN_ENOUGH = 5e3;
55
+ var WINNER_RATIO = 0.8;
56
+ var WINNER_MIN_RESULTS = 3;
57
+ var FAILED_RATIO = 1.5;
58
+ var SILENT_SPEND = 2;
59
+ var SETTLED = /* @__PURE__ */ new Set(["winner", "failed", "inconclusive"]);
60
+ var round = (n) => Math.round(n * 100) / 100;
61
+ function totals(creatives) {
62
+ const spend = creatives.reduce((sum, c) => sum + c.spend, 0);
63
+ const impressions = creatives.reduce((sum, c) => sum + c.impressions, 0);
64
+ const results = creatives.reduce((sum, c) => sum + (c.results ?? 0), 0);
65
+ const clicks = creatives.reduce((sum, c) => sum + (c.ctr ?? 0) * c.impressions, 0);
66
+ return { spend, impressions, results, ctr: impressions > 0 ? round(clicks / impressions) : null };
67
+ }
68
+ function verdict(result, usual) {
69
+ if (result.impressions < MIN_IMPRESSIONS) return "testing";
70
+ if (usual !== null) {
71
+ if (result.results === 0 && result.spend >= SILENT_SPEND * usual) return "failed";
72
+ const ratio = result.vsAccount;
73
+ if (ratio !== null && result.results >= WINNER_MIN_RESULTS && ratio <= WINNER_RATIO) return "winner";
74
+ if (ratio !== null && ratio >= FAILED_RATIO) return "failed";
75
+ }
76
+ return result.impressions >= SEEN_ENOUGH ? "inconclusive" : "testing";
77
+ }
78
+ function ideaResult(own, usual, asOf) {
79
+ const mine = totals(own);
80
+ const costPerResult = mine.results > 0 ? round(mine.spend / mine.results) : null;
81
+ return {
82
+ asOf,
83
+ creatives: own.length,
84
+ ...own[0]?.currency ? { currency: own[0].currency } : {},
85
+ spend: round(mine.spend),
86
+ impressions: mine.impressions,
87
+ results: mine.results,
88
+ costPerResult,
89
+ ctr: mine.ctr,
90
+ vsAccount: usual !== null && costPerResult !== null ? round(costPerResult / usual) : null
91
+ };
92
+ }
93
+ function learnFromResults(ideas, creatives, asOf) {
94
+ const ideaOf = (c) => c.definition?.idea ?? null;
95
+ return ideas.flatMap((idea) => {
96
+ if (idea.status === "idea" || idea.status === "retired") return [];
97
+ const own = creatives.filter((c) => ideaOf(c) === idea.id);
98
+ if (own.length === 0) return [];
99
+ const rest = totals(creatives.filter((c) => ideaOf(c) !== idea.id));
100
+ const usual = rest.results > 0 ? rest.spend / rest.results : null;
101
+ const result = ideaResult(own, usual, asOf);
102
+ const to = verdict(result, usual);
103
+ if (to === "testing" && SETTLED.has(idea.status)) return [];
104
+ return [{ idea: idea.id, from: idea.status, to, result }];
105
+ });
106
+ }
107
+
108
+ // src/commands/creatives/learn.ts
109
+ var DESCRIPTION = `Write back what each built idea's ads did in the live Meta account: every creative of the idea pooled, judged against the rest of the account's cost per result, and the verdict (winner, failed, inconclusive, testing) and frozen numbers written onto src/creatives/_ideas/<idea>.md. Run it before writing new ideas, and weekly.
110
+
111
+ Start here:
112
+ baker creatives learn # last 30 days, written onto the ideas
113
+ baker creatives learn --days 60
114
+ baker creatives learn --dry-run # show the verdicts, write nothing
115
+
116
+ A winner gets results at 0.8x the usual cost or less (3+ results); failed is 1.5x or more, or spend worth two usual results with none; under 1,000 impressions it is still testing.`;
117
+ var ARGS = {
118
+ days: { type: "string", required: false, description: "Reporting window in days (default 30)" },
119
+ "dry-run": { type: "boolean", required: false, default: false, description: "Show the verdicts; write nothing" }
120
+ };
121
+ registerSchema({ command: "creatives.learn", description: DESCRIPTION, args: ARGS });
122
+ function learnEnvelope(learnings, written, unreadable = []) {
123
+ const winners = learnings.filter((l) => l.to === "winner").map((l) => l.idea);
124
+ const failed = learnings.filter((l) => l.to === "failed").map((l) => l.idea);
125
+ const hints = [];
126
+ if (unreadable.length > 0) {
127
+ hints.push(
128
+ `Could not read ${unreadable.join(", ")}, so their results were not written: fix what \`baker creatives ideas\` names, then run this again.`
129
+ );
130
+ }
131
+ if (learnings.length === 0) {
132
+ hints.push(
133
+ "No built idea has ads delivering yet: nothing to learn. Ideas count once a published ad shows their creative."
134
+ );
135
+ }
136
+ if (winners.length > 0) {
137
+ hints.push(
138
+ `Build on ${winners.join(", ")}: keep the message and make it in a new format or for a new persona before any new idea.`
139
+ );
140
+ }
141
+ if (failed.length > 0) {
142
+ hints.push(
143
+ `${failed.join(", ")} lost: never repeat their message; \`baker creatives ideas\` flags an idea that does.`
144
+ );
145
+ }
146
+ return {
147
+ ok: true,
148
+ data: {
149
+ written,
150
+ ideas: learnings.map((l) => ({
151
+ idea: l.idea,
152
+ status: l.from === l.to ? l.to : `${l.from} \u2192 ${l.to}`,
153
+ ...l.result
154
+ }))
155
+ },
156
+ hints
157
+ };
158
+ }
159
+ async function writeBack(root, learnings) {
160
+ for (const learning of learnings) {
161
+ const file = path.join(root, IDEAS_DIR, `${learning.idea}.md`);
162
+ const raw = await readFile(file, "utf8");
163
+ await writeFile(file, setDefinitionFields(raw, { status: learning.to, result: learning.result }), "utf8");
164
+ }
165
+ }
166
+ function readDefinition(root, slug) {
167
+ try {
168
+ return readFileSync(path.join(root, "src", "creatives", slug, "_definition.md"), "utf8");
169
+ } catch {
170
+ return null;
171
+ }
172
+ }
173
+ function today() {
174
+ return (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
175
+ }
176
+ var learnCommand = defineCommand({
177
+ meta: { name: "learn", description: DESCRIPTION },
178
+ args: ARGS,
179
+ async run({ args }) {
180
+ try {
181
+ const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();
182
+ const days = parseDays(args.days);
183
+ const performance = withDefinitions(
184
+ await apiPost("/api/creatives/performance", days ? { days } : {}),
185
+ (slug) => readDefinition(root, slug)
186
+ );
187
+ const { ideas, unreadable } = await readIdeas(root);
188
+ const learnings = learnFromResults(ideas, performance.data.creatives, today());
189
+ const dryRun = args["dry-run"] === true;
190
+ if (!dryRun) await writeBack(root, learnings);
191
+ writeJson(
192
+ learnEnvelope(
193
+ learnings,
194
+ !dryRun && learnings.length > 0,
195
+ unreadable.map((u) => u.id)
196
+ )
197
+ );
198
+ } catch (err) {
199
+ failApi(err);
200
+ }
201
+ }
202
+ });
203
+ export {
204
+ learnCommand,
205
+ learnEnvelope
206
+ };
207
+ //# sourceMappingURL=learn-NBBJRMVZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/creatives/learn.ts","../src/commands/creatives/learn-model.ts"],"sourcesContent":["/**\n * `baker creatives learn`: what the ads each idea became did in the live account, written back\n * onto the idea (its `status` and a frozen `result`), so the next chat builds on winners and\n * never repeats a message that lost.\n */\nimport { readFileSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { CreativesPerformanceResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi } from \"../actions/shared.ts\";\nimport { findWorkspaceRoot } from \"../canvas/normalize-paths.ts\";\nimport { IDEAS_DIR, readIdeas } from \"./ideas-workspace.ts\";\nimport { type IdeaLearning, learnFromResults } from \"./learn-model.ts\";\nimport { setDefinitionFields } from \"./make-model.ts\";\nimport { parseDays, withDefinitions } from \"./performance.ts\";\n\nconst DESCRIPTION = `Write back what each built idea's ads did in the live Meta account: every creative of the idea pooled, judged against the rest of the account's cost per result, and the verdict (winner, failed, inconclusive, testing) and frozen numbers written onto src/creatives/_ideas/<idea>.md. Run it before writing new ideas, and weekly.\n\nStart here:\n baker creatives learn # last 30 days, written onto the ideas\n baker creatives learn --days 60\n baker creatives learn --dry-run # show the verdicts, write nothing\n\nA winner gets results at 0.8x the usual cost or less (3+ results); failed is 1.5x or more, or spend worth two usual results with none; under 1,000 impressions it is still testing.`;\n\nconst ARGS = {\n days: { type: \"string\", required: false, description: \"Reporting window in days (default 30)\" },\n \"dry-run\": { type: \"boolean\", required: false, default: false, description: \"Show the verdicts; write nothing\" },\n} as const;\n\nregisterSchema({ command: \"creatives.learn\", description: DESCRIPTION, args: ARGS });\n\n/** What the agent reads, and what to do with winners and losers. Pure. */\nexport function learnEnvelope(\n learnings: readonly IdeaLearning[],\n written: boolean,\n unreadable: readonly string[] = [],\n) {\n const winners = learnings.filter((l) => l.to === \"winner\").map((l) => l.idea);\n const failed = learnings.filter((l) => l.to === \"failed\").map((l) => l.idea);\n const hints: string[] = [];\n if (unreadable.length > 0) {\n hints.push(\n `Could not read ${unreadable.join(\", \")}, so their results were not written: fix what \\`baker creatives ideas\\` names, then run this again.`,\n );\n }\n if (learnings.length === 0) {\n hints.push(\n \"No built idea has ads delivering yet: nothing to learn. Ideas count once a published ad shows their creative.\",\n );\n }\n if (winners.length > 0) {\n hints.push(\n `Build on ${winners.join(\", \")}: keep the message and make it in a new format or for a new persona before any new idea.`,\n );\n }\n if (failed.length > 0) {\n hints.push(\n `${failed.join(\", \")} lost: never repeat their message; \\`baker creatives ideas\\` flags an idea that does.`,\n );\n }\n return {\n ok: true as const,\n data: {\n written,\n ideas: learnings.map((l) => ({\n idea: l.idea,\n status: l.from === l.to ? l.to : `${l.from} → ${l.to}`,\n ...l.result,\n })),\n },\n hints,\n };\n}\n\nasync function writeBack(root: string, learnings: readonly IdeaLearning[]): Promise<void> {\n for (const learning of learnings) {\n const file = path.join(root, IDEAS_DIR, `${learning.idea}.md`);\n const raw = await readFile(file, \"utf8\");\n await writeFile(file, setDefinitionFields(raw, { status: learning.to, result: learning.result }), \"utf8\");\n }\n}\n\nfunction readDefinition(root: string, slug: string): string | null {\n try {\n return readFileSync(path.join(root, \"src\", \"creatives\", slug, \"_definition.md\"), \"utf8\");\n } catch {\n return null;\n }\n}\n\nfunction today(): string {\n return new Date().toISOString().slice(0, 10);\n}\n\nexport const learnCommand = defineCommand({\n meta: { name: \"learn\", description: DESCRIPTION },\n args: ARGS,\n async run({ args }) {\n try {\n const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();\n const days = parseDays(args.days as string | undefined);\n const performance = withDefinitions(\n await apiPost<CreativesPerformanceResponse>(\"/api/creatives/performance\", days ? { days } : {}),\n (slug) => readDefinition(root, slug),\n );\n const { ideas, unreadable } = await readIdeas(root);\n const learnings = learnFromResults(ideas, performance.data.creatives, today());\n const dryRun = args[\"dry-run\"] === true;\n if (!dryRun) await writeBack(root, learnings);\n writeJson(\n learnEnvelope(\n learnings,\n !dryRun && learnings.length > 0,\n unreadable.map((u) => u.id),\n ),\n );\n } catch (err) {\n failApi(err);\n }\n },\n});\n","/**\n * What the ads an idea became did, written back onto the idea: `baker creatives learn` turns\n * performance into a verdict per idea, so the next chat starts from what won and what lost\n * instead of from zero. Pure.\n */\nimport type { CreativePerformance } from \"@baker/api\";\nimport type { Idea, IdeaStatus } from \"./ideas-model.ts\";\n\n/** Below this many impressions an idea has not been seen enough to call. */\nconst MIN_IMPRESSIONS = 1000;\n/** Seen this much with no clear verdict, an idea is inconclusive rather than still testing. */\nconst SEEN_ENOUGH = 5000;\n/** At or under this share of the account's usual cost per result, with enough results: a winner. */\nconst WINNER_RATIO = 0.8;\nconst WINNER_MIN_RESULTS = 3;\n/** At or over this share of the usual cost per result: failed. */\nconst FAILED_RATIO = 1.5;\n/** Spending this many usual results' worth with none: failed. */\nconst SILENT_SPEND = 2;\n/** Verdicts a thin window never takes back: too little delivery says nothing new about them. */\nconst SETTLED: ReadonlySet<IdeaStatus> = new Set([\"winner\", \"failed\", \"inconclusive\"]);\n\nexport type IdeaResult = {\n asOf: string;\n creatives: number;\n currency?: string;\n spend: number;\n impressions: number;\n results: number;\n costPerResult: number | null;\n ctr: number | null;\n /** Cost per result over the rest of the account's: 0.5 is half the usual cost. */\n vsAccount: number | null;\n};\n\nexport type IdeaLearning = { idea: string; from: IdeaStatus; to: IdeaStatus; result: IdeaResult };\n\nconst round = (n: number) => Math.round(n * 100) / 100;\n\nfunction totals(creatives: readonly CreativePerformance[]) {\n const spend = creatives.reduce((sum, c) => sum + c.spend, 0);\n const impressions = creatives.reduce((sum, c) => sum + c.impressions, 0);\n const results = creatives.reduce((sum, c) => sum + (c.results ?? 0), 0);\n const clicks = creatives.reduce((sum, c) => sum + (c.ctr ?? 0) * c.impressions, 0);\n return { spend, impressions, results, ctr: impressions > 0 ? round(clicks / impressions) : null };\n}\n\nfunction verdict(result: IdeaResult, usual: number | null): IdeaStatus {\n if (result.impressions < MIN_IMPRESSIONS) return \"testing\";\n if (usual !== null) {\n if (result.results === 0 && result.spend >= SILENT_SPEND * usual) return \"failed\";\n const ratio = result.vsAccount;\n if (ratio !== null && result.results >= WINNER_MIN_RESULTS && ratio <= WINNER_RATIO) return \"winner\";\n if (ratio !== null && ratio >= FAILED_RATIO) return \"failed\";\n }\n return result.impressions >= SEEN_ENOUGH ? \"inconclusive\" : \"testing\";\n}\n\n/** One idea's ads pooled into the numbers frozen on it, against the account's usual cost per result. */\nfunction ideaResult(own: readonly CreativePerformance[], usual: number | null, asOf: string): IdeaResult {\n const mine = totals(own);\n const costPerResult = mine.results > 0 ? round(mine.spend / mine.results) : null;\n return {\n asOf,\n creatives: own.length,\n ...(own[0]?.currency ? { currency: own[0].currency } : {}),\n spend: round(mine.spend),\n impressions: mine.impressions,\n results: mine.results,\n costPerResult,\n ctr: mine.ctr,\n vsAccount: usual !== null && costPerResult !== null ? round(costPerResult / usual) : null,\n };\n}\n\n/**\n * Each built idea's ads, pooled and judged against the rest of the account: cheaper results than\n * usual win, far dearer ones (or spend with none) fail. Ideas still to build, retired, with no\n * ad delivering, or already judged and seen too little since, are left alone.\n */\nexport function learnFromResults(\n ideas: readonly Idea[],\n creatives: readonly CreativePerformance[],\n asOf: string,\n): IdeaLearning[] {\n const ideaOf = (c: CreativePerformance) => c.definition?.idea ?? null;\n return ideas.flatMap((idea): IdeaLearning[] => {\n if (idea.status === \"idea\" || idea.status === \"retired\") return [];\n const own = creatives.filter((c) => ideaOf(c) === idea.id);\n if (own.length === 0) return [];\n const rest = totals(creatives.filter((c) => ideaOf(c) !== idea.id));\n const usual = rest.results > 0 ? rest.spend / rest.results : null;\n const result = ideaResult(own, usual, asOf);\n const to = verdict(result, usual);\n if (to === \"testing\" && SETTLED.has(idea.status)) return [];\n return [{ idea: idea.id, from: idea.status, to, result }];\n });\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,211 @@
1
+ import {
2
+ compact,
3
+ csvArg,
4
+ microsFromArg,
5
+ requireTarget,
6
+ requireTargets,
7
+ stageAccountId,
8
+ stageXOp,
9
+ stageXOps
10
+ } from "./chunk-OR6KVLI5.js";
11
+ import "./chunk-FIN4ZXGJ.js";
12
+ import "./chunk-7NF73SCB.js";
13
+ import "./chunk-ZRP7Y2DM.js";
14
+ import {
15
+ OBJECTIVES,
16
+ PLACEMENTS,
17
+ PRODUCT_TYPES
18
+ } from "./chunk-PC3FJEZH.js";
19
+ import "./chunk-CAZGM2NX.js";
20
+ import "./chunk-NZS3KEQ2.js";
21
+ import "./chunk-GIWHHCD6.js";
22
+ import "./chunk-SOPVIIUW.js";
23
+ import "./chunk-G4FG5EQO.js";
24
+ import "./chunk-NSBNIPIW.js";
25
+ import "./chunk-46YLDIQG.js";
26
+ import "./chunk-X7VQFLHI.js";
27
+ import "./chunk-LU4HI4KI.js";
28
+ import "./chunk-LGK7UWBN.js";
29
+ import {
30
+ registerSchema
31
+ } from "./chunk-Q7US4OOA.js";
32
+ import "./chunk-YQSBHWOI.js";
33
+
34
+ // src/commands/ads/x/line-item-writes.ts
35
+ import { defineCommand } from "citty";
36
+ registerSchema({
37
+ command: "ads.x.lineItems.create",
38
+ description: `Stage a new X ad group under a campaign. Objective, product type and campaign are fixed at create \u2014 X refuses to change any of them afterwards, so get them right here.
39
+ Objectives: ${OBJECTIVES.join(", ")}.`,
40
+ args: {
41
+ "account-id": { type: "string", description: "X Ads account ID", required: false },
42
+ "campaign-id": {
43
+ type: "string",
44
+ description: "Parent campaign id, or an x_temp_* ref staged in this draft",
45
+ required: true
46
+ },
47
+ name: { type: "string", description: "Ad group name", required: true },
48
+ objective: { type: "string", description: OBJECTIVES.join(" | "), required: true },
49
+ "product-type": { type: "string", description: PRODUCT_TYPES.join(" | "), required: false },
50
+ placements: { type: "string", description: `CSV of ${PLACEMENTS.join(", ")}`, required: false },
51
+ status: { type: "string", description: "ACTIVE | PAUSED | DRAFT (default PAUSED)", required: false },
52
+ "bid-strategy": { type: "string", description: "AUTO | MAX | TARGET", required: false },
53
+ bid: {
54
+ type: "string",
55
+ description: "Bid in account currency \u2014 required for MAX/TARGET, refused for AUTO",
56
+ required: false
57
+ },
58
+ "daily-budget": { type: "string", description: "Daily budget in account currency", required: false },
59
+ "total-budget": { type: "string", description: "Lifetime budget in account currency", required: false },
60
+ "start-time": { type: "string", description: "ISO 8601 start", required: false },
61
+ "end-time": { type: "string", description: "ISO 8601 end", required: false }
62
+ }
63
+ });
64
+ var lineItemsCreateCommand = defineCommand({
65
+ meta: {
66
+ name: "create",
67
+ description: `Stage a new ad group (applies when the chat is published).
68
+
69
+ Examples:
70
+ baker ads x line-items create --campaign-id oilf0 --name "Spain" --objective WEBSITE_CLICKS
71
+ baker ads x line-items create --campaign-id x_temp_abc --name "Spain" --objective REACH --bid-strategy MAX --bid 1.20`
72
+ },
73
+ args: {
74
+ "account-id": { type: "string", description: "X Ads account ID" },
75
+ "campaign-id": { type: "string", description: "Parent campaign id or x_temp_* ref", required: true },
76
+ name: { type: "string", description: "Ad group name", required: true },
77
+ objective: { type: "string", description: OBJECTIVES.join(" | "), required: true },
78
+ "product-type": { type: "string", description: PRODUCT_TYPES.join(" | ") },
79
+ placements: { type: "string", description: `CSV of ${PLACEMENTS.join(", ")}` },
80
+ status: { type: "string", description: "ACTIVE | PAUSED | DRAFT (default PAUSED)" },
81
+ "bid-strategy": { type: "string", description: "AUTO | MAX | TARGET" },
82
+ bid: { type: "string", description: "Bid in account currency" },
83
+ "daily-budget": { type: "string", description: "Daily budget in account currency" },
84
+ "total-budget": { type: "string", description: "Lifetime budget in account currency" },
85
+ "start-time": { type: "string", description: "ISO 8601 start" },
86
+ "end-time": { type: "string", description: "ISO 8601 end" }
87
+ },
88
+ run: async ({ args }) => {
89
+ const accountId = await stageAccountId(args);
90
+ await stageXOp({
91
+ kind: "lineItem.create",
92
+ accountId,
93
+ payload: compact({
94
+ campaignId: args["campaign-id"],
95
+ name: args.name,
96
+ objective: args.objective,
97
+ productType: args["product-type"],
98
+ placements: csvArg(args.placements),
99
+ entityStatus: args.status,
100
+ bidStrategy: args["bid-strategy"],
101
+ bidAmountLocalMicro: microsFromArg(args.bid, "--bid"),
102
+ dailyBudgetAmountLocalMicro: microsFromArg(args["daily-budget"], "--daily-budget"),
103
+ totalBudgetAmountLocalMicro: microsFromArg(args["total-budget"], "--total-budget"),
104
+ startTime: args["start-time"],
105
+ endTime: args["end-time"]
106
+ })
107
+ });
108
+ }
109
+ });
110
+ registerSchema({
111
+ command: "ads.x.lineItems.update",
112
+ description: "Stage a change to an existing X ad group. Objective, product type and campaign are absent on purpose \u2014 X treats all three as immutable after create.",
113
+ args: {
114
+ id: { type: "string", description: "Ad group id", required: true },
115
+ "account-id": { type: "string", description: "X Ads account ID", required: false },
116
+ name: { type: "string", description: "New name", required: false },
117
+ status: { type: "string", description: "ACTIVE | PAUSED", required: false },
118
+ placements: { type: "string", description: "CSV of placements", required: false },
119
+ "bid-strategy": { type: "string", description: "AUTO | MAX | TARGET", required: false },
120
+ bid: { type: "string", description: "Bid in account currency", required: false },
121
+ "daily-budget": { type: "string", description: "Daily budget in account currency", required: false },
122
+ "total-budget": { type: "string", description: "Lifetime budget in account currency", required: false },
123
+ "start-time": { type: "string", description: "ISO 8601 start", required: false },
124
+ "end-time": { type: "string", description: "ISO 8601 end", required: false }
125
+ }
126
+ });
127
+ var lineItemsUpdateCommand = defineCommand({
128
+ meta: {
129
+ name: "update",
130
+ description: `Stage a change to an ad group.
131
+
132
+ Examples:
133
+ baker ads x line-items update wiee9 --bid 1.50
134
+ baker ads x line-items update wiee9 --end-time 2026-12-31T00:00:00Z`
135
+ },
136
+ args: {
137
+ id: { type: "positional", description: "Ad group id", required: true },
138
+ "account-id": { type: "string", description: "X Ads account ID" },
139
+ name: { type: "string", description: "New name" },
140
+ status: { type: "string", description: "ACTIVE | PAUSED" },
141
+ placements: { type: "string", description: "CSV of placements" },
142
+ "bid-strategy": { type: "string", description: "AUTO | MAX | TARGET" },
143
+ bid: { type: "string", description: "Bid in account currency" },
144
+ "daily-budget": { type: "string", description: "Daily budget in account currency" },
145
+ "total-budget": { type: "string", description: "Lifetime budget in account currency" },
146
+ "start-time": { type: "string", description: "ISO 8601 start" },
147
+ "end-time": { type: "string", description: "ISO 8601 end" }
148
+ },
149
+ run: async ({ args }) => {
150
+ const accountId = await stageAccountId(args);
151
+ await stageXOp({
152
+ kind: "lineItem.update",
153
+ accountId,
154
+ target: requireTarget(args, "id"),
155
+ payload: compact({
156
+ name: args.name,
157
+ entityStatus: args.status,
158
+ placements: csvArg(args.placements),
159
+ bidStrategy: args["bid-strategy"],
160
+ bidAmountLocalMicro: microsFromArg(args.bid, "--bid"),
161
+ dailyBudgetAmountLocalMicro: microsFromArg(args["daily-budget"], "--daily-budget"),
162
+ totalBudgetAmountLocalMicro: microsFromArg(args["total-budget"], "--total-budget"),
163
+ startTime: args["start-time"],
164
+ endTime: args["end-time"]
165
+ })
166
+ });
167
+ }
168
+ });
169
+ function statusCommand(name, status) {
170
+ registerSchema({
171
+ command: `ads.x.lineItems.${name}`,
172
+ description: `Stage ${name === "pause" ? "a pause" : "a resume"} for one or more X ad groups. Pass every id in one call.`,
173
+ args: {
174
+ ids: { type: "string", description: "Ad group ids, comma-separated", required: true },
175
+ "account-id": { type: "string", description: "X Ads account ID", required: false }
176
+ }
177
+ });
178
+ return defineCommand({
179
+ meta: {
180
+ name,
181
+ description: `Stage ${name === "pause" ? "pausing" : "resuming"} ad groups.
182
+
183
+ Example:
184
+ baker ads x line-items ${name} wiee9,wo2sr`
185
+ },
186
+ args: {
187
+ ids: { type: "positional", description: "Ad group ids, comma-separated", required: true },
188
+ "account-id": { type: "string", description: "X Ads account ID" }
189
+ },
190
+ run: async ({ args }) => {
191
+ const accountId = await stageAccountId(args);
192
+ await stageXOps(
193
+ requireTargets(args, "ids").map((id) => ({
194
+ kind: "lineItem.update",
195
+ accountId,
196
+ target: id,
197
+ payload: { entityStatus: status }
198
+ }))
199
+ );
200
+ }
201
+ });
202
+ }
203
+ var lineItemsPauseCommand = statusCommand("pause", "PAUSED");
204
+ var lineItemsResumeCommand = statusCommand("resume", "ACTIVE");
205
+ export {
206
+ lineItemsCreateCommand,
207
+ lineItemsPauseCommand,
208
+ lineItemsResumeCommand,
209
+ lineItemsUpdateCommand
210
+ };
211
+ //# sourceMappingURL=line-item-writes-X3L5NQEH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/x/line-item-writes.ts"],"sourcesContent":["import { OBJECTIVES, PLACEMENTS, PRODUCT_TYPES } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport {\n compact,\n csvArg,\n microsFromArg,\n requireTarget,\n requireTargets,\n stageAccountId,\n stageXOp,\n stageXOps,\n} from \"./write-shared.ts\";\n\n/**\n * Staged ad-group (line item) writes. X calls them line items; X Ads Manager\n * and every marketer call them ad groups, so the help does too.\n */\n\nregisterSchema({\n command: \"ads.x.lineItems.create\",\n description: `Stage a new X ad group under a campaign. Objective, product type and campaign are fixed at create — X refuses to change any of them afterwards, so get them right here.\nObjectives: ${OBJECTIVES.join(\", \")}.`,\n args: {\n \"account-id\": { type: \"string\", description: \"X Ads account ID\", required: false },\n \"campaign-id\": {\n type: \"string\",\n description: \"Parent campaign id, or an x_temp_* ref staged in this draft\",\n required: true,\n },\n name: { type: \"string\", description: \"Ad group name\", required: true },\n objective: { type: \"string\", description: OBJECTIVES.join(\" | \"), required: true },\n \"product-type\": { type: \"string\", description: PRODUCT_TYPES.join(\" | \"), required: false },\n placements: { type: \"string\", description: `CSV of ${PLACEMENTS.join(\", \")}`, required: false },\n status: { type: \"string\", description: \"ACTIVE | PAUSED | DRAFT (default PAUSED)\", required: false },\n \"bid-strategy\": { type: \"string\", description: \"AUTO | MAX | TARGET\", required: false },\n bid: {\n type: \"string\",\n description: \"Bid in account currency — required for MAX/TARGET, refused for AUTO\",\n required: false,\n },\n \"daily-budget\": { type: \"string\", description: \"Daily budget in account currency\", required: false },\n \"total-budget\": { type: \"string\", description: \"Lifetime budget in account currency\", required: false },\n \"start-time\": { type: \"string\", description: \"ISO 8601 start\", required: false },\n \"end-time\": { type: \"string\", description: \"ISO 8601 end\", required: false },\n },\n});\n\nexport const lineItemsCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage a new ad group (applies when the chat is published).\n\nExamples:\n baker ads x line-items create --campaign-id oilf0 --name \"Spain\" --objective WEBSITE_CLICKS\n baker ads x line-items create --campaign-id x_temp_abc --name \"Spain\" --objective REACH --bid-strategy MAX --bid 1.20`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"X Ads account ID\" },\n \"campaign-id\": { type: \"string\", description: \"Parent campaign id or x_temp_* ref\", required: true },\n name: { type: \"string\", description: \"Ad group name\", required: true },\n objective: { type: \"string\", description: OBJECTIVES.join(\" | \"), required: true },\n \"product-type\": { type: \"string\", description: PRODUCT_TYPES.join(\" | \") },\n placements: { type: \"string\", description: `CSV of ${PLACEMENTS.join(\", \")}` },\n status: { type: \"string\", description: \"ACTIVE | PAUSED | DRAFT (default PAUSED)\" },\n \"bid-strategy\": { type: \"string\", description: \"AUTO | MAX | TARGET\" },\n bid: { type: \"string\", description: \"Bid in account currency\" },\n \"daily-budget\": { type: \"string\", description: \"Daily budget in account currency\" },\n \"total-budget\": { type: \"string\", description: \"Lifetime budget in account currency\" },\n \"start-time\": { type: \"string\", description: \"ISO 8601 start\" },\n \"end-time\": { type: \"string\", description: \"ISO 8601 end\" },\n },\n run: async ({ args }) => {\n const accountId = await stageAccountId(args);\n await stageXOp({\n kind: \"lineItem.create\",\n accountId,\n payload: compact({\n campaignId: args[\"campaign-id\"],\n name: args.name,\n objective: args.objective,\n productType: args[\"product-type\"],\n placements: csvArg(args.placements),\n entityStatus: args.status,\n bidStrategy: args[\"bid-strategy\"],\n bidAmountLocalMicro: microsFromArg(args.bid, \"--bid\"),\n dailyBudgetAmountLocalMicro: microsFromArg(args[\"daily-budget\"], \"--daily-budget\"),\n totalBudgetAmountLocalMicro: microsFromArg(args[\"total-budget\"], \"--total-budget\"),\n startTime: args[\"start-time\"],\n endTime: args[\"end-time\"],\n }),\n });\n },\n});\n\nregisterSchema({\n command: \"ads.x.lineItems.update\",\n description:\n \"Stage a change to an existing X ad group. Objective, product type and campaign are absent on purpose — X treats all three as immutable after create.\",\n args: {\n id: { type: \"string\", description: \"Ad group id\", required: true },\n \"account-id\": { type: \"string\", description: \"X Ads account ID\", required: false },\n name: { type: \"string\", description: \"New name\", required: false },\n status: { type: \"string\", description: \"ACTIVE | PAUSED\", required: false },\n placements: { type: \"string\", description: \"CSV of placements\", required: false },\n \"bid-strategy\": { type: \"string\", description: \"AUTO | MAX | TARGET\", required: false },\n bid: { type: \"string\", description: \"Bid in account currency\", required: false },\n \"daily-budget\": { type: \"string\", description: \"Daily budget in account currency\", required: false },\n \"total-budget\": { type: \"string\", description: \"Lifetime budget in account currency\", required: false },\n \"start-time\": { type: \"string\", description: \"ISO 8601 start\", required: false },\n \"end-time\": { type: \"string\", description: \"ISO 8601 end\", required: false },\n },\n});\n\nexport const lineItemsUpdateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: `Stage a change to an ad group.\n\nExamples:\n baker ads x line-items update wiee9 --bid 1.50\n baker ads x line-items update wiee9 --end-time 2026-12-31T00:00:00Z`,\n },\n args: {\n id: { type: \"positional\", description: \"Ad group id\", required: true },\n \"account-id\": { type: \"string\", description: \"X Ads account ID\" },\n name: { type: \"string\", description: \"New name\" },\n status: { type: \"string\", description: \"ACTIVE | PAUSED\" },\n placements: { type: \"string\", description: \"CSV of placements\" },\n \"bid-strategy\": { type: \"string\", description: \"AUTO | MAX | TARGET\" },\n bid: { type: \"string\", description: \"Bid in account currency\" },\n \"daily-budget\": { type: \"string\", description: \"Daily budget in account currency\" },\n \"total-budget\": { type: \"string\", description: \"Lifetime budget in account currency\" },\n \"start-time\": { type: \"string\", description: \"ISO 8601 start\" },\n \"end-time\": { type: \"string\", description: \"ISO 8601 end\" },\n },\n run: async ({ args }) => {\n const accountId = await stageAccountId(args);\n await stageXOp({\n kind: \"lineItem.update\",\n accountId,\n target: requireTarget(args, \"id\"),\n payload: compact({\n name: args.name,\n entityStatus: args.status,\n placements: csvArg(args.placements),\n bidStrategy: args[\"bid-strategy\"],\n bidAmountLocalMicro: microsFromArg(args.bid, \"--bid\"),\n dailyBudgetAmountLocalMicro: microsFromArg(args[\"daily-budget\"], \"--daily-budget\"),\n totalBudgetAmountLocalMicro: microsFromArg(args[\"total-budget\"], \"--total-budget\"),\n startTime: args[\"start-time\"],\n endTime: args[\"end-time\"],\n }),\n });\n },\n});\n\nfunction statusCommand(name: \"pause\" | \"resume\", status: \"PAUSED\" | \"ACTIVE\") {\n registerSchema({\n command: `ads.x.lineItems.${name}`,\n description: `Stage ${name === \"pause\" ? \"a pause\" : \"a resume\"} for one or more X ad groups. Pass every id in one call.`,\n args: {\n ids: { type: \"string\", description: \"Ad group ids, comma-separated\", required: true },\n \"account-id\": { type: \"string\", description: \"X Ads account ID\", required: false },\n },\n });\n return defineCommand({\n meta: {\n name,\n description: `Stage ${name === \"pause\" ? \"pausing\" : \"resuming\"} ad groups.\n\nExample:\n baker ads x line-items ${name} wiee9,wo2sr`,\n },\n args: {\n ids: { type: \"positional\", description: \"Ad group ids, comma-separated\", required: true },\n \"account-id\": { type: \"string\", description: \"X Ads account ID\" },\n },\n run: async ({ args }) => {\n const accountId = await stageAccountId(args);\n await stageXOps(\n requireTargets(args, \"ids\").map((id) => ({\n kind: \"lineItem.update\",\n accountId,\n target: id,\n payload: { entityStatus: status },\n })),\n );\n },\n });\n}\n\nexport const lineItemsPauseCommand = statusCommand(\"pause\", \"PAUSED\");\nexport const lineItemsResumeCommand = statusCommand(\"resume\", \"ACTIVE\");\n"],"mappings":"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","names":[]}