@koda-sl/baker-cli 0.386.0-dev.8b1f99042 → 0.386.0-dev.d6e55699d

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 (968) hide show
  1. package/README.md +1091 -211
  2. package/canvas/tiktok-captions-composition/index.html +5 -6
  3. package/canvas/tiktok-captions-composition/meta.json +5 -0
  4. package/dist/account-5TGX45FO.js +79 -0
  5. package/dist/account-5TGX45FO.js.map +1 -0
  6. package/dist/account-CLOKMTTC.js +49 -0
  7. package/dist/account-CLOKMTTC.js.map +1 -0
  8. package/dist/account-XFK6VX2R.js +80 -0
  9. package/dist/account-XFK6VX2R.js.map +1 -0
  10. package/dist/account-reads-ZK5RMLB2.js +218 -0
  11. package/dist/account-reads-ZK5RMLB2.js.map +1 -0
  12. package/dist/account-writes-Y7EQXDXF.js +66 -0
  13. package/dist/account-writes-Y7EQXDXF.js.map +1 -0
  14. package/dist/accounts-7YD457YN.js +114 -0
  15. package/dist/accounts-7YD457YN.js.map +1 -0
  16. package/dist/accounts-BJ3X5JQT.js +115 -0
  17. package/dist/accounts-BJ3X5JQT.js.map +1 -0
  18. package/dist/accounts-HGAFFOA7.js +77 -0
  19. package/dist/accounts-HGAFFOA7.js.map +1 -0
  20. package/dist/accounts-OWMXUT6D.js +611 -0
  21. package/dist/accounts-OWMXUT6D.js.map +1 -0
  22. package/dist/accounts-RYBDLQ6H.js +75 -0
  23. package/dist/accounts-RYBDLQ6H.js.map +1 -0
  24. package/dist/actions-NSQYW7YS.js +55 -0
  25. package/dist/actions-NSQYW7YS.js.map +1 -0
  26. package/dist/active-entities-R6GZIO6Z.js +103 -0
  27. package/dist/active-entities-R6GZIO6Z.js.map +1 -0
  28. package/dist/activities-ESBF3GFS.js +74 -0
  29. package/dist/activities-ESBF3GFS.js.map +1 -0
  30. package/dist/ad-group-writes-I225OYDZ.js +170 -0
  31. package/dist/ad-group-writes-I225OYDZ.js.map +1 -0
  32. package/dist/ad-groups-O35MWNF6.js +68 -0
  33. package/dist/ad-groups-O35MWNF6.js.map +1 -0
  34. package/dist/ad-writes-SS5YZO5W.js +174 -0
  35. package/dist/ad-writes-SS5YZO5W.js.map +1 -0
  36. package/dist/add-HWIE5PGR.js +302 -0
  37. package/dist/add-HWIE5PGR.js.map +1 -0
  38. package/dist/add-IIW3NHZH.js +104 -0
  39. package/dist/add-IIW3NHZH.js.map +1 -0
  40. package/dist/add-QZHAWUBA.js +97 -0
  41. package/dist/add-QZHAWUBA.js.map +1 -0
  42. package/dist/add-TGQIVVXH.js +105 -0
  43. package/dist/add-TGQIVVXH.js.map +1 -0
  44. package/dist/add-accounts-6QYPOPR2.js +91 -0
  45. package/dist/add-accounts-6QYPOPR2.js.map +1 -0
  46. package/dist/ads-AUSRB4GU.js +128 -0
  47. package/dist/ads-AUSRB4GU.js.map +1 -0
  48. package/dist/ads-COYOTEKE.js +77 -0
  49. package/dist/ads-COYOTEKE.js.map +1 -0
  50. package/dist/ads-D6KKCQ3Q.js +40 -0
  51. package/dist/ads-D6KKCQ3Q.js.map +1 -0
  52. package/dist/ads-QKIHHXP5.js +113 -0
  53. package/dist/ads-QKIHHXP5.js.map +1 -0
  54. package/dist/adsets-7WMWU45E.js +176 -0
  55. package/dist/adsets-7WMWU45E.js.map +1 -0
  56. package/dist/advertisers-6NZ2M57X.js +120 -0
  57. package/dist/advertisers-6NZ2M57X.js.map +1 -0
  58. package/dist/advertisers-BCGKUMEH.js +125 -0
  59. package/dist/advertisers-BCGKUMEH.js.map +1 -0
  60. package/dist/analytics-QJC2BTZY.js +433 -0
  61. package/dist/analytics-QJC2BTZY.js.map +1 -0
  62. package/dist/analytics-SN6K7J7M.js +1980 -0
  63. package/dist/analytics-SN6K7J7M.js.map +1 -0
  64. package/dist/animate-JXIT77Y5.js +480 -0
  65. package/dist/animate-JXIT77Y5.js.map +1 -0
  66. package/dist/assign-XFDA42KL.js +77 -0
  67. package/dist/assign-XFDA42KL.js.map +1 -0
  68. package/dist/audience-size-DJPFYHPJ.js +94 -0
  69. package/dist/audience-size-DJPFYHPJ.js.map +1 -0
  70. package/dist/audiences-DC3IOG34.js +85 -0
  71. package/dist/audiences-DC3IOG34.js.map +1 -0
  72. package/dist/audiences-NEW3LLQR.js +268 -0
  73. package/dist/audiences-NEW3LLQR.js.map +1 -0
  74. package/dist/audiences-VXTIBZP6.js +78 -0
  75. package/dist/audiences-VXTIBZP6.js.map +1 -0
  76. package/dist/audit-M5B7TZGT.js +151 -0
  77. package/dist/audit-M5B7TZGT.js.map +1 -0
  78. package/dist/audit-UIPMTI5C.js +88 -0
  79. package/dist/audit-UIPMTI5C.js.map +1 -0
  80. package/dist/autocomplete-NWHEASQY.js +111 -0
  81. package/dist/autocomplete-NWHEASQY.js.map +1 -0
  82. package/dist/avatars-RNMUVMFM.js +38 -0
  83. package/dist/avatars-RNMUVMFM.js.map +1 -0
  84. package/dist/bid-pricing-EAY3HAHY.js +99 -0
  85. package/dist/bid-pricing-EAY3HAHY.js.map +1 -0
  86. package/dist/brand-XBHWYPMT.js +22 -0
  87. package/dist/brand-XBHWYPMT.js.map +1 -0
  88. package/dist/brief-XBAAPKRR.js +492 -0
  89. package/dist/brief-XBAAPKRR.js.map +1 -0
  90. package/dist/businesses-J7OP7MSK.js +53 -0
  91. package/dist/businesses-J7OP7MSK.js.map +1 -0
  92. package/dist/campaign-groups-7KA2RA5V.js +95 -0
  93. package/dist/campaign-groups-7KA2RA5V.js.map +1 -0
  94. package/dist/campaign-writes-5XA727KI.js +170 -0
  95. package/dist/campaign-writes-5XA727KI.js.map +1 -0
  96. package/dist/campaign-writes-D2UID2I6.js +165 -0
  97. package/dist/campaign-writes-D2UID2I6.js.map +1 -0
  98. package/dist/campaigns-JPYNVFQI.js +76 -0
  99. package/dist/campaigns-JPYNVFQI.js.map +1 -0
  100. package/dist/campaigns-NJ3KOPJS.js +107 -0
  101. package/dist/campaigns-NJ3KOPJS.js.map +1 -0
  102. package/dist/campaigns-QUTTH2TB.js +110 -0
  103. package/dist/campaigns-QUTTH2TB.js.map +1 -0
  104. package/dist/campaigns-SOO5RHYG.js +109 -0
  105. package/dist/campaigns-SOO5RHYG.js.map +1 -0
  106. package/dist/canvas-3VZ46BCF.js +46 -0
  107. package/dist/canvas-3VZ46BCF.js.map +1 -0
  108. package/dist/capabilities-KAYDPH7E.js +144 -0
  109. package/dist/capabilities-KAYDPH7E.js.map +1 -0
  110. package/dist/cards-7H32TNMO.js +85 -0
  111. package/dist/cards-7H32TNMO.js.map +1 -0
  112. package/dist/catalog-OTICZPJA.js +64 -0
  113. package/dist/catalog-OTICZPJA.js.map +1 -0
  114. package/dist/catalogs-ABCQLCDU.js +128 -0
  115. package/dist/catalogs-ABCQLCDU.js.map +1 -0
  116. package/dist/changes-22EO52IY.js +135 -0
  117. package/dist/changes-22EO52IY.js.map +1 -0
  118. package/dist/chatgpt-B3NHRJUE.js +47 -0
  119. package/dist/chatgpt-B3NHRJUE.js.map +1 -0
  120. package/dist/chats-QG3IRHOD.js +262 -0
  121. package/dist/chats-QG3IRHOD.js.map +1 -0
  122. package/dist/chunk-2CV7LX23.js +474 -0
  123. package/dist/chunk-2CV7LX23.js.map +1 -0
  124. package/dist/chunk-2SQJL7ZN.js +56 -0
  125. package/dist/chunk-2SQJL7ZN.js.map +1 -0
  126. package/dist/chunk-2Y5V23PU.js +29 -0
  127. package/dist/chunk-2Y5V23PU.js.map +1 -0
  128. package/dist/chunk-32CPGJPL.js +149 -0
  129. package/dist/chunk-32CPGJPL.js.map +1 -0
  130. package/dist/chunk-32PSERWG.js +363 -0
  131. package/dist/chunk-32PSERWG.js.map +1 -0
  132. package/dist/chunk-3ACMDRSE.js +39 -0
  133. package/dist/chunk-3ACMDRSE.js.map +1 -0
  134. package/dist/chunk-3UDSYYND.js +42 -0
  135. package/dist/chunk-3UDSYYND.js.map +1 -0
  136. package/dist/chunk-3V5E5SVE.js +382 -0
  137. package/dist/chunk-3V5E5SVE.js.map +1 -0
  138. package/dist/chunk-455BTAHM.js +57 -0
  139. package/dist/chunk-455BTAHM.js.map +1 -0
  140. package/dist/chunk-4MH6LONO.js +274 -0
  141. package/dist/chunk-4MH6LONO.js.map +1 -0
  142. package/dist/chunk-4NZ47VXO.js +137 -0
  143. package/dist/chunk-4NZ47VXO.js.map +1 -0
  144. package/dist/chunk-4OBO75XU.js +275 -0
  145. package/dist/chunk-4OBO75XU.js.map +1 -0
  146. package/dist/chunk-5HYSKH77.js +315 -0
  147. package/dist/chunk-5HYSKH77.js.map +1 -0
  148. package/dist/chunk-5MBPIONY.js +29 -0
  149. package/dist/chunk-5MBPIONY.js.map +1 -0
  150. package/dist/chunk-5OVOLYY3.js +74 -0
  151. package/dist/chunk-5OVOLYY3.js.map +1 -0
  152. package/dist/chunk-66USKCVY.js +4410 -0
  153. package/dist/chunk-66USKCVY.js.map +1 -0
  154. package/dist/chunk-6I7SYEYN.js +166 -0
  155. package/dist/chunk-6I7SYEYN.js.map +1 -0
  156. package/dist/chunk-6O7ISBC7.js +65 -0
  157. package/dist/chunk-6O7ISBC7.js.map +1 -0
  158. package/dist/chunk-752S7JF6.js +35 -0
  159. package/dist/chunk-752S7JF6.js.map +1 -0
  160. package/dist/chunk-AFJGYJ7Z.js +45 -0
  161. package/dist/chunk-AFJGYJ7Z.js.map +1 -0
  162. package/dist/chunk-AR7PU7BB.js +76 -0
  163. package/dist/chunk-AR7PU7BB.js.map +1 -0
  164. package/dist/chunk-ASL7JFBD.js +96 -0
  165. package/dist/chunk-ASL7JFBD.js.map +1 -0
  166. package/dist/chunk-AUCITRRT.js +310 -0
  167. package/dist/chunk-AUCITRRT.js.map +1 -0
  168. package/dist/chunk-AUSKKFVH.js +84 -0
  169. package/dist/chunk-AUSKKFVH.js.map +1 -0
  170. package/dist/chunk-BEGARAVC.js +174 -0
  171. package/dist/chunk-BEGARAVC.js.map +1 -0
  172. package/dist/{chunk-XHC4LMK4.js → chunk-BVM5IRZW.js} +16 -8
  173. package/dist/chunk-BVM5IRZW.js.map +1 -0
  174. package/dist/chunk-CAMX6OHF.js +3182 -0
  175. package/dist/chunk-CAMX6OHF.js.map +1 -0
  176. package/dist/chunk-CKI3RLMU.js +159 -0
  177. package/dist/chunk-CKI3RLMU.js.map +1 -0
  178. package/dist/chunk-CZENWCBS.js +333 -0
  179. package/dist/chunk-CZENWCBS.js.map +1 -0
  180. package/dist/chunk-D5FY4FAK.js +24 -0
  181. package/dist/chunk-D5FY4FAK.js.map +1 -0
  182. package/dist/chunk-DGCUPJZD.js +39 -0
  183. package/dist/chunk-DGCUPJZD.js.map +1 -0
  184. package/dist/chunk-DIICZGIS.js +509 -0
  185. package/dist/chunk-DIICZGIS.js.map +1 -0
  186. package/dist/chunk-DNCLWSHO.js +41 -0
  187. package/dist/chunk-DNCLWSHO.js.map +1 -0
  188. package/dist/chunk-DX4GIDO7.js +296 -0
  189. package/dist/chunk-DX4GIDO7.js.map +1 -0
  190. package/dist/chunk-DYZJBWT2.js +1079 -0
  191. package/dist/chunk-DYZJBWT2.js.map +1 -0
  192. package/dist/chunk-EDLZGTGN.js +216 -0
  193. package/dist/chunk-EDLZGTGN.js.map +1 -0
  194. package/dist/chunk-EDNX3AOS.js +76 -0
  195. package/dist/chunk-EDNX3AOS.js.map +1 -0
  196. package/dist/chunk-EF5DP6EB.js +52 -0
  197. package/dist/chunk-EF5DP6EB.js.map +1 -0
  198. package/dist/chunk-EQEZAYPL.js +541 -0
  199. package/dist/chunk-EQEZAYPL.js.map +1 -0
  200. package/dist/chunk-ERSX3MKH.js +34 -0
  201. package/dist/chunk-ERSX3MKH.js.map +1 -0
  202. package/dist/chunk-FKOECEVC.js +126 -0
  203. package/dist/chunk-FKOECEVC.js.map +1 -0
  204. package/dist/chunk-FYWWTMXP.js +2902 -0
  205. package/dist/chunk-FYWWTMXP.js.map +1 -0
  206. package/dist/chunk-G7AFVTUS.js +106 -0
  207. package/dist/chunk-G7AFVTUS.js.map +1 -0
  208. package/dist/chunk-GIW7ABMM.js +74 -0
  209. package/dist/chunk-GIW7ABMM.js.map +1 -0
  210. package/dist/chunk-GIWHHCD6.js +145 -0
  211. package/dist/chunk-GIWHHCD6.js.map +1 -0
  212. package/dist/chunk-GOJXKIFQ.js +1605 -0
  213. package/dist/chunk-GOJXKIFQ.js.map +1 -0
  214. package/dist/chunk-GPXIUYIA.js +592 -0
  215. package/dist/chunk-GPXIUYIA.js.map +1 -0
  216. package/dist/chunk-GRQ2AXDX.js +9 -0
  217. package/dist/chunk-GRQ2AXDX.js.map +1 -0
  218. package/dist/chunk-GXDLWBOY.js +73 -0
  219. package/dist/chunk-GXDLWBOY.js.map +1 -0
  220. package/dist/chunk-H7MLHG2I.js +94 -0
  221. package/dist/chunk-H7MLHG2I.js.map +1 -0
  222. package/dist/chunk-HAE4WWFQ.js +455 -0
  223. package/dist/chunk-HAE4WWFQ.js.map +1 -0
  224. package/dist/chunk-HB3LNR4Y.js +197 -0
  225. package/dist/chunk-HB3LNR4Y.js.map +1 -0
  226. package/dist/chunk-HDHWIEJJ.js +136 -0
  227. package/dist/chunk-HDHWIEJJ.js.map +1 -0
  228. package/dist/chunk-HJTIBTF7.js +98 -0
  229. package/dist/chunk-HJTIBTF7.js.map +1 -0
  230. package/dist/{chunk-VZEDAFAR.js → chunk-HLXWKMTK.js} +47 -8
  231. package/dist/chunk-HLXWKMTK.js.map +1 -0
  232. package/dist/{chunk-MF7YA62W.js → chunk-HREWXNTO.js} +10 -5
  233. package/dist/chunk-HREWXNTO.js.map +1 -0
  234. package/dist/chunk-HVJUMQYY.js +494 -0
  235. package/dist/chunk-HVJUMQYY.js.map +1 -0
  236. package/dist/chunk-I3DIZWN5.js +97 -0
  237. package/dist/chunk-I3DIZWN5.js.map +1 -0
  238. package/dist/chunk-IJMWEO4P.js +57 -0
  239. package/dist/chunk-IJMWEO4P.js.map +1 -0
  240. package/dist/chunk-IMORFIUT.js +207 -0
  241. package/dist/chunk-IMORFIUT.js.map +1 -0
  242. package/dist/chunk-IOCSDFF2.js +23992 -0
  243. package/dist/chunk-IOCSDFF2.js.map +1 -0
  244. package/dist/chunk-IRTYTT5D.js +665 -0
  245. package/dist/chunk-IRTYTT5D.js.map +1 -0
  246. package/dist/chunk-IVIJJXXT.js +62 -0
  247. package/dist/chunk-IVIJJXXT.js.map +1 -0
  248. package/dist/chunk-J57GWTPK.js +106 -0
  249. package/dist/chunk-J57GWTPK.js.map +1 -0
  250. package/dist/chunk-JAYT43KX.js +4227 -0
  251. package/dist/chunk-JAYT43KX.js.map +1 -0
  252. package/dist/chunk-JPK34QPS.js +134 -0
  253. package/dist/chunk-JPK34QPS.js.map +1 -0
  254. package/dist/chunk-JRCFCIE3.js +188 -0
  255. package/dist/chunk-JRCFCIE3.js.map +1 -0
  256. package/dist/chunk-JRGPCPT2.js +479 -0
  257. package/dist/chunk-JRGPCPT2.js.map +1 -0
  258. package/dist/chunk-JUAIGJ2A.js +76 -0
  259. package/dist/chunk-JUAIGJ2A.js.map +1 -0
  260. package/dist/chunk-K2RYUZ5Y.js +51 -0
  261. package/dist/chunk-K2RYUZ5Y.js.map +1 -0
  262. package/dist/chunk-K5OQES4V.js +58 -0
  263. package/dist/chunk-K5OQES4V.js.map +1 -0
  264. package/dist/chunk-KAHMADFH.js +455 -0
  265. package/dist/chunk-KAHMADFH.js.map +1 -0
  266. package/dist/chunk-KIGGMKAE.js +66 -0
  267. package/dist/chunk-KIGGMKAE.js.map +1 -0
  268. package/dist/chunk-KKJ4KJCW.js +29 -0
  269. package/dist/chunk-KKJ4KJCW.js.map +1 -0
  270. package/dist/chunk-KLK6KQLQ.js +55 -0
  271. package/dist/chunk-KLK6KQLQ.js.map +1 -0
  272. package/dist/chunk-KRIK2JR4.js +6212 -0
  273. package/dist/chunk-KRIK2JR4.js.map +1 -0
  274. package/dist/chunk-KZUHRZ2C.js +5187 -0
  275. package/dist/chunk-KZUHRZ2C.js.map +1 -0
  276. package/dist/chunk-L5WIRYNB.js +19 -0
  277. package/dist/chunk-L5WIRYNB.js.map +1 -0
  278. package/dist/chunk-LA6PPSNA.js +65 -0
  279. package/dist/chunk-LA6PPSNA.js.map +1 -0
  280. package/dist/chunk-LEIQAHWF.js +25 -0
  281. package/dist/chunk-LEIQAHWF.js.map +1 -0
  282. package/dist/chunk-LWBWCIWL.js +297 -0
  283. package/dist/chunk-LWBWCIWL.js.map +1 -0
  284. package/dist/chunk-M4PPFVYL.js +346 -0
  285. package/dist/chunk-M4PPFVYL.js.map +1 -0
  286. package/dist/chunk-M6UNISGO.js +66 -0
  287. package/dist/chunk-M6UNISGO.js.map +1 -0
  288. package/dist/chunk-MGKHFGLV.js +75 -0
  289. package/dist/chunk-MGKHFGLV.js.map +1 -0
  290. package/dist/chunk-MUVSWFLL.js +111 -0
  291. package/dist/chunk-MUVSWFLL.js.map +1 -0
  292. package/dist/chunk-NFSLRRIE.js +77 -0
  293. package/dist/chunk-NFSLRRIE.js.map +1 -0
  294. package/dist/chunk-NHU33T2S.js +60 -0
  295. package/dist/chunk-NHU33T2S.js.map +1 -0
  296. package/dist/chunk-O6QKCJE4.js +455 -0
  297. package/dist/chunk-O6QKCJE4.js.map +1 -0
  298. package/dist/chunk-OBNWER4H.js +1599 -0
  299. package/dist/chunk-OBNWER4H.js.map +1 -0
  300. package/dist/chunk-OFFAMC5H.js +225 -0
  301. package/dist/chunk-OFFAMC5H.js.map +1 -0
  302. package/dist/chunk-P4NSJS54.js +20 -0
  303. package/dist/chunk-P4NSJS54.js.map +1 -0
  304. package/dist/chunk-P5T7OZKV.js +26 -0
  305. package/dist/chunk-P5T7OZKV.js.map +1 -0
  306. package/dist/chunk-PAHLJMC3.js +175 -0
  307. package/dist/chunk-PAHLJMC3.js.map +1 -0
  308. package/dist/chunk-PBVLPFJ6.js +169 -0
  309. package/dist/chunk-PBVLPFJ6.js.map +1 -0
  310. package/dist/chunk-PFBQERWX.js +10 -0
  311. package/dist/chunk-PFBQERWX.js.map +1 -0
  312. package/dist/chunk-Q6ULQMWG.js +41 -0
  313. package/dist/chunk-Q6ULQMWG.js.map +1 -0
  314. package/dist/chunk-QKE7GXZ7.js +6683 -0
  315. package/dist/chunk-QKE7GXZ7.js.map +1 -0
  316. package/dist/chunk-QL573PLH.js +150 -0
  317. package/dist/chunk-QL573PLH.js.map +1 -0
  318. package/dist/chunk-QO23YHLK.js +84 -0
  319. package/dist/chunk-QO23YHLK.js.map +1 -0
  320. package/dist/chunk-R5OQM7FF.js +179 -0
  321. package/dist/chunk-R5OQM7FF.js.map +1 -0
  322. package/dist/chunk-RDLB54KF.js +629 -0
  323. package/dist/chunk-RDLB54KF.js.map +1 -0
  324. package/dist/chunk-RGIXQEGJ.js +502 -0
  325. package/dist/chunk-RGIXQEGJ.js.map +1 -0
  326. package/dist/chunk-RRIAHUWP.js +304 -0
  327. package/dist/chunk-RRIAHUWP.js.map +1 -0
  328. package/dist/chunk-S4LZ7KTG.js +160 -0
  329. package/dist/chunk-S4LZ7KTG.js.map +1 -0
  330. package/dist/chunk-SHTESUB6.js +1442 -0
  331. package/dist/chunk-SHTESUB6.js.map +1 -0
  332. package/dist/chunk-SLB46MSS.js +64 -0
  333. package/dist/chunk-SLB46MSS.js.map +1 -0
  334. package/dist/chunk-T7M4WFNV.js +172 -0
  335. package/dist/chunk-T7M4WFNV.js.map +1 -0
  336. package/dist/{chunk-VLUGGVJL.js → chunk-TPXI2GCW.js} +12 -4
  337. package/dist/chunk-TPXI2GCW.js.map +1 -0
  338. package/dist/chunk-TWNFQUBS.js +23 -0
  339. package/dist/chunk-TWNFQUBS.js.map +1 -0
  340. package/dist/chunk-U6VRBDNQ.js +1830 -0
  341. package/dist/chunk-U6VRBDNQ.js.map +1 -0
  342. package/dist/chunk-U7BBXM67.js +1743 -0
  343. package/dist/chunk-U7BBXM67.js.map +1 -0
  344. package/dist/chunk-UI6BKYQD.js +225 -0
  345. package/dist/chunk-UI6BKYQD.js.map +1 -0
  346. package/dist/chunk-USL5ARRE.js +26 -0
  347. package/dist/chunk-USL5ARRE.js.map +1 -0
  348. package/dist/chunk-UYC45JNS.js +139 -0
  349. package/dist/chunk-UYC45JNS.js.map +1 -0
  350. package/dist/chunk-V5GSRREZ.js +846 -0
  351. package/dist/chunk-V5GSRREZ.js.map +1 -0
  352. package/dist/chunk-V5HDRJQW.js +337 -0
  353. package/dist/chunk-V5HDRJQW.js.map +1 -0
  354. package/dist/chunk-VS4C7VAR.js +533 -0
  355. package/dist/chunk-VS4C7VAR.js.map +1 -0
  356. package/dist/chunk-W4W4ZRBP.js +191 -0
  357. package/dist/chunk-W4W4ZRBP.js.map +1 -0
  358. package/dist/chunk-WIRBRCTJ.js +228 -0
  359. package/dist/chunk-WIRBRCTJ.js.map +1 -0
  360. package/dist/chunk-WN4KX7GE.js +25 -0
  361. package/dist/chunk-WN4KX7GE.js.map +1 -0
  362. package/dist/chunk-WNFTXSGR.js +111 -0
  363. package/dist/chunk-WNFTXSGR.js.map +1 -0
  364. package/dist/chunk-WOTDHRNF.js +2109 -0
  365. package/dist/chunk-WOTDHRNF.js.map +1 -0
  366. package/dist/chunk-WPKOEFOE.js +103 -0
  367. package/dist/chunk-WPKOEFOE.js.map +1 -0
  368. package/dist/chunk-XE3WS3QE.js +183 -0
  369. package/dist/chunk-XE3WS3QE.js.map +1 -0
  370. package/dist/chunk-XGWKTYXQ.js +67 -0
  371. package/dist/chunk-XGWKTYXQ.js.map +1 -0
  372. package/dist/chunk-XIGIJJSF.js +66 -0
  373. package/dist/chunk-XIGIJJSF.js.map +1 -0
  374. package/dist/chunk-XNUXB63I.js +817 -0
  375. package/dist/chunk-XNUXB63I.js.map +1 -0
  376. package/dist/chunk-XQ3CCNJD.js +610 -0
  377. package/dist/chunk-XQ3CCNJD.js.map +1 -0
  378. package/dist/chunk-Y362QH54.js +98 -0
  379. package/dist/chunk-Y362QH54.js.map +1 -0
  380. package/dist/chunk-Y4HZNSBN.js +3151 -0
  381. package/dist/chunk-Y4HZNSBN.js.map +1 -0
  382. package/dist/chunk-Y4T6ATDQ.js +74 -0
  383. package/dist/chunk-Y4T6ATDQ.js.map +1 -0
  384. package/dist/chunk-YIMGUMXX.js +206 -0
  385. package/dist/chunk-YIMGUMXX.js.map +1 -0
  386. package/dist/chunk-YQSBHWOI.js +41 -0
  387. package/dist/chunk-YU26SDNT.js +46 -0
  388. package/dist/chunk-YU26SDNT.js.map +1 -0
  389. package/dist/chunk-YULENNA7.js +501 -0
  390. package/dist/chunk-YULENNA7.js.map +1 -0
  391. package/dist/chunk-YYSZYSAG.js +150 -0
  392. package/dist/chunk-YYSZYSAG.js.map +1 -0
  393. package/dist/chunk-Z3ENMCFE.js +94 -0
  394. package/dist/chunk-Z3ENMCFE.js.map +1 -0
  395. package/dist/chunk-ZCFSHQBF.js +92 -0
  396. package/dist/chunk-ZCFSHQBF.js.map +1 -0
  397. package/dist/chunk-ZH7ZM3ZM.js +125 -0
  398. package/dist/chunk-ZH7ZM3ZM.js.map +1 -0
  399. package/dist/chunk-ZIXHS6AM.js +42 -0
  400. package/dist/chunk-ZIXHS6AM.js.map +1 -0
  401. package/dist/chunk-ZLLJKSNS.js +96 -0
  402. package/dist/chunk-ZLLJKSNS.js.map +1 -0
  403. package/dist/claim-4AFNDV3A.js +197 -0
  404. package/dist/claim-4AFNDV3A.js.map +1 -0
  405. package/dist/cli.js +104 -69909
  406. package/dist/cli.js.map +1 -1
  407. package/dist/client-26SAJ46D.js +19 -0
  408. package/dist/code-MOWYJMDH.js +76 -0
  409. package/dist/code-MOWYJMDH.js.map +1 -0
  410. package/dist/companies-PZRRZZNV.js +195 -0
  411. package/dist/companies-PZRRZZNV.js.map +1 -0
  412. package/dist/complete-IBW5DNVZ.js +81 -0
  413. package/dist/complete-IBW5DNVZ.js.map +1 -0
  414. package/dist/config-X6GKOVQ6.js +88 -0
  415. package/dist/config-X6GKOVQ6.js.map +1 -0
  416. package/dist/connect-WYUYS5V4.js +42 -0
  417. package/dist/content-UYZC4AKN.js +85 -0
  418. package/dist/content-UYZC4AKN.js.map +1 -0
  419. package/dist/conversation-6AG3UBYY.js +93 -0
  420. package/dist/conversation-6AG3UBYY.js.map +1 -0
  421. package/dist/conversion-report-R4GJWWTK.js +125 -0
  422. package/dist/conversion-report-R4GJWWTK.js.map +1 -0
  423. package/dist/conversion-upload-command-YML2UNJB.js +438 -0
  424. package/dist/conversion-upload-command-YML2UNJB.js.map +1 -0
  425. package/dist/conversion-writes-WHFFUWWL.js +120 -0
  426. package/dist/conversion-writes-WHFFUWWL.js.map +1 -0
  427. package/dist/conversions-NOBBFNIU.js +135 -0
  428. package/dist/conversions-NOBBFNIU.js.map +1 -0
  429. package/dist/conversions-OXJAX5GB.js +76 -0
  430. package/dist/conversions-OXJAX5GB.js.map +1 -0
  431. package/dist/countries-PBXNB3BR.js +82 -0
  432. package/dist/countries-PBXNB3BR.js.map +1 -0
  433. package/dist/create-JK42P564.js +59 -0
  434. package/dist/create-JK42P564.js.map +1 -0
  435. package/dist/create-LAWUVPCY.js +207 -0
  436. package/dist/create-LAWUVPCY.js.map +1 -0
  437. package/dist/create-MUPQ5CTH.js +138 -0
  438. package/dist/create-MUPQ5CTH.js.map +1 -0
  439. package/dist/create-NQJNCFRO.js +236 -0
  440. package/dist/create-NQJNCFRO.js.map +1 -0
  441. package/dist/creatives-KCWFZIM5.js +182 -0
  442. package/dist/creatives-KCWFZIM5.js.map +1 -0
  443. package/dist/creatives-NNDWCSKJ.js +51 -0
  444. package/dist/creatives-NNDWCSKJ.js.map +1 -0
  445. package/dist/creatives-RHNHTS2R.js +87 -0
  446. package/dist/creatives-RHNHTS2R.js.map +1 -0
  447. package/dist/credentials-CEKGXR2C.js +287 -0
  448. package/dist/credentials-CEKGXR2C.js.map +1 -0
  449. package/dist/critique-HDDYER52.js +1449 -0
  450. package/dist/critique-HDDYER52.js.map +1 -0
  451. package/dist/critique-QIN2FO4F.js +216 -0
  452. package/dist/critique-QIN2FO4F.js.map +1 -0
  453. package/dist/crm-KBPWZC6J.js +318 -0
  454. package/dist/crm-KBPWZC6J.js.map +1 -0
  455. package/dist/crm-QBWD7CWB.js +224 -0
  456. package/dist/crm-QBWD7CWB.js.map +1 -0
  457. package/dist/crop-U3AD4DDR.js +113 -0
  458. package/dist/crop-U3AD4DDR.js.map +1 -0
  459. package/dist/currency-XTFGZFGB.js +88 -0
  460. package/dist/currency-XTFGZFGB.js.map +1 -0
  461. package/dist/custom-conversions-W3K33V33.js +125 -0
  462. package/dist/custom-conversions-W3K33V33.js.map +1 -0
  463. package/dist/customers-HYE7N2H5.js +56 -0
  464. package/dist/decide-YTHCBKM6.js +199 -0
  465. package/dist/decide-YTHCBKM6.js.map +1 -0
  466. package/dist/delete-64REPCY2.js +54 -0
  467. package/dist/delete-64REPCY2.js.map +1 -0
  468. package/dist/delete-AY3KL3N3.js +63 -0
  469. package/dist/delete-AY3KL3N3.js.map +1 -0
  470. package/dist/delete-DZUDLYPC.js +69 -0
  471. package/dist/delete-DZUDLYPC.js.map +1 -0
  472. package/dist/delete-NZGZP4YP.js +71 -0
  473. package/dist/delete-NZGZP4YP.js.map +1 -0
  474. package/dist/delete-VO2LZXE4.js +66 -0
  475. package/dist/delete-VO2LZXE4.js.map +1 -0
  476. package/dist/delete-VQMU56OH.js +71 -0
  477. package/dist/delete-VQMU56OH.js.map +1 -0
  478. package/dist/demographics-KOFLMGVW.js +138 -0
  479. package/dist/demographics-KOFLMGVW.js.map +1 -0
  480. package/dist/describe-JNTCQZNL.js +97 -0
  481. package/dist/describe-JNTCQZNL.js.map +1 -0
  482. package/dist/describe-MT4334NG.js +97 -0
  483. package/dist/describe-MT4334NG.js.map +1 -0
  484. package/dist/dimensions-FEZUJRAG.js +101 -0
  485. package/dist/dimensions-FEZUJRAG.js.map +1 -0
  486. package/dist/discard-H4RPXZHX.js +66 -0
  487. package/dist/discard-H4RPXZHX.js.map +1 -0
  488. package/dist/discover-4GD7QSF5.js +93 -0
  489. package/dist/discover-4GD7QSF5.js.map +1 -0
  490. package/dist/discover-L7OVXW4V.js +172 -0
  491. package/dist/discover-L7OVXW4V.js.map +1 -0
  492. package/dist/domain-HURQ23KR.js +98 -0
  493. package/dist/domain-HURQ23KR.js.map +1 -0
  494. package/dist/download-L27HWEOE.js +299 -0
  495. package/dist/download-L27HWEOE.js.map +1 -0
  496. package/dist/draft-25G2P2TE.js +281 -0
  497. package/dist/draft-25G2P2TE.js.map +1 -0
  498. package/dist/draft-5VH2PW3R.js +307 -0
  499. package/dist/draft-5VH2PW3R.js.map +1 -0
  500. package/dist/draft-D6UTKSAA.js +217 -0
  501. package/dist/draft-D6UTKSAA.js.map +1 -0
  502. package/dist/draft-KLULNBWP.js +233 -0
  503. package/dist/draft-KLULNBWP.js.map +1 -0
  504. package/dist/draft-MI7RWY2K.js +100 -0
  505. package/dist/draft-MI7RWY2K.js.map +1 -0
  506. package/dist/draft-P4IVYTY3.js +103 -0
  507. package/dist/draft-P4IVYTY3.js.map +1 -0
  508. package/dist/draft-UQYWDZS7.js +306 -0
  509. package/dist/draft-UQYWDZS7.js.map +1 -0
  510. package/dist/draft-YFAJHCKM.js +328 -0
  511. package/dist/draft-YFAJHCKM.js.map +1 -0
  512. package/dist/engine/index.d.ts +213 -127
  513. package/dist/engine/index.js +18 -4
  514. package/dist/{env-4P5HOGNA.js → env-FBTHZKGN.js} +12 -2
  515. package/dist/env-FBTHZKGN.js.map +1 -0
  516. package/dist/experiment-HDYTJPUY.js +1397 -0
  517. package/dist/experiment-HDYTJPUY.js.map +1 -0
  518. package/dist/export-TS5GYEMA.js +168 -0
  519. package/dist/export-TS5GYEMA.js.map +1 -0
  520. package/dist/extract-QVQFUOIK.js +113 -0
  521. package/dist/extract-QVQFUOIK.js.map +1 -0
  522. package/dist/facets-WYQUZMFJ.js +114 -0
  523. package/dist/facets-WYQUZMFJ.js.map +1 -0
  524. package/dist/favorites-7QP7BY5K.js +178 -0
  525. package/dist/favorites-7QP7BY5K.js.map +1 -0
  526. package/dist/feed-EETRO2FG.js +177 -0
  527. package/dist/feed-EETRO2FG.js.map +1 -0
  528. package/dist/feedback-SIMPRE37.js +66 -0
  529. package/dist/feedback-SIMPRE37.js.map +1 -0
  530. package/dist/feedback-record-L4MPIVML.js +177 -0
  531. package/dist/feedback-record-L4MPIVML.js.map +1 -0
  532. package/dist/fetch-DTBM3DE2.js +176 -0
  533. package/dist/fetch-DTBM3DE2.js.map +1 -0
  534. package/dist/fetch-Z7O3ZL4D.js +139 -0
  535. package/dist/fetch-Z7O3ZL4D.js.map +1 -0
  536. package/dist/find-KAQ6JDMO.js +134 -0
  537. package/dist/find-KAQ6JDMO.js.map +1 -0
  538. package/dist/fit-MY5GVZZZ.js +45 -0
  539. package/dist/fit-MY5GVZZZ.js.map +1 -0
  540. package/dist/flows-IUDXVDOS.js +247 -0
  541. package/dist/flows-IUDXVDOS.js.map +1 -0
  542. package/dist/follow-IX4XVK5Y.js +94 -0
  543. package/dist/follow-IX4XVK5Y.js.map +1 -0
  544. package/dist/follow-competitors-UZBUOYTH.js +112 -0
  545. package/dist/follow-competitors-UZBUOYTH.js.map +1 -0
  546. package/dist/following-VGOIUCIZ.js +113 -0
  547. package/dist/following-VGOIUCIZ.js.map +1 -0
  548. package/dist/fonts-EUDHI6CA.js +34 -0
  549. package/dist/fonts-EUDHI6CA.js.map +1 -0
  550. package/dist/forecast-BRSEH2H3.js +104 -0
  551. package/dist/forecast-BRSEH2H3.js.map +1 -0
  552. package/dist/forecast-QV4U7TOY.js +168 -0
  553. package/dist/forecast-QV4U7TOY.js.map +1 -0
  554. package/dist/funding-H5YO37OW.js +85 -0
  555. package/dist/funding-H5YO37OW.js.map +1 -0
  556. package/dist/funnel-JLF77MLF.js +394 -0
  557. package/dist/funnel-JLF77MLF.js.map +1 -0
  558. package/dist/ga4-YHJ2XMLC.js +55 -0
  559. package/dist/ga4-YHJ2XMLC.js.map +1 -0
  560. package/dist/generate-M2ZX5DMI.js +262 -0
  561. package/dist/generate-M2ZX5DMI.js.map +1 -0
  562. package/dist/get-4EYKCZ6F.js +59 -0
  563. package/dist/get-4EYKCZ6F.js.map +1 -0
  564. package/dist/get-637GALM2.js +63 -0
  565. package/dist/get-637GALM2.js.map +1 -0
  566. package/dist/get-AYX5HS64.js +56 -0
  567. package/dist/get-AYX5HS64.js.map +1 -0
  568. package/dist/get-AZARFR6O.js +61 -0
  569. package/dist/get-AZARFR6O.js.map +1 -0
  570. package/dist/get-EG2U7MIL.js +78 -0
  571. package/dist/get-EG2U7MIL.js.map +1 -0
  572. package/dist/get-N4BPOQCB.js +63 -0
  573. package/dist/get-N4BPOQCB.js.map +1 -0
  574. package/dist/get-RPZHLQ56.js +92 -0
  575. package/dist/get-RPZHLQ56.js.map +1 -0
  576. package/dist/gif-6PRTB2VR.js +94 -0
  577. package/dist/gif-6PRTB2VR.js.map +1 -0
  578. package/dist/google-52JRH7X3.js +136 -0
  579. package/dist/google-52JRH7X3.js.map +1 -0
  580. package/dist/google-ITTPCJ7N.js +3190 -0
  581. package/dist/google-ITTPCJ7N.js.map +1 -0
  582. package/dist/google-ads-U3JFFQLU.js +195 -0
  583. package/dist/google-ads-U3JFFQLU.js.map +1 -0
  584. package/dist/group-AAZ5QKC3.js +43 -0
  585. package/dist/group-AAZ5QKC3.js.map +1 -0
  586. package/dist/group-GSYCZORC.js +43 -0
  587. package/dist/group-GSYCZORC.js.map +1 -0
  588. package/dist/gsc-TS5T7ML2.js +30 -0
  589. package/dist/gsc-TS5T7ML2.js.map +1 -0
  590. package/dist/history-EW6LFFCX.js +67 -0
  591. package/dist/history-EW6LFFCX.js.map +1 -0
  592. package/dist/history-YTNCWSV3.js +133 -0
  593. package/dist/history-YTNCWSV3.js.map +1 -0
  594. package/dist/hubspot-LXWQNKKB.js +779 -0
  595. package/dist/hubspot-LXWQNKKB.js.map +1 -0
  596. package/dist/icon-K75KI6BV.js +137 -0
  597. package/dist/icon-K75KI6BV.js.map +1 -0
  598. package/dist/ideas-JJIHQFV4.js +35 -0
  599. package/dist/ideas-JJIHQFV4.js.map +1 -0
  600. package/dist/images-MWETBYKB.js +90 -0
  601. package/dist/images-MWETBYKB.js.map +1 -0
  602. package/dist/improve-L3BW4EQG.js +86 -0
  603. package/dist/improve-L3BW4EQG.js.map +1 -0
  604. package/dist/ingest-THFAV4NO.js +107 -0
  605. package/dist/ingest-THFAV4NO.js.map +1 -0
  606. package/dist/ingest-U6B7GR4A.js +23 -0
  607. package/dist/ingest-U6B7GR4A.js.map +1 -0
  608. package/dist/insights-FA6T6PT6.js +423 -0
  609. package/dist/insights-FA6T6PT6.js.map +1 -0
  610. package/dist/insights-PELVD4RY.js +122 -0
  611. package/dist/insights-PELVD4RY.js.map +1 -0
  612. package/dist/inspect-N2WVVWGP.js +189 -0
  613. package/dist/inspect-N2WVVWGP.js.map +1 -0
  614. package/dist/inspiration-Y2J2PUPC.js +53 -0
  615. package/dist/inspiration-Y2J2PUPC.js.map +1 -0
  616. package/dist/intent-YNAAVNHK.js +95 -0
  617. package/dist/intent-YNAAVNHK.js.map +1 -0
  618. package/dist/job-E2U4FS5P.js +202 -0
  619. package/dist/job-E2U4FS5P.js.map +1 -0
  620. package/dist/job-create-DFYCHVQ7.js +109 -0
  621. package/dist/job-create-DFYCHVQ7.js.map +1 -0
  622. package/dist/job-status-FFPMTSHB.js +74 -0
  623. package/dist/job-status-FFPMTSHB.js.map +1 -0
  624. package/dist/keep-GYZS2UTL.js +78 -0
  625. package/dist/keep-GYZS2UTL.js.map +1 -0
  626. package/dist/keyword-gap-4JKLWIBJ.js +130 -0
  627. package/dist/keyword-gap-4JKLWIBJ.js.map +1 -0
  628. package/dist/keyword-metrics-KU3OHTQK.js +197 -0
  629. package/dist/keyword-metrics-KU3OHTQK.js.map +1 -0
  630. package/dist/keywords-for-site-M4MFWMVK.js +128 -0
  631. package/dist/keywords-for-site-M4MFWMVK.js.map +1 -0
  632. package/dist/landing-7UVZ7IPP.js +28 -0
  633. package/dist/landing-7UVZ7IPP.js.map +1 -0
  634. package/dist/landings-F7LOAEJE.js +151 -0
  635. package/dist/landings-F7LOAEJE.js.map +1 -0
  636. package/dist/languages-PKYCZNUB.js +40 -0
  637. package/dist/languages-PKYCZNUB.js.map +1 -0
  638. package/dist/languages-XEJKTIFP.js +55 -0
  639. package/dist/languages-XEJKTIFP.js.map +1 -0
  640. package/dist/launches-TCFAYUA5.js +19 -0
  641. package/dist/launches-TCFAYUA5.js.map +1 -0
  642. package/dist/layerize-ZSKFIPZA.js +190 -0
  643. package/dist/layerize-ZSKFIPZA.js.map +1 -0
  644. package/dist/leads-CSRESOB2.js +293 -0
  645. package/dist/leads-CSRESOB2.js.map +1 -0
  646. package/dist/leads-MQPEA7DG.js +90 -0
  647. package/dist/leads-MQPEA7DG.js.map +1 -0
  648. package/dist/learn-K5YBUMBT.js +203 -0
  649. package/dist/learn-K5YBUMBT.js.map +1 -0
  650. package/dist/library-IP2UKNRU.js +109 -0
  651. package/dist/library-IP2UKNRU.js.map +1 -0
  652. package/dist/lighthouse-57XBJRCO.js +75 -0
  653. package/dist/lighthouse-57XBJRCO.js.map +1 -0
  654. package/dist/line-item-writes-73NR2J5L.js +208 -0
  655. package/dist/line-item-writes-73NR2J5L.js.map +1 -0
  656. package/dist/line-items-2YBGXOAQ.js +103 -0
  657. package/dist/line-items-2YBGXOAQ.js.map +1 -0
  658. package/dist/link-GVAWECJO.js +64 -0
  659. package/dist/link-GVAWECJO.js.map +1 -0
  660. package/dist/linkedin-PZDT22AT.js +1008 -0
  661. package/dist/linkedin-PZDT22AT.js.map +1 -0
  662. package/dist/list-6IKPWQGG.js +57 -0
  663. package/dist/list-6IKPWQGG.js.map +1 -0
  664. package/dist/list-CAUH3BMG.js +65 -0
  665. package/dist/list-CAUH3BMG.js.map +1 -0
  666. package/dist/list-FNDRV25Y.js +151 -0
  667. package/dist/list-FNDRV25Y.js.map +1 -0
  668. package/dist/list-GTOSN7DP.js +50 -0
  669. package/dist/list-GTOSN7DP.js.map +1 -0
  670. package/dist/list-HLJP4NVE.js +51 -0
  671. package/dist/list-HLJP4NVE.js.map +1 -0
  672. package/dist/list-LCUPF7EF.js +76 -0
  673. package/dist/list-LCUPF7EF.js.map +1 -0
  674. package/dist/list-REZGFWC5.js +63 -0
  675. package/dist/list-REZGFWC5.js.map +1 -0
  676. package/dist/list-S6MNXDTV.js +303 -0
  677. package/dist/list-S6MNXDTV.js.map +1 -0
  678. package/dist/locations-2BYWKIYA.js +67 -0
  679. package/dist/locations-2BYWKIYA.js.map +1 -0
  680. package/dist/locations-GJHHMV6Z.js +40 -0
  681. package/dist/locations-GJHHMV6Z.js.map +1 -0
  682. package/dist/log-HGDNLDUX.js +92 -0
  683. package/dist/log-HGDNLDUX.js.map +1 -0
  684. package/dist/logo-AJK2TDQU.js +18 -0
  685. package/dist/logo-AJK2TDQU.js.map +1 -0
  686. package/dist/lookup-H5GEM77H.js +22 -0
  687. package/dist/lookup-H5GEM77H.js.map +1 -0
  688. package/dist/make-BT26YJXZ.js +640 -0
  689. package/dist/make-BT26YJXZ.js.map +1 -0
  690. package/dist/map-J5EX4HOX.js +404 -0
  691. package/dist/map-J5EX4HOX.js.map +1 -0
  692. package/dist/mcp-MHDW6AFL.js +463 -0
  693. package/dist/mcp-MHDW6AFL.js.map +1 -0
  694. package/dist/media-RAGEJTZX.js +89 -0
  695. package/dist/media-RAGEJTZX.js.map +1 -0
  696. package/dist/media-RNB7JFJP.js +15 -0
  697. package/dist/media-RNB7JFJP.js.map +1 -0
  698. package/dist/media-sources-4NN3DWSG.js +32 -0
  699. package/dist/media-sources-4NN3DWSG.js.map +1 -0
  700. package/dist/members-AIWMXAQD.js +44 -0
  701. package/dist/members-AIWMXAQD.js.map +1 -0
  702. package/dist/meta-WAPZMZI7.js +69 -0
  703. package/dist/meta-WAPZMZI7.js.map +1 -0
  704. package/dist/metrics-6EHC4ESN.js +152 -0
  705. package/dist/metrics-6EHC4ESN.js.map +1 -0
  706. package/dist/models-5J4WFUD3.js +155 -0
  707. package/dist/models-5J4WFUD3.js.map +1 -0
  708. package/dist/normalize-DSFVTRXN.js +806 -0
  709. package/dist/normalize-DSFVTRXN.js.map +1 -0
  710. package/dist/normalize-ZAWN4XCS.js +141 -0
  711. package/dist/normalize-ZAWN4XCS.js.map +1 -0
  712. package/dist/options-3CZNT5KP.js +121 -0
  713. package/dist/options-3CZNT5KP.js.map +1 -0
  714. package/dist/output-DTCLVPUF.js +24 -0
  715. package/dist/output-DTCLVPUF.js.map +1 -0
  716. package/dist/page-N2ZO3O7F.js +105 -0
  717. package/dist/page-N2ZO3O7F.js.map +1 -0
  718. package/dist/pages-FQ4CBAJ2.js +66 -0
  719. package/dist/pages-FQ4CBAJ2.js.map +1 -0
  720. package/dist/performance-GOMJMHPE.js +24 -0
  721. package/dist/performance-GOMJMHPE.js.map +1 -0
  722. package/dist/pinterest-NV5XTNJE.js +96 -0
  723. package/dist/pinterest-NV5XTNJE.js.map +1 -0
  724. package/dist/pixels-CTJ43FZ4.js +108 -0
  725. package/dist/pixels-CTJ43FZ4.js.map +1 -0
  726. package/dist/pixels-HKINGZCH.js +60 -0
  727. package/dist/pixels-HKINGZCH.js.map +1 -0
  728. package/dist/plan-ZYTWLGWK.js +207 -0
  729. package/dist/plan-ZYTWLGWK.js.map +1 -0
  730. package/dist/preview-UKYLPAW2.js +169 -0
  731. package/dist/preview-UKYLPAW2.js.map +1 -0
  732. package/dist/profile-Q3PHR6FU.js +159 -0
  733. package/dist/profile-Q3PHR6FU.js.map +1 -0
  734. package/dist/promoted-tweet-writes-IYOAZTA5.js +180 -0
  735. package/dist/promoted-tweet-writes-IYOAZTA5.js.map +1 -0
  736. package/dist/promoted-tweets-G3XFD5YM.js +119 -0
  737. package/dist/promoted-tweets-G3XFD5YM.js.map +1 -0
  738. package/dist/properties-WLL6M2P6.js +101 -0
  739. package/dist/properties-WLL6M2P6.js.map +1 -0
  740. package/dist/publish-ZG4J2GTH.js +322 -0
  741. package/dist/publish-ZG4J2GTH.js.map +1 -0
  742. package/dist/query-7AGG77WH.js +61 -0
  743. package/dist/query-7AGG77WH.js.map +1 -0
  744. package/dist/query-IYZN5KHO.js +236 -0
  745. package/dist/query-IYZN5KHO.js.map +1 -0
  746. package/dist/query-UN2P6DBA.js +247 -0
  747. package/dist/query-UN2P6DBA.js.map +1 -0
  748. package/dist/questionnaire-Z2ZIKNBV.js +93 -0
  749. package/dist/questionnaire-Z2ZIKNBV.js.map +1 -0
  750. package/dist/read-GM7PQYJA.js +141 -0
  751. package/dist/read-GM7PQYJA.js.map +1 -0
  752. package/dist/reddit-FTO4SFQE.js +26 -0
  753. package/dist/reddit-FTO4SFQE.js.map +1 -0
  754. package/dist/refresh-OUENQ2FS.js +94 -0
  755. package/dist/refresh-OUENQ2FS.js.map +1 -0
  756. package/dist/release-5OG7AAFY.js +60 -0
  757. package/dist/release-5OG7AAFY.js.map +1 -0
  758. package/dist/relevant-pages-KUVDZPRU.js +99 -0
  759. package/dist/relevant-pages-KUVDZPRU.js.map +1 -0
  760. package/dist/remove-33HI27KM.js +50 -0
  761. package/dist/remove-33HI27KM.js.map +1 -0
  762. package/dist/remove-GOYW2G4R.js +48 -0
  763. package/dist/remove-GOYW2G4R.js.map +1 -0
  764. package/dist/reopen-KFFYE53A.js +63 -0
  765. package/dist/reopen-KFFYE53A.js.map +1 -0
  766. package/dist/rerun-P6XACA5Z.js +86 -0
  767. package/dist/rerun-P6XACA5Z.js.map +1 -0
  768. package/dist/research-BEO3JMZI.js +262 -0
  769. package/dist/research-BEO3JMZI.js.map +1 -0
  770. package/dist/research-QOC53DLS.js +62 -0
  771. package/dist/research-QOC53DLS.js.map +1 -0
  772. package/dist/reset-E3OWE2WF.js +54 -0
  773. package/dist/reset-E3OWE2WF.js.map +1 -0
  774. package/dist/reset-I7M3HYMB.js +54 -0
  775. package/dist/reset-I7M3HYMB.js.map +1 -0
  776. package/dist/resolve-GP7BHM6L.js +121 -0
  777. package/dist/resolve-GP7BHM6L.js.map +1 -0
  778. package/dist/retry-33ZJCNQI.js +62 -0
  779. package/dist/retry-33ZJCNQI.js.map +1 -0
  780. package/dist/retry-X5PU7QO3.js +60 -0
  781. package/dist/retry-X5PU7QO3.js.map +1 -0
  782. package/dist/retry-failed-BEFWRV4Z.js +45 -0
  783. package/dist/retry-failed-BEFWRV4Z.js.map +1 -0
  784. package/dist/run-REK3TEGY.js +65 -0
  785. package/dist/run-REK3TEGY.js.map +1 -0
  786. package/dist/run-TH2662IC.js +61 -0
  787. package/dist/run-TH2662IC.js.map +1 -0
  788. package/dist/scaffold-ad-3WDRKUFT.js +1550 -0
  789. package/dist/scaffold-ad-3WDRKUFT.js.map +1 -0
  790. package/dist/scaffold-static-ad-X5NT52NF.js +973 -0
  791. package/dist/scaffold-static-ad-X5NT52NF.js.map +1 -0
  792. package/dist/scaffold-video-WZPVACLE.js +874 -0
  793. package/dist/scaffold-video-WZPVACLE.js.map +1 -0
  794. package/dist/schedule-KQ7UIR3N.js +66 -0
  795. package/dist/schedule-KQ7UIR3N.js.map +1 -0
  796. package/dist/schedule-V4UHGY3V.js +61 -0
  797. package/dist/schedule-V4UHGY3V.js.map +1 -0
  798. package/dist/scheduled-agents-KLQ5H2PA.js +49 -0
  799. package/dist/scheduled-agents-KLQ5H2PA.js.map +1 -0
  800. package/dist/schema-G3T4PZDI.js +132 -0
  801. package/dist/schema-G3T4PZDI.js.map +1 -0
  802. package/dist/schema-QXTDLZVC.js +63 -0
  803. package/dist/schema-QXTDLZVC.js.map +1 -0
  804. package/dist/scrape-7YKJWFZE.js +2241 -0
  805. package/dist/scrape-7YKJWFZE.js.map +1 -0
  806. package/dist/screenshot-ZHBSG3SI.js +102 -0
  807. package/dist/screenshot-ZHBSG3SI.js.map +1 -0
  808. package/dist/search-332KFYZ6.js +224 -0
  809. package/dist/search-332KFYZ6.js.map +1 -0
  810. package/dist/search-4PBMXXUY.js +91 -0
  811. package/dist/search-4PBMXXUY.js.map +1 -0
  812. package/dist/search-6XKEGABN.js +174 -0
  813. package/dist/search-6XKEGABN.js.map +1 -0
  814. package/dist/search-AVNUU6TJ.js +26 -0
  815. package/dist/search-AVNUU6TJ.js.map +1 -0
  816. package/dist/search-F5INRFFK.js +92 -0
  817. package/dist/search-F5INRFFK.js.map +1 -0
  818. package/dist/search-copy-DZVBYG2B.js +168 -0
  819. package/dist/search-copy-DZVBYG2B.js.map +1 -0
  820. package/dist/seeds-5JTQN5WI.js +101 -0
  821. package/dist/seeds-5JTQN5WI.js.map +1 -0
  822. package/dist/select-N2V55BEX.js +96 -0
  823. package/dist/select-N2V55BEX.js.map +1 -0
  824. package/dist/sends-3L6QBS46.js +309 -0
  825. package/dist/sends-3L6QBS46.js.map +1 -0
  826. package/dist/sequences-YKFV7BDH.js +146 -0
  827. package/dist/sequences-YKFV7BDH.js.map +1 -0
  828. package/dist/set-prompt-7HVHERRU.js +188 -0
  829. package/dist/set-prompt-7HVHERRU.js.map +1 -0
  830. package/dist/setup-links-4VVNQVPU.js +141 -0
  831. package/dist/setup-links-4VVNQVPU.js.map +1 -0
  832. package/dist/{shared-J7DQZ2ED.js → shared-QAMP7FZV.js} +8 -6
  833. package/dist/shared-QAMP7FZV.js.map +1 -0
  834. package/dist/shopify-FSHM5M4I.js +3346 -0
  835. package/dist/shopify-FSHM5M4I.js.map +1 -0
  836. package/dist/site-Q2HTRLIW.js +177 -0
  837. package/dist/site-Q2HTRLIW.js.map +1 -0
  838. package/dist/sitemaps-XPGLW24S.js +87 -0
  839. package/dist/sitemaps-XPGLW24S.js.map +1 -0
  840. package/dist/sites-WMBY2HJV.js +101 -0
  841. package/dist/sites-WMBY2HJV.js.map +1 -0
  842. package/dist/skills-3HEILQCU.js +47 -0
  843. package/dist/skills-3HEILQCU.js.map +1 -0
  844. package/dist/sources-2KN4RJNJ.js +30 -0
  845. package/dist/sources-2KN4RJNJ.js.map +1 -0
  846. package/dist/sources-4I2YMS2K.js +421 -0
  847. package/dist/sources-4I2YMS2K.js.map +1 -0
  848. package/dist/stale-IN7WSBLC.js +66 -0
  849. package/dist/stale-IN7WSBLC.js.map +1 -0
  850. package/dist/stats-GNILHSKK.js +34 -0
  851. package/dist/stats-GNILHSKK.js.map +1 -0
  852. package/dist/status-6SLKZWNR.js +62 -0
  853. package/dist/status-6SLKZWNR.js.map +1 -0
  854. package/dist/sticker-KCV3VZHY.js +94 -0
  855. package/dist/sticker-KCV3VZHY.js.map +1 -0
  856. package/dist/stock-VTORKR4C.js +179 -0
  857. package/dist/stock-VTORKR4C.js.map +1 -0
  858. package/dist/studio-QCRA6BY5.js +49 -0
  859. package/dist/studio-QCRA6BY5.js.map +1 -0
  860. package/dist/sync-455DB46Y.js +54 -0
  861. package/dist/sync-455DB46Y.js.map +1 -0
  862. package/dist/sync-A4KKQ3B6.js +265 -0
  863. package/dist/sync-A4KKQ3B6.js.map +1 -0
  864. package/dist/sync-LFZV5NBN.js +54 -0
  865. package/dist/sync-LFZV5NBN.js.map +1 -0
  866. package/dist/sync-definition-IJISZ5VQ.js +55 -0
  867. package/dist/sync-definition-IJISZ5VQ.js.map +1 -0
  868. package/dist/tag-manager-E7QTXBWQ.js +43 -0
  869. package/dist/tag-manager-E7QTXBWQ.js.map +1 -0
  870. package/dist/tags-6OAZOQYO.js +26 -0
  871. package/dist/tags-6OAZOQYO.js.map +1 -0
  872. package/dist/tags-6YRMDX3R.js +20 -0
  873. package/dist/tags-6YRMDX3R.js.map +1 -0
  874. package/dist/tags-EWXZSZYE.js +20 -0
  875. package/dist/tags-EWXZSZYE.js.map +1 -0
  876. package/dist/tags-SZCNPE2D.js +224 -0
  877. package/dist/tags-SZCNPE2D.js.map +1 -0
  878. package/dist/tags-TCFFP534.js +20 -0
  879. package/dist/tags-TCFFP534.js.map +1 -0
  880. package/dist/targeting-constants-D64YO3E7.js +118 -0
  881. package/dist/targeting-constants-D64YO3E7.js.map +1 -0
  882. package/dist/targeting-criteria-ESOC7KNX.js +113 -0
  883. package/dist/targeting-criteria-ESOC7KNX.js.map +1 -0
  884. package/dist/targets-IPBEB5KU.js +102 -0
  885. package/dist/targets-IPBEB5KU.js.map +1 -0
  886. package/dist/templates-IJ7FR3LA.js +178 -0
  887. package/dist/templates-IJ7FR3LA.js.map +1 -0
  888. package/dist/testimonials-IXS7CP6P.js +32 -0
  889. package/dist/testimonials-IXS7CP6P.js.map +1 -0
  890. package/dist/themes-MXNKJWMW.js +94 -0
  891. package/dist/themes-MXNKJWMW.js.map +1 -0
  892. package/dist/top-companies-NO6L2V6M.js +108 -0
  893. package/dist/top-companies-NO6L2V6M.js.map +1 -0
  894. package/dist/translate-QCE5ZB7M.js +600 -0
  895. package/dist/translate-QCE5ZB7M.js.map +1 -0
  896. package/dist/triggers-KXUDMDSA.js +141 -0
  897. package/dist/triggers-KXUDMDSA.js.map +1 -0
  898. package/dist/tweets-ZUKQAAUQ.js +123 -0
  899. package/dist/tweets-ZUKQAAUQ.js.map +1 -0
  900. package/dist/unfollow-A4JVCJBF.js +46 -0
  901. package/dist/unfollow-A4JVCJBF.js.map +1 -0
  902. package/dist/unlink-E3N36NYQ.js +67 -0
  903. package/dist/unlink-E3N36NYQ.js.map +1 -0
  904. package/dist/unstage-TRMHSHED.js +84 -0
  905. package/dist/unstage-TRMHSHED.js.map +1 -0
  906. package/dist/unstage-ZRLLCSQF.js +95 -0
  907. package/dist/unstage-ZRLLCSQF.js.map +1 -0
  908. package/dist/update-EWGWAXAQ.js +142 -0
  909. package/dist/update-EWGWAXAQ.js.map +1 -0
  910. package/dist/update-OKOQE7U2.js +155 -0
  911. package/dist/update-OKOQE7U2.js.map +1 -0
  912. package/dist/update-VSFHID2D.js +63 -0
  913. package/dist/update-VSFHID2D.js.map +1 -0
  914. package/dist/update-XGCGQDJ4.js +98 -0
  915. package/dist/update-XGCGQDJ4.js.map +1 -0
  916. package/dist/upload-BOYMDDEQ.js +126 -0
  917. package/dist/upload-BOYMDDEQ.js.map +1 -0
  918. package/dist/upload-XEHWYMJG.js +150 -0
  919. package/dist/upload-XEHWYMJG.js.map +1 -0
  920. package/dist/upscale-I5P2OHTN.js +109 -0
  921. package/dist/upscale-I5P2OHTN.js.map +1 -0
  922. package/dist/url-options-PCZEQE66.js +130 -0
  923. package/dist/url-options-PCZEQE66.js.map +1 -0
  924. package/dist/url-params-DV37GEQF.js +98 -0
  925. package/dist/url-params-DV37GEQF.js.map +1 -0
  926. package/dist/use-U4HG2NF3.js +95 -0
  927. package/dist/use-U4HG2NF3.js.map +1 -0
  928. package/dist/validate-5AV4FJZ5.js +91 -0
  929. package/dist/validate-5AV4FJZ5.js.map +1 -0
  930. package/dist/variant-FOVE6URJ.js +338 -0
  931. package/dist/variant-FOVE6URJ.js.map +1 -0
  932. package/dist/videos-IJ67PPJV.js +39 -0
  933. package/dist/videos-IJ67PPJV.js.map +1 -0
  934. package/dist/view-HRI3FHCH.js +121 -0
  935. package/dist/view-HRI3FHCH.js.map +1 -0
  936. package/dist/viewer-check-JYUE24M6.js +68 -0
  937. package/dist/viewer-check-JYUE24M6.js.map +1 -0
  938. package/dist/web-LJ36FRWD.js +140 -0
  939. package/dist/web-LJ36FRWD.js.map +1 -0
  940. package/dist/winners-SMMDN6LW.js +113 -0
  941. package/dist/winners-SMMDN6LW.js.map +1 -0
  942. package/dist/winning-ads-JIG2MQHJ.js +84 -0
  943. package/dist/winning-ads-JIG2MQHJ.js.map +1 -0
  944. package/dist/write-commands-7Z34WG2J.js +206 -0
  945. package/dist/write-commands-7Z34WG2J.js.map +1 -0
  946. package/dist/write-commands-BLT2SEC4.js +713 -0
  947. package/dist/write-commands-BLT2SEC4.js.map +1 -0
  948. package/dist/write-commands-GOZU6ENR.js +1015 -0
  949. package/dist/write-commands-GOZU6ENR.js.map +1 -0
  950. package/dist/write-commands-KA3QXVSF.js +737 -0
  951. package/dist/write-commands-KA3QXVSF.js.map +1 -0
  952. package/dist/x-6HBVXIKH.js +47 -0
  953. package/dist/x-6HBVXIKH.js.map +1 -0
  954. package/package.json +9 -2
  955. package/dist/chunk-CHJOTJTZ.js +0 -9989
  956. package/dist/chunk-CHJOTJTZ.js.map +0 -1
  957. package/dist/chunk-HJEMOSPH.js +0 -1292
  958. package/dist/chunk-HJEMOSPH.js.map +0 -1
  959. package/dist/chunk-MF7YA62W.js.map +0 -1
  960. package/dist/chunk-VLUGGVJL.js.map +0 -1
  961. package/dist/chunk-VZEDAFAR.js.map +0 -1
  962. package/dist/chunk-XHC4LMK4.js.map +0 -1
  963. package/dist/client-GR6YL3YX.js +0 -17
  964. package/dist/output-NMQXZF3Z.js +0 -18
  965. /package/dist/{client-GR6YL3YX.js.map → chunk-YQSBHWOI.js.map} +0 -0
  966. /package/dist/{env-4P5HOGNA.js.map → client-26SAJ46D.js.map} +0 -0
  967. /package/dist/{output-NMQXZF3Z.js.map → connect-WYUYS5V4.js.map} +0 -0
  968. /package/dist/{shared-J7DQZ2ED.js.map → customers-HYE7N2H5.js.map} +0 -0
@@ -0,0 +1,169 @@
1
+ import {
2
+ FACEBOOK_PREVIEW_FORMATS,
3
+ INSTAGRAM_PREVIEW_FORMATS,
4
+ PLATFORM_SCOPED_POSITIONS,
5
+ previewFormatForPosition
6
+ } from "./chunk-GOJXKIFQ.js";
7
+ import {
8
+ handleMetaError
9
+ } from "./chunk-TPXI2GCW.js";
10
+ import {
11
+ writeAdsJson,
12
+ writeJsonEnvelope
13
+ } from "./chunk-BVM5IRZW.js";
14
+ import {
15
+ NO_CACHE_ARG
16
+ } from "./chunk-EF5DP6EB.js";
17
+ import {
18
+ apiPost
19
+ } from "./chunk-HREWXNTO.js";
20
+ import "./chunk-HLXWKMTK.js";
21
+ import "./chunk-O6QKCJE4.js";
22
+ import "./chunk-WOTDHRNF.js";
23
+ import "./chunk-YQSBHWOI.js";
24
+
25
+ // src/commands/ads/meta/preview.ts
26
+ import { writeFileSync } from "fs";
27
+ import { defineCommand } from "citty";
28
+ var VALID_AD_FORMATS = [
29
+ "DESKTOP_FEED_STANDARD",
30
+ "MOBILE_FEED_STANDARD",
31
+ "MOBILE_FEED_BASIC",
32
+ "RIGHT_COLUMN_STANDARD",
33
+ "MOBILE_FULLWIDTH",
34
+ "MOBILE_INTERSTITIAL",
35
+ "MOBILE_BANNER",
36
+ "MOBILE_MEDIUM_RECTANGLE",
37
+ "MOBILE_NATIVE",
38
+ "FACEBOOK_STORY_MOBILE",
39
+ "FACEBOOK_REELS_MOBILE",
40
+ "INSTAGRAM_STORY",
41
+ "INSTAGRAM_REELS",
42
+ "INSTAGRAM_REELS_OVERLAY",
43
+ "INSTAGRAM_STANDARD",
44
+ "INSTAGRAM_EXPLORE_CONTEXTUAL",
45
+ "INSTAGRAM_EXPLORE_GRID_HOME",
46
+ "INSTAGRAM_SEARCH_CHAIN",
47
+ "INSTAGRAM_SHOP",
48
+ "INSTAGRAM_PROFILE_FEED",
49
+ "INSTREAM_VIDEO_DESKTOP",
50
+ "INSTREAM_VIDEO_MOBILE",
51
+ "FACEBOOK_REELS_BANNER",
52
+ "FACEBOOK_REELS_STICKER",
53
+ "MESSENGER_MOBILE_INBOX_MEDIA",
54
+ "MESSENGER_MOBILE_STORY_MEDIA",
55
+ "AUDIENCE_NETWORK_OUTSTREAM_VIDEO",
56
+ "AUDIENCE_NETWORK_INSTREAM_VIDEO_MOBILE",
57
+ "AUDIENCE_NETWORK_REWARDED_VIDEO",
58
+ "INSTANT_ARTICLE_STANDARD",
59
+ "MARKETPLACE_MOBILE",
60
+ "BIZ_DISCO_FEED_MOBILE"
61
+ ];
62
+ function failPreviewValidation(message) {
63
+ writeAdsJson({ ok: false, error: { code: "VALIDATION_ERROR", message } });
64
+ process.exit(1);
65
+ }
66
+ function resolvePlacement(position, platform) {
67
+ const platformArg = typeof platform === "string" ? platform.toLowerCase() : void 0;
68
+ if (platformArg && platformArg !== "facebook" && platformArg !== "instagram") {
69
+ failPreviewValidation("--platform must be facebook or instagram");
70
+ }
71
+ const format = previewFormatForPosition(position, platformArg);
72
+ if (format) {
73
+ return format;
74
+ }
75
+ if (PLATFORM_SCOPED_POSITIONS.has(position) && !platformArg) {
76
+ failPreviewValidation(
77
+ `--placement ${position} names a different surface on Facebook and on Instagram \u2014 add --platform facebook or --platform instagram (the breakdown row's publisher_platform)`
78
+ );
79
+ }
80
+ failPreviewValidation(
81
+ `No Meta preview format is published for placement "${position}". Meta does not document one for every placement (facebook_notification and facebook_profile_feed among them), so this placement cannot be previewed \u2014 report it as unverified rather than inferring what it renders. Pass the platform_position exactly as the insights breakdown spelled it: targeting names a few surfaces differently (story, reels, explore_home) and those names never appear in a breakdown. Previewable placements: ${listPlacements()}`
82
+ );
83
+ }
84
+ function listPlacements() {
85
+ const facebook = Object.keys(FACEBOOK_PREVIEW_FORMATS).join(", ");
86
+ const instagram = Object.keys(INSTAGRAM_PREVIEW_FORMATS).join(", ");
87
+ return `facebook \u2014 ${facebook}; instagram \u2014 ${instagram}`;
88
+ }
89
+ var previewCommand = defineCommand({
90
+ meta: {
91
+ name: "preview",
92
+ description: `Generate a Meta-hosted preview iframe for a creative or ad. Returns iframe HTML which you
93
+ can embed or save to a file. The iframe URL contains a short-lived access token \u2014 treat as secret.
94
+
95
+ Start here when you need to know what a creative looks like in one specific placement \u2014 this is
96
+ Meta's own renderer, so it settles "does my video show as a still image there?" without guessing.
97
+ Pass the placement straight from an insights breakdown with --placement (a platform_position value),
98
+ or a Meta ad_format with --ad-format. Run --list-formats to see both sets.
99
+
100
+ Examples:
101
+ baker ads meta preview --creative-id 6123 --ad-format MOBILE_FEED_STANDARD
102
+ baker ads meta preview --creative-id 6123 --placement facebook_reels_overlay --platform facebook
103
+ baker ads meta preview --ad-id 9988 --ad-format INSTAGRAM_REELS --out-file /tmp/preview.html
104
+ baker ads meta preview --account-id act_123 --creative '{"object_story_spec":{...}}' --ad-format MOBILE_FEED_STANDARD`
105
+ },
106
+ args: {
107
+ "creative-id": { type: "string", description: "Existing creative ID" },
108
+ "ad-id": { type: "string", description: "Existing ad ID" },
109
+ "account-id": { type: "string", description: "Required when previewing an unpublished --creative spec" },
110
+ creative: { type: "string", description: "JSON spec of an unpublished creative (e.g. object_story_spec)" },
111
+ "ad-format": { type: "string", description: "Meta ad_format enum value (--list-formats to see them)" },
112
+ placement: {
113
+ type: "string",
114
+ description: "platform_position from an insights breakdown (e.g. facebook_reels_overlay) \u2014 resolved to an ad_format"
115
+ },
116
+ platform: { type: "string", description: "facebook|instagram \u2014 required for --placement feed, which both report" },
117
+ "list-formats": { type: "boolean", description: "Print the ad_format values and placement mappings, then exit" },
118
+ "out-file": { type: "string", description: "Save iframe HTML to this path" },
119
+ "no-cache": NO_CACHE_ARG
120
+ },
121
+ run: async ({ args }) => {
122
+ if (args["list-formats"]) {
123
+ writeAdsJson({
124
+ ok: true,
125
+ data: {
126
+ adFormats: VALID_AD_FORMATS,
127
+ placements: { facebook: FACEBOOK_PREVIEW_FORMATS, instagram: INSTAGRAM_PREVIEW_FORMATS }
128
+ }
129
+ });
130
+ return;
131
+ }
132
+ const placement = args.placement;
133
+ const adFormat = placement ? resolvePlacement(placement, args.platform) : args["ad-format"];
134
+ if (!adFormat) {
135
+ failPreviewValidation("pass --ad-format or --placement (see --list-formats)");
136
+ }
137
+ if (!VALID_AD_FORMATS.includes(adFormat)) {
138
+ failPreviewValidation(
139
+ `Invalid --ad-format "${adFormat}". Meta publishes no complete ad_format enum, so this is the set we know: ${VALID_AD_FORMATS.join(", ")}. To preview a placement you saw in an insights breakdown, pass --placement <platform_position> instead of guessing a format name.`
140
+ );
141
+ }
142
+ const body = { adFormat };
143
+ if (args["creative-id"]) body.creativeId = args["creative-id"];
144
+ if (args["ad-id"]) body.adId = args["ad-id"];
145
+ if (args["account-id"]) body.accountId = args["account-id"];
146
+ if (args.creative) body.creative = args.creative;
147
+ if (args["no-cache"]) body.skipCache = true;
148
+ try {
149
+ const data = await apiPost("/api/ads/meta/preview", body);
150
+ const html = data.map((d) => d.body).join("\n");
151
+ const hints = placement ? [
152
+ `Rendered ${placement} as ad_format ${adFormat}. Open the iframe to SEE it \u2014 Meta does not document what it renders for a creative a placement cannot take, so a preview you looked at is the evidence, and anything you did not look at stays unverified.`
153
+ ] : [];
154
+ if (args["out-file"]) {
155
+ const summary = { ok: true, data: { file: args["out-file"], rows: data.length, adFormat } };
156
+ writeFileSync(args["out-file"], html, "utf-8");
157
+ writeJsonEnvelope(hints.length > 0 ? { ...summary, hints } : summary);
158
+ return;
159
+ }
160
+ writeJsonEnvelope(hints.length > 0 ? { ok: true, data, hints } : { ok: true, data });
161
+ } catch (err) {
162
+ handleMetaError(err);
163
+ }
164
+ }
165
+ });
166
+ export {
167
+ previewCommand
168
+ };
169
+ //# sourceMappingURL=preview-UKYLPAW2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/meta/preview.ts"],"sourcesContent":["import { writeFileSync } from \"node:fs\";\nimport {\n FACEBOOK_PREVIEW_FORMATS,\n INSTAGRAM_PREVIEW_FORMATS,\n PLATFORM_SCOPED_POSITIONS,\n previewFormatForPosition,\n} from \"@baker/api/ads-meta\";\nimport { defineCommand } from \"citty\";\nimport { NO_CACHE_ARG } from \"../../../cache-flag.ts\";\nimport { apiPost } from \"../../../client.ts\";\nimport { writeAdsJson, writeJsonEnvelope } from \"../output.ts\";\nimport { handleMetaError } from \"./shared.ts\";\n\nconst VALID_AD_FORMATS = [\n \"DESKTOP_FEED_STANDARD\",\n \"MOBILE_FEED_STANDARD\",\n \"MOBILE_FEED_BASIC\",\n \"RIGHT_COLUMN_STANDARD\",\n \"MOBILE_FULLWIDTH\",\n \"MOBILE_INTERSTITIAL\",\n \"MOBILE_BANNER\",\n \"MOBILE_MEDIUM_RECTANGLE\",\n \"MOBILE_NATIVE\",\n \"FACEBOOK_STORY_MOBILE\",\n \"FACEBOOK_REELS_MOBILE\",\n \"INSTAGRAM_STORY\",\n \"INSTAGRAM_REELS\",\n \"INSTAGRAM_REELS_OVERLAY\",\n \"INSTAGRAM_STANDARD\",\n \"INSTAGRAM_EXPLORE_CONTEXTUAL\",\n \"INSTAGRAM_EXPLORE_GRID_HOME\",\n \"INSTAGRAM_SEARCH_CHAIN\",\n \"INSTAGRAM_SHOP\",\n \"INSTAGRAM_PROFILE_FEED\",\n \"INSTREAM_VIDEO_DESKTOP\",\n \"INSTREAM_VIDEO_MOBILE\",\n \"FACEBOOK_REELS_BANNER\",\n \"FACEBOOK_REELS_STICKER\",\n \"MESSENGER_MOBILE_INBOX_MEDIA\",\n \"MESSENGER_MOBILE_STORY_MEDIA\",\n \"AUDIENCE_NETWORK_OUTSTREAM_VIDEO\",\n \"AUDIENCE_NETWORK_INSTREAM_VIDEO_MOBILE\",\n \"AUDIENCE_NETWORK_REWARDED_VIDEO\",\n \"INSTANT_ARTICLE_STANDARD\",\n \"MARKETPLACE_MOBILE\",\n \"BIZ_DISCO_FEED_MOBILE\",\n];\n\n/** A bad flag is not a network failure — mislabelling it invites a retry of the same doomed call. */\nfunction failPreviewValidation(message: string): never {\n writeAdsJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message } });\n process.exit(1);\n}\n\n/**\n * Preview is the free way to see what Meta actually renders for a creative in a\n * given surface — the check that turns \"this placement must be showing a still\"\n * from a claim into an observation. It was being used by guessing format names,\n * so both doors are open now: the Meta `ad_format` enum via `--ad-format`, and\n * the `platform_position` an insights breakdown reports via `--placement`.\n */\nfunction resolvePlacement(position: string, platform: unknown): string {\n const platformArg = typeof platform === \"string\" ? platform.toLowerCase() : undefined;\n if (platformArg && platformArg !== \"facebook\" && platformArg !== \"instagram\") {\n failPreviewValidation(\"--platform must be facebook or instagram\");\n }\n const format = previewFormatForPosition(position, platformArg);\n if (format) {\n return format;\n }\n if (PLATFORM_SCOPED_POSITIONS.has(position) && !platformArg) {\n failPreviewValidation(\n `--placement ${position} names a different surface on Facebook and on Instagram — add --platform facebook or --platform instagram (the breakdown row's publisher_platform)`,\n );\n }\n failPreviewValidation(\n `No Meta preview format is published for placement \"${position}\". Meta does not document one for every placement (facebook_notification and facebook_profile_feed among them), so this placement cannot be previewed — report it as unverified rather than inferring what it renders. Pass the platform_position exactly as the insights breakdown spelled it: targeting names a few surfaces differently (story, reels, explore_home) and those names never appear in a breakdown. Previewable placements: ${listPlacements()}`,\n );\n}\n\nfunction listPlacements(): string {\n const facebook = Object.keys(FACEBOOK_PREVIEW_FORMATS).join(\", \");\n const instagram = Object.keys(INSTAGRAM_PREVIEW_FORMATS).join(\", \");\n return `facebook — ${facebook}; instagram — ${instagram}`;\n}\n\nexport const previewCommand = defineCommand({\n meta: {\n name: \"preview\",\n description: `Generate a Meta-hosted preview iframe for a creative or ad. Returns iframe HTML which you\ncan embed or save to a file. The iframe URL contains a short-lived access token — treat as secret.\n\nStart here when you need to know what a creative looks like in one specific placement — this is\nMeta's own renderer, so it settles \"does my video show as a still image there?\" without guessing.\nPass the placement straight from an insights breakdown with --placement (a platform_position value),\nor a Meta ad_format with --ad-format. Run --list-formats to see both sets.\n\nExamples:\n baker ads meta preview --creative-id 6123 --ad-format MOBILE_FEED_STANDARD\n baker ads meta preview --creative-id 6123 --placement facebook_reels_overlay --platform facebook\n baker ads meta preview --ad-id 9988 --ad-format INSTAGRAM_REELS --out-file /tmp/preview.html\n baker ads meta preview --account-id act_123 --creative '{\"object_story_spec\":{...}}' --ad-format MOBILE_FEED_STANDARD`,\n },\n args: {\n \"creative-id\": { type: \"string\", description: \"Existing creative ID\" },\n \"ad-id\": { type: \"string\", description: \"Existing ad ID\" },\n \"account-id\": { type: \"string\", description: \"Required when previewing an unpublished --creative spec\" },\n creative: { type: \"string\", description: \"JSON spec of an unpublished creative (e.g. object_story_spec)\" },\n \"ad-format\": { type: \"string\", description: \"Meta ad_format enum value (--list-formats to see them)\" },\n placement: {\n type: \"string\",\n description:\n \"platform_position from an insights breakdown (e.g. facebook_reels_overlay) — resolved to an ad_format\",\n },\n platform: { type: \"string\", description: \"facebook|instagram — required for --placement feed, which both report\" },\n \"list-formats\": { type: \"boolean\", description: \"Print the ad_format values and placement mappings, then exit\" },\n \"out-file\": { type: \"string\", description: \"Save iframe HTML to this path\" },\n \"no-cache\": NO_CACHE_ARG,\n },\n run: async ({ args }) => {\n if (args[\"list-formats\"]) {\n writeAdsJson({\n ok: true,\n data: {\n adFormats: VALID_AD_FORMATS,\n placements: { facebook: FACEBOOK_PREVIEW_FORMATS, instagram: INSTAGRAM_PREVIEW_FORMATS },\n },\n });\n return;\n }\n\n const placement = args.placement as string | undefined;\n const adFormat = placement ? resolvePlacement(placement, args.platform) : (args[\"ad-format\"] as string);\n if (!adFormat) {\n failPreviewValidation(\"pass --ad-format or --placement (see --list-formats)\");\n }\n if (!VALID_AD_FORMATS.includes(adFormat)) {\n failPreviewValidation(\n `Invalid --ad-format \"${adFormat}\". Meta publishes no complete ad_format enum, so this is the set we know: ${VALID_AD_FORMATS.join(\", \")}. To preview a placement you saw in an insights breakdown, pass --placement <platform_position> instead of guessing a format name.`,\n );\n }\n const body: Record<string, unknown> = { adFormat };\n if (args[\"creative-id\"]) body.creativeId = args[\"creative-id\"];\n if (args[\"ad-id\"]) body.adId = args[\"ad-id\"];\n if (args[\"account-id\"]) body.accountId = args[\"account-id\"];\n if (args.creative) body.creative = args.creative;\n if (args[\"no-cache\"]) body.skipCache = true;\n\n try {\n const data = await apiPost<Array<{ body: string }>>(\"/api/ads/meta/preview\", body);\n const html = data.map((d) => d.body).join(\"\\n\");\n const hints = placement\n ? [\n `Rendered ${placement} as ad_format ${adFormat}. Open the iframe to SEE it — Meta does not document what it renders for a creative a placement cannot take, so a preview you looked at is the evidence, and anything you did not look at stays unverified.`,\n ]\n : [];\n if (args[\"out-file\"]) {\n const summary = { ok: true as const, data: { file: args[\"out-file\"], rows: data.length, adFormat } };\n writeFileSync(args[\"out-file\"] as string, html, \"utf-8\");\n writeJsonEnvelope(hints.length > 0 ? { ...summary, hints } : summary);\n return;\n }\n writeJsonEnvelope(hints.length > 0 ? { ok: true, data, hints } : { ok: true, data });\n } catch (err) {\n handleMetaError(err);\n }\n },\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,159 @@
1
+ import {
2
+ IDEA_HINT
3
+ } from "./chunk-WNFTXSGR.js";
4
+ import {
5
+ reportError
6
+ } from "./chunk-752S7JF6.js";
7
+ import {
8
+ apiGet
9
+ } from "./chunk-HREWXNTO.js";
10
+ import "./chunk-HLXWKMTK.js";
11
+ import "./chunk-O6QKCJE4.js";
12
+ import {
13
+ registerSchema,
14
+ writeJson
15
+ } from "./chunk-WOTDHRNF.js";
16
+ import "./chunk-YQSBHWOI.js";
17
+
18
+ // src/commands/winning-ads/profile.ts
19
+ import { defineCommand } from "citty";
20
+ registerSchema({
21
+ command: "winning-ads.profile",
22
+ description: "What one brand is doing, read off its ads: estimated spend (a range over every ad from `since` to today, the last 30 days, and a min.), what it launched lately and what still runs, the tests it ran and the version it kept, format and platform mix, top landing pages, audiences (Google Ads: declared targeting and the countries its ads were shown in, EU-shown ads only), similar brands, and when it was last checked. Compact by default; --full returns every launch, calendar day and landing page.",
23
+ args: {
24
+ advertiser: { type: "string", description: "Advertiser id (from `advertisers` or `following`)", required: true },
25
+ platform: { type: "string", description: "Only this platform: meta|linkedin|tiktok|google", required: false },
26
+ full: { type: "boolean", description: "Return the whole profile", required: false, default: false }
27
+ }
28
+ });
29
+ var COMPACT_LAUNCHES = 15;
30
+ var COMPACT_TOP = 5;
31
+ var STALE_DAYS = 35;
32
+ var DAY_MS = 24 * 60 * 60 * 1e3;
33
+ function compactProfile(p) {
34
+ return {
35
+ last_checked_at: p.freshness.last_checked_at,
36
+ next_scan_at: p.freshness.next_scan_at,
37
+ spend: p.spend ? {
38
+ currency: p.spend.currency,
39
+ min: p.spend.min,
40
+ range: [p.spend.low, p.spend.high],
41
+ since: p.spend.since ? p.spend.since.slice(0, 10) : null,
42
+ last_30_days: { min: p.spend.last_30_days.min, range: [p.spend.last_30_days.low, p.spend.last_30_days.high] },
43
+ by_platform: p.spend.by_platform.map(
44
+ (b) => b.high === 0 && (b.unpriced_ads ?? 0) > 0 ? {
45
+ platform: b.platform,
46
+ unpriced: `no delivery published for its ${b.unpriced_ads} ads: spend unknown, never $0`
47
+ } : {
48
+ platform: b.platform,
49
+ range: [b.low, b.high],
50
+ ...b.last_30_days ? { last_30_days: [b.last_30_days.low, b.last_30_days.high] } : {}
51
+ }
52
+ ),
53
+ ads_counted: {
54
+ measured: p.spend.measured_ads,
55
+ estimated: p.spend.extrapolated_ads,
56
+ not_counted: p.spend.unpriced_ads
57
+ }
58
+ } : null,
59
+ counts: p.counts,
60
+ media_mix: p.media_mix,
61
+ platform_split: p.platform_split,
62
+ launch_weeks: p.launch_weeks,
63
+ recent_launches: p.recent_launches.slice(0, COMPACT_LAUNCHES).map((l) => ({
64
+ ad_id: l.ad_id,
65
+ platform: l.platform,
66
+ format: l.format,
67
+ headline: l.headline,
68
+ first_seen_at: l.first_seen_at,
69
+ stage: l.stage,
70
+ idea: l.idea ?? null
71
+ })),
72
+ tests: p.tests.slice(0, COMPACT_TOP).map((t) => ({
73
+ concept: t.concept,
74
+ launched_at: t.launched_at,
75
+ versions: t.versions,
76
+ still_running: t.still_running,
77
+ status: t.status,
78
+ winner_ad_id: t.winner_ad_id,
79
+ what_differed: t.what_differed
80
+ })),
81
+ landing_pages: p.landing_pages.slice(0, COMPACT_TOP).map((l) => ({ page: l.page, ads: l.ads, active_ads: l.active_ads })),
82
+ audiences: {
83
+ inferred: p.audiences.inferred.slice(0, COMPACT_TOP),
84
+ measured_countries: p.audiences.measured?.countries.slice(0, COMPACT_TOP) ?? null,
85
+ targeting: p.audiences.targeting ? {
86
+ ages: p.audiences.targeting.ages.slice(0, COMPACT_TOP),
87
+ genders: p.audiences.targeting.genders.slice(0, COMPACT_TOP),
88
+ locations: p.audiences.targeting.locations.slice(0, COMPACT_TOP),
89
+ countries: p.audiences.targeting.countries.slice(0, COMPACT_TOP)
90
+ } : null
91
+ },
92
+ similar: p.similar.slice(0, COMPACT_TOP)
93
+ };
94
+ }
95
+ function profileHints(p, now) {
96
+ const hints = [];
97
+ if (p.spend) {
98
+ hints.push(
99
+ 'Spend is an estimate from the reach platforms publish \xD7 benchmark prices, in USD: quote it as a range ("at least $min, likely $low\u2013$high since <since>"; `range` covers every ad from `since` to today, `last_30_days` the last month), never as one exact figure.'
100
+ );
101
+ if (p.spend.unpriced_ads > 0) {
102
+ hints.push(
103
+ `${p.spend.unpriced_ads} ads publish no reach and are not counted (\`ads_counted.not_counted\`; \`by_platform\` names the channel), so real spend is higher than the range: say so whenever you quote it. \`estimated\` ads are priced from the brand's similar ads.`
104
+ );
105
+ }
106
+ } else {
107
+ hints.push(
108
+ "No platform publishes delivery for this brand's ads, so its spend is unknown: say so, never report $0."
109
+ );
110
+ }
111
+ const checked = p.freshness.last_checked_at ? Date.parse(p.freshness.last_checked_at) : null;
112
+ if (checked === null || now.getTime() - checked > STALE_DAYS * DAY_MS) {
113
+ hints.push(
114
+ "This brand was not checked in the last 5 weeks, so what still runs may be out of date: `baker winning-ads refresh <advertiser>` re-scans it."
115
+ );
116
+ }
117
+ if (p.recent_launches.some((l) => l.idea)) {
118
+ hints.push(
119
+ `${IDEA_HINT} \`launch_weeks\` counts \`new_ideas\` and \`idea_ads\` per week; \`counts.unique_ideas\` is every concept the brand ran.`
120
+ );
121
+ }
122
+ if (p.tests.some((t) => t.status === "decided" && t.winner_ad_id)) {
123
+ hints.push("Open a test's winner with `baker winning-ads content <ad-id>` to see what the brand kept.");
124
+ }
125
+ return hints;
126
+ }
127
+ var profileCommand = defineCommand({
128
+ meta: {
129
+ name: "profile",
130
+ description: "What one brand is doing: spend estimate, launches and what still runs, tests and the version kept, mixes, landing pages, audiences, similar brands. Start here: baker winning-ads profile adv_123 (add --platform meta to narrow, --full for everything)"
131
+ },
132
+ args: {
133
+ advertiser: { type: "positional", description: "Advertiser id", required: true },
134
+ platform: { type: "string", description: "Only this platform: meta|linkedin|tiktok|google", required: false },
135
+ full: { type: "boolean", description: "Return the whole profile", required: false, default: false }
136
+ },
137
+ run: async ({ args }) => {
138
+ try {
139
+ const params = { id: String(args.advertiser) };
140
+ if (args.platform) {
141
+ params.platform = String(args.platform);
142
+ }
143
+ const profile = await apiGet("/api/ad-library/advertiser-profile", params);
144
+ writeJson({
145
+ ok: true,
146
+ data: { advertiser_id: String(args.advertiser), ...args.full ? profile : compactProfile(profile) },
147
+ hints: profileHints(profile, /* @__PURE__ */ new Date())
148
+ });
149
+ } catch (err) {
150
+ reportError(err);
151
+ }
152
+ }
153
+ });
154
+ export {
155
+ compactProfile,
156
+ profileCommand,
157
+ profileHints
158
+ };
159
+ //# sourceMappingURL=profile-Q3PHR6FU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/winning-ads/profile.ts"],"sourcesContent":["import type { AdvertiserProfile } from \"@baker/api/ad-library\";\nimport { defineCommand } from \"citty\";\nimport { apiGet } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { IDEA_HINT } from \"./launches.ts\";\nimport { reportError } from \"./shared.ts\";\n\nregisterSchema({\n command: \"winning-ads.profile\",\n description:\n \"What one brand is doing, read off its ads: estimated spend (a range over every ad from `since` to today, the last 30 days, and a min.), what it launched lately and what still runs, the tests it ran and the version it kept, format and platform mix, top landing pages, audiences (Google Ads: declared targeting and the countries its ads were shown in, EU-shown ads only), similar brands, and when it was last checked. Compact by default; --full returns every launch, calendar day and landing page.\",\n args: {\n advertiser: { type: \"string\", description: \"Advertiser id (from `advertisers` or `following`)\", required: true },\n platform: { type: \"string\", description: \"Only this platform: meta|linkedin|tiktok|google\", required: false },\n full: { type: \"boolean\", description: \"Return the whole profile\", required: false, default: false },\n },\n});\n\nconst COMPACT_LAUNCHES = 15;\nconst COMPACT_TOP = 5;\nconst STALE_DAYS = 35;\nconst DAY_MS = 24 * 60 * 60 * 1000;\n\n/** The profile cut to what an agent needs to describe the brand. */\nexport function compactProfile(p: AdvertiserProfile) {\n return {\n last_checked_at: p.freshness.last_checked_at,\n next_scan_at: p.freshness.next_scan_at,\n spend: p.spend\n ? {\n currency: p.spend.currency,\n min: p.spend.min,\n range: [p.spend.low, p.spend.high],\n since: p.spend.since ? p.spend.since.slice(0, 10) : null,\n last_30_days: { min: p.spend.last_30_days.min, range: [p.spend.last_30_days.low, p.spend.last_30_days.high] },\n by_platform: p.spend.by_platform.map((b) =>\n b.high === 0 && (b.unpriced_ads ?? 0) > 0\n ? {\n platform: b.platform,\n unpriced: `no delivery published for its ${b.unpriced_ads} ads: spend unknown, never $0`,\n }\n : {\n platform: b.platform,\n range: [b.low, b.high],\n ...(b.last_30_days ? { last_30_days: [b.last_30_days.low, b.last_30_days.high] } : {}),\n },\n ),\n ads_counted: {\n measured: p.spend.measured_ads,\n estimated: p.spend.extrapolated_ads,\n not_counted: p.spend.unpriced_ads,\n },\n }\n : null,\n counts: p.counts,\n media_mix: p.media_mix,\n platform_split: p.platform_split,\n launch_weeks: p.launch_weeks,\n recent_launches: p.recent_launches.slice(0, COMPACT_LAUNCHES).map((l) => ({\n ad_id: l.ad_id,\n platform: l.platform,\n format: l.format,\n headline: l.headline,\n first_seen_at: l.first_seen_at,\n stage: l.stage,\n idea: l.idea ?? null,\n })),\n tests: p.tests.slice(0, COMPACT_TOP).map((t) => ({\n concept: t.concept,\n launched_at: t.launched_at,\n versions: t.versions,\n still_running: t.still_running,\n status: t.status,\n winner_ad_id: t.winner_ad_id,\n what_differed: t.what_differed,\n })),\n landing_pages: p.landing_pages\n .slice(0, COMPACT_TOP)\n .map((l) => ({ page: l.page, ads: l.ads, active_ads: l.active_ads })),\n audiences: {\n inferred: p.audiences.inferred.slice(0, COMPACT_TOP),\n measured_countries: p.audiences.measured?.countries.slice(0, COMPACT_TOP) ?? null,\n targeting: p.audiences.targeting\n ? {\n ages: p.audiences.targeting.ages.slice(0, COMPACT_TOP),\n genders: p.audiences.targeting.genders.slice(0, COMPACT_TOP),\n locations: p.audiences.targeting.locations.slice(0, COMPACT_TOP),\n countries: p.audiences.targeting.countries.slice(0, COMPACT_TOP),\n }\n : null,\n },\n similar: p.similar.slice(0, COMPACT_TOP),\n };\n}\n\n/** Steer on the figures an agent would otherwise misreport. */\nexport function profileHints(p: AdvertiserProfile, now: Date): string[] {\n const hints: string[] = [];\n if (p.spend) {\n hints.push(\n 'Spend is an estimate from the reach platforms publish × benchmark prices, in USD: quote it as a range (\"at least $min, likely $low–$high since <since>\"; `range` covers every ad from `since` to today, `last_30_days` the last month), never as one exact figure.',\n );\n if (p.spend.unpriced_ads > 0) {\n hints.push(\n `${p.spend.unpriced_ads} ads publish no reach and are not counted (\\`ads_counted.not_counted\\`; \\`by_platform\\` names the channel), so real spend is higher than the range: say so whenever you quote it. \\`estimated\\` ads are priced from the brand's similar ads.`,\n );\n }\n } else {\n hints.push(\n \"No platform publishes delivery for this brand's ads, so its spend is unknown: say so, never report $0.\",\n );\n }\n const checked = p.freshness.last_checked_at ? Date.parse(p.freshness.last_checked_at) : null;\n if (checked === null || now.getTime() - checked > STALE_DAYS * DAY_MS) {\n hints.push(\n \"This brand was not checked in the last 5 weeks, so what still runs may be out of date: `baker winning-ads refresh <advertiser>` re-scans it.\",\n );\n }\n if (p.recent_launches.some((l) => l.idea)) {\n hints.push(\n `${IDEA_HINT} \\`launch_weeks\\` counts \\`new_ideas\\` and \\`idea_ads\\` per week; \\`counts.unique_ideas\\` is every concept the brand ran.`,\n );\n }\n if (p.tests.some((t) => t.status === \"decided\" && t.winner_ad_id)) {\n hints.push(\"Open a test's winner with `baker winning-ads content <ad-id>` to see what the brand kept.\");\n }\n return hints;\n}\n\nexport const profileCommand = defineCommand({\n meta: {\n name: \"profile\",\n description:\n \"What one brand is doing: spend estimate, launches and what still runs, tests and the version kept, mixes, landing pages, audiences, similar brands. Start here: baker winning-ads profile adv_123 (add --platform meta to narrow, --full for everything)\",\n },\n args: {\n advertiser: { type: \"positional\", description: \"Advertiser id\", required: true },\n platform: { type: \"string\", description: \"Only this platform: meta|linkedin|tiktok|google\", required: false },\n full: { type: \"boolean\", description: \"Return the whole profile\", required: false, default: false },\n },\n run: async ({ args }) => {\n try {\n const params: Record<string, string> = { id: String(args.advertiser) };\n if (args.platform) {\n params.platform = String(args.platform);\n }\n const profile = await apiGet<AdvertiserProfile>(\"/api/ad-library/advertiser-profile\", params);\n writeJson({\n ok: true,\n data: { advertiser_id: String(args.advertiser), ...(args.full ? profile : compactProfile(profile)) },\n hints: profileHints(profile, new Date()),\n });\n } catch (err) {\n reportError(err);\n }\n },\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,180 @@
1
+ import {
2
+ csvArg,
3
+ requireTargets,
4
+ stageAccountId,
5
+ stageXOp,
6
+ stageXOps
7
+ } from "./chunk-PBVLPFJ6.js";
8
+ import "./chunk-M6UNISGO.js";
9
+ import "./chunk-G7AFVTUS.js";
10
+ import "./chunk-BVM5IRZW.js";
11
+ import {
12
+ TARGETING_OPERATORS,
13
+ TARGETING_TYPES
14
+ } from "./chunk-KRIK2JR4.js";
15
+ import "./chunk-GXDLWBOY.js";
16
+ import "./chunk-GIWHHCD6.js";
17
+ import "./chunk-UI6BKYQD.js";
18
+ import "./chunk-JAYT43KX.js";
19
+ import "./chunk-HREWXNTO.js";
20
+ import "./chunk-HLXWKMTK.js";
21
+ import "./chunk-O6QKCJE4.js";
22
+ import {
23
+ registerSchema
24
+ } from "./chunk-WOTDHRNF.js";
25
+ import "./chunk-YQSBHWOI.js";
26
+
27
+ // src/commands/ads/x/promoted-tweet-writes.ts
28
+ import { defineCommand } from "citty";
29
+ registerSchema({
30
+ command: "ads.x.promotedTweets.create",
31
+ description: "Stage promoting one or more existing posts in an X ad group. Takes post (tweet) ids \u2014 the numeric id from the post's URL, not a base36 ads id.",
32
+ args: {
33
+ "account-id": { type: "string", description: "X Ads account ID", required: false },
34
+ "line-item-id": {
35
+ type: "string",
36
+ description: "Ad group id, or an x_temp_* ref staged in this draft",
37
+ required: true
38
+ },
39
+ "tweet-ids": { type: "string", description: "CSV of post ids", required: true }
40
+ }
41
+ });
42
+ var promotedTweetsCreateCommand = defineCommand({
43
+ meta: {
44
+ name: "create",
45
+ description: `Stage promoting posts in an ad group (applies when the chat is published).
46
+
47
+ Example:
48
+ baker ads x promoted-tweets create --line-item-id wiee9 --tweet-ids 2042198488033661285`
49
+ },
50
+ args: {
51
+ "account-id": { type: "string", description: "X Ads account ID" },
52
+ "line-item-id": { type: "string", description: "Ad group id or x_temp_* ref", required: true },
53
+ "tweet-ids": { type: "string", description: "CSV of post ids", required: true }
54
+ },
55
+ run: async ({ args }) => {
56
+ const accountId = await stageAccountId(args);
57
+ await stageXOp({
58
+ kind: "promotedTweet.create",
59
+ accountId,
60
+ payload: { lineItemId: args["line-item-id"], tweetIds: csvArg(args["tweet-ids"]) ?? [] }
61
+ });
62
+ }
63
+ });
64
+ registerSchema({
65
+ command: "ads.x.promotedTweets.remove",
66
+ description: "Stage removing one or more promoted posts. X has no pause for these \u2014 removal is the only way to stop one serving, and it cannot be undone (re-promoting creates a new association).",
67
+ args: {
68
+ ids: { type: "string", description: "Promoted-post ids, comma-separated", required: true },
69
+ "account-id": { type: "string", description: "X Ads account ID", required: false }
70
+ }
71
+ });
72
+ var promotedTweetsRemoveCommand = defineCommand({
73
+ meta: {
74
+ name: "remove",
75
+ description: `Stage removing promoted posts. Cannot be undone.
76
+
77
+ Example:
78
+ baker ads x promoted-tweets remove ayyorn,ayyoro`
79
+ },
80
+ args: {
81
+ ids: { type: "positional", description: "Promoted-post ids, comma-separated", required: true },
82
+ "account-id": { type: "string", description: "X Ads account ID" }
83
+ },
84
+ run: async ({ args }) => {
85
+ const accountId = await stageAccountId(args);
86
+ await stageXOps(
87
+ requireTargets(args, "ids").map((id) => ({
88
+ kind: "promotedTweet.remove",
89
+ accountId,
90
+ target: id,
91
+ payload: {}
92
+ }))
93
+ );
94
+ }
95
+ });
96
+ registerSchema({
97
+ command: "ads.x.targetingCriteria.create",
98
+ description: `Stage one targeting criterion on an X ad group. One op per value, because X stores each criterion as its own entity. Look values up first with \`baker ads x targeting-constants\`.
99
+ Types: ${TARGETING_TYPES.join(", ")}. Operators: ${TARGETING_OPERATORS.join(" (include) | ")} (exclude).`,
100
+ args: {
101
+ "account-id": { type: "string", description: "X Ads account ID", required: false },
102
+ "line-item-id": { type: "string", description: "Ad group id, or an x_temp_* ref", required: true },
103
+ type: { type: "string", description: TARGETING_TYPES.join(" | "), required: true },
104
+ value: {
105
+ type: "string",
106
+ description: "Targeting value \u2014 from `targeting-constants` for the lookup types",
107
+ required: true
108
+ },
109
+ operator: { type: "string", description: "EQ to include (default), NE to exclude", required: false }
110
+ }
111
+ });
112
+ var targetingCriteriaCreateCommand = defineCommand({
113
+ meta: {
114
+ name: "create",
115
+ description: `Stage one targeting criterion on an ad group.
116
+
117
+ Examples:
118
+ baker ads x targeting-criteria create --line-item-id wiee9 --type LOCATION --value 96683cc9126741d1
119
+ baker ads x targeting-criteria create --line-item-id wiee9 --type INTEREST --value 25 --operator NE`
120
+ },
121
+ args: {
122
+ "account-id": { type: "string", description: "X Ads account ID" },
123
+ "line-item-id": { type: "string", description: "Ad group id or x_temp_* ref", required: true },
124
+ type: { type: "string", description: TARGETING_TYPES.join(" | "), required: true },
125
+ value: { type: "string", description: "Targeting value", required: true },
126
+ operator: { type: "string", description: "EQ (include) | NE (exclude)" }
127
+ },
128
+ run: async ({ args }) => {
129
+ const accountId = await stageAccountId(args);
130
+ await stageXOp({
131
+ kind: "targetingCriteria.create",
132
+ accountId,
133
+ payload: {
134
+ lineItemId: args["line-item-id"],
135
+ targetingType: args.type,
136
+ targetingValue: args.value,
137
+ ...args.operator ? { operatorType: args.operator } : {}
138
+ }
139
+ });
140
+ }
141
+ });
142
+ registerSchema({
143
+ command: "ads.x.targetingCriteria.remove",
144
+ description: "Stage removing one or more targeting criteria from an X ad group.",
145
+ args: {
146
+ ids: { type: "string", description: "Targeting criterion ids, comma-separated", required: true },
147
+ "account-id": { type: "string", description: "X Ads account ID", required: false }
148
+ }
149
+ });
150
+ var targetingCriteriaRemoveCommand = defineCommand({
151
+ meta: {
152
+ name: "remove",
153
+ description: `Stage removing targeting criteria.
154
+
155
+ Example:
156
+ baker ads x targeting-criteria remove 1dmtken`
157
+ },
158
+ args: {
159
+ ids: { type: "positional", description: "Targeting criterion ids, comma-separated", required: true },
160
+ "account-id": { type: "string", description: "X Ads account ID" }
161
+ },
162
+ run: async ({ args }) => {
163
+ const accountId = await stageAccountId(args);
164
+ await stageXOps(
165
+ requireTargets(args, "ids").map((id) => ({
166
+ kind: "targetingCriteria.remove",
167
+ accountId,
168
+ target: id,
169
+ payload: {}
170
+ }))
171
+ );
172
+ }
173
+ });
174
+ export {
175
+ promotedTweetsCreateCommand,
176
+ promotedTweetsRemoveCommand,
177
+ targetingCriteriaCreateCommand,
178
+ targetingCriteriaRemoveCommand
179
+ };
180
+ //# sourceMappingURL=promoted-tweet-writes-IYOAZTA5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/ads/x/promoted-tweet-writes.ts"],"sourcesContent":["import { TARGETING_OPERATORS, TARGETING_TYPES } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { registerSchema } from \"../../../schemas.ts\";\nimport { csvArg, requireTargets, stageAccountId, stageXOp, stageXOps } from \"./write-shared.ts\";\n\n/**\n * Staged ad and targeting writes.\n *\n * \"Promoted tweet\" is X's name for the association between a post and an ad\n * group — the thing X Ads Manager calls an ad. There is no pause: the only way\n * to stop one serving is to remove the association, which leaves the post itself\n * untouched.\n */\n\nregisterSchema({\n command: \"ads.x.promotedTweets.create\",\n description:\n \"Stage promoting one or more existing posts in an X ad group. Takes post (tweet) ids — the numeric id from the post's URL, not a base36 ads id.\",\n args: {\n \"account-id\": { type: \"string\", description: \"X Ads account ID\", required: false },\n \"line-item-id\": {\n type: \"string\",\n description: \"Ad group id, or an x_temp_* ref staged in this draft\",\n required: true,\n },\n \"tweet-ids\": { type: \"string\", description: \"CSV of post ids\", required: true },\n },\n});\n\nexport const promotedTweetsCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage promoting posts in an ad group (applies when the chat is published).\n\nExample:\n baker ads x promoted-tweets create --line-item-id wiee9 --tweet-ids 2042198488033661285`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"X Ads account ID\" },\n \"line-item-id\": { type: \"string\", description: \"Ad group id or x_temp_* ref\", required: true },\n \"tweet-ids\": { type: \"string\", description: \"CSV of post ids\", required: true },\n },\n run: async ({ args }) => {\n const accountId = await stageAccountId(args);\n await stageXOp({\n kind: \"promotedTweet.create\",\n accountId,\n payload: { lineItemId: args[\"line-item-id\"], tweetIds: csvArg(args[\"tweet-ids\"]) ?? [] },\n });\n },\n});\n\nregisterSchema({\n command: \"ads.x.promotedTweets.remove\",\n description:\n \"Stage removing one or more promoted posts. X has no pause for these — removal is the only way to stop one serving, and it cannot be undone (re-promoting creates a new association).\",\n args: {\n ids: { type: \"string\", description: \"Promoted-post ids, comma-separated\", required: true },\n \"account-id\": { type: \"string\", description: \"X Ads account ID\", required: false },\n },\n});\n\nexport const promotedTweetsRemoveCommand = defineCommand({\n meta: {\n name: \"remove\",\n description: `Stage removing promoted posts. Cannot be undone.\n\nExample:\n baker ads x promoted-tweets remove ayyorn,ayyoro`,\n },\n args: {\n ids: { type: \"positional\", description: \"Promoted-post 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: \"promotedTweet.remove\",\n accountId,\n target: id,\n payload: {},\n })),\n );\n },\n});\n\nregisterSchema({\n command: \"ads.x.targetingCriteria.create\",\n description: `Stage one targeting criterion on an X ad group. One op per value, because X stores each criterion as its own entity. Look values up first with \\`baker ads x targeting-constants\\`.\nTypes: ${TARGETING_TYPES.join(\", \")}. Operators: ${TARGETING_OPERATORS.join(\" (include) | \")} (exclude).`,\n args: {\n \"account-id\": { type: \"string\", description: \"X Ads account ID\", required: false },\n \"line-item-id\": { type: \"string\", description: \"Ad group id, or an x_temp_* ref\", required: true },\n type: { type: \"string\", description: TARGETING_TYPES.join(\" | \"), required: true },\n value: {\n type: \"string\",\n description: \"Targeting value — from `targeting-constants` for the lookup types\",\n required: true,\n },\n operator: { type: \"string\", description: \"EQ to include (default), NE to exclude\", required: false },\n },\n});\n\nexport const targetingCriteriaCreateCommand = defineCommand({\n meta: {\n name: \"create\",\n description: `Stage one targeting criterion on an ad group.\n\nExamples:\n baker ads x targeting-criteria create --line-item-id wiee9 --type LOCATION --value 96683cc9126741d1\n baker ads x targeting-criteria create --line-item-id wiee9 --type INTEREST --value 25 --operator NE`,\n },\n args: {\n \"account-id\": { type: \"string\", description: \"X Ads account ID\" },\n \"line-item-id\": { type: \"string\", description: \"Ad group id or x_temp_* ref\", required: true },\n type: { type: \"string\", description: TARGETING_TYPES.join(\" | \"), required: true },\n value: { type: \"string\", description: \"Targeting value\", required: true },\n operator: { type: \"string\", description: \"EQ (include) | NE (exclude)\" },\n },\n run: async ({ args }) => {\n const accountId = await stageAccountId(args);\n await stageXOp({\n kind: \"targetingCriteria.create\",\n accountId,\n payload: {\n lineItemId: args[\"line-item-id\"],\n targetingType: args.type,\n targetingValue: args.value,\n ...(args.operator ? { operatorType: args.operator } : {}),\n },\n });\n },\n});\n\nregisterSchema({\n command: \"ads.x.targetingCriteria.remove\",\n description: \"Stage removing one or more targeting criteria from an X ad group.\",\n args: {\n ids: { type: \"string\", description: \"Targeting criterion ids, comma-separated\", required: true },\n \"account-id\": { type: \"string\", description: \"X Ads account ID\", required: false },\n },\n});\n\nexport const targetingCriteriaRemoveCommand = defineCommand({\n meta: {\n name: \"remove\",\n description: `Stage removing targeting criteria.\n\nExample:\n baker ads x targeting-criteria remove 1dmtken`,\n },\n args: {\n ids: { type: \"positional\", description: \"Targeting criterion 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: \"targetingCriteria.remove\",\n accountId,\n target: id,\n payload: {},\n })),\n );\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,qBAAqB;AAa9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,cAAc,EAAE,MAAM,UAAU,aAAa,oBAAoB,UAAU,MAAM;AAAA,IACjF,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,aAAa,EAAE,MAAM,UAAU,aAAa,mBAAmB,UAAU,KAAK;AAAA,EAChF;AACF,CAAC;AAEM,IAAM,8BAA8B,cAAc;AAAA,EACvD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA,EAIf;AAAA,EACA,MAAM;AAAA,IACJ,cAAc,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,IAChE,gBAAgB,EAAE,MAAM,UAAU,aAAa,+BAA+B,UAAU,KAAK;AAAA,IAC7F,aAAa,EAAE,MAAM,UAAU,aAAa,mBAAmB,UAAU,KAAK;AAAA,EAChF;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,YAAY,MAAM,eAAe,IAAI;AAC3C,UAAM,SAAS;AAAA,MACb,MAAM;AAAA,MACN;AAAA,MACA,SAAS,EAAE,YAAY,KAAK,cAAc,GAAG,UAAU,OAAO,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE;AAAA,IACzF,CAAC;AAAA,EACH;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,KAAK,EAAE,MAAM,UAAU,aAAa,sCAAsC,UAAU,KAAK;AAAA,IACzF,cAAc,EAAE,MAAM,UAAU,aAAa,oBAAoB,UAAU,MAAM;AAAA,EACnF;AACF,CAAC;AAEM,IAAM,8BAA8B,cAAc;AAAA,EACvD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA,EAIf;AAAA,EACA,MAAM;AAAA,IACJ,KAAK,EAAE,MAAM,cAAc,aAAa,sCAAsC,UAAU,KAAK;AAAA,IAC7F,cAAc,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,EAClE;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,YAAY,MAAM,eAAe,IAAI;AAC3C,UAAM;AAAA,MACJ,eAAe,MAAM,KAAK,EAAE,IAAI,CAAC,QAAQ;AAAA,QACvC,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,QACR,SAAS,CAAC;AAAA,MACZ,EAAE;AAAA,IACJ;AAAA,EACF;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,SACN,gBAAgB,KAAK,IAAI,CAAC,gBAAgB,oBAAoB,KAAK,eAAe,CAAC;AAAA,EAC1F,MAAM;AAAA,IACJ,cAAc,EAAE,MAAM,UAAU,aAAa,oBAAoB,UAAU,MAAM;AAAA,IACjF,gBAAgB,EAAE,MAAM,UAAU,aAAa,mCAAmC,UAAU,KAAK;AAAA,IACjG,MAAM,EAAE,MAAM,UAAU,aAAa,gBAAgB,KAAK,KAAK,GAAG,UAAU,KAAK;AAAA,IACjF,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,UAAU,EAAE,MAAM,UAAU,aAAa,0CAA0C,UAAU,MAAM;AAAA,EACrG;AACF,CAAC;AAEM,IAAM,iCAAiC,cAAc;AAAA,EAC1D,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf;AAAA,EACA,MAAM;AAAA,IACJ,cAAc,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,IAChE,gBAAgB,EAAE,MAAM,UAAU,aAAa,+BAA+B,UAAU,KAAK;AAAA,IAC7F,MAAM,EAAE,MAAM,UAAU,aAAa,gBAAgB,KAAK,KAAK,GAAG,UAAU,KAAK;AAAA,IACjF,OAAO,EAAE,MAAM,UAAU,aAAa,mBAAmB,UAAU,KAAK;AAAA,IACxE,UAAU,EAAE,MAAM,UAAU,aAAa,8BAA8B;AAAA,EACzE;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,YAAY,MAAM,eAAe,IAAI;AAC3C,UAAM,SAAS;AAAA,MACb,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,QACP,YAAY,KAAK,cAAc;AAAA,QAC/B,eAAe,KAAK;AAAA,QACpB,gBAAgB,KAAK;AAAA,QACrB,GAAI,KAAK,WAAW,EAAE,cAAc,KAAK,SAAS,IAAI,CAAC;AAAA,MACzD;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;AAED,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,KAAK,EAAE,MAAM,UAAU,aAAa,4CAA4C,UAAU,KAAK;AAAA,IAC/F,cAAc,EAAE,MAAM,UAAU,aAAa,oBAAoB,UAAU,MAAM;AAAA,EACnF;AACF,CAAC;AAEM,IAAM,iCAAiC,cAAc;AAAA,EAC1D,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA,EAIf;AAAA,EACA,MAAM;AAAA,IACJ,KAAK,EAAE,MAAM,cAAc,aAAa,4CAA4C,UAAU,KAAK;AAAA,IACnG,cAAc,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,EAClE;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,YAAY,MAAM,eAAe,IAAI;AAC3C,UAAM;AAAA,MACJ,eAAe,MAAM,KAAK,EAAE,IAAI,CAAC,QAAQ;AAAA,QACvC,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,QACR,SAAS,CAAC;AAAA,MACZ,EAAE;AAAA,IACJ;AAAA,EACF;AACF,CAAC;","names":[]}